/**
  * @return string
  */
 protected function renderFiltersContent($form)
 {
     assert('$form instanceof ZurmoActiveForm');
     $content = null;
     $report = SavedCalendarToReportAdapter::makeReportBySavedCalendar($this->model);
     $adapter = new ReportToWizardFormAdapter($report);
     $reportWizardForm = $adapter->makeRowsAndColumnsWizardForm();
     $filtersForReportWizardViewClassName = static::getFiltersForReportWizardViewClassName();
     $filtersForReportWizardView = new $filtersForReportWizardViewClassName($reportWizardForm, $form, false);
     $content .= $filtersForReportWizardView->render();
     $this->registerFiltersScripts();
     $this->registerModuleClassNameChangeScript();
     $this->registerFiltersCss();
     return $content;
 }
 /**
  * @param RedBeanModel $model
  * @param array $explicitReadWriteModelPermissions
  */
 protected function afterSetAttributesDuringSave($model, $explicitReadWriteModelPermissions)
 {
     assert('$model instanceof SavedCalendar');
     $postData = PostUtil::getData();
     $wizardFormClassName = ReportToWizardFormAdapter::getFormClassNameByType(Report::TYPE_ROWS_AND_COLUMNS);
     if (isset($postData[$wizardFormClassName])) {
         CalendarUtil::populateFiltersDataInModel($model, $postData[$wizardFormClassName]);
     }
 }
 /**
  * @param Report $report
  * @param bool $isBeingCopied - whether the model is being copied to 'Save As' or not.
  * @return View
  * @throws NotSupportedException if the type provided is not valid
  */
 public static function makeViewFromReport(Report $report, $isBeingCopied = false)
 {
     assert('is_bool($isBeingCopied)');
     $type = $report->getType();
     $reportToWizardFormAdapter = new ReportToWizardFormAdapter($report);
     if ($type == Report::TYPE_ROWS_AND_COLUMNS) {
         $viewClassName = 'RowsAndColumnsReportWizardView';
         $form = $reportToWizardFormAdapter->makeRowsAndColumnsWizardForm();
     } elseif ($type == Report::TYPE_SUMMATION) {
         $viewClassName = 'SummationReportWizardView';
         $form = $reportToWizardFormAdapter->makeSummationWizardForm();
     } elseif ($type == Report::TYPE_MATRIX) {
         $viewClassName = 'MatrixReportWizardView';
         $form = $reportToWizardFormAdapter->makeMatrixWizardForm();
     } else {
         throw new NotSupportedException();
     }
     return new $viewClassName($form, $isBeingCopied);
 }
 /**
  * @return string
  */
 protected function getWizardFormClassName()
 {
     return ReportToWizardFormAdapter::getFormClassNameByType($this->params['relationModel']->getType());
 }
 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));
 }
 /**
  * Process attribute addition from tree and than renders it.
  *
  * @param string $nodeId
  * @param string $treeType
  * @param Report $report
  * @param int $rowNumber
  * @param bool $trackableStructurePosition
  */
 public static function processAttributeAdditionFromTree($nodeId, $treeType, Report $report, $rowNumber, $trackableStructurePosition)
 {
     $nodeIdWithoutTreeType = ReportRelationsAndAttributesToTreeAdapter::removeTreeTypeFromNodeId($nodeId, $treeType);
     $moduleClassName = $report->getModuleClassName();
     $modelClassName = $moduleClassName::getPrimaryModelName();
     $form = new WizardActiveForm();
     $form->id = 'edit-form';
     $form->enableAjaxValidation = true;
     //ensures error validation populates correctly
     $wizardFormClassName = ReportToWizardFormAdapter::getFormClassNameByType($report->getType());
     $model = ComponentForReportFormFactory::makeByComponentType($moduleClassName, $modelClassName, $report->getType(), $treeType);
     $form->modelClassNameForError = $wizardFormClassName;
     $attribute = ReportRelationsAndAttributesToTreeAdapter::resolveAttributeByNodeId($nodeIdWithoutTreeType);
     $model->attributeIndexOrDerivedType = ReportRelationsAndAttributesToTreeAdapter::resolveAttributeByNodeId($nodeIdWithoutTreeType);
     $inputPrefixData = ReportRelationsAndAttributesToTreeAdapter::resolveInputPrefixData($wizardFormClassName, $treeType, (int) $rowNumber);
     $adapter = new ReportAttributeToElementAdapter($inputPrefixData, $model, $form, $treeType);
     $view = new AttributeRowForReportComponentView($adapter, (int) $rowNumber, $inputPrefixData, $attribute, (bool) $trackableStructurePosition, true, $treeType);
     $content = $view->render();
     $form->renderAddAttributeErrorSettingsScript($view::getFormId());
     Yii::app()->getClientScript()->setToAjaxMode();
     Yii::app()->getClientScript()->render($content);
     echo $content;
 }
 /**
  * Override to handle report filters
  * @param SavedCalendar | ModelForm $model
  * @param string $postVariableName
  * @throws NotSupportedException();
  */
 protected function attemptToValidateAjaxFromPost($model, $postVariableName)
 {
     if (isset($_POST['ajax']) && $_POST['ajax'] == 'edit-form') {
         $postData = PostUtil::getData();
         $readyToUsePostData = ExplicitReadWriteModelPermissionsUtil::removeIfExistsFromPostData($_POST[$postVariableName]);
         $sanitizedPostdata = PostUtil::sanitizePostByDesignerTypeForSavingModel($model, $readyToUsePostData);
         $sanitizedOwnerPostData = PostUtil::sanitizePostDataToJustHavingElementForSavingModel($sanitizedPostdata, 'owner');
         $sanitizedPostDataWithoutOwner = PostUtil::removeElementFromPostDataForSavingModel($sanitizedPostdata, 'owner');
         $model->setAttributes($sanitizedPostDataWithoutOwner);
         if ($model->validate()) {
             $modelToStringValue = strval($model);
             if ($sanitizedOwnerPostData != null) {
                 $model->setAttributes($sanitizedOwnerPostData);
             }
             if ($model instanceof OwnedSecurableItem) {
                 $model->validate(array('owner'));
             }
         }
         $wizardFormClassName = ReportToWizardFormAdapter::getFormClassNameByType(Report::TYPE_ROWS_AND_COLUMNS);
         if (!isset($postData[$wizardFormClassName])) {
             throw new NotSupportedException();
         }
         $report = SavedCalendarToReportAdapter::makeReportBySavedCalendar($model);
         DataToReportUtil::resolveFiltersStructure($postData[$wizardFormClassName], $report);
         DataToReportUtil::resolveFilters($postData[$wizardFormClassName], $report);
         //This would do the filter and filter structure validation
         $reportToWizardFormAdapter = new ReportToWizardFormAdapter($report);
         $reportForm = $reportToWizardFormAdapter->makeFormByType();
         $postData['validationScenario'] = $wizardFormClassName::FILTERS_VALIDATION_SCENARIO;
         $filtersErrorData = ReportUtil::validateReportWizardForm($postData, $reportForm);
         $errorData = ZurmoActiveForm::makeErrorsDataAndResolveForOwnedModelAttributes($model);
         $errorData = array_merge($errorData, $filtersErrorData);
         echo CJSON::encode($errorData);
         Yii::app()->end(0, false);
     }
 }
Example #8
0
 /**
  * Resolve report by saved calendar post data.
  * @param string $type
  * @param int $id
  * @param array $postData
  * @return Report
  */
 public static function resolveReportBySavedCalendarPostData($type, $id = null, $postData)
 {
     assert('is_string($type)');
     assert('is_array($postData)');
     if ($id == null) {
         $report = new Report();
         $report->setType($type);
     } else {
         $savedCalendar = SavedCalendar::getById(intval($id));
         ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($savedCalendar);
         $report = SavedCalendarToReportAdapter::makeReportBySavedCalendar($savedCalendar);
     }
     if (isset($postData['SavedCalendar']) && isset($postData['SavedCalendar']['moduleClassName'])) {
         $report->setModuleClassName($postData['SavedCalendar']['moduleClassName']);
     } else {
         throw new NotSupportedException();
     }
     DataToReportUtil::resolveReportByWizardPostData($report, $postData, ReportToWizardFormAdapter::getFormClassNameByType($type));
     return $report;
 }