/**
  * 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);
     }
 }
Exemplo n.º 5
0
 /**
  * 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];
 }