コード例 #1
0
 /**
  * @param SavedReport $savedReport
  * @param string $controllerId
  * @param string $moduleId
  * @param string $redirectUrl
  * @return ReportDetailsAndResultsView based object
  * @throws NotSupportedException if the report type is invalid or null
  */
 public static function makeView(SavedReport $savedReport, $controllerId, $moduleId, $redirectUrl)
 {
     assert('is_string($controllerId)');
     assert('is_string($moduleId)');
     assert('is_string($redirectUrl)');
     $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
     $params = array('controllerId' => $controllerId, 'relationModuleId' => $moduleId, 'relationModel' => $report, 'redirectUrl' => $redirectUrl);
     if ($report->getType() == Report::TYPE_ROWS_AND_COLUMNS) {
         $viewClassName = 'RowsAndColumnsReportDetailsAndResultsView';
     } elseif ($report->getType() == Report::TYPE_SUMMATION) {
         $viewClassName = 'SummationReportDetailsAndResultsView';
     } elseif ($report->getType() == Report::TYPE_MATRIX) {
         $viewClassName = 'MatrixReportDetailsAndResultsView';
     } else {
         throw new NotSupportedException();
     }
     return new $viewClassName($controllerId, $moduleId, $params, $report, $savedReport);
 }
コード例 #2
0
 public function actionDetails($id, $runReport = false)
 {
     $savedReport = SavedReport::getById((int) $id);
     ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
     ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport, true);
     $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
     $portlet = Portlet::getById(intval($_GET['portletId']));
     $portlet->params = array('controllerId' => 'default', 'relationModuleId' => $this->getModule()->getId(), 'relationModel' => $report, 'redirectUrl' => Yii::app()->request->getRequestUri(), 'dataProvider' => $this->getDataProvider($report, $report->getId(), (bool) $runReport));
     $portletView = $portlet->getView();
     if (!RightsUtil::canUserAccessModule($portletView::getModuleClassName(), Yii::app()->user->userModel)) {
         $messageView = new AccessFailureView();
         $view = new AccessFailurePageView($messageView);
         echo $view->render();
         Yii::app()->end(0, false);
     }
     $view = new AjaxPageView($portletView);
     echo $view->render();
 }
コード例 #3
0
 public static function makeReportDataProviderAndResolveAttributeName($id, $pageSize, &$attributeName)
 {
     assert('is_int($pageSize)');
     $savedReport = SavedReport::getById($id);
     $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
     foreach ($report->getDisplayAttributes() as $key => $displayAttribute) {
         if ($displayAttribute->getAttributeIndexOrDerivedType() == 'id') {
             $attributeName = ReportResultsRowData::resolveAttributeNameByKey($key);
             break;
         }
     }
     if ($attributeName == null) {
         $moduleClassName = $report->getModuleClassName();
         $modelClassName = $moduleClassName::getPrimaryModelName();
         $displayAttribute = new DisplayAttributeForReportForm($moduleClassName, $modelClassName, $report->getType());
         $displayAttribute->attributeIndexOrDerivedType = 'id';
         $report->addDisplayAttribute($displayAttribute);
         $attributeName = ReportResultsRowData::resolveAttributeNameByKey($key + 1);
     }
     return ReportDataProviderFactory::makeByReport($report, $pageSize);
 }
コード例 #4
0
 protected function resolveSavedReportAndReportByPostData(array $postData, &$savedReport, &$report, $type, $id = null, $isBeingCopied = false)
 {
     if ($id == null) {
         $this->resolveCanCurrentUserAccessReports();
         $savedReport = new SavedReport();
         $report = new Report();
         $report->setType($type);
     } elseif ($isBeingCopied) {
         $savedReport = new SavedReport();
         $oldReport = SavedReport::getById(intval($id));
         ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($oldReport);
         SavedReportCopyModelUtil::copy($oldReport, $savedReport);
         $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
     } else {
         $savedReport = SavedReport::getById(intval($id));
         ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($savedReport);
         $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
     }
     DataToReportUtil::resolveReportByWizardPostData($report, $postData, ReportToWizardFormAdapter::getFormClassNameByType($type));
 }
