private function getDataTable($name, $idSite, $period, $date, $segment, $expanded, $idSubtable) { Piwik::checkUserHasViewAccess($idSite); $recordName = Dimensions::getRecordNameForAction($name); $dataTable = Archive::getDataTableFromArchive($recordName, $idSite, $period, $date, $segment, $expanded, $idSubtable); $this->filterDataTable($dataTable); return $dataTable; }
/** * Here you can configure how your report should be displayed. For instance whether your report supports a search * etc. You can also change the default request config. For instance change how many rows are displayed by default. * * @param ViewDataTable $view */ public function configureView(ViewDataTable $view) { $view->config->datatable_js_type = 'ContentsDataTable'; if (!empty($this->dimension)) { $view->config->addTranslations(array('label' => $this->dimension->getName())); } $view->config->columns_to_display = array_merge(array('label'), $this->metrics, $this->processedMetrics); $view->requestConfig->filter_sort_column = 'nb_impressions'; if ($this->hasSubtableId()) { $apiMethod = $view->requestConfig->getApiMethodToRequest(); $label = Dimensions::getSubtableLabelForApiMethod($apiMethod); $view->config->addTranslation('label', Piwik::translate($label)); } }
private function getDataTable($name, $idSite, $period, $date, $segment, $expanded, $idSubtable) { Piwik::checkUserHasViewAccess($idSite); $recordName = Dimensions::getRecordNameForAction($name); $dataTable = Archive::getDataTableFromArchive($recordName, $idSite, $period, $date, $segment, $expanded, $idSubtable); if (empty($idSubtable)) { $dataTable->filter('AddSegmentValue', array(function ($label) { if ($label === Archiver::CONTENT_PIECE_NOT_SET) { return false; } return $label; })); } $this->filterDataTable($dataTable); return $dataTable; }
private function bannerStats($bannerName, $params) { $contentPiece = false; if (strpos($bannerName, '_') !== false) { list($bannerName, $contentPiece) = explode('_', $bannerName); } $segment = 'contentName==' . $bannerName; $recordName = Dimensions::getRecordNameForAction('getContentPieces'); $subTable = Archive::getDataTableFromArchive($recordName, $params['idSite'], $params['period'], $params['date'], $segment, true); //echo '<pre>'; $bannerTable = new DataTable(); if (!$contentPiece) { foreach ($subTable->getRows() as $row) { $ContentPieceId = Db::fetchOne("SELECT idaction FROM piwik_log_action WHERE TYPE = 14 and name = ?", array($row->getColumn('label'))); $bannerRow = new Row(array(Row::COLUMNS => array('Label' => $row->getColumn('label'), 'Impressions' => $row->getColumn(41), 'Interactions' => $row->getColumn(42), 'Conversion rate' => $this->interactionRate($row->getColumn(41), $row->getColumn(42))), Row::DATATABLE_ASSOCIATED => implode('_', array($bannerName, $ContentPieceId)))); $bannerTable->addRow($bannerRow); } } else { $orderColumn = str_replace(' ', '_', strtolower($params['filter_sort_column'])); $orderOrder = in_array($params['filter_sort_order'], array('asc', 'desc')) ? $params['filter_sort_order'] : 'asc'; $orderLimit = intval($params['filter_limit']); $where = ''; /* TODO: filter_pattern is processed by piwik in some way. The results are good with this query, but piwik does some post-processing? if (isset($params['filter_pattern'])) { $where = 'and piwik_log_action.name like "%' . $params['filter_pattern'] . '%"'; } */ $result = Db::fetchAll("\n SELECT \n trim(substring_index(piwik_log_action.name, '|', 1)) as referrer,\n trim(substring_index(piwik_log_action.name, '|', -1)) as target,\n sum(IF(idaction_content_interaction is null, 1, 0)) as impressions, \n sum(IF(idaction_content_interaction is null, 0, 1)) as interactions,\n ((100 / sum(IF(idaction_content_interaction is null, 1, 0))) * sum(IF(idaction_content_interaction is null, 0, 1))) as conversion_rate\n FROM piwik_log_link_visit_action \n left join piwik_log_action on piwik_log_action.idaction = idaction_content_target\n WHERE \n idaction_content_name in (SELECT idaction FROM piwik_log_action WHERE name = ?)\n and\n idaction_content_piece = ?\n \n {$where}\n\n group by piwik_log_action.name\n order by {$orderColumn} {$orderOrder}\n limit {$orderLimit}\n ", array($bannerName, $contentPiece)); foreach ($result as $row) { $bannerRow = new Row(array(Row::COLUMNS => array('Referrer' => $row['referrer'], 'Target' => $row['target'], 'Impressions' => $row['impressions'], 'Interactions' => $row['interactions'], 'Conversion rate' => round($row['conversion_rate']) . '%'))); $bannerTable->addRow($bannerRow); } } return $bannerTable; }