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']);
 }
Esempio n. 3
0
 /**
  * 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;
     }
 }