PageRenderTime 54ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/app/protected/modules/reports/controllers/DefaultController.php

https://bitbucket.org/ddonthula/zurmofeb
PHP | 547 lines | 489 code | 26 blank | 32 comment | 36 complexity | b5442fe60bb2d1900d1128686ffbc2c1 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, BSD-2-Clause, GPL-3.0, BSD-3-Clause, LGPL-3.0
  1. <?php
  2. /*********************************************************************************
  3. * Zurmo is a customer relationship management program developed by
  4. * Zurmo, Inc. Copyright (C) 2012 Zurmo Inc.
  5. *
  6. * Zurmo is free software; you can redistribute it and/or modify it under
  7. * the terms of the GNU General Public License version 3 as published by the
  8. * Free Software Foundation with the addition of the following permission added
  9. * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
  10. * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
  11. * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
  12. *
  13. * Zurmo is distributed in the hope that it will be useful, but WITHOUT
  14. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  15. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU General Public License along with
  19. * this program; if not, see http://www.gnu.org/licenses or write to the Free
  20. * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  21. * 02110-1301 USA.
  22. *
  23. * You can contact Zurmo, Inc. with a mailing address at 113 McHenry Road Suite 207,
  24. * Buffalo Grove, IL 60089, USA. or at email address contact@zurmo.com.
  25. ********************************************************************************/
  26. /**
  27. * Default controller for all report actions
  28. */
  29. class ReportsDefaultController extends ZurmoBaseController
  30. {
  31. public function filters()
  32. {
  33. return array_merge(parent::filters(),
  34. array(
  35. array(
  36. self::getRightsFilterPath() . ' + drillDownDetails',
  37. 'moduleClassName' => 'ReportsModule',
  38. 'rightName' => ReportsModule::RIGHT_ACCESS_REPORTS,
  39. ),
  40. array(
  41. self::getRightsFilterPath() . ' + selectType',
  42. 'moduleClassName' => 'ReportsModule',
  43. 'rightName' => ReportsModule::RIGHT_CREATE_REPORTS,
  44. ),
  45. array(
  46. ZurmoModuleController::ZERO_MODELS_CHECK_FILTER_PATH . ' + list, index',
  47. 'controller' => $this,
  48. ),
  49. )
  50. );
  51. }
  52. public function actionIndex()
  53. {
  54. $this->actionList();
  55. }
  56. public function actionList()
  57. {
  58. $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType(
  59. 'listPageSize', get_class($this->getModule()));
  60. $savedReport = new SavedReport(false);
  61. $searchForm = new ReportsSearchForm($savedReport);
  62. $dataProvider = $this->resolveSearchDataProvider(
  63. $searchForm,
  64. $pageSize,
  65. null,
  66. 'ReportsSearchView'
  67. );
  68. $title = Zurmo::t('ReportsModule', 'Reports');
  69. $breadcrumbLinks = array(
  70. $title,
  71. );
  72. if (isset($_GET['ajax']) && $_GET['ajax'] == 'list-view')
  73. {
  74. $mixedView = $this->makeListView(
  75. $searchForm,
  76. $dataProvider
  77. );
  78. $view = new ReportsPageView($mixedView);
  79. }
  80. else
  81. {
  82. $mixedView = $this->makeActionBarSearchAndListView($searchForm, $dataProvider,
  83. 'SecuredActionBarForReportsSearchAndListView');
  84. $view = new ReportsPageView(ZurmoDefaultViewUtil::
  85. makeViewWithBreadcrumbsForCurrentUser(
  86. $this, $mixedView, $breadcrumbLinks, 'ReportBreadCrumbView'));
  87. }
  88. echo $view->render();
  89. }
  90. public function actionDetails($id)
  91. {
  92. $savedReport = static::getModelAndCatchNotFoundAndDisplayError('SavedReport', intval($id));
  93. ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
  94. ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport);
  95. AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($savedReport), 'ReportsModule'), $savedReport);
  96. $breadcrumbLinks = array(strval($savedReport));
  97. $breadCrumbView = new ReportBreadCrumbView($this->getId(), $this->getModule()->getId(), $breadcrumbLinks);
  98. $detailsAndRelationsView = $this->makeReportDetailsAndRelationsView($savedReport, Yii::app()->request->getRequestUri(),
  99. $breadCrumbView);
  100. $view = new ReportsPageView(ZurmoDefaultViewUtil::
  101. makeStandardViewForCurrentUser($this, $detailsAndRelationsView));
  102. echo $view->render();
  103. }
  104. public function actionSelectType()
  105. {
  106. $breadcrumbLinks = array(Zurmo::t('ReportsModule', 'Select Report Type'));
  107. $view = new ReportsPageView(ZurmoDefaultViewUtil::
  108. makeViewWithBreadcrumbsForCurrentUser(
  109. $this,
  110. new ReportWizardTypesGridView(),
  111. $breadcrumbLinks,
  112. 'ReportBreadCrumbView'));
  113. echo $view->render();
  114. }
  115. public function actionCreate($type = null)
  116. {
  117. if($type == null)
  118. {
  119. $this->actionSelectType();
  120. Yii::app()->end(0, false);
  121. }
  122. $breadcrumbLinks = array(Zurmo::t('ReportsModule', 'Create'));
  123. assert('is_string($type)');
  124. $report = new Report();
  125. $report->setType($type);
  126. $reportWizardView = ReportWizardViewFactory::makeViewFromReport($report);
  127. $view = new ReportsPageView(ZurmoDefaultViewUtil::
  128. makeViewWithBreadcrumbsForCurrentUser(
  129. $this,
  130. $reportWizardView,
  131. $breadcrumbLinks,
  132. 'ReportBreadCrumbView'));
  133. echo $view->render();
  134. }
  135. public function actionEdit($id)
  136. {
  137. $savedReport = SavedReport::getById((int)$id);
  138. ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
  139. ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($savedReport);
  140. $breadcrumbLinks = array(strval($savedReport));
  141. $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
  142. $reportWizardView = ReportWizardViewFactory::makeViewFromReport($report);
  143. $view = new ReportsPageView(ZurmoDefaultViewUtil::
  144. makeViewWithBreadcrumbsForCurrentUser(
  145. $this,
  146. $reportWizardView,
  147. $breadcrumbLinks,
  148. 'ReportBreadCrumbView'));
  149. echo $view->render();
  150. }
  151. public function actionSave($type, $id = null)
  152. {
  153. $postData = PostUtil::getData();
  154. $savedReport = null;
  155. $report = null;
  156. $this->resolveSavedReportAndReportByPostData($postData, $savedReport, $report, $type, $id);
  157. $reportToWizardFormAdapter = new ReportToWizardFormAdapter($report);
  158. $model = $reportToWizardFormAdapter->makeFormByType();
  159. if (isset($postData['ajax']) && $postData['ajax'] === 'edit-form')
  160. {
  161. $this->actionValidate($postData, $model);
  162. }
  163. $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::
  164. resolveByPostDataAndModelThenMake($postData[get_class($model)], $savedReport);
  165. SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
  166. if($savedReport->id > 0)
  167. {
  168. ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
  169. }
  170. ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($savedReport);
  171. if($savedReport->save())
  172. {
  173. if($explicitReadWriteModelPermissions != null)
  174. {
  175. ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($savedReport,
  176. $explicitReadWriteModelPermissions);
  177. }
  178. //i can do a safety check on perms, then do flash here, on the jscript we can go to list instead and this should come up...
  179. //make sure you add to list of things to test.
  180. $redirectToList = $this->resolveAfterSaveHasPermissionsProblem($savedReport,
  181. $postData[get_class($model)]['name']);
  182. echo CJSON::encode(array('id' => $savedReport->id,
  183. 'redirectToList' => $redirectToList));
  184. Yii::app()->end(0, false);
  185. }
  186. else
  187. {
  188. throw new FailedToSaveModelException();
  189. }
  190. }
  191. public function actionRelationsAndAttributesTree($type, $treeType, $id = null, $nodeId = null)
  192. {
  193. $postData = PostUtil::getData();
  194. $savedReport = null;
  195. $report = null;
  196. $this->resolveSavedReportAndReportByPostData($postData, $savedReport, $report, $type, $id);
  197. if($nodeId != null)
  198. {
  199. $reportToTreeAdapter = new ReportRelationsAndAttributesToTreeAdapter($report, $treeType);
  200. echo ZurmoTreeView::saveDataAsJson($reportToTreeAdapter->getData($nodeId));
  201. Yii::app()->end(0, false);
  202. }
  203. $view = new ReportRelationsAndAttributesTreeView($type, $treeType, 'edit-form');
  204. $content = $view->render();
  205. Yii::app()->getClientScript()->setToAjaxMode();
  206. Yii::app()->getClientScript()->render($content);
  207. echo $content;
  208. }
  209. public function actionAddAttributeFromTree($type, $treeType, $nodeId, $rowNumber, $trackableStructurePosition = false, $id = null)
  210. {
  211. $postData = PostUtil::getData();
  212. $savedReport = null;
  213. $report = null;
  214. $this->resolveSavedReportAndReportByPostData($postData, $savedReport, $report, $type, $id);
  215. $nodeIdWithoutTreeType = ReportRelationsAndAttributesToTreeAdapter::
  216. removeTreeTypeFromNodeId($nodeId, $treeType);
  217. $moduleClassName = $report->getModuleClassName();
  218. $modelClassName = $moduleClassName::getPrimaryModelName();
  219. $form = new WizardActiveForm();
  220. $form->enableAjaxValidation = true; //ensures error validation populates correctly
  221. $wizardFormClassName = ReportToWizardFormAdapter::getFormClassNameByType($report->getType());
  222. $model = ComponentForReportFormFactory::makeByComponentType($moduleClassName,
  223. $modelClassName, $report->getType(), $treeType);
  224. $form->modelClassNameForError = $wizardFormClassName;
  225. $attribute = ReportRelationsAndAttributesToTreeAdapter::
  226. resolveAttributeByNodeId($nodeIdWithoutTreeType);
  227. $model->attributeIndexOrDerivedType = ReportRelationsAndAttributesToTreeAdapter::
  228. resolveAttributeByNodeId($nodeIdWithoutTreeType);
  229. $inputPrefixData = ReportRelationsAndAttributesToTreeAdapter::
  230. resolveInputPrefixData($wizardFormClassName,
  231. $treeType, (int)$rowNumber);
  232. $adapter = new ReportAttributeToElementAdapter($inputPrefixData, $model,
  233. $form, $treeType);
  234. $view = new AttributeRowForReportComponentView($adapter,
  235. (int)$rowNumber, $inputPrefixData, $attribute,
  236. (bool)$trackableStructurePosition, true, $treeType);
  237. $content = $view->render();
  238. $form->renderAddAttributeErrorSettingsScript($view::getFormId());
  239. Yii::app()->getClientScript()->setToAjaxMode();
  240. Yii::app()->getClientScript()->render($content);
  241. echo $content;
  242. }
  243. public function actionGetAvailableSeriesAndRangesForChart($type, $id = null)
  244. {
  245. $postData = PostUtil::getData();
  246. $savedReport = null;
  247. $report = null;
  248. $this->resolveSavedReportAndReportByPostData($postData, $savedReport, $report, $type, $id);
  249. $moduleClassName = $report->getModuleClassName();
  250. $modelClassName = $moduleClassName::getPrimaryModelName();
  251. $modelToReportAdapter = ModelRelationsAndAttributesToReportAdapter::
  252. make($moduleClassName, $modelClassName, $report->getType());
  253. if(!$modelToReportAdapter instanceof ModelRelationsAndAttributesToSummationReportAdapter)
  254. {
  255. throw new NotSupportedException();
  256. }
  257. $seriesAttributesData = $modelToReportAdapter->
  258. getAttributesForChartSeries($report->getGroupBys(),
  259. $report->getDisplayAttributes());
  260. $rangeAttributesData = $modelToReportAdapter->
  261. getAttributesForChartRange ($report->getDisplayAttributes());
  262. $dataAndLabels = array();
  263. $dataAndLabels['firstSeriesDataAndLabels'] = array('' => Zurmo::t('ReportsModule', '(None)'));
  264. $dataAndLabels['firstSeriesDataAndLabels'] = array_merge($dataAndLabels['firstSeriesDataAndLabels'],
  265. ReportUtil::makeDataAndLabelsForSeriesOrRange($seriesAttributesData));
  266. $dataAndLabels['firstRangeDataAndLabels'] = array('' => Zurmo::t('ReportsModule', '(None)'));
  267. $dataAndLabels['firstRangeDataAndLabels'] = array_merge($dataAndLabels['firstRangeDataAndLabels'],
  268. ReportUtil::makeDataAndLabelsForSeriesOrRange($rangeAttributesData));
  269. $dataAndLabels['secondSeriesDataAndLabels'] = array('' => Zurmo::t('ReportsModule', '(None)'));
  270. $dataAndLabels['secondSeriesDataAndLabels'] = array_merge($dataAndLabels['secondSeriesDataAndLabels'],
  271. ReportUtil::makeDataAndLabelsForSeriesOrRange($seriesAttributesData));
  272. $dataAndLabels['secondRangeDataAndLabels'] = array('' => Zurmo::t('ReportsModule', '(None)'));
  273. $dataAndLabels['secondRangeDataAndLabels'] = array_merge($dataAndLabels['secondRangeDataAndLabels'],
  274. ReportUtil::makeDataAndLabelsForSeriesOrRange($rangeAttributesData));
  275. echo CJSON::encode($dataAndLabels);
  276. }
  277. public function actionApplyRuntimeFilters($id)
  278. {
  279. $postData = PostUtil::getData();
  280. $savedReport = SavedReport::getById((int)$id);
  281. ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
  282. ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport);
  283. $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
  284. $wizardFormClassName = ReportToWizardFormAdapter::getFormClassNameByType($report->getType());
  285. if(!isset($postData[$wizardFormClassName]))
  286. {
  287. throw new NotSupportedException();
  288. }
  289. DataToReportUtil::resolveFilters($postData[$wizardFormClassName], $report);
  290. if (isset($_POST['ajax']) && $_POST['ajax'] == 'edit-form')
  291. {
  292. $adapter = new ReportToWizardFormAdapter($report);
  293. $reportWizardForm = $adapter->makeFormByType();
  294. $reportWizardForm->setScenario(reportWizardForm::FILTERS_VALIDATION_SCENARIO);
  295. if(!$reportWizardForm->validate())
  296. {
  297. $errorData = array();
  298. foreach ($reportWizardForm->getErrors() as $attribute => $errors)
  299. {
  300. $errorData[ZurmoHtml::activeId($reportWizardForm, $attribute)] = $errors;
  301. }
  302. echo CJSON::encode($errorData);
  303. Yii::app()->end(0, false);
  304. }
  305. }
  306. $filtersData = ArrayUtil::getArrayValue($postData[$wizardFormClassName],
  307. ComponentForReportForm::TYPE_FILTERS);
  308. $sanitizedFiltersData = DataToReportUtil::sanitizeFiltersData($report->getModuleClassName(),
  309. $report->getType(),
  310. $filtersData);
  311. $stickyData = array(ComponentForReportForm::TYPE_FILTERS => $sanitizedFiltersData);
  312. StickyReportUtil::setDataByKeyAndData($report->getId(), $stickyData);
  313. }
  314. public function actionResetRuntimeFilters($id)
  315. {
  316. $postData = PostUtil::getData();
  317. $savedReport = SavedReport::getById((int)$id);
  318. ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
  319. ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport);
  320. $breadcrumbLinks = array(strval($savedReport));
  321. $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
  322. StickyReportUtil::clearDataByKey($report->getId());
  323. }
  324. public function actionDelete($id)
  325. {
  326. $savedReport = SavedReport::GetById(intval($id));
  327. ControllerSecurityUtil::resolveAccessCanCurrentUserDeleteModel($savedReport);
  328. $savedReport->delete();
  329. $this->redirect(array($this->getId() . '/index'));
  330. }
  331. public function actionDrillDownDetails($id, $rowId)
  332. {
  333. $savedReport = SavedReport::getById((int)$id);
  334. ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
  335. ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport, true);
  336. $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
  337. $report->resolveGroupBysAsFilters(GetUtil::getData());
  338. $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType(
  339. 'reportResultsSubListPageSize', get_class($this->getModule()));
  340. $dataProvider = ReportDataProviderFactory::makeForSummationDrillDown($report, $pageSize);
  341. $dataProvider->setRunReport(true);
  342. $view = new SummationDrillDownReportResultsGridView('default', 'reports', $dataProvider, $rowId);
  343. $content = $view->render();
  344. Yii::app()->getClientScript()->setToAjaxMode();
  345. Yii::app()->getClientScript()->render($content);
  346. echo $content;
  347. }
  348. public function actionExport($id, $stickySearchKey = null)
  349. {
  350. assert('$stickySearchKey == null || is_string($stickySearchKey)');
  351. $savedReport = SavedReport::getById((int)$id);
  352. ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
  353. ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport);
  354. $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
  355. $dataProvider = $this->getDataProviderForExport($report, (int)$stickySearchKey, false);
  356. $totalItems = intval($dataProvider->calculateTotalItemCount());
  357. $data = array();
  358. if ($totalItems > 0)
  359. {
  360. if ($totalItems <= ExportModule::$asynchronusThreshold)
  361. {
  362. // Output csv file directly to user browser
  363. if ($dataProvider)
  364. {
  365. $data1 = $dataProvider->getData();
  366. $headerData = array();
  367. foreach ($data1 as $reportResultsRowData)
  368. {
  369. $reportToExportAdapter = new ReportToExportAdapter($reportResultsRowData, $report);
  370. if(count($headerData) == 0)
  371. {
  372. $headerData = $reportToExportAdapter->getHeaderData();
  373. }
  374. $data[] = $reportToExportAdapter->getData();
  375. }
  376. }
  377. // Output data
  378. if (count($data))
  379. {
  380. $fileName = $this->getModule()->getName() . ".csv";
  381. $output = ExportItemToCsvFileUtil::export($data, $headerData, $fileName, true);
  382. }
  383. else
  384. {
  385. Yii::app()->user->setFlash('notification',
  386. Zurmo::t('ZurmoModule', 'There is no data to export.')
  387. );
  388. }
  389. }
  390. else
  391. {
  392. if ($dataProvider)
  393. {
  394. $serializedData = serialize($dataProvider);
  395. }
  396. // Create background job
  397. $exportItem = new ExportItem();
  398. $exportItem->isCompleted = 0;
  399. $exportItem->exportFileType = 'csv';
  400. $exportItem->exportFileName = $this->getModule()->getName();
  401. $exportItem->modelClassName = 'SavedReport';
  402. $exportItem->serializedData = $serializedData;
  403. $exportItem->save();
  404. $exportItem->forget();
  405. Yii::app()->user->setFlash('notification',
  406. Zurmo::t('ZurmoModule', 'A large amount of data has been requested for export. You will receive ' .
  407. 'a notification with the download link when the export is complete.')
  408. );
  409. }
  410. }
  411. else
  412. {
  413. Yii::app()->user->setFlash('notification',
  414. Zurmo::t('ZurmoModule', 'There is no data to export.')
  415. );
  416. }
  417. $this->redirect(array($this->getId() . '/index'));
  418. }
  419. protected function resolveCanCurrentUserAccessReports()
  420. {
  421. if(!RightsUtil::doesUserHaveAllowByRightName('ReportsModule',
  422. ReportsModule::RIGHT_CREATE_REPORTS,
  423. Yii::app()->user->userModel))
  424. {
  425. $messageView = new AccessFailureView();
  426. $view = new AccessFailurePageView($messageView);
  427. echo $view->render();
  428. Yii::app()->end(0, false);
  429. }
  430. return true;
  431. }
  432. protected function resolveSavedReportAndReportByPostData(Array $postData, & $savedReport, & $report, $type, $id = null)
  433. {
  434. if($id == null)
  435. {
  436. $this->resolveCanCurrentUserAccessReports();
  437. $savedReport = new SavedReport();
  438. $report = new Report();
  439. $report->setType($type);
  440. }
  441. else
  442. {
  443. $savedReport = SavedReport::getById(intval($id));
  444. ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($savedReport);
  445. $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
  446. }
  447. DataToReportUtil::resolveReportByWizardPostData($report, $postData,
  448. ReportToWizardFormAdapter::getFormClassNameByType($type));
  449. }
  450. protected function resolveAfterSaveHasPermissionsProblem(SavedReport $savedReport, $modelToStringValue)
  451. {
  452. assert('is_string($modelToStringValue)');
  453. if (ControllerSecurityUtil::doesCurrentUserHavePermissionOnSecurableItem($savedReport, Permission::READ))
  454. {
  455. return false;
  456. }
  457. else
  458. {
  459. $notificationContent = Zurmo::t(
  460. 'ReportsModule',
  461. 'You no longer have permissions to access {modelName}.',
  462. array('{modelName}' => $modelToStringValue)
  463. );
  464. Yii::app()->user->setFlash('notification', $notificationContent);
  465. return true;
  466. }
  467. }
  468. protected function actionValidate($postData, ReportWizardForm $model)
  469. {
  470. if(isset($postData['validationScenario']) && $postData['validationScenario'] != null)
  471. {
  472. $model->setScenario($postData['validationScenario']);
  473. }
  474. else
  475. {
  476. throw new NotSupportedException();
  477. }
  478. $model->validate();
  479. $errorData = array();
  480. foreach ($model->getErrors() as $attribute => $errors)
  481. {
  482. $errorData[ZurmoHtml::activeId($model, $attribute)] = $errors;
  483. }
  484. echo CJSON::encode($errorData);
  485. Yii::app()->end(0, false);
  486. }
  487. protected function makeReportDetailsAndRelationsView(SavedReport $savedReport, $redirectUrl,
  488. ReportBreadCrumbView $breadCrumbView)
  489. {
  490. $reportDetailsAndRelationsView = ReportDetailsAndResultsViewFactory::makeView($savedReport, $this->getId(),
  491. $this->getModule()->getId(),
  492. $redirectUrl);
  493. $gridView = new GridView(2, 1);
  494. $gridView->setView($breadCrumbView, 0, 0);
  495. $gridView->setView($reportDetailsAndRelationsView, 1, 0);
  496. return $gridView;
  497. }
  498. protected function getDataProviderForExport(Report $report, $stickyKey, $runReport)
  499. {
  500. assert('is_string($stickyKey) || is_int($stickyKey)');
  501. assert('is_bool($runReport)');
  502. if (null != $stickyData = StickyReportUtil::getDataByKey($stickyKey))
  503. {
  504. StickyReportUtil::resolveStickyDataToReport($report, $stickyData);
  505. }
  506. $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType(
  507. 'reportResultsListPageSize', get_class($this->getModule()));
  508. $dataProvider = ReportDataProviderFactory::makeByReport($report, $pageSize);
  509. if($runReport)
  510. {
  511. $dataProvider->setRunReport($runReport);
  512. }
  513. return $dataProvider;
  514. }
  515. protected function resolveMetadataBeforeMakingDataProvider(& $metadata)
  516. {
  517. $metadata = SavedReportUtil::resolveSearchAttributeDataByModuleClassNames($metadata,
  518. Report::getReportableModulesClassNamesCurrentUserHasAccessTo());
  519. }
  520. }
  521. ?>