Пример #1
0
 /**
  * Returns datatable describing the number of visits for each day of the week.
  *
  * @param string $idSite The site ID. Cannot refer to multiple sites.
  * @param string $period The period type: day, week, year, range...
  * @param string $date The start date of the period. Cannot refer to multiple dates.
  * @param bool|string $segment The segment.
  * @throws Exception
  * @return DataTable
  */
 public function getByDayOfWeek($idSite, $period, $date, $segment = false)
 {
     Piwik::checkUserHasViewAccess($idSite);
     // metrics to query
     $metrics = Metrics::getVisitsMetricNames();
     unset($metrics[Metrics::INDEX_MAX_ACTIONS]);
     // disabled for multiple dates
     if (Period::isMultiplePeriod($date, $period)) {
         throw new Exception("VisitTime.getByDayOfWeek does not support multiple dates.");
     }
     // get metric data for every day within the supplied period
     $oPeriod = Period\Factory::makePeriodFromQueryParams(Site::getTimezoneFor($idSite), $period, $date);
     $dateRange = $oPeriod->getDateStart()->toString() . ',' . $oPeriod->getDateEnd()->toString();
     $archive = Archive::build($idSite, 'day', $dateRange, $segment);
     // disabled for multiple sites
     if (count($archive->getParams()->getIdSites()) > 1) {
         throw new Exception("VisitTime.getByDayOfWeek does not support multiple sites.");
     }
     $dataTable = $archive->getDataTableFromNumeric($metrics)->mergeChildren();
     // if there's no data for this report, don't bother w/ anything else
     if ($dataTable->getRowsCount() == 0) {
         return $dataTable;
     }
     // group by the day of the week (see below for dayOfWeekFromDate function)
     $dataTable->filter('GroupBy', array('label', __NAMESPACE__ . '\\dayOfWeekFromDate'));
     // create new datatable w/ empty rows, then add calculated datatable
     $rows = array();
     foreach (array(1, 2, 3, 4, 5, 6, 7) as $day) {
         $rows[] = array('label' => $day, 'nb_visits' => 0);
     }
     $result = new DataTable();
     $result->addRowsFromSimpleArray($rows);
     $result->addDataTable($dataTable);
     // set day of week integer as metadata
     $result->filter('ColumnCallbackAddMetadata', array('label', 'day_of_week'));
     // translate labels
     $result->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\\translateDayOfWeek'));
     // set datatable metadata for period start & finish
     $result->setMetadata('date_start', $oPeriod->getDateStart());
     $result->setMetadata('date_end', $oPeriod->getDateEnd());
     return $result;
 }
Пример #2
0
 /**
  * @group Core
  */
 public function testGetVisitsMetricNames()
 {
     $names = Metrics::getVisitsMetricNames();
     $expectedNames = array(1 => 'nb_uniq_visitors', 2 => 'nb_visits', 39 => 'nb_users', 3 => 'nb_actions', 4 => 'max_actions', 5 => 'sum_visit_length', 6 => 'bounce_count', 7 => 'nb_visits_converted');
     $this->assertEquals($expectedNames, $names);
 }
Пример #3
0
 /**
  * Returns the name of the plugin that archives a given report.
  *
  * @param string $report Archive data name, eg, `'nb_visits'`, `'UserSettings_...'`, etc.
  * @return string Plugin name.
  * @throws \Exception If a plugin cannot be found or if the plugin for the report isn't
  *                    activated.
  */
 private static function getPluginForReport($report)
 {
     // Core metrics are always processed in Core, for the requested date/period/segment
     if (in_array($report, Metrics::getVisitsMetricNames())) {
         $report = 'VisitsSummary_CoreMetrics';
     } else {
         if (strpos($report, 'Goal_') === 0) {
             $report = 'Goals_Metrics';
         } else {
             if (strrpos($report, '_returning') === strlen($report) - strlen('_returning')) {
                 // HACK
                 $report = 'VisitFrequency_Metrics';
             }
         }
     }
     $plugin = substr($report, 0, strpos($report, '_'));
     if (empty($plugin) || !\Piwik\Plugin\Manager::getInstance()->isPluginActivated($plugin)) {
         throw new \Exception("Error: The report '{$report}' was requested but it is not available at this stage." . " (Plugin '{$plugin}' is not activated.)");
     }
     return $plugin;
 }
Пример #4
0
 protected function aggregateMultipleVisitsMetrics()
 {
     $toSum = Metrics::getVisitsMetricNames();
     $metrics = $this->archiveProcessor->aggregateNumericMetrics($toSum);
     return $metrics;
 }
Пример #5
0
 /**
  * Returns the name of the plugin that archives a given report.
  *
  * @param string $report Archive data name, eg, `'nb_visits'`, `'UserSettings_...'`, etc.
  * @return string Plugin name.
  * @throws \Exception If a plugin cannot be found or if the plugin for the report isn't
  *                    activated.
  */
 private static function getPluginForReport($report)
 {
     // Core metrics are always processed in Core, for the requested date/period/segment
     if (in_array($report, Metrics::getVisitsMetricNames())) {
         $report = 'VisitsSummary_CoreMetrics';
     } else {
         if (strpos($report, 'Goal_') === 0) {
             $report = 'Goals_Metrics';
         }
     }
     $plugin = substr($report, 0, strpos($report, '_'));
     if (empty($plugin) || !\Piwik\Plugin\Manager::getInstance()->isPluginActivated($plugin)) {
         $pluginStr = empty($plugin) ? '' : "({$plugin})";
         throw new \Exception("Error: The report '{$report}' was requested but it is not available " . "at this stage. You may also disable the related plugin {$pluginStr} " . "to avoid this error.");
     }
     return $plugin;
 }