/** * Override to call a different report adapter class for calendar. * @param string $moduleClassName * @param string $modelClassName * @return ModelRelationsAndAttributesToReportAdapter based object */ protected function makeModelRelationsAndAttributesToReportAdapter($moduleClassName, $modelClassName) { assert('is_string($moduleClassName)'); assert('is_string($modelClassName)'); $rules = ReportRules::makeByModuleClassName($moduleClassName); $model = new $modelClassName(false); return new CalendarModelRelationsAndAttributesToRowsAndColumnsReportAdapter($model, $rules, $this->report->getType(), $moduleClassName); }
/** * @param $moduleClassName * @return bool */ public static function canCurrentUserCanAccessModule($moduleClassName) { assert('is_string($moduleClassName)'); if ($moduleClassName::getStateMetadataAdapterClassName() != null) { $reportRules = ReportRules::makeByModuleClassName($moduleClassName); return $reportRules->canUserAccessModuleInAVariableState(Yii::app()->user->userModel); } else { return RightsUtil::canUserAccessModule($moduleClassName, Yii::app()->user->userModel); } }
/** * @param $modelClassName * @param array $attributeIndexes * @param null $attributeIndexPrefix * @throws PartialRightsForReportSecurityException if the current user is lacking rights to at least one of the * states. */ public static function resolveAttributeIndexes($modelClassName, &$attributeIndexes, $attributeIndexPrefix = null) { assert('is_string($modelClassName)'); assert('is_string($attributeIndexPrefix) || $attributeIndexPrefix == null'); $moduleClassName = $modelClassName::getModuleClassName(); if (null != ($stateMetadataAdapterClassName = $moduleClassName::getStateMetadataAdapterClassName())) { $reportRules = ReportRules::makeByModuleClassName($moduleClassName); $stateAdapterClassName = $reportRules->resolveStateAdapterUserHasAccessTo(Yii::app()->user->userModel); if ($stateAdapterClassName !== null && $stateAdapterClassName !== false) { $stateAttributeName = $stateAdapterClassName::getStateAttributeName(); $stateAdapter = new $stateAdapterClassName(array('clauses' => array(), 'structure' => '')); $attributeIndexes[$attributeIndexPrefix] = array($stateAttributeName, $stateAdapter->getStateIds()); } elseif ($stateAdapterClassName === false) { throw new PartialRightsForReportSecurityException(); } } }
/** * @param $moduleClassName * @return Rules based object */ protected function resolveMergeTagsRulesByModuleClassName($moduleClassName) { if ($moduleClassName == 'UsersModule') { return new UsersMergeTagsRules(); } else { return ReportRules::makeByModuleClassName($moduleClassName); } }
/** * Based on the current user, return the reportable modules and their display labels. Only include modules * that the user has a right to access. * @return array of module class names and display labels. */ public static function getReportableModulesAndLabelsForCurrentUser() { $moduleClassNamesAndLabels = array(); $modules = Module::getModuleObjects(); foreach (self::getReportableModulesClassNamesCurrentUserHasAccessTo() as $moduleClassName) { if ($moduleClassName::getStateMetadataAdapterClassName() != null) { $reportRules = ReportRules::makeByModuleClassName($moduleClassName); $label = $reportRules->getVariableStateModuleLabel(Yii::app()->user->userModel); } else { $label = $moduleClassName::getModuleLabelByTypeAndLanguage('Plural'); } if ($label != null) { $moduleClassNamesAndLabels[$moduleClassName] = $label; } } return $moduleClassNamesAndLabels; }
/** * @param string $moduleClassName * @param string $modelClassName * @param string $reportType * @return ModelRelationsAndAttributesToReportAdapter * @throws NotSupportedException if the reportType is invalid or null */ public static function make($moduleClassName, $modelClassName, $reportType) { assert('is_string($moduleClassName)'); assert('is_string($modelClassName)'); assert('is_string($reportType)'); if (!isset(self::$adaptersByModelClassNameAndType[$modelClassName . $reportType])) { $rules = ReportRules::makeByModuleClassName($moduleClassName); $model = new $modelClassName(false); if ($reportType == Report::TYPE_ROWS_AND_COLUMNS) { $adapter = new ModelRelationsAndAttributesToRowsAndColumnsReportAdapter($model, $rules, $reportType, $moduleClassName); } elseif ($reportType == Report::TYPE_SUMMATION) { $adapter = new ModelRelationsAndAttributesToSummationReportAdapter($model, $rules, $reportType, $moduleClassName); } elseif ($reportType == Report::TYPE_MATRIX) { $adapter = new ModelRelationsAndAttributesToMatrixReportAdapter($model, $rules, $reportType, $moduleClassName); } else { throw new NotSupportedException(); } self::$adaptersByModelClassNameAndType[$modelClassName . $reportType] = $adapter; } return self::$adaptersByModelClassNameAndType[$modelClassName . $reportType]; }