[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/Vtiger/views/ -> Detail.php (source)

   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  }


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