[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |