diff options
author | diosmosis <benaka@piwik.pro> | 2015-05-08 02:58:56 +0300 |
---|---|---|
committer | diosmosis <benaka@piwik.pro> | 2015-06-11 09:42:04 +0300 |
commit | 30ac243f3644bb32eda74b1c38c586ce6c81a7d8 (patch) | |
tree | 33bd0e53649f4bb4c9a05ad19ed0fbdc09d39342 /core/Plugin/Dimension | |
parent | b48e09afd39bed3a598287d4aa8ac2a39c2c4082 (diff) |
Move deleteUnusedLogAction logic to RawLogDao class.
Diffstat (limited to 'core/Plugin/Dimension')
-rw-r--r-- | core/Plugin/Dimension/DimensionMetadataProvider.php | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/core/Plugin/Dimension/DimensionMetadataProvider.php b/core/Plugin/Dimension/DimensionMetadataProvider.php new file mode 100644 index 0000000000..089c60c0a6 --- /dev/null +++ b/core/Plugin/Dimension/DimensionMetadataProvider.php @@ -0,0 +1,107 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +namespace Piwik\Plugin\Dimension; + +/** + * Provides metadata about dimensions for the LogDataPurger class. + */ +class DimensionMetadataProvider +{ + /** + * Overrids for the result of the getActionReferenceColumnsByTable() method. Exists so Piwik + * instances can be monkey patched, in case there are idaction columns that this class does not + * naturally discover. + * + * @var array + */ + private $actionReferenceColumnsOverride; + + public function __construct(array $actionReferenceColumnsOverride = array()) + { + $this->actionReferenceColumnsOverride = $actionReferenceColumnsOverride; + } + + /** + * Returns a list of idaction column names organized by table name. Uses dimension metadata + * to find idaction columns dynamically. + * + * Note: It is not currently possible to use the Piwik platform to add idaction columns to tables + * other than log_link_visit_action (w/o doing something unsupported), so idaction columns in + * other tables are hard coded. + * + * @return array[] + */ + public function getActionReferenceColumnsByTable() + { + $result = array( + 'log_link_visit_action' => array('idaction_url', + 'idaction_url_ref', + 'idaction_name_ref' + ), + + 'log_conversion' => array('idaction_url'), + + 'log_visit' => array('visit_exit_idaction_url', + 'visit_exit_idaction_name', + 'visit_entry_idaction_url', + 'visit_entry_idaction_name'), + + 'log_conversion_item' => array('idaction_sku', + 'idaction_name', + 'idaction_category', + 'idaction_category2', + 'idaction_category3', + 'idaction_category4', + 'idaction_category5') + ); + + $dimensionIdActionColumns = $this->getVisitActionTableActionReferences(); + $result['log_link_visit_action'] = array_unique( + array_merge($result['log_link_visit_action'], $dimensionIdActionColumns)); + + foreach ($this->actionReferenceColumnsOverride as $table => $columns) { + if (empty($result[$table])) { + $result[$table] = $columns; + } else { + $result[$table] = array_unique(array_merge($result[$table], $columns)); + } + } + + return $result; + } + + private function getVisitActionTableActionReferences() + { + $idactionColumns = array(); + foreach (ActionDimension::getAllDimensions() as $actionDimension) { + if ($this->isActionReference($actionDimension)) { + $idactionColumns[] = $actionDimension->getColumnName(); + } + } + return $idactionColumns; + } + + + /** + * Returns `true` if the column for this dimension is a reference to the `log_action` table (ie, an "idaction column"), + * `false` if otherwise. + * + * @return bool + */ + private function isActionReference(ActionDimension $dimension) + { + try { + $dimension->getActionId(); + + return true; + } catch (\Exception $ex) { + return false; + } + } +} |