PageRenderTime 44ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/modules/Vtiger/views/List.php

https://bitbucket.org/thomashii/vtigercrm-6-for-postgresql
PHP | 256 lines | 176 code | 45 blank | 35 comment | 15 complexity | 0b58353bdb1c4112b337f1fb7009f93e MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0, LGPL-2.1, GPL-2.0, GPL-3.0
  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. class Vtiger_List_View extends Vtiger_Index_View {
  11. protected $listViewEntries = false;
  12. protected $listViewCount = false;
  13. protected $listViewLinks = false;
  14. protected $listViewHeaders = false;
  15. function __construct() {
  16. parent::__construct();
  17. }
  18. function preProcess(Vtiger_Request $request, $display=true) {
  19. parent::preProcess($request, false);
  20. $viewer = $this->getViewer ($request);
  21. $moduleName = $request->getModule();
  22. $listViewModel = Vtiger_ListView_Model::getInstance($moduleName);
  23. $linkParams = array('MODULE'=>$moduleName, 'ACTION'=>$request->get('view'));
  24. $viewer->assign('CUSTOM_VIEWS', CustomView_Record_Model::getAllByGroup($moduleName));
  25. $this->viewName = $request->get('viewname');
  26. if(empty($this->viewName)){
  27. //If not view name exits then get it from custom view
  28. //This can return default view id or view id present in session
  29. $customView = new CustomView();
  30. $this->viewName = $customView->getViewId($moduleName);
  31. }
  32. $quickLinkModels = $listViewModel->getSideBarLinks($linkParams);
  33. $viewer->assign('QUICK_LINKS', $quickLinkModels);
  34. $this->initializeListViewContents($request, $viewer);
  35. $viewer->assign('VIEWID', $this->viewName);
  36. if($display) {
  37. $this->preProcessDisplay($request);
  38. }
  39. }
  40. function preProcessTplName(Vtiger_Request $request) {
  41. return 'ListViewPreProcess.tpl';
  42. }
  43. //Note : To get the right hook for immediate parent in PHP,
  44. // specially in case of deep hierarchy
  45. /*function preProcessParentTplName(Vtiger_Request $request) {
  46. return parent::preProcessTplName($request);
  47. }*/
  48. protected function preProcessDisplay(Vtiger_Request $request) {
  49. parent::preProcessDisplay($request);
  50. }
  51. function process (Vtiger_Request $request) {
  52. $viewer = $this->getViewer ($request);
  53. $moduleName = $request->getModule();
  54. $moduleModel = Vtiger_Module_Model::getInstance($moduleName);
  55. $this->viewName = $request->get('viewname');
  56. $this->initializeListViewContents($request, $viewer);
  57. $viewer->assign('VIEW', $request->get('view'));
  58. $viewer->assign('MODULE_MODEL', $moduleModel);
  59. $viewer->assign('CURRENT_USER_MODEL', Users_Record_Model::getCurrentUserModel());
  60. $viewer->view('ListViewContents.tpl', $moduleName);
  61. }
  62. function postProcess(Vtiger_Request $request) {
  63. $viewer = $this->getViewer ($request);
  64. $moduleName = $request->getModule();
  65. $viewer->view('ListViewPostProcess.tpl', $moduleName);
  66. parent::postProcess($request);
  67. }
  68. /**
  69. * Function to get the list of Script models to be included
  70. * @param Vtiger_Request $request
  71. * @return <Array> - List of Vtiger_JsScript_Model instances
  72. */
  73. function getHeaderScripts(Vtiger_Request $request) {
  74. $headerScriptInstances = parent::getHeaderScripts($request);
  75. $moduleName = $request->getModule();
  76. $jsFileNames = array(
  77. 'modules.Vtiger.resources.List',
  78. "modules.$moduleName.resources.List",
  79. 'modules.CustomView.resources.CustomView',
  80. "modules.$moduleName.resources.CustomView",
  81. "modules.Emails.resources.MassEdit",
  82. "modules.Vtiger.resources.CkEditor"
  83. );
  84. $jsScriptInstances = $this->checkAndConvertJsScripts($jsFileNames);
  85. $headerScriptInstances = array_merge($headerScriptInstances, $jsScriptInstances);
  86. return $headerScriptInstances;
  87. }
  88. /*
  89. * Function to initialize the required data in smarty to display the List View Contents
  90. */
  91. public function initializeListViewContents(Vtiger_Request $request, Vtiger_Viewer $viewer) {
  92. $moduleName = $request->getModule();
  93. $cvId = $this->viewName;
  94. $pageNumber = $request->get('page');
  95. $orderBy = $request->get('orderby');
  96. $sortOrder = $request->get('sortorder');
  97. if($sortOrder == "ASC"){
  98. $nextSortOrder = "DESC";
  99. $sortImage = "icon-chevron-down";
  100. }else{
  101. $nextSortOrder = "ASC";
  102. $sortImage = "icon-chevron-up";
  103. }
  104. if(empty ($pageNumber)){
  105. $pageNumber = '1';
  106. }
  107. $listViewModel = Vtiger_ListView_Model::getInstance($moduleName, $cvId);
  108. $linkParams = array('MODULE'=>$moduleName, 'ACTION'=>$request->get('view'), 'CVID'=>$cvId);
  109. $linkModels = $listViewModel->getListViewMassActions($linkParams);
  110. $pagingModel = new Vtiger_Paging_Model();
  111. $pagingModel->set('page', $pageNumber);
  112. if(!empty($orderBy)) {
  113. $listViewModel->set('orderby', $orderBy);
  114. $listViewModel->set('sortorder',$sortOrder);
  115. }
  116. $searchKey = $request->get('search_key');
  117. $searchValue = $request->get('search_value');
  118. $operator = $request->get('operator');
  119. if(!empty($operator)) {
  120. $listViewModel->set('operator', $operator);
  121. $viewer->assign('OPERATOR',$operator);
  122. $viewer->assign('ALPHABET_VALUE',$searchValue);
  123. }
  124. if(!empty($searchKey) && !empty($searchValue)) {
  125. $listViewModel->set('search_key', $searchKey);
  126. $listViewModel->set('search_value', $searchValue);
  127. }
  128. if(!$this->listViewHeaders){
  129. $this->listViewHeaders = $listViewModel->getListViewHeaders();
  130. }
  131. if(!$this->listViewEntries){
  132. $this->listViewEntries = $listViewModel->getListViewEntries($pagingModel);
  133. }
  134. $noOfEntries = count($this->listViewEntries);
  135. $viewer->assign('MODULE', $moduleName);
  136. if(!$this->listViewLinks){
  137. $this->listViewLinks = $listViewModel->getListViewLinks($linkParams);
  138. }
  139. $viewer->assign('LISTVIEW_LINKS', $this->listViewLinks);
  140. $viewer->assign('LISTVIEW_MASSACTIONS', $linkModels['LISTVIEWMASSACTION']);
  141. $viewer->assign('PAGING_MODEL', $pagingModel);
  142. $viewer->assign('PAGE_NUMBER',$pageNumber);
  143. $viewer->assign('ORDER_BY',$orderBy);
  144. $viewer->assign('SORT_ORDER',$sortOrder);
  145. $viewer->assign('NEXT_SORT_ORDER',$nextSortOrder);
  146. $viewer->assign('SORT_IMAGE',$sortImage);
  147. $viewer->assign('COLUMN_NAME',$orderBy);
  148. $viewer->assign('LISTVIEW_ENTIRES_COUNT',$noOfEntries);
  149. $viewer->assign('LISTVIEW_HEADERS', $this->listViewHeaders);
  150. $viewer->assign('LISTVIEW_ENTRIES', $this->listViewEntries);
  151. if (PerformancePrefs::getBoolean('LISTVIEW_COMPUTE_PAGE_COUNT', false)) {
  152. if(!$this->listViewCount){
  153. $this->listViewCount = $listViewModel->getListViewCount();
  154. }
  155. $viewer->assign('LISTVIEW_COUNT', $this->listViewCount);
  156. }
  157. $viewer->assign('IS_MODULE_EDITABLE', $listViewModel->getModule()->isPermitted('EditView'));
  158. $viewer->assign('IS_MODULE_DELETABLE', $listViewModel->getModule()->isPermitted('Delete'));
  159. }
  160. /**
  161. * Function returns the number of records for the current filter
  162. * @param Vtiger_Request $request
  163. */
  164. function getRecordsCount(Vtiger_Request $request) {
  165. $moduleName = $request->getModule();
  166. $cvId = $request->get('viewname');
  167. $count = $this->getListViewCount($request);
  168. $result = array();
  169. $result['module'] = $moduleName;
  170. $result['viewname'] = $cvId;
  171. $result['count'] = $count;
  172. $response = new Vtiger_Response();
  173. $response->setEmitType(Vtiger_Response::$EMIT_JSON);
  174. $response->setResult($result);
  175. $response->emit();
  176. }
  177. /**
  178. * Function to get listView count
  179. * @param Vtiger_Request $request
  180. */
  181. function getListViewCount(Vtiger_Request $request){
  182. $moduleName = $request->getModule();
  183. $cvId = $request->get('viewname');
  184. if(empty($cvId)) {
  185. $cvId = '0';
  186. }
  187. $searchKey = $request->get('search_key');
  188. $searchValue = $request->get('search_value');
  189. $listViewModel = Vtiger_ListView_Model::getInstance($moduleName, $cvId);
  190. $listViewModel->set('search_key', $searchKey);
  191. $listViewModel->set('search_value', $searchValue);
  192. $listViewModel->set('operator', $request->get('operator'));
  193. $count = $listViewModel->getListViewCount();
  194. return $count;
  195. }
  196. /**
  197. * Function to get the page count for list
  198. * @return total number of pages
  199. */
  200. function getPageCount(Vtiger_Request $request){
  201. $listViewCount = $this->getListViewCount($request);
  202. $pagingModel = new Vtiger_Paging_Model();
  203. $pageLimit = $pagingModel->getPageLimit();
  204. $pageCount = ceil((int) $listViewCount / (int) $pageLimit);
  205. $result = array();
  206. $result['page'] = $pageCount;
  207. $response = new Vtiger_Response();
  208. $response->setResult($result);
  209. $response->emit();
  210. }
  211. }