dataTableTemplate = 'CoreHome/templates/datatable.tpl'; $this->variablesDefault['enable_sort'] = '1'; $this->setSortedColumn('nb_visits', 'desc'); $this->setLimit(Zend_Registry::get('config')->General->datatable_default_limit); $this->handleLowPopulation(); } protected function getViewDataTableId() { return 'table'; } /** * @see Piwik_ViewDataTable::main() */ public function main() { if($this->mainAlreadyExecuted) { return; } $this->mainAlreadyExecuted = true; $this->isDataAvailable = true; try { $this->loadDataTableFromAPI(); } catch(Exception $e) { $this->isDataAvailable = false; } $this->postDataTableLoadedFromAPI(); $this->view = $this->buildView(); } /** * Hook called after the dataTable has been loaded from the API * Can be used to add, delete or modify the data freshly loaded */ protected function postDataTableLoadedFromAPI() { } /** * @return Piwik_View with all data set */ protected function buildView() { $view = new Piwik_View($this->dataTableTemplate); if(!$this->isDataAvailable) { $view->arrayDataTable = array(); } else { $columns = $this->getColumnsToDisplay(); $columnTranslations = array(); foreach($columns as $columnName) { $columnTranslations[$columnName] = $this->getColumnTranslation($columnName); } $nbColumns = count($columns); // case no data in the array we use the number of columns set to be displayed if($nbColumns == 0) { $nbColumns = count($this->columnsToDisplay); } $view->arrayDataTable = $this->getPHPArrayFromDataTable(); $view->dataTableColumns = $columns; $view->columnTranslations = $columnTranslations; $view->nbColumns = $nbColumns; $view->defaultWhenColumnValueNotDefined = '-'; } $view->javascriptVariablesToSet = $this->getJavascriptVariablesToSet(); $view->properties = $this->getViewProperties(); return $view; } protected function handleLowPopulation( $columnToApplyFilter = null) { if(Piwik_Common::getRequestVar('enable_filter_excludelowpop', '0', 'string' ) == '0') { return; } if(is_null($columnToApplyFilter)) { $columnToApplyFilter = Piwik_Archive::INDEX_NB_VISITS; } $this->setExcludeLowPopulation( $columnToApplyFilter); } /** * Returns friendly php array from the Piwik_DataTable * @see Piwik_DataTable_Renderer_Php * @return array */ protected function getPHPArrayFromDataTable() { $renderer = Piwik_DataTable_Renderer::factory('php'); $renderer->setTable($this->dataTable); $renderer->setSerialize( false ); // we get the php array from the datatable but conserving the original datatable format, // ie. rows 'columns', 'metadata' and 'idsubdatatable' $phpArray = $renderer->originalRender(); return $phpArray; } /** * Adds a column to the list of columns to be displayed * * @param string $columnName */ public function addColumnToDisplay( $columnName ) { $this->columnsToDisplay[] = $columnName; } /** */ public function disableSort() { $this->variablesDefault['enable_sort'] = 'false'; } /** * Sets the search on a table to be recursive (also searches in subtables) * Works only on Actions/Downloads/Outlinks tables. * * @return bool If the pattern for a recursive search was set in the URL */ public function setSearchRecursive() { $this->variablesDefault['search_recursive'] = true; return $this->setRecursiveLoadDataTableIfSearchingForPattern(); } protected function getRequestString() { $requestString = parent::getRequestString(); if($this->recursiveDataTableLoad) { $requestString .= '&expanded=1'; } return $requestString; } /** * Set the flag to load the datatable recursively so we can search on subtables as well * * @return bool if recursive search is enabled */ protected function setRecursiveLoadDataTableIfSearchingForPattern() { try{ $requestValue = Piwik_Common::getRequestVar('filter_column_recursive'); $requestValue = Piwik_Common::getRequestVar('filter_pattern_recursive'); // if the 2 variables are set we are searching for something. // we have to load all the children subtables in this case $this->recursiveDataTableLoad = true; return true; } catch(Exception $e) { $this->recursiveDataTableLoad = false; return false; } } }