/** * @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]); } }
/** * @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); } }
/** * 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; }