Пример #1
0
 /**
  * @copydoc Form::fetch()
  */
 function fetch($request)
 {
     $router = $request->getRouter();
     $context = $router->getContext($request);
     $columns = $this->_columns;
     $statsHelper = new StatisticsHelper();
     $availableMetricTypeStrings = $statsHelper->getAllMetricTypeStrings();
     if (count($availableMetricTypeStrings) > 1) {
         $this->setData('metricTypeOptions', $availableMetricTypeStrings);
     }
     $reportTemplateOptions = array();
     $reportTemplates = $this->_defaultReportTemplates;
     foreach ($reportTemplates as $reportTemplate) {
         $reportTemplateOptions[] = __($reportTemplate['nameLocaleKey']);
     }
     if (!empty($reportTemplateOptions)) {
         $this->setData('reportTemplateOptions', $reportTemplateOptions);
     }
     $reportTemplateIndex = (int) $this->_reportTemplateIndex;
     if (!is_null($reportTemplateIndex) && isset($reportTemplates[$reportTemplateIndex])) {
         $reportTemplate = $reportTemplates[$reportTemplateIndex];
         $reportColumns = $reportTemplate['columns'];
         if (!is_array($reportColumns)) {
             continue;
         }
         $this->setData('columns', $reportColumns);
         $this->setData('reportTemplate', $reportTemplateIndex);
         if (isset($reportTemplate['aggregationColumns'])) {
             $aggreationColumns = $reportTemplate['aggregationColumns'];
             if (!is_array($aggreationColumns)) {
                 continue;
             }
             $aggreationOptions = $selectedAggregationOptions = array();
             foreach ($aggreationColumns as $column) {
                 $columnName = $statsHelper->getColumnNames($column);
                 if (!$columnName) {
                     continue;
                 }
                 $aggreationOptions[$column] = $columnName;
             }
             $this->setData('aggregationOptions', $aggreationOptions);
             $this->setData('selectedAggregationOptions', array_intersect($aggreationColumns, $reportColumns));
         }
         if (isset($reportTemplate['filter']) && is_array($reportTemplate['filter'])) {
             foreach ($reportTemplate['filter'] as $dimension => $filter) {
                 switch ($dimension) {
                     case STATISTICS_DIMENSION_ASSOC_TYPE:
                         $this->setData('objectTypes', $filter);
                         break;
                 }
             }
         }
     }
     $timeFilterSelectedOption = $request->getUserVar('timeFilterOption');
     if (is_null($timeFilterSelectedOption)) {
         $timeFilterSelectedOption = TIME_FILTER_OPTION_CURRENT_MONTH;
     }
     switch ($timeFilterSelectedOption) {
         case TIME_FILTER_OPTION_YESTERDAY:
             $this->setData('yesterday', true);
             break;
         case TIME_FILTER_OPTION_CURRENT_MONTH:
         default:
             $this->setData('currentMonth', true);
             break;
         case TIME_FILTER_OPTION_RANGE_DAY:
             $this->setData('byDay', true);
             break;
         case TIME_FILTER_OPTION_RANGE_MONTH:
             $this->setData('byMonth', true);
             break;
     }
     $startTime = $request->getUserDateVar('dateStart');
     $endTime = $request->getUserDateVar('dateEnd');
     if (!$startTime) {
         $startTime = time();
     }
     if (!$endTime) {
         $endTime = time();
     }
     $this->setData('dateStart', $startTime);
     $this->setData('dateEnd', $endTime);
     if (isset($columns[STATISTICS_DIMENSION_COUNTRY])) {
         $geoLocationTool = $statsHelper->getGeoLocationTool();
         if ($geoLocationTool) {
             $countryCodes = $geoLocationTool->getAllCountryCodes();
             if (!$countryCodes) {
                 $countryCodes = array();
             }
             $countryCodes = array_combine($countryCodes, $countryCodes);
             $this->setData('countriesOptions', $countryCodes);
         }
         $this->setData('showRegionInput', isset($columns[STATISTICS_DIMENSION_REGION]));
         $this->setData('showCityInput', isset($columns[STATISTICS_DIMENSION_CITY]));
     }
     $this->setData('showMonthInputs', isset($columns[STATISTICS_DIMENSION_MONTH]));
     $this->setData('showDayInputs', isset($columns[STATISTICS_DIMENSION_DAY]));
     $orderColumns = $this->_columns;
     $nonOrderableColumns = array(STATISTICS_DIMENSION_ASSOC_TYPE, STATISTICS_DIMENSION_SUBMISSION_ID, STATISTICS_DIMENSION_CONTEXT_ID, STATISTICS_DIMENSION_REGION, STATISTICS_DIMENSION_FILE_TYPE, STATISTICS_DIMENSION_METRIC_TYPE);
     foreach ($nonOrderableColumns as $column) {
         unset($orderColumns[$column]);
     }
     $this->setData('metricType', $this->_metricType);
     $this->setData('objectTypesOptions', $this->_objects);
     if ($this->_fileTypes) {
         $this->setData('fileTypesOptions', $this->_fileTypes);
     }
     $this->setData('fileAssocTypes', $this->getFileAssocTypes());
     $this->setData('orderColumnsOptions', $orderColumns);
     $this->setData('orderDirectionsOptions', array(STATISTICS_ORDER_ASC => __('manager.statistics.reports.orderDir.asc'), STATISTICS_ORDER_DESC => __('manager.statistics.reports.orderDir.desc')));
     $columnsOptions = $this->_columns;
     // Reports will always include this column.
     unset($columnsOptions[STATISTICS_METRIC]);
     $this->setData('columnsOptions', $columnsOptions);
     $this->setData('optionalColumns', $this->_optionalColumns);
     return parent::fetch($request);
 }