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