Version Description
Download this release
Release Info
Developer | matomoteam |
Plugin | Matomo Analytics – Ethical Stats. Powerful Insights. |
Version | 4.0.4 |
Comparing to | |
See all releases |
Code changes from version 4.0.3 to 4.0.4
- app/core/Updates/4.0.0-b1.php +44 -120
- app/core/Updates/4.0.0-b3.php +0 -60
- app/core/Updates/4.0.0-rc3.php +0 -44
- app/core/Updates/4.0.0-rc4.php +0 -68
- app/core/Updates/4.0.1-b1.php +0 -56
- app/core/Updates/4.0.4-b1.php +0 -64
- app/plugins/Goals/Goals.php +1 -1
- matomo.php +1 -1
- readme.txt +1 -1
app/core/Updates/4.0.0-b1.php
CHANGED
@@ -10,11 +10,9 @@
|
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
use Piwik\DataAccess\TableMetadata;
|
13 |
-
use Piwik\
|
14 |
-
use Piwik\Db;
|
15 |
use Piwik\DbHelper;
|
16 |
use Piwik\Plugin\Manager;
|
17 |
-
use Piwik\Plugins\CoreAdminHome\Commands\MigrateTokenAuths;
|
18 |
use Piwik\Plugins\CoreHome\Columns\Profilable;
|
19 |
use Piwik\Plugins\CoreHome\Columns\VisitorSecondsSinceFirst;
|
20 |
use Piwik\Plugins\CoreHome\Columns\VisitorSecondsSinceOrder;
|
@@ -30,7 +28,6 @@ use Piwik\Common;
|
|
30 |
use Piwik\Config;
|
31 |
use Piwik\Plugins\UserCountry\LocationProvider;
|
32 |
use Piwik\Plugins\VisitorInterest\Columns\VisitorSecondsSinceLast;
|
33 |
-
use Piwik\SettingsPiwik;
|
34 |
use Piwik\Updater;
|
35 |
use Piwik\Updates as PiwikUpdates;
|
36 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
@@ -58,12 +55,35 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
58 |
|
59 |
$migrations = [];
|
60 |
|
61 |
-
|
62 |
-
$
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
|
66 |
-
|
67 |
|
68 |
// invalidations table
|
69 |
$migrations[] = $this->migration->db->createTable('archive_invalidations', [
|
@@ -75,6 +95,7 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
75 |
'date2' => 'DATE NOT NULL',
|
76 |
'period' => 'TINYINT UNSIGNED NOT NULL',
|
77 |
'ts_invalidated' => 'DATETIME NOT NULL',
|
|
|
78 |
'status' => 'TINYINT(1) UNSIGNED DEFAULT 0',
|
79 |
'report' => 'VARCHAR(255) NULL',
|
80 |
], ['idinvalidation']);
|
@@ -82,41 +103,13 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
82 |
$migrations[] = $this->migration->db->addIndex('archive_invalidations', ['idsite', 'date1', 'period'], 'index_idsite_dates_period_name');
|
83 |
|
84 |
$migrations[] = $this->migration->db->dropColumn('user', 'alias');
|
|
|
85 |
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
$migrations[] = $this->migration->db->changeColumnType('session', 'id', 'VARCHAR(191)');
|
90 |
-
$migrations[] = $this->migration->db->changeColumnType('site_url', 'url', 'VARCHAR(190)');
|
91 |
-
$migrations[] = $this->migration->db->changeColumnType('option', 'option_name', 'VARCHAR(191)');
|
92 |
|
93 |
-
$migrations[] = $this->migration->db->changeColumnType('log_action', 'name', 'VARCHAR(4096)');
|
94 |
-
$migrations[] = $this->migration->db->changeColumnType('log_conversion', 'url', 'VARCHAR(4096)');
|
95 |
$migrations[] = $this->migration->db->changeColumn('log_link_visit_action', 'interaction_position', 'pageview_position', 'MEDIUMINT UNSIGNED DEFAULT NULL');
|
96 |
|
97 |
-
$customTrackerPluginActive = false;
|
98 |
-
if (in_array('CustomPiwikJs', Config::getInstance()->Plugins['Plugins'])) {
|
99 |
-
$customTrackerPluginActive = true;
|
100 |
-
}
|
101 |
-
|
102 |
-
$migrations[] = $this->migration->plugin->activate('BulkTracking');
|
103 |
-
$migrations[] = $this->migration->plugin->deactivate('CustomPiwikJs');
|
104 |
-
$migrations[] = $this->migration->plugin->uninstall('CustomPiwikJs');
|
105 |
-
|
106 |
-
if ($customTrackerPluginActive) {
|
107 |
-
$migrations[] = $this->migration->plugin->activate('CustomJsTracker');
|
108 |
-
}
|
109 |
-
|
110 |
-
// Prepare all installed tables for utf8mb4 conversions. e.g. make some indexed fields smaller so they don't exceed the maximum key length
|
111 |
-
$allTables = DbHelper::getTablesInstalled();
|
112 |
-
|
113 |
-
foreach ($allTables as $table) {
|
114 |
-
if (preg_match('/archive_/', $table) == 1) {
|
115 |
-
$tableNameUnprefixed = Common::unprefixTable($table);
|
116 |
-
$migrations[] = $this->migration->db->changeColumnType($tableNameUnprefixed, 'name', 'VARCHAR(190)');
|
117 |
-
}
|
118 |
-
}
|
119 |
-
|
120 |
// Move the site search fields of log_visit out of custom variables into their own fields
|
121 |
$columnsToAdd['log_link_visit_action']['search_cat'] = 'VARCHAR(200) NULL';
|
122 |
$columnsToAdd['log_link_visit_action']['search_count'] = 'INTEGER(10) UNSIGNED NULL';
|
@@ -159,19 +152,6 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
159 |
}
|
160 |
}
|
161 |
|
162 |
-
if (Manager::getInstance()->isPluginInstalled('CustomVariables')) {
|
163 |
-
$visitActionTable = Common::prefixTable('log_link_visit_action');
|
164 |
-
$migrations[] = $this->migration->db->sql("UPDATE $visitActionTable SET search_cat = if(custom_var_k4 = '_pk_scat', custom_var_v4, search_cat), search_count = if(custom_var_k5 = '_pk_scount', custom_var_v5, search_count) WHERE custom_var_k4 = '_pk_scat' or custom_var_k5 = '_pk_scount'");
|
165 |
-
}
|
166 |
-
|
167 |
-
if ($this->usesGeoIpLegacyLocationProvider()) {
|
168 |
-
// activate GeoIp2 plugin for users still using GeoIp2 Legacy (others might have it disabled on purpose)
|
169 |
-
$migrations[] = $this->migration->plugin->activate('GeoIp2');
|
170 |
-
}
|
171 |
-
|
172 |
-
// remove old options
|
173 |
-
$migrations[] = $this->migration->db->sql('DELETE FROM `' . Common::prefixTable('option') . '` WHERE option_name IN ("geoip.updater_period", "geoip.loc_db_url", "geoip.isp_db_url", "geoip.org_db_url")');
|
174 |
-
|
175 |
// init seconds_to_... columns
|
176 |
$logVisitColumns = $tableMetadata->getColumns(Common::prefixTable('log_visit'));
|
177 |
$hasDaysColumnInVisit = in_array('visitor_days_since_first', $logVisitColumns);
|
@@ -192,6 +172,11 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
192 |
visitor_seconds_since_order = visitor_days_since_order * 86400");
|
193 |
}
|
194 |
|
|
|
|
|
|
|
|
|
|
|
195 |
// remove old days_to_... columns
|
196 |
$migrations[] = $this->migration->db->dropColumns('log_visit', [
|
197 |
'config_gears',
|
@@ -211,9 +196,6 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
211 |
$migrations[] = $this->migration->config->set('mail', 'type', 'Cram-md5');
|
212 |
}
|
213 |
|
214 |
-
// keep piwik_ignore for existing installs
|
215 |
-
$migrations[] = $this->migration->config->set('Tracker', 'ignore_visits_cookie_name', 'piwik_ignore');
|
216 |
-
|
217 |
$migrations[] = $this->migration->plugin->activate('PagePerformance');
|
218 |
if (!Manager::getInstance()->isPluginActivated('CustomDimensions')) {
|
219 |
$migrations[] = $this->migration->plugin->activate('CustomDimensions');
|
@@ -229,76 +211,18 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
229 |
$migrations[] = $this->migration->config->set('General', 'datatable_archiving_maximum_rows_subtable_custom_dimensions', $configSubTableLimit);
|
230 |
}
|
231 |
|
|
|
|
|
|
|
|
|
|
|
|
|
232 |
return $migrations;
|
233 |
}
|
234 |
|
235 |
public function doUpdate(Updater $updater)
|
236 |
{
|
237 |
-
$salt = SettingsPiwik::getSalt();
|
238 |
-
$sessions = Db::fetchAll('SELECT id from ' . Common::prefixTable('session'));
|
239 |
-
|
240 |
-
foreach ($sessions as $session) {
|
241 |
-
if (!empty($session['id']) && Common::mb_strlen($session['id']) != 128) {
|
242 |
-
$bind = [ hash('sha512', $session['id'] . $salt), $session['id'] ];
|
243 |
-
try {
|
244 |
-
Db::query(sprintf('UPDATE %s SET id = ? WHERE id = ?', Common::prefixTable('session')), $bind);
|
245 |
-
} catch (\Exception $e) {
|
246 |
-
// ignore possible duplicate key errors
|
247 |
-
}
|
248 |
-
}
|
249 |
-
}
|
250 |
-
|
251 |
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
252 |
-
|
253 |
-
if ($this->usesGeoIpLegacyLocationProvider()) {
|
254 |
-
// switch to default provider if GeoIp Legacy was still in use
|
255 |
-
LocationProvider::setCurrentProvider(LocationProvider\DefaultProvider::ID);
|
256 |
-
}
|
257 |
-
|
258 |
-
// eg the case when not updating from most recent Matomo 3.X and when not using the UI updater
|
259 |
-
// afterwards the should receive a notification that the plugins are outdated
|
260 |
-
self::ensureCorePluginsThatWereMovedToMarketplaceCanBeUpdated();
|
261 |
-
ServerFilesGenerator::createFilesForSecurity();
|
262 |
-
}
|
263 |
-
|
264 |
-
public static function ensureCorePluginsThatWereMovedToMarketplaceCanBeUpdated()
|
265 |
-
{
|
266 |
-
$plugins = ['Provider', 'CustomVariables'];
|
267 |
-
$pluginManager = Manager::getInstance();
|
268 |
-
foreach ($plugins as $plugin) {
|
269 |
-
if ($pluginManager->isPluginThirdPartyAndBogus($plugin)) {
|
270 |
-
$pluginDir = Manager::getPluginDirectory($plugin);
|
271 |
-
|
272 |
-
if (is_dir($pluginDir) &&
|
273 |
-
file_exists($pluginDir . '/' . $plugin . '.php')
|
274 |
-
&& !file_exists($pluginDir . '/plugin.json')
|
275 |
-
&& is_writable($pluginDir)) {
|
276 |
-
file_put_contents($pluginDir . '/plugin.json', '{
|
277 |
-
"name": "'.$plugin.'",
|
278 |
-
"description": "'.$plugin.'",
|
279 |
-
"version": "3.14.1",
|
280 |
-
"theme": false,
|
281 |
-
"require": {
|
282 |
-
"piwik": ">=3.0.0,<4.0.0-b1"
|
283 |
-
},
|
284 |
-
"authors": [
|
285 |
-
{
|
286 |
-
"name": "Matomo",
|
287 |
-
"email": "hello@matomo.org",
|
288 |
-
"homepage": "https:\/\/matomo.org"
|
289 |
-
}
|
290 |
-
],
|
291 |
-
"homepage": "https:\/\/matomo.org",
|
292 |
-
"license": "GPL v3+",
|
293 |
-
"keywords": ["'.$plugin.'"]
|
294 |
-
}');
|
295 |
-
// otherwise cached information might be used and it won't be loaded otherwise within same request
|
296 |
-
$pluginObj = $pluginManager->loadPlugin($plugin);
|
297 |
-
$pluginObj->reloadPluginInformation();
|
298 |
-
$pluginManager->unloadPlugin($pluginObj); // prevent any events being posted to it somehow
|
299 |
-
}
|
300 |
-
}
|
301 |
-
}
|
302 |
}
|
303 |
|
304 |
protected function usesGeoIpLegacyLocationProvider()
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
use Piwik\DataAccess\TableMetadata;
|
13 |
+
use Piwik\Date;
|
|
|
14 |
use Piwik\DbHelper;
|
15 |
use Piwik\Plugin\Manager;
|
|
|
16 |
use Piwik\Plugins\CoreHome\Columns\Profilable;
|
17 |
use Piwik\Plugins\CoreHome\Columns\VisitorSecondsSinceFirst;
|
18 |
use Piwik\Plugins\CoreHome\Columns\VisitorSecondsSinceOrder;
|
28 |
use Piwik\Config;
|
29 |
use Piwik\Plugins\UserCountry\LocationProvider;
|
30 |
use Piwik\Plugins\VisitorInterest\Columns\VisitorSecondsSinceLast;
|
|
|
31 |
use Piwik\Updater;
|
32 |
use Piwik\Updates as PiwikUpdates;
|
33 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
55 |
|
56 |
$migrations = [];
|
57 |
|
58 |
+
/** APP SPECIFIC TOKEN START */
|
59 |
+
$migrations[] = $this->migration->db->createTable('user_token_auth', array(
|
60 |
+
'idusertokenauth' => 'BIGINT UNSIGNED NOT NULL AUTO_INCREMENT',
|
61 |
+
'login' => 'VARCHAR(100) NOT NULL',
|
62 |
+
'description' => 'VARCHAR('.Model::MAX_LENGTH_TOKEN_DESCRIPTION.') NOT NULL',
|
63 |
+
'password' => 'VARCHAR(191) NOT NULL',
|
64 |
+
'system_token' => 'TINYINT(1) NOT NULL DEFAULT 0',
|
65 |
+
'hash_algo' => 'VARCHAR(30) NOT NULL',
|
66 |
+
'last_used' => 'DATETIME NULL',
|
67 |
+
'date_created' => ' DATETIME NOT NULL',
|
68 |
+
'date_expired' => ' DATETIME NULL',
|
69 |
+
), 'idusertokenauth');
|
70 |
+
$migrations[] = $this->migration->db->addUniqueKey('user_token_auth', 'password', 'uniq_password');
|
71 |
+
|
72 |
+
$migrations[] = $this->migration->db->dropIndex('user', 'uniq_keytoken');
|
73 |
+
|
74 |
+
$userModel = new Model();
|
75 |
+
foreach ($userModel->getUsers(array()) as $user) {
|
76 |
+
if (!empty($user['token_auth'])) {
|
77 |
+
$migrations[] = $this->migration->db->insert('user_token_auth', array(
|
78 |
+
'login' => $user['login'],
|
79 |
+
'description' => 'Created by Matomo 4 migration',
|
80 |
+
'password' => $userModel->hashTokenAuth($user['token_auth']),
|
81 |
+
'date_created' => Date::now()->getDatetime()
|
82 |
+
));
|
83 |
+
}
|
84 |
+
}
|
85 |
|
86 |
+
/** APP SPECIFIC TOKEN END */
|
87 |
|
88 |
// invalidations table
|
89 |
$migrations[] = $this->migration->db->createTable('archive_invalidations', [
|
95 |
'date2' => 'DATE NOT NULL',
|
96 |
'period' => 'TINYINT UNSIGNED NOT NULL',
|
97 |
'ts_invalidated' => 'DATETIME NOT NULL',
|
98 |
+
'ts_started' => 'DATETIME NULL',
|
99 |
'status' => 'TINYINT(1) UNSIGNED DEFAULT 0',
|
100 |
'report' => 'VARCHAR(255) NULL',
|
101 |
], ['idinvalidation']);
|
103 |
$migrations[] = $this->migration->db->addIndex('archive_invalidations', ['idsite', 'date1', 'period'], 'index_idsite_dates_period_name');
|
104 |
|
105 |
$migrations[] = $this->migration->db->dropColumn('user', 'alias');
|
106 |
+
$migrations[] = $this->migration->db->dropColumn('user', 'token_auth');
|
107 |
|
108 |
+
// keep piwik_ignore for existing installs
|
109 |
+
$migrations[] = $this->migration->config->set('Tracker', 'ignore_visits_cookie_name', 'piwik_ignore');
|
|
|
|
|
|
|
|
|
110 |
|
|
|
|
|
111 |
$migrations[] = $this->migration->db->changeColumn('log_link_visit_action', 'interaction_position', 'pageview_position', 'MEDIUMINT UNSIGNED DEFAULT NULL');
|
112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
// Move the site search fields of log_visit out of custom variables into their own fields
|
114 |
$columnsToAdd['log_link_visit_action']['search_cat'] = 'VARCHAR(200) NULL';
|
115 |
$columnsToAdd['log_link_visit_action']['search_count'] = 'INTEGER(10) UNSIGNED NULL';
|
152 |
}
|
153 |
}
|
154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
// init seconds_to_... columns
|
156 |
$logVisitColumns = $tableMetadata->getColumns(Common::prefixTable('log_visit'));
|
157 |
$hasDaysColumnInVisit = in_array('visitor_days_since_first', $logVisitColumns);
|
172 |
visitor_seconds_since_order = visitor_days_since_order * 86400");
|
173 |
}
|
174 |
|
175 |
+
if (Manager::getInstance()->isPluginInstalled('CustomVariables')) {
|
176 |
+
$visitActionTable = Common::prefixTable('log_link_visit_action');
|
177 |
+
$migrations[] = $this->migration->db->sql("UPDATE $visitActionTable SET search_cat = if(custom_var_k4 = '_pk_scat', custom_var_v4, search_cat), search_count = if(custom_var_k5 = '_pk_scount', custom_var_v5, search_count) WHERE custom_var_k4 = '_pk_scat' or custom_var_k5 = '_pk_scount'");
|
178 |
+
}
|
179 |
+
|
180 |
// remove old days_to_... columns
|
181 |
$migrations[] = $this->migration->db->dropColumns('log_visit', [
|
182 |
'config_gears',
|
196 |
$migrations[] = $this->migration->config->set('mail', 'type', 'Cram-md5');
|
197 |
}
|
198 |
|
|
|
|
|
|
|
199 |
$migrations[] = $this->migration->plugin->activate('PagePerformance');
|
200 |
if (!Manager::getInstance()->isPluginActivated('CustomDimensions')) {
|
201 |
$migrations[] = $this->migration->plugin->activate('CustomDimensions');
|
211 |
$migrations[] = $this->migration->config->set('General', 'datatable_archiving_maximum_rows_subtable_custom_dimensions', $configSubTableLimit);
|
212 |
}
|
213 |
|
214 |
+
$migrations[] = $this->migration->db->changeColumnType('session', 'id', 'VARCHAR(191)');
|
215 |
+
$migrations[] = $this->migration->db->changeColumnType('site_url', 'url', 'VARCHAR(190)');
|
216 |
+
$migrations[] = $this->migration->db->changeColumnType('option', 'option_name', 'VARCHAR(191)');
|
217 |
+
|
218 |
+
$migrations[] = $this->migration->db->changeColumnType('log_action', 'name', 'VARCHAR(4096)');
|
219 |
+
$migrations[] = $this->migration->db->changeColumnType('log_conversion', 'url', 'VARCHAR(4096)');
|
220 |
return $migrations;
|
221 |
}
|
222 |
|
223 |
public function doUpdate(Updater $updater)
|
224 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
225 |
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
}
|
227 |
|
228 |
protected function usesGeoIpLegacyLocationProvider()
|
app/core/Updates/4.0.0-b3.php
DELETED
@@ -1,60 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Matomo - free/libre analytics platform
|
4 |
-
*
|
5 |
-
* @link https://matomo.org
|
6 |
-
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
-
*
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Piwik\Updates;
|
11 |
-
|
12 |
-
use Piwik\Config;
|
13 |
-
use Piwik\Updater;
|
14 |
-
use Piwik\Updates as PiwikUpdates;
|
15 |
-
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Update for version 4.0.0-b3.
|
19 |
-
*/
|
20 |
-
class Updates_4_0_0_b3 extends PiwikUpdates
|
21 |
-
{
|
22 |
-
/**
|
23 |
-
* @var MigrationFactory
|
24 |
-
*/
|
25 |
-
private $migration;
|
26 |
-
|
27 |
-
public function __construct(MigrationFactory $factory)
|
28 |
-
{
|
29 |
-
$this->migration = $factory;
|
30 |
-
}
|
31 |
-
|
32 |
-
public function getMigrations(Updater $updater)
|
33 |
-
{
|
34 |
-
$migrations = [];
|
35 |
-
|
36 |
-
$config = Config::getInstance();
|
37 |
-
$general = $config->General;
|
38 |
-
if (empty($general['login_whitelist_apply_to_reporting_api_requests'])) {
|
39 |
-
$migrations[] = $this->migration->config->set('General', 'login_allowlist_apply_to_reporting_api_requests', '0');
|
40 |
-
}
|
41 |
-
|
42 |
-
return $migrations;
|
43 |
-
}
|
44 |
-
|
45 |
-
public function doUpdate(Updater $updater)
|
46 |
-
{
|
47 |
-
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
48 |
-
|
49 |
-
$config = Config::getInstance();
|
50 |
-
$general = $config->General;
|
51 |
-
if (!empty($general['login_whitelist_ip'])) {
|
52 |
-
// the migration->config->set does not support arrays yet so we do it here.
|
53 |
-
$general['login_allowlist_ip'] = $general['login_whitelist_ip'];
|
54 |
-
$config->General = $general;
|
55 |
-
$config->forceSave();
|
56 |
-
}
|
57 |
-
|
58 |
-
}
|
59 |
-
|
60 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/core/Updates/4.0.0-rc3.php
DELETED
@@ -1,44 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Matomo - free/libre analytics platform
|
4 |
-
*
|
5 |
-
* @link https://matomo.org
|
6 |
-
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
-
*
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Piwik\Updates;
|
11 |
-
|
12 |
-
use Piwik\Config;
|
13 |
-
use Piwik\Updater;
|
14 |
-
use Piwik\Updates as PiwikUpdates;
|
15 |
-
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Update for version 4.0.0-b3.
|
19 |
-
*/
|
20 |
-
class Updates_4_0_0_rc3 extends PiwikUpdates
|
21 |
-
{
|
22 |
-
/**
|
23 |
-
* @var MigrationFactory
|
24 |
-
*/
|
25 |
-
private $migration;
|
26 |
-
|
27 |
-
public function __construct(MigrationFactory $factory)
|
28 |
-
{
|
29 |
-
$this->migration = $factory;
|
30 |
-
}
|
31 |
-
|
32 |
-
public function getMigrations(Updater $updater)
|
33 |
-
{
|
34 |
-
$migrations = [];
|
35 |
-
$migrations[] = $this->migration->db->addColumn('archive_invalidations', 'ts_started', 'DATETIME NULL');
|
36 |
-
return $migrations;
|
37 |
-
}
|
38 |
-
|
39 |
-
public function doUpdate(Updater $updater)
|
40 |
-
{
|
41 |
-
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
42 |
-
}
|
43 |
-
|
44 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/core/Updates/4.0.0-rc4.php
DELETED
@@ -1,68 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Matomo - free/libre analytics platform
|
4 |
-
*
|
5 |
-
* @link https://matomo.org
|
6 |
-
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
-
*
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Piwik\Updates;
|
11 |
-
|
12 |
-
use Piwik\Config;
|
13 |
-
use Piwik\Container\StaticContainer;
|
14 |
-
use Piwik\DataAccess\ArchiveTableCreator;
|
15 |
-
use Piwik\Date;
|
16 |
-
use Piwik\DbHelper;
|
17 |
-
use Piwik\Plugin\ReleaseChannels;
|
18 |
-
use Piwik\Updater;
|
19 |
-
use Piwik\Updates as PiwikUpdates;
|
20 |
-
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Update for version 4.0.0-rc4.
|
24 |
-
*/
|
25 |
-
class Updates_4_0_0_rc4 extends PiwikUpdates
|
26 |
-
{
|
27 |
-
/**
|
28 |
-
* @var MigrationFactory
|
29 |
-
*/
|
30 |
-
private $migration;
|
31 |
-
|
32 |
-
public function __construct(MigrationFactory $factory)
|
33 |
-
{
|
34 |
-
$this->migration = $factory;
|
35 |
-
}
|
36 |
-
|
37 |
-
public function getMigrations(Updater $updater)
|
38 |
-
{
|
39 |
-
$migrations = [];
|
40 |
-
|
41 |
-
$migrations[] = $this->migration->plugin->deactivate('ExampleTheme');
|
42 |
-
|
43 |
-
$channel = StaticContainer::get(ReleaseChannels::class)->getActiveReleaseChannel()->getId();
|
44 |
-
$isBeta = stripos($channel, 'beta') !== false;
|
45 |
-
|
46 |
-
if ($isBeta) {
|
47 |
-
$dates = ['2020-01-01', '2020-11-01', '2020-10-01'];
|
48 |
-
foreach ($dates as $date) {
|
49 |
-
$date = Date::factory($date);
|
50 |
-
$numericTable = ArchiveTableCreator::getBlobTable($date);
|
51 |
-
$blobTable = ArchiveTableCreator::getNumericTable($date);
|
52 |
-
|
53 |
-
if (DbHelper::tableExists($blobTable) && DbHelper::tableExists($numericTable)) {
|
54 |
-
$migrations[] = $this->migration->db->sql(
|
55 |
-
"DELETE FROM `$blobTable` WHERE idarchive NOT IN (SELECT idarchive FROM `$numericTable`)", []);
|
56 |
-
}
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
return $migrations;
|
61 |
-
}
|
62 |
-
|
63 |
-
public function doUpdate(Updater $updater)
|
64 |
-
{
|
65 |
-
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
66 |
-
}
|
67 |
-
|
68 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/core/Updates/4.0.1-b1.php
DELETED
@@ -1,56 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Matomo - free/libre analytics platform
|
4 |
-
*
|
5 |
-
* @link https://matomo.org
|
6 |
-
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
-
*
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Piwik\Updates;
|
11 |
-
|
12 |
-
use Piwik\Common;
|
13 |
-
use Piwik\Config;
|
14 |
-
use Piwik\Container\StaticContainer;
|
15 |
-
use Piwik\DataAccess\ArchiveTableCreator;
|
16 |
-
use Piwik\Date;
|
17 |
-
use Piwik\DbHelper;
|
18 |
-
use Piwik\Plugin\ReleaseChannels;
|
19 |
-
use Piwik\SettingsPiwik;
|
20 |
-
use Piwik\Updater;
|
21 |
-
use Piwik\Updates as PiwikUpdates;
|
22 |
-
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
23 |
-
|
24 |
-
class Updates_4_0_1_b1 extends PiwikUpdates
|
25 |
-
{
|
26 |
-
/**
|
27 |
-
* @var MigrationFactory
|
28 |
-
*/
|
29 |
-
private $migration;
|
30 |
-
|
31 |
-
public function __construct(MigrationFactory $factory)
|
32 |
-
{
|
33 |
-
$this->migration = $factory;
|
34 |
-
}
|
35 |
-
|
36 |
-
public function getMigrations(Updater $updater)
|
37 |
-
{
|
38 |
-
$migrations = [];
|
39 |
-
|
40 |
-
$table = Common::prefixTable('user_token_auth');
|
41 |
-
$migrations[] = $this->migration->db->sql('UPDATE ' . $table . ' SET hash_algo = "sha512" where hash_algo is null or hash_algo = "" ');
|
42 |
-
|
43 |
-
if (SettingsPiwik::isGitDeployment()) {
|
44 |
-
return $migrations;
|
45 |
-
}
|
46 |
-
|
47 |
-
$migrations[] = $this->migration->plugin->uninstall('ExampleTheme');
|
48 |
-
return $migrations;
|
49 |
-
}
|
50 |
-
|
51 |
-
public function doUpdate(Updater $updater)
|
52 |
-
{
|
53 |
-
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
54 |
-
}
|
55 |
-
|
56 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/core/Updates/4.0.4-b1.php
DELETED
@@ -1,64 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Matomo - free/libre analytics platform
|
4 |
-
*
|
5 |
-
* @link https://matomo.org
|
6 |
-
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
-
*
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Piwik\Updates;
|
11 |
-
|
12 |
-
use Piwik\SettingsPiwik;
|
13 |
-
use Piwik\Updater;
|
14 |
-
use Piwik\Updates as PiwikUpdates;
|
15 |
-
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
-
|
17 |
-
class Updates_4_0_4_b1 extends PiwikUpdates
|
18 |
-
{
|
19 |
-
/**
|
20 |
-
* @var MigrationFactory
|
21 |
-
*/
|
22 |
-
private $migration;
|
23 |
-
|
24 |
-
public function __construct(MigrationFactory $factory)
|
25 |
-
{
|
26 |
-
$this->migration = $factory;
|
27 |
-
}
|
28 |
-
|
29 |
-
public function getMigrations(Updater $updater)
|
30 |
-
{
|
31 |
-
$migrations = [];
|
32 |
-
|
33 |
-
if (SettingsPiwik::isGitDeployment()) {
|
34 |
-
return $migrations;
|
35 |
-
}
|
36 |
-
|
37 |
-
$migrations[] = $this->migration->plugin->deactivate('ExamplePlugin');
|
38 |
-
$migrations[] = $this->migration->plugin->deactivate('ExampleLogTables');
|
39 |
-
$migrations[] = $this->migration->plugin->deactivate('ExampleUI');
|
40 |
-
$migrations[] = $this->migration->plugin->deactivate('ExampleReport');
|
41 |
-
$migrations[] = $this->migration->plugin->deactivate('ExampleAPI');
|
42 |
-
$migrations[] = $this->migration->plugin->deactivate('ExampleCommand');
|
43 |
-
$migrations[] = $this->migration->plugin->deactivate('ExampleSettingsPlugin');
|
44 |
-
$migrations[] = $this->migration->plugin->deactivate('ExampleTracker');
|
45 |
-
$migrations[] = $this->migration->plugin->deactivate('ExampleVisualization');
|
46 |
-
|
47 |
-
$migrations[] = $this->migration->plugin->uninstall('ExamplePlugin');
|
48 |
-
$migrations[] = $this->migration->plugin->uninstall('ExampleLogTables');
|
49 |
-
$migrations[] = $this->migration->plugin->uninstall('ExampleUI');
|
50 |
-
$migrations[] = $this->migration->plugin->uninstall('ExampleReport');
|
51 |
-
$migrations[] = $this->migration->plugin->uninstall('ExampleAPI');
|
52 |
-
$migrations[] = $this->migration->plugin->uninstall('ExampleCommand');
|
53 |
-
$migrations[] = $this->migration->plugin->uninstall('ExampleSettingsPlugin');
|
54 |
-
$migrations[] = $this->migration->plugin->uninstall('ExampleTracker');
|
55 |
-
$migrations[] = $this->migration->plugin->uninstall('ExampleVisualization');
|
56 |
-
return $migrations;
|
57 |
-
}
|
58 |
-
|
59 |
-
public function doUpdate(Updater $updater)
|
60 |
-
{
|
61 |
-
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
62 |
-
}
|
63 |
-
|
64 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/plugins/Goals/Goals.php
CHANGED
@@ -165,7 +165,7 @@ class Goals extends \Piwik\Plugin
|
|
165 |
$metric->setCategory($custom->getCategoryId());
|
166 |
$metric->setDocumentation('The number of days it took a visitor to convert this goal.');
|
167 |
$metric->setName('goal_' . $goal['idgoal'] . '_daystoconversion');
|
168 |
-
$metric->setQuery('sum(log_conversion.visitor_seconds_since_first
|
169 |
$metricsList->addMetric($metric);
|
170 |
|
171 |
$custom = new GoalDimension($goal, 'visitor_count_visits', 'Visits to conversion goal "' . $goal['name'] . '" (ID ' . $goal['idgoal'] .' )');
|
165 |
$metric->setCategory($custom->getCategoryId());
|
166 |
$metric->setDocumentation('The number of days it took a visitor to convert this goal.');
|
167 |
$metric->setName('goal_' . $goal['idgoal'] . '_daystoconversion');
|
168 |
+
$metric->setQuery('sum(log_conversion.visitor_seconds_since_first / 86400)');
|
169 |
$metricsList->addMetric($metric);
|
170 |
|
171 |
$custom = new GoalDimension($goal, 'visitor_count_visits', 'Visits to conversion goal "' . $goal['name'] . '" (ID ' . $goal['idgoal'] .' )');
|
matomo.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Description: The #1 Google Analytics alternative that gives you full control over your data and protects the privacy for your users. Free, secure and open.
|
5 |
* Author: Matomo
|
6 |
* Author URI: https://matomo.org
|
7 |
-
* Version: 4.0.
|
8 |
* Domain Path: /languages
|
9 |
* WC requires at least: 2.4.0
|
10 |
* WC tested up to: 4.8.0
|
4 |
* Description: The #1 Google Analytics alternative that gives you full control over your data and protects the privacy for your users. Free, secure and open.
|
5 |
* Author: Matomo
|
6 |
* Author URI: https://matomo.org
|
7 |
+
* Version: 4.0.4
|
8 |
* Domain Path: /languages
|
9 |
* WC requires at least: 2.4.0
|
10 |
* WC tested up to: 4.8.0
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
|
|
4 |
Tags: matomo,piwik,analytics,statistics,stats,tracking,ecommerce
|
5 |
Requires at least: 4.8
|
6 |
Tested up to: 5.6
|
7 |
-
Stable tag: 4.0.
|
8 |
Requires PHP: 7.2.5
|
9 |
License: GPLv3 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
4 |
Tags: matomo,piwik,analytics,statistics,stats,tracking,ecommerce
|
5 |
Requires at least: 4.8
|
6 |
Tested up to: 5.6
|
7 |
+
Stable tag: 4.0.4
|
8 |
Requires PHP: 7.2.5
|
9 |
License: GPLv3 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|