'nb_uniq_visitors', Metrics::INDEX_NB_VISITS => 'nb_visits', Metrics::INDEX_NB_ACTIONS => 'nb_actions', Metrics::INDEX_MAX_ACTIONS => 'max_actions', Metrics::INDEX_SUM_VISIT_LENGTH => 'sum_visit_length', Metrics::INDEX_BOUNCE_COUNT => 'bounce_count', Metrics::INDEX_NB_VISITS_CONVERTED => 'nb_visits_converted', Metrics::INDEX_NB_CONVERSIONS => 'nb_conversions', Metrics::INDEX_REVENUE => 'revenue', Metrics::INDEX_GOALS => 'goals', Metrics::INDEX_SUM_DAILY_NB_UNIQ_VISITORS => 'sum_daily_nb_uniq_visitors', // Actions metrics Metrics::INDEX_PAGE_NB_HITS => 'nb_hits', Metrics::INDEX_PAGE_SUM_TIME_SPENT => 'sum_time_spent', Metrics::INDEX_PAGE_SUM_TIME_GENERATION => 'sum_time_generation', Metrics::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION => 'nb_hits_with_time_generation', Metrics::INDEX_PAGE_MIN_TIME_GENERATION => 'min_time_generation', Metrics::INDEX_PAGE_MAX_TIME_GENERATION => 'max_time_generation', Metrics::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS => 'exit_nb_uniq_visitors', Metrics::INDEX_PAGE_EXIT_NB_VISITS => 'exit_nb_visits', Metrics::INDEX_PAGE_EXIT_SUM_DAILY_NB_UNIQ_VISITORS => 'sum_daily_exit_nb_uniq_visitors', Metrics::INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS => 'entry_nb_uniq_visitors', Metrics::INDEX_PAGE_ENTRY_SUM_DAILY_NB_UNIQ_VISITORS => 'sum_daily_entry_nb_uniq_visitors', Metrics::INDEX_PAGE_ENTRY_NB_VISITS => 'entry_nb_visits', Metrics::INDEX_PAGE_ENTRY_NB_ACTIONS => 'entry_nb_actions', Metrics::INDEX_PAGE_ENTRY_SUM_VISIT_LENGTH => 'entry_sum_visit_length', Metrics::INDEX_PAGE_ENTRY_BOUNCE_COUNT => 'entry_bounce_count', Metrics::INDEX_PAGE_IS_FOLLOWING_SITE_SEARCH_NB_HITS => 'nb_hits_following_search', // Items reports metrics Metrics::INDEX_ECOMMERCE_ITEM_REVENUE => 'revenue', Metrics::INDEX_ECOMMERCE_ITEM_QUANTITY => 'quantity', Metrics::INDEX_ECOMMERCE_ITEM_PRICE => 'price', Metrics::INDEX_ECOMMERCE_ITEM_PRICE_VIEWED => 'price_viewed', Metrics::INDEX_ECOMMERCE_ORDERS => 'orders', ); static public $mappingFromIdToNameGoal = array( Metrics::INDEX_GOAL_NB_CONVERSIONS => 'nb_conversions', Metrics::INDEX_GOAL_NB_VISITS_CONVERTED => 'nb_visits_converted', Metrics::INDEX_GOAL_REVENUE => 'revenue', Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_SUBTOTAL => 'revenue_subtotal', Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_TAX => 'revenue_tax', Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_SHIPPING => 'revenue_shipping', Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_DISCOUNT => 'revenue_discount', Metrics::INDEX_GOAL_ECOMMERCE_ITEMS => 'items', ); static public $mappingFromNameToId = array( 'nb_uniq_visitors' => Metrics::INDEX_NB_UNIQ_VISITORS, 'nb_visits' => Metrics::INDEX_NB_VISITS, 'nb_actions' => Metrics::INDEX_NB_ACTIONS, 'max_actions' => Metrics::INDEX_MAX_ACTIONS, 'sum_visit_length' => Metrics::INDEX_SUM_VISIT_LENGTH, 'bounce_count' => Metrics::INDEX_BOUNCE_COUNT, 'nb_visits_converted' => Metrics::INDEX_NB_VISITS_CONVERTED, 'nb_conversions' => Metrics::INDEX_NB_CONVERSIONS, 'revenue' => Metrics::INDEX_REVENUE, 'goals' => Metrics::INDEX_GOALS, 'sum_daily_nb_uniq_visitors' => Metrics::INDEX_SUM_DAILY_NB_UNIQ_VISITORS, ); static protected $metricsAggregatedFromLogs = array( Metrics::INDEX_NB_UNIQ_VISITORS, Metrics::INDEX_NB_VISITS, Metrics::INDEX_NB_ACTIONS, Metrics::INDEX_MAX_ACTIONS, Metrics::INDEX_SUM_VISIT_LENGTH, Metrics::INDEX_BOUNCE_COUNT, Metrics::INDEX_NB_VISITS_CONVERTED, ); /* Used in DataTable Sort filter */ static public function getVisitsMetricNames() { $names = array(); foreach (self::$metricsAggregatedFromLogs as $metricId) { $names[$metricId] = self::$mappingFromIdToName[$metricId]; } return $names; } static public function getMappingFromIdToName() { $idToName = array_flip(self::$mappingFromIdToName); return $idToName; } /** * Is a lower value for a given column better? * @param $column * @return bool * * @ignore */ static public function isLowerValueBetter($column) { $lowerIsBetterPatterns = array( 'bounce', 'exit' ); foreach ($lowerIsBetterPatterns as $pattern) { if (strpos($column, $pattern) !== false) { return true; } } return false; } /** * Derive the unit name from a column name * @param $column * @param $idSite * @return string * @ignore */ static public function getUnit($column, $idSite) { $nameToUnit = array( '_rate' => '%', 'revenue' => MetricsFormatter::getCurrencySymbol($idSite), '_time_' => 's' ); foreach ($nameToUnit as $pattern => $type) { if (strpos($column, $pattern) !== false) { return $type; } } return ''; } static public function getDefaultMetricTranslations() { $trans = array( 'label' => 'General_ColumnLabel', 'date' => 'General_Date', 'avg_time_on_page' => 'General_ColumnAverageTimeOnPage', 'sum_time_spent' => 'General_ColumnSumVisitLength', 'sum_visit_length' => 'General_ColumnSumVisitLength', 'bounce_count' => 'General_ColumnBounces', 'bounce_count_returning' => 'VisitFrequency_ColumnBounceCountForReturningVisits', 'max_actions' => 'General_ColumnMaxActions', 'max_actions_returning' => 'VisitFrequency_ColumnMaxActionsInReturningVisit', 'nb_visits_converted_returning' => 'VisitFrequency_ColumnNbReturningVisitsConverted', 'sum_visit_length_returning' => 'VisitFrequency_ColumnSumVisitLengthReturning', 'nb_visits_converted' => 'General_ColumnVisitsWithConversions', 'nb_conversions' => 'Goals_ColumnConversions', 'revenue' => 'General_ColumnRevenue', 'nb_hits' => 'General_ColumnPageviews', 'entry_nb_visits' => 'General_ColumnEntrances', 'entry_nb_uniq_visitors' => 'General_ColumnUniqueEntrances', 'exit_nb_visits' => 'General_ColumnExits', 'exit_nb_uniq_visitors' => 'General_ColumnUniqueExits', 'entry_bounce_count' => 'General_ColumnBounces', 'exit_bounce_count' => 'General_ColumnBounces', 'exit_rate' => 'General_ColumnExitRate' ); $trans = array_map(array('\\Piwik\\Piwik','translate'), $trans); $dailySum = ' (' . Piwik::translate('General_DailySum') . ')'; $afterEntry = ' ' . Piwik::translate('General_AfterEntry'); $trans['sum_daily_nb_uniq_visitors'] = Piwik::translate('General_ColumnNbUniqVisitors') . $dailySum; $trans['sum_daily_entry_nb_uniq_visitors'] = Piwik::translate('General_ColumnUniqueEntrances') . $dailySum; $trans['sum_daily_exit_nb_uniq_visitors'] = Piwik::translate('General_ColumnUniqueExits') . $dailySum; $trans['entry_nb_actions'] = Piwik::translate('General_ColumnNbActions') . $afterEntry; $trans['entry_sum_visit_length'] = Piwik::translate('General_ColumnSumVisitLength') . $afterEntry; $trans = array_merge(self::getDefaultMetrics(), self::getDefaultProcessedMetrics(), $trans); return $trans; } static public function getDefaultMetrics() { $translations = array( 'nb_visits' => 'General_ColumnNbVisits', 'nb_uniq_visitors' => 'General_ColumnNbUniqVisitors', 'nb_actions' => 'General_ColumnNbActions', ); $translations = array_map(array('\\Piwik\\Piwik','translate'), $translations); return $translations; } static public function getDefaultProcessedMetrics() { $translations = array( // Processed in AddColumnsProcessedMetrics 'nb_actions_per_visit' => 'General_ColumnActionsPerVisit', 'avg_time_on_site' => 'General_ColumnAvgTimeOnSite', 'bounce_rate' => 'General_ColumnBounceRate', 'conversion_rate' => 'General_ColumnConversionRate', ); return array_map(array('\\Piwik\\Piwik','translate'), $translations); } static public function getReadableColumnName($columnIdRaw) { $mappingIdToName = self::$mappingFromIdToName; if (array_key_exists($columnIdRaw, $mappingIdToName)) { return $mappingIdToName[$columnIdRaw]; } return $columnIdRaw; } static public function getMetricIdsToProcessReportTotal() { return array( self::INDEX_NB_VISITS, self::INDEX_NB_UNIQ_VISITORS, self::INDEX_NB_ACTIONS, self::INDEX_PAGE_NB_HITS, self::INDEX_NB_VISITS_CONVERTED, self::INDEX_NB_CONVERSIONS, self::INDEX_BOUNCE_COUNT, self::INDEX_PAGE_ENTRY_BOUNCE_COUNT, self::INDEX_PAGE_ENTRY_NB_VISITS, self::INDEX_PAGE_ENTRY_NB_ACTIONS, self::INDEX_PAGE_EXIT_NB_VISITS, self::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS ); } static public function getDefaultMetricsDocumentation() { $documentation = array( 'nb_visits' => 'General_ColumnNbVisitsDocumentation', 'nb_uniq_visitors' => 'General_ColumnNbUniqVisitorsDocumentation', 'nb_actions' => 'General_ColumnNbActionsDocumentation', 'nb_actions_per_visit' => 'General_ColumnActionsPerVisitDocumentation', 'avg_time_on_site' => 'General_ColumnAvgTimeOnSiteDocumentation', 'bounce_rate' => 'General_ColumnBounceRateDocumentation', 'conversion_rate' => 'General_ColumnConversionRateDocumentation', 'avg_time_on_page' => 'General_ColumnAverageTimeOnPageDocumentation', 'nb_hits' => 'General_ColumnPageviewsDocumentation', 'exit_rate' => 'General_ColumnExitRateDocumentation' ); return array_map(array('\\Piwik\\Piwik','translate'), $documentation); } public static function getPercentVisitColumn() { $percentVisitsLabel = str_replace(' ', ' ', Piwik::translate('General_ColumnPercentageVisits')); return $percentVisitsLabel; } }