[ 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.0 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 class Vtiger_Detail_View extends Vtiger_Index_View { 12 protected $record = false; 13 14 function __construct() { 15 parent::__construct(); 16 $this->exposeMethod('showDetailViewByMode'); 17 $this->exposeMethod('showModuleDetailView'); 18 $this->exposeMethod('showModuleSummaryView'); 19 $this->exposeMethod('showModuleBasicView'); 20 $this->exposeMethod('showRecentActivities'); 21 $this->exposeMethod('showRecentComments'); 22 $this->exposeMethod('showRelatedList'); 23 $this->exposeMethod('showChildComments'); 24 $this->exposeMethod('showAllComments'); 25 $this->exposeMethod('getActivities'); 26 } 27 28 function checkPermission(Vtiger_Request $request) { 29 $moduleName = $request->getModule(); 30 $recordId = $request->get('record'); 31 32 $recordPermission = Users_Privileges_Model::isPermitted($moduleName, 'DetailView', $recordId); 33 if(!$recordPermission) { 34 throw new AppException('LBL_PERMISSION_DENIED'); 35 } 36 return true; 37 } 38 39 function preProcess(Vtiger_Request $request, $display=true) { 40 parent::preProcess($request, false); 41 42 $recordId = $request->get('record'); 43 $moduleName = $request->getModule(); 44 if(!$this->record){ 45 $this->record = Vtiger_DetailView_Model::getInstance($moduleName, $recordId); 46 } 47 $recordModel = $this->record->getRecord(); 48 $recordStrucure = Vtiger_RecordStructure_Model::getInstanceFromRecordModel($recordModel, Vtiger_RecordStructure_Model::RECORD_STRUCTURE_MODE_DETAIL); 49 $summaryInfo = array(); 50 // Take first block information as summary information 51 $stucturedValues = $recordStrucure->getStructure(); 52 foreach($stucturedValues as $blockLabel=>$fieldList) { 53 $summaryInfo[$blockLabel] = $fieldList; 54 break; 55 } 56 57 $detailViewLinkParams = array('MODULE'=>$moduleName,'RECORD'=>$recordId); 58 59 $detailViewLinks = $this->record->getDetailViewLinks($detailViewLinkParams); 60 $navigationInfo = ListViewSession::getListViewNavigation($recordId); 61 62 $viewer = $this->getViewer($request); 63 $viewer->assign('RECORD', $recordModel); 64 $viewer->assign('NAVIGATION', $navigationInfo); 65 66 //Intially make the prev and next records as null 67 $prevRecordId = null; 68 $nextRecordId = null; 69 $found = false; 70 if ($navigationInfo) { 71 foreach($navigationInfo as $page=>$pageInfo) { 72 foreach($pageInfo as $index=>$record) { 73 //If record found then next record in the interation 74 //will be next record 75 if($found) { 76 $nextRecordId = $record; 77 break; 78 } 79 if($record == $recordId) { 80 $found = true; 81 } 82 //If record not found then we are assiging previousRecordId 83 //assuming next record will get matched 84 if(!$found) { 85 $prevRecordId = $record; 86 } 87 } 88 //if record is found and next record is not calculated we need to perform iteration 89 if($found && !empty($nextRecordId)) { 90 break; 91 } 92 } 93 } 94 95 $moduleModel = Vtiger_Module_Model::getInstance($moduleName); 96 if(!empty($prevRecordId)) { 97 $viewer->assign('PREVIOUS_RECORD_URL', $moduleModel->getDetailViewUrl($prevRecordId)); 98 } 99 if(!empty($nextRecordId)) { 100 $viewer->assign('NEXT_RECORD_URL', $moduleModel->getDetailViewUrl($nextRecordId)); 101 } 102 103 $viewer->assign('MODULE_MODEL', $this->record->getModule()); 104 $viewer->assign('DETAILVIEW_LINKS', $detailViewLinks); 105 106 $viewer->assign('IS_EDITABLE', $this->record->getRecord()->isEditable($moduleName)); 107 $viewer->assign('IS_DELETABLE', $this->record->getRecord()->isDeletable($moduleName)); 108 109 $linkParams = array('MODULE'=>$moduleName, 'ACTION'=>$request->get('view')); 110 $linkModels = $this->record->getSideBarLinks($linkParams); 111 $viewer->assign('QUICK_LINKS', $linkModels); 112 $viewer->assign('MODULE_NAME', $moduleName); 113 114 $currentUserModel = Users_Record_Model::getCurrentUserModel(); 115 $viewer->assign('DEFAULT_RECORD_VIEW', $currentUserModel->get('default_record_view')); 116 117 $picklistDependencyDatasource= Vtiger_DependencyPicklist::getPicklistDependencyDatasource($moduleName); 118 $viewer->assign('PICKLIST_DEPENDENCY_DATASOURCE',Zend_Json::encode($picklistDependencyDatasource)); 119 if($display) { 120 $this->preProcessDisplay($request); 121 } 122 } 123 124 function preProcessTplName(Vtiger_Request $request) { 125 return 'DetailViewPreProcess.tpl'; 126 } 127 128 function process(Vtiger_Request $request) { 129 $mode = $request->getMode(); 130 if(!empty($mode)) { 131 echo $this->invokeExposedMethod($mode, $request); 132 return; 133 } 134 135 $currentUserModel = Users_Record_Model::getCurrentUserModel(); 136 137 if ($currentUserModel->get('default_record_view') === 'Summary') { 138 echo $this->showModuleBasicView($request); 139 } else { 140 echo $this->showModuleDetailView($request); 141 } 142 } 143 144 public function postProcess(Vtiger_Request $request) { 145 $recordId = $request->get('record'); 146 $moduleName = $request->getModule(); 147 $currentUserModel = Users_Record_Model::getCurrentUserModel(); 148 $moduleModel = Vtiger_Module_Model::getInstance($moduleName); 149 if(!$this->record){ 150 $this->record = Vtiger_DetailView_Model::getInstance($moduleName, $recordId); 151 } 152 $detailViewLinkParams = array('MODULE'=>$moduleName,'RECORD'=>$recordId); 153 $detailViewLinks = $this->record->getDetailViewLinks($detailViewLinkParams); 154 155 $selectedTabLabel = $request->get('tab_label'); 156 157 if(empty($selectedTabLabel)) { 158 if($currentUserModel->get('default_record_view') === 'Detail') { 159 $selectedTabLabel = vtranslate('SINGLE_'.$moduleName, $moduleName).' '. vtranslate('LBL_DETAILS', $moduleName); 160 } else{ 161 if($moduleModel->isSummaryViewSupported()) { 162 $selectedTabLabel = vtranslate('SINGLE_'.$moduleName, $moduleName).' '. vtranslate('LBL_SUMMARY', $moduleName); 163 } else { 164 $selectedTabLabel = vtranslate('SINGLE_'.$moduleName, $moduleName).' '. vtranslate('LBL_DETAILS', $moduleName); 165 } 166 } 167 } 168 169 $viewer = $this->getViewer($request); 170 171 $viewer->assign('SELECTED_TAB_LABEL', $selectedTabLabel); 172 $viewer->assign('MODULE_MODEL', $this->record->getModule()); 173 $viewer->assign('DETAILVIEW_LINKS', $detailViewLinks); 174 175 $viewer->view('DetailViewPostProcess.tpl', $moduleName); 176 177 parent::postProcess($request); 178 } 179 180 181 public function getHeaderScripts(Vtiger_Request $request) { 182 $headerScriptInstances = parent::getHeaderScripts($request); 183 $moduleName = $request->getModule(); 184 185 $jsFileNames = array( 186 'modules.Vtiger.resources.Detail', 187 "modules.$moduleName.resources.Detail", 188 'modules.Vtiger.resources.RelatedList', 189 "modules.$moduleName.resources.RelatedList", 190 'libraries.jquery.jquery_windowmsg', 191 "libraries.jquery.ckeditor.ckeditor", 192 "libraries.jquery.ckeditor.adapters.jquery", 193 "modules.Emails.resources.MassEdit", 194 "modules.Vtiger.resources.CkEditor", 195 ); 196 197 $jsScriptInstances = $this->checkAndConvertJsScripts($jsFileNames); 198 $headerScriptInstances = array_merge($headerScriptInstances, $jsScriptInstances); 199 return $headerScriptInstances; 200 } 201 202 function showDetailViewByMode($request) { 203 $requestMode = $request->get('requestMode'); 204 if($requestMode == 'full') { 205 return $this->showModuleDetailView($request); 206 } 207 return $this->showModuleBasicView($request); 208 } 209 210 /** 211 * Function shows the entire detail for the record 212 * @param Vtiger_Request $request 213 * @return <type> 214 */ 215 function showModuleDetailView(Vtiger_Request $request) { 216 $recordId = $request->get('record'); 217 $moduleName = $request->getModule(); 218 219 if(!$this->record){ 220 $this->record = Vtiger_DetailView_Model::getInstance($moduleName, $recordId); 221 } 222 $recordModel = $this->record->getRecord(); 223 $recordStrucure = Vtiger_RecordStructure_Model::getInstanceFromRecordModel($recordModel, Vtiger_RecordStructure_Model::RECORD_STRUCTURE_MODE_DETAIL); 224 $structuredValues = $recordStrucure->getStructure(); 225 226 $moduleModel = $recordModel->getModule(); 227 228 $viewer = $this->getViewer($request); 229 $viewer->assign('RECORD', $recordModel); 230 $viewer->assign('RECORD_STRUCTURE', $structuredValues); 231 $viewer->assign('BLOCK_LIST', $moduleModel->getBlocks()); 232 $viewer->assign('USER_MODEL', Users_Record_Model::getCurrentUserModel()); 233 $viewer->assign('MODULE_NAME', $moduleName); 234 $viewer->assign('IS_AJAX_ENABLED', $this->isAjaxEnabled($recordModel)); 235 236 return $viewer->view('DetailViewFullContents.tpl',$moduleName,true); 237 } 238 239 function showModuleSummaryView($request) { 240 $recordId = $request->get('record'); 241 $moduleName = $request->getModule(); 242 243 if(!$this->record){ 244 $this->record = Vtiger_DetailView_Model::getInstance($moduleName, $recordId); 245 } 246 $recordModel = $this->record->getRecord(); 247 $recordStrucure = Vtiger_RecordStructure_Model::getInstanceFromRecordModel($recordModel, Vtiger_RecordStructure_Model::RECORD_STRUCTURE_MODE_SUMMARY); 248 249 $moduleModel = $recordModel->getModule(); 250 $viewer = $this->getViewer($request); 251 $viewer->assign('RECORD', $recordModel); 252 $viewer->assign('BLOCK_LIST', $moduleModel->getBlocks()); 253 $viewer->assign('USER_MODEL', Users_Record_Model::getCurrentUserModel()); 254 255 $viewer->assign('MODULE_NAME', $moduleName); 256 $viewer->assign('IS_AJAX_ENABLED', $this->isAjaxEnabled($recordModel)); 257 $viewer->assign('SUMMARY_RECORD_STRUCTURE', $recordStrucure->getStructure()); 258 $viewer->assign('RELATED_ACTIVITIES', $this->getActivities($request)); 259 260 return $viewer->view('ModuleSummaryView.tpl', $moduleName, true); 261 } 262 263 /** 264 * Function shows basic detail for the record 265 * @param <type> $request 266 */ 267 function showModuleBasicView($request) { 268 269 $recordId = $request->get('record'); 270 $moduleName = $request->getModule(); 271 272 if(!$this->record){ 273 $this->record = Vtiger_DetailView_Model::getInstance($moduleName, $recordId); 274 } 275 $recordModel = $this->record->getRecord(); 276 277 $detailViewLinkParams = array('MODULE'=>$moduleName,'RECORD'=>$recordId); 278 $detailViewLinks = $this->record->getDetailViewLinks($detailViewLinkParams); 279 280 $viewer = $this->getViewer($request); 281 $viewer->assign('RECORD', $recordModel); 282 $viewer->assign('MODULE_SUMMARY', $this->showModuleSummaryView($request)); 283 284 $viewer->assign('DETAILVIEW_LINKS', $detailViewLinks); 285 $viewer->assign('USER_MODEL', Users_Record_Model::getCurrentUserModel()); 286 $viewer->assign('IS_AJAX_ENABLED', $this->isAjaxEnabled($recordModel)); 287 $viewer->assign('MODULE_NAME', $moduleName); 288 289 $recordStrucure = Vtiger_RecordStructure_Model::getInstanceFromRecordModel($recordModel, Vtiger_RecordStructure_Model::RECORD_STRUCTURE_MODE_DETAIL); 290 $structuredValues = $recordStrucure->getStructure(); 291 292 $moduleModel = $recordModel->getModule(); 293 294 $viewer->assign('RECORD_STRUCTURE', $structuredValues); 295 $viewer->assign('BLOCK_LIST', $moduleModel->getBlocks()); 296 297 echo $viewer->view('DetailViewSummaryContents.tpl', $moduleName, true); 298 } 299 300 /** 301 * Function returns recent changes made on the record 302 * @param Vtiger_Request $request 303 */ 304 function showRecentActivities (Vtiger_Request $request) { 305 $parentRecordId = $request->get('record'); 306 $pageNumber = $request->get('page'); 307 $limit = $request->get('limit'); 308 $moduleName = $request->getModule(); 309 310 if(empty($pageNumber)) { 311 $pageNumber = 1; 312 } 313 314 $pagingModel = new Vtiger_Paging_Model(); 315 $pagingModel->set('page', $pageNumber); 316 if(!empty($limit)) { 317 $pagingModel->set('limit', $limit); 318 } 319 320 $recentActivities = ModTracker_Record_Model::getUpdates($parentRecordId, $pagingModel); 321 $pagingModel->calculatePageRange($recentActivities); 322 323 if($pagingModel->getCurrentPage() == ModTracker_Record_Model::getTotalRecordCount($parentRecordId)/$pagingModel->getPageLimit()) { 324 $pagingModel->set('nextPageExists', false); 325 } 326 327 $viewer = $this->getViewer($request); 328 $viewer->assign('RECENT_ACTIVITIES', $recentActivities); 329 $viewer->assign('MODULE_NAME', $moduleName); 330 $viewer->assign('PAGING_MODEL', $pagingModel); 331 332 echo $viewer->view('RecentActivities.tpl', $moduleName, 'true'); 333 } 334 335 /** 336 * Function returns latest comments 337 * @param Vtiger_Request $request 338 * @return <type> 339 */ 340 function showRecentComments(Vtiger_Request $request) { 341 $parentId = $request->get('record'); 342 $pageNumber = $request->get('page'); 343 $limit = $request->get('limit'); 344 $moduleName = $request->getModule(); 345 346 if(empty($pageNumber)) { 347 $pageNumber = 1; 348 } 349 350 $pagingModel = new Vtiger_Paging_Model(); 351 $pagingModel->set('page', $pageNumber); 352 if(!empty($limit)) { 353 $pagingModel->set('limit', $limit); 354 } 355 356 $recentComments = ModComments_Record_Model::getRecentComments($parentId, $pagingModel); 357 $pagingModel->calculatePageRange($recentComments); 358 $currentUserModel = Users_Record_Model::getCurrentUserModel(); 359 $modCommentsModel = Vtiger_Module_Model::getInstance('ModComments'); 360 361 $viewer = $this->getViewer($request); 362 $viewer->assign('COMMENTS', $recentComments); 363 $viewer->assign('CURRENTUSER', $currentUserModel); 364 $viewer->assign('MODULE_NAME', $moduleName); 365 $viewer->assign('PAGING_MODEL', $pagingModel); 366 $viewer->assign('COMMENTS_MODULE_MODEL', $modCommentsModel); 367 368 return $viewer->view('RecentComments.tpl', $moduleName, 'true'); 369 } 370 371 /** 372 * Function returns related records 373 * @param Vtiger_Request $request 374 * @return <type> 375 */ 376 function showRelatedList(Vtiger_Request $request) { 377 $moduleName = $request->getModule(); 378 $relatedModuleName = $request->get('relatedModule'); 379 $targetControllerClass = null; 380 381 // Added to support related list view from the related module, rather than the base module. 382 try { 383 $targetControllerClass = Vtiger_Loader::getComponentClassName('View', 'In'.$moduleName.'Relation', $relatedModuleName); 384 }catch(AppException $e) { 385 try { 386 // If any module wants to have same view for all the relation, then invoke this. 387 $targetControllerClass = Vtiger_Loader::getComponentClassName('View', 'InRelation', $relatedModuleName); 388 }catch(AppException $e) { 389 // Default related list 390 $targetControllerClass = Vtiger_Loader::getComponentClassName('View', 'RelatedList', $moduleName); 391 } 392 } 393 if($targetControllerClass) { 394 $targetController = new $targetControllerClass(); 395 return $targetController->process($request); 396 } 397 } 398 399 /** 400 * Function sends the child comments for a comment 401 * @param Vtiger_Request $request 402 * @return <type> 403 */ 404 function showChildComments(Vtiger_Request $request) { 405 $parentCommentId = $request->get('commentid'); 406 $parentCommentModel = ModComments_Record_Model::getInstanceById($parentCommentId); 407 $childComments = $parentCommentModel->getChildComments(); 408 $currentUserModel = Users_Record_Model::getCurrentUserModel(); 409 $modCommentsModel = Vtiger_Module_Model::getInstance('ModComments'); 410 411 $viewer = $this->getViewer($request); 412 $viewer->assign('PARENT_COMMENTS', $childComments); 413 $viewer->assign('CURRENTUSER', $currentUserModel); 414 $viewer->assign('COMMENTS_MODULE_MODEL', $modCommentsModel); 415 416 return $viewer->view('CommentsList.tpl', $moduleName, 'true'); 417 } 418 419 /** 420 * Function sends all the comments for a parent(Accounts, Contacts etc) 421 * @param Vtiger_Request $request 422 * @return <type> 423 */ 424 function showAllComments(Vtiger_Request $request) { 425 $parentRecordId = $request->get('record'); 426 $commentRecordId = $request->get('commentid'); 427 $moduleName = $request->getModule(); 428 $currentUserModel = Users_Record_Model::getCurrentUserModel(); 429 $modCommentsModel = Vtiger_Module_Model::getInstance('ModComments'); 430 431 $parentCommentModels = ModComments_Record_Model::getAllParentComments($parentRecordId); 432 433 if(!empty($commentRecordId)) { 434 $currentCommentModel = ModComments_Record_Model::getInstanceById($commentRecordId); 435 } 436 437 $viewer = $this->getViewer($request); 438 $viewer->assign('CURRENTUSER', $currentUserModel); 439 $viewer->assign('COMMENTS_MODULE_MODEL', $modCommentsModel); 440 $viewer->assign('PARENT_COMMENTS', $parentCommentModels); 441 $viewer->assign('CURRENT_COMMENT', $currentCommentModel); 442 443 return $viewer->view('ShowAllComments.tpl', $moduleName, 'true'); 444 } 445 /** 446 * Function to get Ajax is enabled or not 447 * @param Vtiger_Record_Model record model 448 * @return <boolean> true/false 449 */ 450 function isAjaxEnabled($recordModel) { 451 return $recordModel->isEditable(); 452 } 453 454 /** 455 * Function to get activities 456 * @param Vtiger_Request $request 457 * @return <List of activity models> 458 */ 459 public function getActivities(Vtiger_Request $request) { 460 return ''; 461 } 462 463 464 /** 465 * Function returns related records based on related moduleName 466 * @param Vtiger_Request $request 467 * @return <type> 468 */ 469 function showRelatedRecords(Vtiger_Request $request) { 470 $parentId = $request->get('record'); 471 $pageNumber = $request->get('page'); 472 $limit = $request->get('limit'); 473 $relatedModuleName = $request->get('relatedModule'); 474 $moduleName = $request->getModule(); 475 476 if(empty($pageNumber)) { 477 $pageNumber = 1; 478 } 479 480 $pagingModel = new Vtiger_Paging_Model(); 481 $pagingModel->set('page', $pageNumber); 482 if(!empty($limit)) { 483 $pagingModel->set('limit', $limit); 484 } 485 486 $parentRecordModel = Vtiger_Record_Model::getInstanceById($parentId, $moduleName); 487 $relationListView = Vtiger_RelationListView_Model::getInstance($parentRecordModel, $relatedModuleName); 488 $models = $relationListView->getEntries($pagingModel); 489 $header = $relationListView->getHeaders(); 490 491 $viewer = $this->getViewer($request); 492 $viewer->assign('MODULE' , $moduleName); 493 $viewer->assign('RELATED_RECORDS' , $models); 494 $viewer->assign('RELATED_HEADERS', $header); 495 $viewer->assign('RELATED_MODULE' , $relatedModuleName); 496 $viewer->assign('PAGING_MODEL', $pagingModel); 497 498 return $viewer->view('SummaryWidgets.tpl', $moduleName, 'true'); 499 } 500 }
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 |