migration = $factory; } public function getMigrations(Updater $updater) { $migrations = array(); $migrations = $this->updateBrowserEngine($migrations); $migrations[] = $this->migration->plugin->activate('TestRunner'); return $migrations; } public function doUpdate(Updater $updater) { $updater->executeMigrations(__FILE__, $this->getMigrations($updater)); self::updateIPAnonymizationSettings(); } private function updateBrowserEngine($sql) { $sql[] = $this->migration->db->addColumn('log_visit', 'config_browser_engine', 'VARCHAR(10) NOT NULL'); $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[] = $this->migration->db->sql($engineUpdate); $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 $query = sprintf("UPDATE IGNORE %s SET name='DevicesDetection_browserEngines' WHERE name = 'UserSettings_browserType'", $table); $sql[] = $this->migration->db->sql($query); } 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'); } }