[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/includes/runtime/ -> Controller.php (source)

   1  <?php
   2  /*+**********************************************************************************
   3   * The contents of this file are subject to the vtiger CRM Public License Version 1.1
   4   * ("License"); You may not use this file except in compliance with the License
   5   * The Original Code is:  vtiger CRM Open Source
   6   * The Initial Developer of the Original Code is vtiger.
   7   * Portions created by vtiger are Copyright (C) vtiger.
   8   * All Rights Reserved.
   9   ************************************************************************************/
  10  
  11  /**
  12   * Abstract Controller Class
  13   */
  14  abstract class Vtiger_Controller {
  15  
  16  	function __construct() { }
  17  
  18  	function loginRequired() {
  19          return true;
  20      }
  21  
  22      abstract function getViewer(Vtiger_Request $request);
  23      abstract function process (Vtiger_Request $request);
  24      
  25  	function validateRequest(Vtiger_Request $request) {}
  26  	function preProcess(Vtiger_Request $request) {}
  27  	function postProcess(Vtiger_Request $request) {}
  28  
  29      // Control the exposure of methods to be invoked from client (kind-of RPC)
  30      protected $exposedMethods = array();
  31  
  32      /**
  33       * Function that will expose methods for external access
  34       * @param <String> $name - method name
  35       */
  36  	protected function exposeMethod($name) {
  37          if(!in_array($name, $this->exposedMethods)) {
  38              $this->exposedMethods[] = $name;
  39          }
  40      }
  41  
  42      /**
  43       * Function checks if the method is exposed for client usage
  44       * @param string $name - method name
  45       * @return boolean
  46       */
  47  	function isMethodExposed($name) {
  48          if(in_array($name, $this->exposedMethods)) {
  49              return true;
  50          }
  51          return false;
  52      }
  53  
  54      /**
  55       * Function invokes exposed methods for this class
  56       * @param string $name - method name
  57       * @param Vtiger_Request $request
  58       * @throws Exception
  59       */
  60  	function invokeExposedMethod() {
  61          $parameters = func_get_args();
  62          $name = array_shift($parameters);
  63          if (!empty($name) && $this->isMethodExposed($name)) {
  64              return call_user_func_array(array($this, $name), $parameters);
  65          }
  66          throw new Exception(vtranslate('LBL_NOT_ACCESSIBLE'));
  67      }
  68  }
  69  
  70  /**
  71   * Abstract Action Controller Class
  72   */
  73  abstract class Vtiger_Action_Controller extends Vtiger_Controller {
  74  	function __construct() {
  75          parent::__construct();
  76      }
  77  
  78  	function getViewer(Vtiger_Request $request) {
  79          throw new AppException ('Action - implement getViewer - JSONViewer');
  80      }
  81      
  82  	function validateRequest(Vtiger_Request $request) {
  83          return $request->validateReadAccess();
  84      }
  85  
  86  	function preProcess(Vtiger_Request $request) {
  87          return true;
  88      }
  89  
  90  	protected function preProcessDisplay(Vtiger_Request $request) {
  91      }
  92  
  93  	protected function preProcessTplName() {
  94          return false;
  95      }
  96  
  97      //TODO: need to revisit on this as we are not sure if this is helpful
  98      /*function preProcessParentTplName(Vtiger_Request $request) {
  99          return false;
 100      }*/
 101  
 102  	function postProcess(Vtiger_Request $request) {
 103          return true;
 104      }
 105  }
 106  
 107  /**
 108   * Abstract View Controller Class
 109   */
 110  abstract class Vtiger_View_Controller extends Vtiger_Action_Controller {
 111  
 112  	function __construct() {
 113          parent::__construct();
 114      }
 115  
 116  	function getViewer(Vtiger_Request $request) {
 117          if(!$this->viewer) {
 118              global $vtiger_current_version;
 119              $viewer = new Vtiger_Viewer();
 120              $viewer->assign('APPTITLE', getTranslatedString('APPTITLE'));
 121              $viewer->assign('VTIGER_VERSION', $vtiger_current_version);
 122              $this->viewer = $viewer;
 123          }
 124          return $this->viewer;
 125      }
 126  
 127  	function getPageTitle(Vtiger_Request $request) {
 128          return vtranslate($request->getModule(), $request->get('module'));
 129      }
 130  
 131  	function preProcess(Vtiger_Request $request, $display=true) {
 132          $currentUser = Users_Record_Model::getCurrentUserModel();
 133          $viewer = $this->getViewer($request);
 134          $viewer->assign('PAGETITLE', $this->getPageTitle($request));
 135          $viewer->assign('SCRIPTS',$this->getHeaderScripts($request));
 136          $viewer->assign('STYLES',$this->getHeaderCss($request));
 137          $viewer->assign('SKIN_PATH', Vtiger_Theme::getCurrentUserThemePath());
 138          $viewer->assign('LANGUAGE_STRINGS', $this->getJSLanguageStrings($request));
 139          $viewer->assign('LANGUAGE', $currentUser->get('language'));
 140          if($display) {
 141              $this->preProcessDisplay($request);
 142          }
 143      }
 144  
 145  	protected function preProcessTplName(Vtiger_Request $request) {
 146          return 'Header.tpl';
 147      }
 148  
 149      //Note : To get the right hook for immediate parent in PHP,
 150      // specially in case of deep hierarchy
 151      //TODO: Need to revisit this.
 152      /*function preProcessParentTplName(Vtiger_Request $request) {
 153          return parent::preProcessTplName($request);
 154      }*/
 155  
 156  	protected function preProcessDisplay(Vtiger_Request $request) {
 157          $viewer = $this->getViewer($request);
 158          $displayed = $viewer->view($this->preProcessTplName($request), $request->getModule());
 159          /*if(!$displayed) {
 160              $tplName = $this->preProcessParentTplName($request);
 161              if($tplName) {
 162                  $viewer->view($tplName, $request->getModule());
 163              }
 164          }*/
 165      }
 166  
 167  
 168  	function postProcess(Vtiger_Request $request) {
 169          $viewer = $this->getViewer($request);
 170          $currentUser = Users_Record_Model::getCurrentUserModel();
 171          $viewer->assign('ACTIVITY_REMINDER', $currentUser->getCurrentUserActivityReminderInSeconds());
 172          $viewer->view('Footer.tpl');
 173      }
 174  
 175      /**
 176       * Retrieves headers scripts that need to loaded in the page
 177       * @param Vtiger_Request $request - request model
 178       * @return <array> - array of Vtiger_JsScript_Model
 179       */
 180  	function getHeaderScripts(Vtiger_Request $request){
 181          $headerScriptInstances = array();
 182          $languageHandlerShortName = Vtiger_Language_Handler::getShortLanguageName();
 183          $fileName = "libraries/jquery/posabsolute-jQuery-Validation-Engine/js/languages/jquery.validationEngine-$languageHandlerShortName.js";
 184          if (!file_exists($fileName)) {
 185              $fileName = "~libraries/jquery/posabsolute-jQuery-Validation-Engine/js/languages/jquery.validationEngine-en.js";
 186          } else {
 187              $fileName = "~libraries/jquery/posabsolute-jQuery-Validation-Engine/js/languages/jquery.validationEngine-$languageHandlerShortName.js";
 188          }
 189          $jsFileNames = array($fileName);
 190          $jsScriptInstances = $this->checkAndConvertJsScripts($jsFileNames);
 191          $headerScriptInstances = array_merge($jsScriptInstances,$headerScriptInstances);
 192          return $headerScriptInstances;
 193      }
 194  
 195  	function checkAndConvertJsScripts($jsFileNames) {
 196          $fileExtension = 'js';
 197  
 198          $jsScriptInstances = array();
 199          foreach($jsFileNames as $jsFileName) {
 200              // TODO Handle absolute inclusions (~/...) like in checkAndConvertCssStyles
 201              $jsScript = new Vtiger_JsScript_Model();
 202  
 203              // external javascript source file handling
 204              if(strpos($jsFileName, 'http://') === 0 || strpos($jsFileName, 'https://') === 0) {
 205                  $jsScriptInstances[$jsFileName] = $jsScript->set('src', $jsFileName);
 206                  continue;
 207              }
 208  
 209              $completeFilePath = Vtiger_Loader::resolveNameToPath($jsFileName, $fileExtension);
 210  
 211              if(file_exists($completeFilePath)) {
 212                  if (strpos($jsFileName, '~') === 0) {
 213                      $filePath = ltrim(ltrim($jsFileName, '~'), '/');
 214                      // if ~~ (reference is outside vtiger6 folder)
 215                      if (substr_count($jsFileName, "~") == 2) {
 216                          $filePath = "../" . $filePath;
 217                      }
 218                  } else {
 219                      $filePath = str_replace('.','/', $jsFileName) . '.'.$fileExtension;
 220                  }
 221  
 222                  $jsScriptInstances[$jsFileName] = $jsScript->set('src', $filePath);
 223              } else {
 224                  $fallBackFilePath = Vtiger_Loader::resolveNameToPath(Vtiger_JavaScript::getBaseJavaScriptPath().'/'.$jsFileName, 'js');
 225                  if(file_exists($fallBackFilePath)) {
 226                      $filePath = str_replace('.','/', $jsFileName) . '.js';
 227                      $jsScriptInstances[$jsFileName] = $jsScript->set('src', Vtiger_JavaScript::getFilePath($filePath));
 228                  }
 229              }
 230          }
 231          return $jsScriptInstances;
 232      }
 233  
 234      /**
 235       * Function returns the css files
 236       * @param <Array> $cssFileNames
 237       * @param <String> $fileExtension
 238       * @return <Array of Vtiger_CssScript_Model>
 239       *
 240       * First check if $cssFileName exists
 241       * if not, check under layout folder $cssFileName eg:layouts/vlayout/$cssFileName
 242       */
 243  	function checkAndConvertCssStyles($cssFileNames, $fileExtension='css') {
 244          $cssStyleInstances = array();
 245          foreach($cssFileNames as $cssFileName) {
 246              $cssScriptModel = new Vtiger_CssScript_Model();
 247  
 248              if(strpos($cssFileName, 'http://') === 0 || strpos($cssFileName, 'https://') === 0) {
 249                  $cssStyleInstances[] = $cssScriptModel->set('href', $cssFileName);
 250                  continue;
 251              }
 252              $completeFilePath = Vtiger_Loader::resolveNameToPath($cssFileName, $fileExtension);
 253              $filePath = NULL;
 254              if(file_exists($completeFilePath)) {
 255                  if (strpos($cssFileName, '~') === 0) {
 256                      $filePath = ltrim(ltrim($cssFileName, '~'), '/');
 257                      // if ~~ (reference is outside vtiger6 folder)
 258                      if (substr_count($cssFileName, "~") == 2) {
 259                          $filePath = "../" . $filePath;
 260                      }
 261                  } else {
 262                      $filePath = str_replace('.','/', $cssFileName) . '.'.$fileExtension;
 263                      $filePath = Vtiger_Theme::getStylePath($filePath);
 264                  }
 265                  $cssStyleInstances[] = $cssScriptModel->set('href', $filePath);
 266              }
 267          }
 268          return $cssStyleInstances;
 269      }
 270  
 271      /**
 272       * Retrieves css styles that need to loaded in the page
 273       * @param Vtiger_Request $request - request model
 274       * @return <array> - array of Vtiger_CssScript_Model
 275       */
 276  	function getHeaderCss(Vtiger_Request $request){
 277          return array();
 278      }
 279  
 280      /**
 281       * Function returns the Client side language string
 282       * @param Vtiger_Request $request
 283       */
 284  	function getJSLanguageStrings(Vtiger_Request $request) {
 285          $moduleName = $request->getModule(false);
 286          return Vtiger_Language_Handler::export($moduleName, 'jsLanguageStrings');
 287      }
 288  }


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1