コード例 #5
0
 public static function makeMeetingsCategoryAndMonthStartTimeByOwner()
 {
     $report = new Report();
     $report->setModuleClassName('MeetingsModule');
     $report->setName('Meettings Category And Month Start Time By Owner');
     $report->setType(Report::TYPE_MATRIX);
     $report->setOwner(Yii::app()->user->userModel);
     $report->setFiltersStructure('');
     $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
     $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'startDateTime__Month';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'category';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'owner__User';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $displayAttribute = new DisplayAttributeForReportForm('MeetingsModule', 'Meeting', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $savedReport = new SavedReport();
     SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
     //set explicit
     $saved = $savedReport->save();
     assert('$saved');
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReport);
     $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
     assert('$success');
     $saved = $savedReport->save();
     assert('$saved');
 }
コード例 #6
0
 public static function makeOpportunitiesByStage()
 {
     $report = new Report();
     $report->setModuleClassName('OpportunitiesModule');
     $report->setName('Opportunities by Stage');
     $report->setType(Report::TYPE_SUMMATION);
     $report->setOwner(Yii::app()->user->userModel);
     $report->setFiltersStructure('');
     $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
     $groupBy = new GroupByForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'stage';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'stage';
     $report->addDisplayAttribute($displayAttribute);
     $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'amount__Summation';
     $report->addDisplayAttribute($displayAttribute);
     $chart = new ChartForReportForm();
     $chart->type = 'Column2D';
     $chart->firstSeries = 'stage';
     $chart->firstRange = 'amount__Summation';
     $report->setChart($chart);
     $savedReport = new SavedReport();
     SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
     //set explicit
     $saved = $savedReport->save();
     assert('$saved');
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReport);
     $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
     assert('$success');
     $saved = $savedReport->save();
     assert('$saved');
 }
