1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
<?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\Updates;
use Piwik\Common;
use Piwik\Db;
use Piwik\Option;
use Piwik\Plugin\Manager;
use Piwik\Updater;
use Piwik\Updates;
class Updates_2_9_0_b1 extends Updates
{
static function getSql()
{
$sql = array();
$sql = self::updateBrowserEngine($sql);
return $sql;
}
static function update()
{
Updater::updateDatabase(__FILE__, self::getSql());
self::updateIPAnonymizationSettings();
try {
Manager::getInstance()->activatePlugin('TestRunner');
} catch (\Exception $e) {
}
}
private static function updateBrowserEngine($sql)
{
$sql[sprintf("ALTER TABLE `%s` ADD COLUMN `config_browser_engine` VARCHAR(10) NOT NULL", Common::prefixTable('log_visit'))] = 1060;
$browserEngineMatch = array(
'Trident' => array('IE'),
'Gecko' => array('NS', 'PX', 'FF', 'FB', 'CA', 'GA', 'KM', 'MO', 'SM', 'CO', 'FE', 'KP', 'KZ', 'TB'),
'KHTML' => array('KO'),
'WebKit' => array('SF', 'CH', 'OW', 'AR', 'EP', 'FL', 'WO', 'AB', 'IR', 'CS', 'FD', 'HA', 'MI', 'GE', 'DF', 'BB', 'BP', 'TI', 'CF', 'RK', 'B2', 'NF'),
'Presto' => array('OP'),
);
// Update visits, fill in now missing engine
$engineUpdate = "''";
$ifFragment = "IF (`config_browser_name` IN ('%s'), '%s', %s)";
foreach ($browserEngineMatch AS $engine => $browsers) {
$engineUpdate = sprintf($ifFragment, implode("','", $browsers), $engine, $engineUpdate);
}
$engineUpdate = sprintf("UPDATE %s SET `config_browser_engine` = %s", Common::prefixTable('log_visit'), $engineUpdate);
$sql[$engineUpdate] = false;
$archiveBlobTables = Db::get()->fetchCol("SHOW TABLES LIKE '%archive_blob%'");
// for each blob archive table, rename UserSettings_browserType to DevicesDetection_browserEngines
foreach ($archiveBlobTables as $table) {
// try to rename old archives
$sql[sprintf("UPDATE IGNORE %s SET name='DevicesDetection_browserEngines' WHERE name = 'UserSettings_browserType'", $table)] = false;
}
return $sql;
}
private static function updateIPAnonymizationSettings()
{
$optionName = 'PrivacyManager.ipAnonymizerEnabled';
$value = Option::get($optionName);
if ($value !== false) {
// If the config is defined, nothing to do
return;
}
// We disable IP anonymization if it wasn't configured (because by default it has gone from disabled to enabled)
Option::set($optionName, '0');
}
}
|