diff --git a/plugins/DBStats/Controller.php b/plugins/DBStats/Controller.php index 2e2a38c9e616f1fd6eb432d11199efdb253689e8..430b2126efc4eca30afb854f0e7d1498234a6d0f 100644 --- a/plugins/DBStats/Controller.php +++ b/plugins/DBStats/Controller.php @@ -53,21 +53,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin public function getDatabaseUsageSummary($fetch = false) { Piwik::checkUserIsSuperUser(); - - $view = $this->getDataTableView(__FUNCTION__, $viewType = 'graphPie', $orderDir = 'desc', - $addPercentColumn = true); - $view->disableOffsetInformationAndPaginationControls(); - - if ($view instanceof Piwik_ViewDataTable_GenerateGraphHTML) { - $view->showAllTicks(); - } - - // translate the labels themselves - $translateSummaryLabel = array($this, 'translateSummarylabel'); - $view->queueFilter('ColumnCallbackReplace', array(array('label'), $translateSummaryLabel), - $runBeforeGenericFilters = true); - - return $this->renderView($view, $fetch); + return Piwik_ViewDataTable::render($this->pluginName, __FUNCTION__, $fetch); } /** @@ -81,10 +67,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin public function getTrackerDataSummary($fetch = false) { Piwik::checkUserIsSuperUser(); - - $view = $this->getDataTableView(__FUNCTION__); - $view->disableOffsetInformationAndPaginationControls(); - return $this->renderView($view, $fetch); + return Piwik_ViewDataTable::render($this->pluginName, __FUNCTION__, $fetch); } /** @@ -98,11 +81,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin public function getMetricDataSummary($fetch = false) { Piwik::checkUserIsSuperUser(); - $view = $this->getDataTableView(__FUNCTION__, $viewType = 'table', $orderDir = 'desc'); - $view->addRelatedReports(Piwik_Translate('DBStats_MetricTables'), array( - 'DBStats.getMetricDataSummaryByYear' => Piwik_Translate('DBStats_MetricDataByYear') - )); - return $this->renderView($view, $fetch); + return Piwik_ViewDataTable::render($this->pluginName, __FUNCTION__, $fetch); } /** @@ -116,12 +95,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin public function getMetricDataSummaryByYear($fetch = false) { Piwik::checkUserIsSuperUser(); - $view = $this->getDataTableView(__FUNCTION__, $viewType = 'table', $orderDir = 'desc', - $addPercentColumn = false, $labelKey = 'CoreHome_PeriodYear'); - $view->addRelatedReports(Piwik_Translate('DBStats_MetricDataByYear'), array( - 'DBStats.getMetricDataSummary' => Piwik_Translate('DBStats_MetricTables') - )); - return $this->renderView($view, $fetch); + return Piwik_ViewDataTable::render($this->pluginName, __FUNCTION__, $fetch); } /** @@ -135,11 +109,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin public function getReportDataSummary($fetch = false) { Piwik::checkUserIsSuperUser(); - $view = $this->getDataTableView(__FUNCTION__, $viewType = 'table', $orderDir = 'desc'); - $view->addRelatedReports(Piwik_Translate('DBStats_ReportTables'), array( - 'DBStats.getReportDataSummaryByYear' => Piwik_Translate('DBStats_ReportDataByYear') - )); - return $this->renderView($view, $fetch); + return Piwik_ViewDataTable::render($this->pluginName, __FUNCTION__, $fetch); } /** @@ -153,12 +123,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin public function getReportDataSummaryByYear($fetch = false) { Piwik::checkUserIsSuperUser(); - $view = $this->getDataTableView(__FUNCTION__, $viewType = 'table', $orderDir = 'desc', - $addPercentColumn = false, $labelKey = 'CoreHome_PeriodYear'); - $view->addRelatedReports(Piwik_Translate('DBStats_ReportDataByYear'), array( - 'DBStats.getReportDataSummary' => Piwik_Translate('DBStats_ReportTables') - )); - return $this->renderView($view, $fetch); + return Piwik_ViewDataTable::render($this->pluginName, __FUNCTION__, $fetch); } /** @@ -174,18 +139,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin public function getIndividualReportsSummary($fetch = false) { Piwik::checkUserIsSuperUser(); - $view = $this->getDataTableView(__FUNCTION__, $viewType = 'table', $orderDir = 'asc', - $addPercentColumn = false, $labelKey = 'General_Report', - $sizeColumns = array('estimated_size')); - - // this report table has some extra columns that shouldn't be shown - if ($view instanceof Piwik_ViewDataTable_HtmlTable) { - $view->setColumnsToDisplay(array('label', 'row_count', 'estimated_size')); - } - - $this->setIndividualSummaryFooterMessage($view); - - return $this->renderView($view, $fetch); + return Piwik_ViewDataTable::render($this->pluginName, __FUNCTION__, $fetch); } /** @@ -201,13 +155,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin public function getIndividualMetricsSummary($fetch = false) { Piwik::checkUserIsSuperUser(); - $view = $this->getDataTableView(__FUNCTION__, $viewType = 'table', $orderDir = 'asc', - $addPercentColumn = false, $labelKey = 'General_Metric', - $sizeColumns = array('estimated_size')); - - $this->setIndividualSummaryFooterMessage($view); - - return $this->renderView($view, $fetch); + return Piwik_ViewDataTable::render($this->pluginName, __FUNCTION__, $fetch); } /** @@ -224,152 +172,6 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin public function getAdminDataSummary($fetch = false) { Piwik::checkUserIsSuperUser(); - $view = $this->getDataTableView(__FUNCTION__, $viewType = 'table'); - $view->disableOffsetInformationAndPaginationControls(); - return $this->renderView($view, $fetch); - } - - /** - * Utility function that creates and prepares a ViewDataTable for this plugin. - */ - private function getDataTableView($function, $viewType = 'table', $orderDir = 'asc', $addPercentColumn = false, - $labelKey = 'DBStats_Table', $sizeColumns = array('data_size', 'index_size'), - $limit = 25) - { - $columnTranslations = array( - 'label' => Piwik_Translate($labelKey), - 'year' => Piwik_Translate('CoreHome_PeriodYear'), - 'data_size' => Piwik_Translate('DBStats_DataSize'), - 'index_size' => Piwik_Translate('DBStats_IndexSize'), - 'total_size' => Piwik_Translate('DBStats_TotalSize'), - 'row_count' => Piwik_Translate('DBStats_RowCount'), - 'percent_total' => '% ' . Piwik_Translate('DBStats_DBSize'), - 'estimated_size' => Piwik_Translate('DBStats_EstimatedSize') - ); - - $view = Piwik_ViewDataTable::factory($viewType); - $view->init($this->pluginName, $function, "DBStats.$function"); - $view->setSortedColumn('label', $orderDir); - $view->setLimit($limit); - $view->setHighlightSummaryRow(true); - $view->disableSearchBox(); - $view->disableExcludeLowPopulation(); - $view->disableTagCloud(); - $view->disableShowAllColumns(); - $view->alwaysShowSummaryRow(); - - // translate columns - foreach ($columnTranslations as $columnName => $translation) { - $view->setColumnTranslation($columnName, $translation); - } - - // add total_size column (if necessary columns are present) - if (in_array('data_size', $sizeColumns) && in_array('index_size', $sizeColumns)) { - $getTotalTableSize = array($this, 'getTotalTableSize'); - $view->queueFilter('ColumnCallbackAddColumn', - array(array('data_size', 'index_size'), 'total_size', $getTotalTableSize), - $runBeforeGenericFilters = true); - - $sizeColumns[] = 'total_size'; - } - - $runPrettySizeFilterBeforeGeneric = false; - $fixedMemoryUnit = false; - if ($view instanceof Piwik_ViewDataTable_HtmlTable) { // if displaying a table - $view->disableRowEvolution(); - - // add summary row only if displaying a table - $view->queueFilter('AddSummaryRow', array(0, Piwik_Translate('General_Total'), 'label', false), - $runBeforeGenericFilters = true); - - // add other filters - if ($addPercentColumn && in_array('total_size', $sizeColumns)) { - $view->queueFilter('ColumnCallbackAddColumnPercentage', - array('percent_total', 'total_size', 'total_size', $quotientPrecision = 0, $shouldSkipRows = false, - $getDivisorFromSummaryRow = true), - $runBeforeGenericFilters = true); - $view->setSortedColumn('percent_total', $orderDir); - } - } else if ($view instanceof Piwik_ViewDataTable_GenerateGraphHtml) { // if displaying a graph - if (in_array('total_size', $sizeColumns)) { - $view->setColumnsToDisplay(array('label', 'total_size')); - - // when displaying a graph, we force sizes to be shown as the same unit so axis labels - // will be readable. NOTE: The unit should depend on the smallest value of the data table, - // however there's no way to know this information, short of creating a custom filter. For - // now, just assume KB. - $fixedMemoryUnit = 'K'; - $view->setAxisYUnit(' K'); - - $view->setSortedColumn('total_size', 'desc'); - - $runPrettySizeFilterBeforeGeneric = true; - } else { - $view->setColumnsToDisplay(array('label', 'row_count')); - $view->setAxisYUnit(' ' . Piwik_Translate('General_Rows')); - - $view->setSortedColumn('row_count', 'desc'); - } - } - - $getPrettySize = array('Piwik', 'getPrettySizeFromBytes'); - $params = $fixedMemoryUnit === false ? array() : array($fixedMemoryUnit); - $view->queueFilter( - 'ColumnCallbackReplace', array($sizeColumns, $getPrettySize, $params), $runPrettySizeFilterBeforeGeneric); - - // jqPlot will display as, well, ' ', so don't replace the spaces when rendering as a graph - if (!($view instanceof Piwik_ViewDataTable_GenerateGraphHtml)) { - $replaceSpaces = array($this, 'replaceColumnSpaces'); - $view->queueFilter('ColumnCallbackReplace', array($sizeColumns, $replaceSpaces)); - } - - $getPrettyNumber = array('Piwik', 'getPrettyNumber'); - $view->queueFilter('ColumnCallbackReplace', array(array('row_count'), $getPrettyNumber)); - - return $view; - } - - /** - * Replaces spaces w/ for correct HTML output. - */ - public function replaceColumnSpaces($value) - { - return str_replace(' ', ' ', $value); - } - - /** - * Row callback function that calculates a tables total size. - */ - public function getTotalTableSize($dataSize, $indexSize) - { - return $dataSize + $indexSize; - } - - /** - * Column callback used to translate the column values in the database usage summary table. - */ - public function translateSummarylabel($value) - { - static $valueToTranslationStr = array( - 'tracker_data' => 'DBStats_TrackerTables', - 'report_data' => 'DBStats_ReportTables', - 'metric_data' => 'DBStats_MetricTables', - 'other_data' => 'DBStats_OtherTables' - ); - - return isset($valueToTranslationStr[$value]) - ? Piwik_Translate($valueToTranslationStr[$value]) - : $value; - } - - /** - * Sets the footer message for the Individual...Summary reports. - */ - private function setIndividualSummaryFooterMessage($view) - { - $lastGenerated = Piwik_DBStats::getDateOfLastCachingRun(); - if ($lastGenerated !== false) { - $view->setFooterMessage(Piwik_Translate('Mobile_LastUpdated', $lastGenerated)); - } + return Piwik_ViewDataTable::render($this->pluginName, __FUNCTION__, $fetch); } } diff --git a/plugins/DBStats/DBStats.php b/plugins/DBStats/DBStats.php index 69a24f4021705abc06540ae40ac9a7212cb723d7..3c99d5564a1740dffd96538867a888c6f3ed6e4e 100644 --- a/plugins/DBStats/DBStats.php +++ b/plugins/DBStats/DBStats.php @@ -23,9 +23,10 @@ class Piwik_DBStats extends Piwik_Plugin public function getListHooksRegistered() { return array( - 'AssetManager.getCssFiles' => 'getCssFiles', - 'AdminMenu.add' => 'addMenu', - 'TaskScheduler.getScheduledTasks' => 'getScheduledTasks', + 'AssetManager.getCssFiles' => 'getCssFiles', + 'AdminMenu.add' => 'addMenu', + 'TaskScheduler.getScheduledTasks' => 'getScheduledTasks', + 'ViewDataTable.getReportDisplayProperties' => 'getReportDisplayProperties', ); } @@ -76,4 +77,281 @@ class Piwik_DBStats extends Piwik_Plugin { return Piwik_GetOption(self::TIME_OF_LAST_TASK_RUN_OPTION); } -} + + public function getReportDisplayProperties(&$properties) + { + $properties['DBStats.getDatabaseUsageSummary'] = $this->getDisplayPropertiesForGetDatabaseUsageSummary(); + $properties['DBStats.getTrackerDataSummary'] = $this->getDisplayPropertiesForGetTrackerDataSummary(); + $properties['DBStats.getMetricDataSummary'] = $this->getDisplayPropertiesForGetMetricDataSummary(); + $properties['DBStats.getMetricDataSummaryByYear'] = $this->getDisplayPropertiesForGetMetricDataSummaryByYear(); + $properties['DBStats.getReportDataSummary'] = $this->getDisplayPropertiesForGetReportDataSummary(); + $properties['DBStats.getReportDataSummaryByYear'] = $this->getDisplayPropertiesForGetReportDataSummaryByYear(); + $properties['DBStats.getIndividualReportsSummary'] = $this->getDisplayPropertiesForGetIndividualReportsSummary(); + $properties['DBStats.getIndividualMetricsSummary'] = $this->getDisplayPropertiesForGetIndividualMetricsSummary(); + $properties['DBStats.getAdminDataSummary'] = $this->getDisplayPropertiesForGetAdminDataSummary(); + } + + private function getDisplayPropertiesForGetDatabaseUsageSummary() + { + $result = array('default_view_type' => 'graphPie'); + $this->addBaseDisplayProperties($result); + $this->addPresentationFilters($result, $addTotalSizeColumn = true, $addPercentColumn = true); + + $result['show_offset_information'] = false; + $result['show_pagination_control'] = false; + $result['show_all_ticks'] = true; + + // translate the labels themselves + $valueToTranslationStr = array( + 'tracker_data' => 'DBStats_TrackerTables', + 'report_data' => 'DBStats_ReportTables', + 'metric_data' => 'DBStats_MetricTables', + 'other_data' => 'DBStats_OtherTables' + ); + + $translateSummaryLabel = function ($value) use ($valueToTranslationStr) { + return isset($valueToTranslationStr[$value]) + ? Piwik_Translate($valueToTranslationStr[$value]) + : $value; + }; + + $result['filters'][] = array('ColumnCallbackReplace', array('label', $translateSummaryLabel), $isPriority = true); + + return $result; + } + + private function getDisplayPropertiesForGetTrackerDataSummary() + { + $result = array(); + $this->addBaseDisplayProperties($result); + $this->addPresentationFilters($result); + + $result['filter_sort_order'] = 'asc'; + $result['show_offset_information'] = false; + $result['show_pagination_control'] = false; + + return $result; + } + + private function getDisplayPropertiesForGetMetricDataSummary() + { + $result = array(); + $this->addBaseDisplayProperties($result); + $this->addPresentationFilters($result); + + $result['title'] = Piwik_Translate('DBStats_MetricTables'); + $result['relatedReports'] = array( + 'DBStats.getMetricDataSummaryByYear' => Piwik_Translate('DBStats_MetricDataByYear') + ); + + return $result; + } + + private function getDisplayPropertiesForGetMetricDataSummaryByYear() + { + $result = array(); + $this->addBaseDisplayProperties($result); + $this->addPresentationFilters($result); + + $result['translations']['label'] = Piwik_Translate('CoreHome_PeriodYear'); + $result['title'] = Piwik_Translate('DBStats_MetricDataByYear'); + $result['relatedReports'] = array( + 'DBStats.getMetricDataSummary' => Piwik_Translate('DBStats_MetricTables') + ); + + return $result; + } + + private function getDisplayPropertiesForGetReportDataSummary() + { + $result = array(); + $this->addBaseDisplayProperties($result); + $this->addPresentationFilters($result); + + $result['title'] = Piwik_Translate('DBStats_ReportTables'); + $result['relatedReports'] = array( + 'DBStats.getReportDataSummaryByYear' => Piwik_Translate('DBStats_ReportDataByYear') + ); + + return $result; + } + + private function getDisplayPropertiesForGetReportDataSummaryByYear() + { + $result = array(); + $this->addBaseDisplayProperties($result); + $this->addPresentationFilters($result); + + $result['translations']['label'] = Piwik_Translate('CoreHome_PeriodYear'); + $result['title'] = Piwik_Translate('DBStats_ReportDataByYear'); + $result['relatedReports'] = array( + 'DBStats.getReportDataSummary' => Piwik_Translate('DBStats_ReportTables') + ); + + return $result; + } + + private function getDisplayPropertiesForGetIndividualReportsSummary() + { + $result = array(); + $this->addBaseDisplayProperties($result); + $viewDataTable = $this->addPresentationFilters($result, $addTotalSizeColumn = false, $addPercentColumn = false, + $sizeColumns = array('estimated_size')); + + $result['filter_sort_order'] = 'asc'; + $result['translations']['label'] = Piwik_Translate('General_Report'); + + // this report table has some extra columns that shouldn't be shown + if ($viewDataTable == 'table') { + $result['columns_to_display'] = array('label', 'row_count', 'estimated_size'); + } + + $this->setIndividualSummaryFooterMessage($result); + + return $result; + } + + private function getDisplayPropertiesForGetIndividualMetricsSummary() + { + $result = array(); + $this->addBaseDisplayProperties($result); + $this->addPresentationFilters($result, $addTotalSizeColumn = false, $addPercentColumn = false, + $sizeColumns = array('estimated_size')); + + $result['filter_sort_order'] = 'asc'; + $result['translations']['label'] = Piwik_Translate('General_Metric'); + + $this->setIndividualSummaryFooterMessage($result); + + return $result; + } + + private function getDisplayPropertiesForGetAdminDataSummary() + { + $result = array(); + $this->addBaseDisplayProperties($result); + $this->addPresentationFilters($result); + + $result['filter_sort_order'] = 'asc'; + $result['show_offset_information'] = false; + $result['show_pagination_control'] = false; + + return $result; + } + + private function addBaseDisplayProperties(&$properties) + { + $properties['filter_sort_column'] = 'label'; + $properties['filter_sort_order'] = 'desc'; + $properties['filter_limit'] = 25; + $properties['highlight_summary_row'] = true; + $properties['show_search'] = false; + $properties['show_exclude_low_population'] = false; + $properties['show_tag_cloud'] = false; + $properties['show_table_all_columns'] = false; + $properties['keep_summary_row'] = true; + $properties['disable_row_evolution'] = true; + $properties['translations'] = array( + 'label' => Piwik_Translate('DBStats_Table'), + 'year' => Piwik_Translate('CoreHome_PeriodYear'), + 'data_size' => Piwik_Translate('DBStats_DataSize'), + 'index_size' => Piwik_Translate('DBStats_IndexSize'), + 'total_size' => Piwik_Translate('DBStats_TotalSize'), + 'row_count' => Piwik_Translate('DBStats_RowCount'), + 'percent_total' => '% ' . Piwik_Translate('DBStats_DBSize'), + 'estimated_size' => Piwik_Translate('DBStats_EstimatedSize') + ); + } + + private function addPresentationFilters(&$properties, $addTotalSizeColumn = true, $addPercentColumn = false, + $sizeColumns = array('data_size', 'index_size')) + { + // add total_size column + if ($addTotalSizeColumn) { + $getTotalTableSize = function ($dataSize, $indexSize) { + return $dataSize + $indexSize; + }; + + $properties['filters'][] = array('ColumnCallbackAddColumn', + array(array('data_size', 'index_size'), 'total_size', $getTotalTableSize), $isPriority = true); + + $sizeColumns[] = 'total_size'; + } + + $runPrettySizeFilterBeforeGeneric = false; + + $viewDataTable = empty($properties['default_view_type']) ? 'table' : $properties['default_view_type']; + $viewDataTable = Piwik_Common::getRequestVar('viewDataTable', $viewDataTable); + + if ($viewDataTable == 'table') { + // add summary row only if displaying a table + $properties['filters'][] = array( + 'AddSummaryRow', array(0, Piwik_Translate('General_Total'), 'label', false), $isPriority = true); + + // add percentage column if desired + if ($addPercentColumn + && $addTotalSizeColumn + ) { + $properties['filters'][] = array('ColumnCallbackAddColumnPercentage', + array('percent_total', 'total_size', 'total_size', $quotientPrecision = 0, + $shouldSkipRows = false, $getDivisorFromSummaryRow = true), + $isPriority = true + ); + + $properties['filter_sort_column'] = 'percent_total'; + } + } else if (strpos($viewDataTable, 'graph') === 0) { + if ($addTotalSizeColumn) { + $properties['columns_to_display'] = array('label', 'total_size'); + + // when displaying a graph, we force sizes to be shown as the same unit so axis labels + // will be readable. NOTE: The unit should depend on the smallest value of the data table, + // however there's no way to know this information, short of creating a custom filter. For + // now, just assume KB. + $fixedMemoryUnit = 'K'; + $properties['y_axis_unit'] = ' K'; + + $properties['filter_sort_column'] = 'total_size'; + $properties['filter_sort_order'] = 'desc'; + + $runPrettySizeFilterBeforeGeneric = true; + } else { + $properties['columns_to_display'] = array('label', 'row_count'); + $properties['y_axis_unit'] = ' ' . Piwik_Translate('General_Rows'); + + $properties['filter_sort_column'] = 'row_count'; + $properties['filter_sort_order'] = 'desc'; + } + } + + $getPrettySize = array('Piwik', 'getPrettySizeFromBytes'); + $params = !isset($fixedMemoryUnit) ? array() : array($fixedMemoryUnit); + $properties['filters'][] = array( + 'ColumnCallbackReplace', array($sizeColumns, $getPrettySize, $params), $runPrettySizeFilterBeforeGeneric); + + // jqPlot will display as, well, ' ', so don't replace the spaces when rendering as a graph + if ($viewDataTable == 'table') { + $replaceSpaces = function ($value) { + return str_replace(' ', ' ', $value); + }; + + $properties['filters'][] = array('ColumnCallbackReplace', array($sizeColumns, $replaceSpaces)); + } + + $getPrettyNumber = array('Piwik', 'getPrettyNumber'); + $properties['filters'][] = array('ColumnCallbackReplace', array('row_count', $getPrettyNumber)); + + return $viewDataTable; + } + + /** + * Sets the footer message for the Individual...Summary reports. + */ + private function setIndividualSummaryFooterMessage($result) + { + $lastGenerated = self::getDateOfLastCachingRun(); + if ($lastGenerated !== false) { + $result['show_footer_message'] = Piwik_Translate('Mobile_LastUpdated', $lastGenerated); + } + } +} \ No newline at end of file