PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 4.13.3
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v4.13.3
5.12.0 5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / Updates / 5.0.0-b1.php
matomo / app / core / Updates Last commit date
3.12.0-b1.php 5 years ago 3.12.0-b7.php 5 years ago 4.0.0-b1.php 4 years ago 4.0.0-b3.php 4 years ago 4.0.0-rc3.php 4 years ago 4.0.0-rc4.php 4 years ago 4.0.1-b1.php 4 years ago 4.0.4-b1.php 4 years ago 4.1.2-b1.php 5 years ago 4.1.2-b2.php 4 years ago 4.10.0-b1.php 3 years ago 4.11.0-b1.php 3 years ago 4.11.0-rc2.php 3 years ago 4.12.0-b1.php 3 years ago 4.12.0-b2.php 3 years ago 4.12.0-b3.php 3 years ago 4.12.0-b4.php 3 years ago 4.3.0-b3.php 4 years ago 4.3.0-b4.php 4 years ago 4.3.0-rc2.php 4 years ago 4.4.0-b1.php 4 years ago 4.5.0-b1.php 4 years ago 4.6.0-b1.php 4 years ago 4.6.0-b4.php 4 years ago 4.6.2-rc2.php 4 years ago 4.7.0-b2.php 4 years ago 4.7.1-b1.php 4 years ago 5.0.0-b1.php 4 years ago
5.0.0-b1.php
91 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 *
9 */
10
11 namespace Piwik\Updates;
12
13 use Piwik\Db;
14 use Piwik\Common;
15 use Piwik\Updater;
16 use Piwik\Updater\Migration\Db as DbAlias;
17 use Piwik\Updater\Migration\Factory;
18 use Piwik\Updates as PiwikUpdates;
19
20 /**
21 * Update for version 5.0.0-b1
22 */
23 class Updates_5_0_0_b1 extends PiwikUpdates
24 {
25 /**
26 * @var Factory
27 */
28 private $migration;
29 private $tableName;
30 private $indexName;
31
32 public function __construct(Factory $factory)
33 {
34 $this->migration = $factory;
35
36 $this->tableName = Common::prefixTable('log_visit');
37 $this->indexName = 'index_idsite_idvisitor';
38 }
39
40 public function doUpdate(Updater $updater)
41 {
42 $updater->executeMigrations(__FILE__, $this->getMigrations($updater));
43 }
44
45 public function getMigrations(Updater $updater)
46 {
47 if ($this->requiresUpdatedLogVisitTableIndex()) {
48 return $this->getLogVisitTableMigrations();
49 }
50
51 return [];
52 }
53
54 private function getLogVisitTableMigrations()
55 {
56 $migrations = [];
57
58 $migrations[] = $this->migration->db->dropIndex('log_visit', $this->indexName);
59
60 // Using the custom `sql` method instead of the `addIndex` method as it doesn't support DESC collation
61 $migrations[] = $this->migration->db->sql(
62 "ALTER TABLE `{$this->tableName}` ADD INDEX `{$this->indexName}` (`idsite`, `idvisitor`, `visit_last_action_time` DESC)",
63 [DbAlias::ERROR_CODE_DUPLICATE_KEY, DbAlias::ERROR_CODE_KEY_COLUMN_NOT_EXISTS]
64 );
65
66 return $migrations;
67 }
68
69 private function requiresUpdatedLogVisitTableIndex()
70 {
71 $sql = "SHOW INDEX FROM `{$this->tableName}` WHERE Key_name = '{$this->indexName}'";
72
73 $result = Db::fetchAll($sql);
74
75 if (empty($result)) {
76 // No index present - should be added
77 return true;
78 }
79
80 // Check that the $result contains all the required column names. This is required as there was a previous index
81 // with the same name that only consisted of two columns. We want to check this index is built with all three.
82 // $diff will be empty if all three columns are found, meaning that the index already exists.
83 $diff = array_diff(['idsite', 'idvisitor', 'visit_last_action_time'], array_column($result, 'Column_name'));
84
85 if (!$diff) {
86 return false;
87 }
88
89 return true;
90 }
91 }