コード例 #7
0
 /**
  * @depends testResolveReportToSavedReport
  */
 public function testMakeReportBySavedReport()
 {
     $billy = User::getByUsername('billy');
     $savedReports = SavedReport::getAll();
     $this->assertEquals(1, count($savedReports));
     $savedReport = $savedReports[0];
     $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
     $filters = $report->getFilters();
     $groupBys = $report->getGroupBys();
     $orderBys = $report->getOrderBys();
     $displayAttributes = $report->getDisplayAttributes();
     $drillDownDisplayAttributes = $report->getDrillDownDisplayAttributes();
     $this->assertEquals('ReportsTestModule', $report->getModuleClassName());
     $this->assertEquals('myFirstReport', $report->getName());
     $this->assertEquals('aDescription', $report->getDescription());
     $this->assertEquals(Report::TYPE_ROWS_AND_COLUMNS, $report->getType());
     $this->assertEquals('1 and 2 or 3', $report->getFiltersStructure());
     $this->assertTrue($report->getOwner()->isSame($billy));
     $this->assertCount(4, $filters);
     $this->assertCount(1, $groupBys);
     $this->assertCount(1, $orderBys);
     $this->assertCount(1, $displayAttributes);
     $this->assertCount(1, $drillDownDisplayAttributes);
     $this->assertEquals(true, $filters[0]->availableAtRunTime);
     $this->assertEquals('aValue', $filters[0]->value);
     $this->assertEquals('string', $filters[0]->attributeIndexOrDerivedType);
     $this->assertNull($filters[0]->currencyIdForValue);
     $this->assertNull($filters[0]->secondValue);
     $this->assertNull($filters[0]->stringifiedModelForValue);
     $this->assertNull($filters[0]->valueType);
     $this->assertEquals('equals', $filters[0]->operator);
     $this->assertEquals(true, $filters[1]->availableAtRunTime);
     $this->assertEquals('aValue', $filters[1]->value);
     $this->assertEquals('currencyValue', $filters[1]->attributeIndexOrDerivedType);
     $this->assertEquals(4, $filters[1]->currencyIdForValue);
     $this->assertEquals('bValue', $filters[1]->secondValue);
     $this->assertNull($filters[1]->stringifiedModelForValue);
     $this->assertNull($filters[1]->valueType);
     $this->assertEquals('between', $filters[1]->operator);
     $this->assertEquals(false, $filters[2]->availableAtRunTime);
     $this->assertEquals('aValue', $filters[2]->value);
     $this->assertEquals('owner__User', $filters[2]->attributeIndexOrDerivedType);
     $this->assertNull($filters[2]->currencyIdForValue);
     $this->assertNull($filters[2]->secondValue);
     $this->assertEquals('someName', $filters[2]->stringifiedModelForValue);
     $this->assertNull($filters[2]->valueType);
     $this->assertNull($filters[2]->operator);
     $this->assertEquals(true, $filters[3]->availableAtRunTime);
     $this->assertEquals('aValue', $filters[3]->value);
     $this->assertEquals('createdDateTime', $filters[3]->attributeIndexOrDerivedType);
     $this->assertNull($filters[3]->currencyIdForValue);
     $this->assertEquals('bValue', $filters[3]->secondValue);
     $this->assertNull($filters[3]->stringifiedModelForValue);
     $this->assertNull($filters[3]->operator);
     $this->assertEquals('Between', $filters[3]->valueType);
     $this->assertEquals('url', $orderBys[0]->attributeIndexOrDerivedType);
     $this->assertEquals('desc', $orderBys[0]->order);
     $this->assertEquals('lastName', $groupBys[0]->attributeIndexOrDerivedType);
     $this->assertEquals('y', $groupBys[0]->axis);
     $this->assertEquals('phone', $displayAttributes[0]->attributeIndexOrDerivedType);
     $this->assertEquals('someNewLabel', $displayAttributes[0]->label);
     $this->assertEquals('firstName', $drillDownDisplayAttributes[0]->attributeIndexOrDerivedType);
     $this->assertEquals('someNewLabel', $drillDownDisplayAttributes[0]->label);
 }
コード例 #8
0
 private function resolveSavedReportAndWarningData()
 {
     try {
         $savedReport = SavedReport::getById((int) $this->getSavedReportId());
         if (!ControllerSecurityUtil::doesCurrentUserHavePermissionOnSecurableItem($savedReport, Permission::READ)) {
             $this->warningMessage = Zurmo::t('ReportsModule', 'You have tried to access a report you do not have access to');
         } else {
             $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
             if ($report->getChart()->type == null) {
                 $this->warningMessage = Zurmo::t('ReportsModule', 'This report does not have a chart to display');
             } else {
                 $this->savedReport = $savedReport;
             }
         }
     } catch (NotFoundException $e) {
         $this->warningMessage = Zurmo::t('ReportsModule', 'You have tried to access a report that is no longer available');
     } catch (AccessDeniedSecurityException $e) {
         $this->warningMessage = Zurmo::t('ReportsModule', 'You have tried to access a report you do not have access to');
     }
     $this->savedReportHasBeenResolved = true;
 }
コード例 #9
0
 public static function makeSimpleContactRowsAndColumnsReport()
 {
     $report = new Report();
     $report->setDescription('A test contact report');
     $report->setModuleClassName('ContactsModule');
     $report->setName('A rows and columns report');
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $report->setOwner(Yii::app()->user->userModel);
     $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
     $report->setFiltersStructure('');
     $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'lastName';
     $report->addDisplayAttribute($displayAttribute);
     $savedReport = new SavedReport();
     SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
     $saved = $savedReport->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     return $savedReport;
 }