Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordiosmosis <benaka@piwik.pro>2015-05-08 02:58:56 +0300
committerdiosmosis <benaka@piwik.pro>2015-06-11 09:42:04 +0300
commit30ac243f3644bb32eda74b1c38c586ce6c81a7d8 (patch)
tree33bd0e53649f4bb4c9a05ad19ed0fbdc09d39342 /core/Plugin/Dimension
parentb48e09afd39bed3a598287d4aa8ac2a39c2c4082 (diff)
Move deleteUnusedLogAction logic to RawLogDao class.
Diffstat (limited to 'core/Plugin/Dimension')
-rw-r--r--core/Plugin/Dimension/DimensionMetadataProvider.php107
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;
+ }
+ }
+}