/**
  * Resolves for a given component whether the user has necessary rights to access the component information.
  * An example is if a component is account's opportunities and the current user cannot access the opportunities
  * module.
  * @param ComponentForReportForm $componentForm
  * @return bool
  */
 protected static function canCurrentUserAccessComponent(ComponentForReportForm $componentForm)
 {
     $modelClassName = $componentForm->getModelClassName();
     $moduleClassName = $componentForm->getModuleClassName();
     if (!$componentForm->hasRelatedData()) {
         return self::canCurrentUserCanAccessModule($moduleClassName);
     } else {
         foreach ($componentForm->attributeAndRelationData as $relationOrAttribute) {
             if (!self::canCurrentUserCanAccessModule($moduleClassName)) {
                 return false;
             }
             $modelToReportAdapter = ModelRelationsAndAttributesToReportAdapter::make($moduleClassName, $modelClassName, $componentForm->getReportType());
             if ($modelToReportAdapter->isReportedOnAsARelation($relationOrAttribute)) {
                 $modelClassName = $modelToReportAdapter->getRelationModelClassName($relationOrAttribute);
                 $moduleClassName = $modelToReportAdapter->getRelationModuleClassName($relationOrAttribute);
             }
         }
         return true;
     }
 }
 /**
  * @see resolveAttributeIndexesByComponents
  * @param ComponentForReportForm $componentForm
  * @return array
  */
 protected static function resolveAttributeIndexesByComponent(ComponentForReportForm $componentForm)
 {
     $attributeIndexes = array();
     $modelClassName = $componentForm->getModelClassName();
     $moduleClassName = $componentForm->getModuleClassName();
     if (!$componentForm->hasRelatedData()) {
         static::resolveAttributeIndexes($modelClassName, $attributeIndexes);
     } else {
         $attributeIndexPrefix = null;
         foreach ($componentForm->attributeAndRelationData as $relationOrAttribute) {
             static::resolveAttributeIndexes($modelClassName, $attributeIndexes, $attributeIndexPrefix);
             $modelToReportAdapter = ModelRelationsAndAttributesToReportAdapter::make($moduleClassName, $modelClassName, $componentForm->getReportType());
             if ($modelToReportAdapter->isReportedOnAsARelation($relationOrAttribute)) {
                 $modelClassName = $modelToReportAdapter->getRelationModelClassName($relationOrAttribute);
                 $moduleClassName = $modelToReportAdapter->getRelationModuleClassName($relationOrAttribute);
                 $attributeIndexPrefix = $attributeIndexPrefix . $relationOrAttribute . FormModelUtil::RELATION_DELIMITER;
             }
         }
     }
     return $attributeIndexes;
 }