diff options
author | mattab <matthieu.aubry@gmail.com> | 2013-06-18 08:14:49 +0400 |
---|---|---|
committer | mattab <matthieu.aubry@gmail.com> | 2013-06-18 08:14:49 +0400 |
commit | 621db6a16a37374aed623f75ea8cdabdf2b8e8d0 (patch) | |
tree | 6cc0365cf90f2d82dcdc5321043fe99aeabd8141 /core/Archive.php | |
parent | d8ac3977a27b41b1a87caceb2f9766a6305391cf (diff) |
Adding new Metrics class that knows about all metrics. Moving from Piwik_Archive class.
Also moved some other const to Piwik class.
Diffstat (limited to 'core/Archive.php')
-rw-r--r-- | core/Archive.php | 192 |
1 files changed, 7 insertions, 185 deletions
diff --git a/core/Archive.php b/core/Archive.php index c085f8d8a5..a6efb48331 100644 --- a/core/Archive.php +++ b/core/Archive.php @@ -41,181 +41,10 @@ */ class Piwik_Archive { - /** - * When saving DataTables in the DB, we sometimes replace the columns name by these IDs so we save up lots of bytes - * Eg. INDEX_NB_UNIQ_VISITORS is an integer: 4 bytes, but 'nb_uniq_visitors' is 16 bytes at least - * (in php it's actually even much more) - * - */ - const INDEX_NB_UNIQ_VISITORS = 1; - const INDEX_NB_VISITS = 2; - const INDEX_NB_ACTIONS = 3; - const INDEX_MAX_ACTIONS = 4; - const INDEX_SUM_VISIT_LENGTH = 5; - const INDEX_BOUNCE_COUNT = 6; - const INDEX_NB_VISITS_CONVERTED = 7; - const INDEX_NB_CONVERSIONS = 8; - const INDEX_REVENUE = 9; - const INDEX_GOALS = 10; - const INDEX_SUM_DAILY_NB_UNIQ_VISITORS = 11; - - // Specific to the Actions reports - const INDEX_PAGE_NB_HITS = 12; - const INDEX_PAGE_SUM_TIME_SPENT = 13; - - const INDEX_PAGE_EXIT_NB_UNIQ_VISITORS = 14; - const INDEX_PAGE_EXIT_NB_VISITS = 15; - const INDEX_PAGE_EXIT_SUM_DAILY_NB_UNIQ_VISITORS = 16; - - const INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS = 17; - const INDEX_PAGE_ENTRY_SUM_DAILY_NB_UNIQ_VISITORS = 18; - const INDEX_PAGE_ENTRY_NB_VISITS = 19; - const INDEX_PAGE_ENTRY_NB_ACTIONS = 20; - const INDEX_PAGE_ENTRY_SUM_VISIT_LENGTH = 21; - const INDEX_PAGE_ENTRY_BOUNCE_COUNT = 22; - - // Ecommerce Items reports - const INDEX_ECOMMERCE_ITEM_REVENUE = 23; - const INDEX_ECOMMERCE_ITEM_QUANTITY = 24; - const INDEX_ECOMMERCE_ITEM_PRICE = 25; - const INDEX_ECOMMERCE_ORDERS = 26; - const INDEX_ECOMMERCE_ITEM_PRICE_VIEWED = 27; - - // Site Search - const INDEX_SITE_SEARCH_HAS_NO_RESULT = 28; - const INDEX_PAGE_IS_FOLLOWING_SITE_SEARCH_NB_HITS = 29; - - // Performance Analytics - const INDEX_PAGE_SUM_TIME_GENERATION = 30; - const INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION = 31; - const INDEX_PAGE_MIN_TIME_GENERATION = 32; - const INDEX_PAGE_MAX_TIME_GENERATION = 33; - - // Goal reports - const INDEX_GOAL_NB_CONVERSIONS = 1; - const INDEX_GOAL_REVENUE = 2; - const INDEX_GOAL_NB_VISITS_CONVERTED = 3; - - const INDEX_GOAL_ECOMMERCE_REVENUE_SUBTOTAL = 4; - const INDEX_GOAL_ECOMMERCE_REVENUE_TAX = 5; - const INDEX_GOAL_ECOMMERCE_REVENUE_SHIPPING = 6; - const INDEX_GOAL_ECOMMERCE_REVENUE_DISCOUNT = 7; - const INDEX_GOAL_ECOMMERCE_ITEMS = 8; - const REQUEST_ALL_WEBSITES_FLAG = 'all'; const ARCHIVE_ALL_PLUGINS_FLAG = 'all'; const ID_SUBTABLE_LOAD_ALL_SUBTABLES = 'all'; - public static function getVisitsMetricNames() - { - $names = array(); - foreach(self::$metricsAggregatedFromLogs as $metricId) { - $names[$metricId] = self::$mappingFromIdToName[$metricId]; - } - return $names; - } - - protected static $metricsAggregatedFromLogs = array( - Piwik_Archive::INDEX_NB_UNIQ_VISITORS, - Piwik_Archive::INDEX_NB_VISITS, - Piwik_Archive::INDEX_NB_ACTIONS, - Piwik_Archive::INDEX_MAX_ACTIONS, - Piwik_Archive::INDEX_SUM_VISIT_LENGTH, - Piwik_Archive::INDEX_BOUNCE_COUNT, - Piwik_Archive::INDEX_NB_VISITS_CONVERTED, - ); - - public static $mappingFromIdToName = array( - Piwik_Archive::INDEX_NB_UNIQ_VISITORS => 'nb_uniq_visitors', - Piwik_Archive::INDEX_NB_VISITS => 'nb_visits', - Piwik_Archive::INDEX_NB_ACTIONS => 'nb_actions', - Piwik_Archive::INDEX_MAX_ACTIONS => 'max_actions', - Piwik_Archive::INDEX_SUM_VISIT_LENGTH => 'sum_visit_length', - Piwik_Archive::INDEX_BOUNCE_COUNT => 'bounce_count', - Piwik_Archive::INDEX_NB_VISITS_CONVERTED => 'nb_visits_converted', - Piwik_Archive::INDEX_NB_CONVERSIONS => 'nb_conversions', - Piwik_Archive::INDEX_REVENUE => 'revenue', - Piwik_Archive::INDEX_GOALS => 'goals', - Piwik_Archive::INDEX_SUM_DAILY_NB_UNIQ_VISITORS => 'sum_daily_nb_uniq_visitors', - - // Actions metrics - Piwik_Archive::INDEX_PAGE_NB_HITS => 'nb_hits', - Piwik_Archive::INDEX_PAGE_SUM_TIME_SPENT => 'sum_time_spent', - Piwik_Archive::INDEX_PAGE_SUM_TIME_GENERATION => 'sum_time_generation', - Piwik_Archive::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION => 'nb_hits_with_time_generation', - Piwik_Archive::INDEX_PAGE_MIN_TIME_GENERATION => 'min_time_generation', - Piwik_Archive::INDEX_PAGE_MAX_TIME_GENERATION => 'max_time_generation', - - Piwik_Archive::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS => 'exit_nb_uniq_visitors', - Piwik_Archive::INDEX_PAGE_EXIT_NB_VISITS => 'exit_nb_visits', - Piwik_Archive::INDEX_PAGE_EXIT_SUM_DAILY_NB_UNIQ_VISITORS => 'sum_daily_exit_nb_uniq_visitors', - - Piwik_Archive::INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS => 'entry_nb_uniq_visitors', - Piwik_Archive::INDEX_PAGE_ENTRY_SUM_DAILY_NB_UNIQ_VISITORS => 'sum_daily_entry_nb_uniq_visitors', - Piwik_Archive::INDEX_PAGE_ENTRY_NB_VISITS => 'entry_nb_visits', - Piwik_Archive::INDEX_PAGE_ENTRY_NB_ACTIONS => 'entry_nb_actions', - Piwik_Archive::INDEX_PAGE_ENTRY_SUM_VISIT_LENGTH => 'entry_sum_visit_length', - Piwik_Archive::INDEX_PAGE_ENTRY_BOUNCE_COUNT => 'entry_bounce_count', - Piwik_Archive::INDEX_PAGE_IS_FOLLOWING_SITE_SEARCH_NB_HITS => 'nb_hits_following_search', - - // Items reports metrics - Piwik_Archive::INDEX_ECOMMERCE_ITEM_REVENUE => 'revenue', - Piwik_Archive::INDEX_ECOMMERCE_ITEM_QUANTITY => 'quantity', - Piwik_Archive::INDEX_ECOMMERCE_ITEM_PRICE => 'price', - Piwik_Archive::INDEX_ECOMMERCE_ITEM_PRICE_VIEWED => 'price_viewed', - Piwik_Archive::INDEX_ECOMMERCE_ORDERS => 'orders', - ); - - public static $mappingFromIdToNameGoal = array( - Piwik_Archive::INDEX_GOAL_NB_CONVERSIONS => 'nb_conversions', - Piwik_Archive::INDEX_GOAL_NB_VISITS_CONVERTED => 'nb_visits_converted', - Piwik_Archive::INDEX_GOAL_REVENUE => 'revenue', - Piwik_Archive::INDEX_GOAL_ECOMMERCE_REVENUE_SUBTOTAL => 'revenue_subtotal', - Piwik_Archive::INDEX_GOAL_ECOMMERCE_REVENUE_TAX => 'revenue_tax', - Piwik_Archive::INDEX_GOAL_ECOMMERCE_REVENUE_SHIPPING => 'revenue_shipping', - Piwik_Archive::INDEX_GOAL_ECOMMERCE_REVENUE_DISCOUNT => 'revenue_discount', - Piwik_Archive::INDEX_GOAL_ECOMMERCE_ITEMS => 'items', - ); - - /** - * string indexed column name => Integer indexed column name - * @var array - */ - public static $mappingFromNameToId = array( - 'nb_uniq_visitors' => Piwik_Archive::INDEX_NB_UNIQ_VISITORS, - 'nb_visits' => Piwik_Archive::INDEX_NB_VISITS, - 'nb_actions' => Piwik_Archive::INDEX_NB_ACTIONS, - 'max_actions' => Piwik_Archive::INDEX_MAX_ACTIONS, - 'sum_visit_length' => Piwik_Archive::INDEX_SUM_VISIT_LENGTH, - 'bounce_count' => Piwik_Archive::INDEX_BOUNCE_COUNT, - 'nb_visits_converted' => Piwik_Archive::INDEX_NB_VISITS_CONVERTED, - 'nb_conversions' => Piwik_Archive::INDEX_NB_CONVERSIONS, - 'revenue' => Piwik_Archive::INDEX_REVENUE, - 'goals' => Piwik_Archive::INDEX_GOALS, - 'sum_daily_nb_uniq_visitors' => Piwik_Archive::INDEX_SUM_DAILY_NB_UNIQ_VISITORS, - ); - - /** - * Metrics calculated and archived by the Actions plugin. - * - * @var array - */ - public static $actionsMetrics = array( - 'nb_pageviews', - 'nb_uniq_pageviews', - 'nb_downloads', - 'nb_uniq_downloads', - 'nb_outlinks', - 'nb_uniq_outlinks', - 'nb_searches', - 'nb_keywords', - 'nb_hits', - 'nb_hits_following_search', - ); - - const LABEL_ECOMMERCE_CART = 'ecommerceAbandonedCart'; - const LABEL_ECOMMERCE_ORDER = 'ecommerceOrder'; - /** * List of archive IDs for the site, periods and segment we are querying with. * Archive IDs are indexed by done flag and period, ie: @@ -425,17 +254,6 @@ class Piwik_Archive } /** - * Returns true if Segmentation is allowed for this user - * - * @return bool - */ - public static function isSegmentationEnabled() - { - return !Piwik::isUserIsAnonymous() - || Piwik_Config::getInstance()->General['anonymous_user_enable_use_segments_API']; - } - - /** * Returns the list of plugins that archive the given reports. * * @param array $archiveNames @@ -483,7 +301,11 @@ class Piwik_Archive return $dataTable; } - + + private function appendIdSubtable($recordName, $id) + { + return $recordName . "_" . $id; + } /** * Queries archive tables for data and returns the result. * @return Piwik_Archive_DataCollection @@ -499,7 +321,7 @@ class Piwik_Archive && $idSubtable != self::ID_SUBTABLE_LOAD_ALL_SUBTABLES ) { foreach ($archiveNames as &$name) { - $name .= "_$idSubtable"; + $name = $this->appendIdsubtable($name, $idSubtable); } } @@ -799,7 +621,7 @@ class Piwik_Archive public static function getPluginForReport($report) { // Core metrics are always processed in Core, for the requested date/period/segment - if (in_array($report, Piwik_Archive::getVisitsMetricNames())) { + if (in_array($report, Piwik_Metrics::getVisitsMetricNames())) { $report = 'VisitsSummary_CoreMetrics'; } // Goal_* metrics are processed by the Goals plugin (HACK) |