public function actionApplyRuntimeFilters($id) { $postData = PostUtil::getData(); $savedReport = SavedReport::getById((int) $id); ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName); ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport); $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); $wizardFormClassName = ReportToWizardFormAdapter::getFormClassNameByType($report->getType()); if (!isset($postData[$wizardFormClassName])) { throw new NotSupportedException(); } DataToReportUtil::resolveFilters($postData[$wizardFormClassName], $report, true); if (isset($postData['ajax']) && $postData['ajax'] == 'edit-form') { $adapter = new ReportToWizardFormAdapter($report); $reportWizardForm = $adapter->makeFormByType(); $reportWizardForm->setScenario(reportWizardForm::FILTERS_VALIDATION_SCENARIO); if (!$reportWizardForm->validate()) { $errorData = array(); foreach ($reportWizardForm->getErrors() as $attribute => $errors) { $errorData[ZurmoHtml::activeId($reportWizardForm, $attribute)] = $errors; } echo CJSON::encode($errorData); Yii::app()->end(0, false); } } $filtersData = ArrayUtil::getArrayValue($postData[$wizardFormClassName], ComponentForReportForm::TYPE_FILTERS); $sanitizedFiltersData = DataToReportUtil::sanitizeFiltersData($report->getModuleClassName(), $report->getType(), $filtersData); $stickyData = array(ComponentForReportForm::TYPE_FILTERS => $sanitizedFiltersData); StickyReportUtil::setDataByKeyAndData($report->getId(), $stickyData); }
public function testSanitizeFiltersData() { //test specifically for date/dateTime conversion from local to db format. $filtersData = array(); $filtersData[0] = array('attributeIndexOrDerivedType' => 'date', 'value' => '2/24/2012'); $filtersData[1] = array('attributeIndexOrDerivedType' => 'dateTime', 'value' => '2/25/2012'); $filtersData[2] = array('attributeIndexOrDerivedType' => 'date', 'value' => '2/24/2012', 'secondValue' => '2/28/2012'); $sanitizedFilterData = DataToReportUtil::sanitizeFiltersData('ReportsTestModule', Report::TYPE_ROWS_AND_COLUMNS, $filtersData); $this->assertEquals('2012-02-24', $sanitizedFilterData[0]['value']); $this->assertEquals('2012-02-25', $sanitizedFilterData[1]['value']); $this->assertEquals('2012-02-24', $sanitizedFilterData[2]['value']); $this->assertEquals('2012-02-28', $sanitizedFilterData[2]['secondValue']); }
/** * Populate filters data in model. * * @param SavedCalendar $model * @param array $data */ public static function populateFiltersDataInModel(SavedCalendar $model, $data) { $report = SavedCalendarToReportAdapter::makeReportBySavedCalendar($model); DataToReportUtil::resolveFiltersStructure($data, $report); DataToReportUtil::resolveFilters($data, $report); if (count($filtersData = ArrayUtil::getArrayValue($data, ComponentForReportForm::TYPE_FILTERS)) > 0) { $sanitizedFiltersData = DataToReportUtil::sanitizeFiltersData($report->getModuleClassName(), $report->getType(), $filtersData); $unserializedData = array(ComponentForReportForm::TYPE_FILTERS => $sanitizedFiltersData, 'filtersStructure' => $report->getFiltersStructure()); $model->serializedData = serialize($unserializedData); } else { $model->serializedData = null; } }