PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.12.2
Independent Analytics – WordPress Analytics Plugin v2.12.2
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Migrations / Migrations.php
independent-analytics / IAWP / Migrations Last commit date
Creates_Reports.php 1 year ago Migration.php 1 year ago Migration_10.php 2 years ago Migration_11.php 2 years ago Migration_12.php 1 year ago Migration_13.php 2 years ago Migration_14.php 2 years ago Migration_15.php 2 years ago Migration_16.php 2 years ago Migration_17.php 1 year ago Migration_18.php 2 years ago Migration_19.php 2 years ago Migration_1_0.php 2 years ago Migration_1_6.php 2 years ago Migration_1_8.php 2 years ago Migration_1_9.php 2 years ago Migration_2.php 2 years ago Migration_20.php 2 years ago Migration_21.php 2 years ago Migration_22.php 2 years ago Migration_23.php 1 year ago Migration_24.php 2 years ago Migration_25.php 2 years ago Migration_26.php 2 years ago Migration_27.php 2 years ago Migration_28.php 2 years ago Migration_29.php 2 years ago Migration_3.php 2 years ago Migration_30.php 2 years ago Migration_31.php 2 years ago Migration_32.php 2 years ago Migration_33.php 2 years ago Migration_34.php 1 year ago Migration_35.php 1 year ago Migration_36.php 1 year ago Migration_37.php 1 year ago Migration_38.php 1 year ago Migration_39.php 1 year ago Migration_4.php 2 years ago Migration_40.php 1 year ago Migration_41.php 1 year ago Migration_42.php 1 year ago Migration_43.php 1 year ago Migration_5.php 2 years ago Migration_6.php 2 years ago Migration_7.php 1 year ago Migration_8.php 2 years ago Migration_9.php 2 years ago Migration_Job.php 1 year ago Migrations.php 1 year ago Step_Migration.php 1 year ago
Migrations.php
159 lines
1 <?php
2
3 namespace IAWP\Migrations;
4
5 use IAWP\Database;
6 use IAWP\Query;
7 use IAWP\Utils\Dir;
8 use IAWP\Utils\Server;
9 /** @internal */
10 class Migrations
11 {
12 /**
13 * @return void
14 */
15 public static function create_or_migrate() : void
16 {
17 if (self::should_migrate()) {
18 Server::increase_max_execution_time();
19 \update_option('iawp_is_migrating', '1', \true);
20 new \IAWP\Migrations\Migration_1_0();
21 new \IAWP\Migrations\Migration_1_6();
22 new \IAWP\Migrations\Migration_1_8();
23 new \IAWP\Migrations\Migration_1_9();
24 new \IAWP\Migrations\Migration_2();
25 new \IAWP\Migrations\Migration_3();
26 new \IAWP\Migrations\Migration_4();
27 new \IAWP\Migrations\Migration_5();
28 new \IAWP\Migrations\Migration_6();
29 new \IAWP\Migrations\Migration_7();
30 new \IAWP\Migrations\Migration_8();
31 new \IAWP\Migrations\Migration_9();
32 new \IAWP\Migrations\Migration_10();
33 new \IAWP\Migrations\Migration_11();
34 new \IAWP\Migrations\Migration_12();
35 new \IAWP\Migrations\Migration_13();
36 new \IAWP\Migrations\Migration_14();
37 new \IAWP\Migrations\Migration_15();
38 new \IAWP\Migrations\Migration_16();
39 new \IAWP\Migrations\Migration_17();
40 new \IAWP\Migrations\Migration_18();
41 new \IAWP\Migrations\Migration_19();
42 new \IAWP\Migrations\Migration_20();
43 new \IAWP\Migrations\Migration_21();
44 $completed = self::run_step_migrations([new \IAWP\Migrations\Migration_22(), new \IAWP\Migrations\Migration_23(), new \IAWP\Migrations\Migration_24(), new \IAWP\Migrations\Migration_25(), new \IAWP\Migrations\Migration_26(), new \IAWP\Migrations\Migration_27(), new \IAWP\Migrations\Migration_28(), new \IAWP\Migrations\Migration_29(), new \IAWP\Migrations\Migration_30(), new \IAWP\Migrations\Migration_31(), new \IAWP\Migrations\Migration_32(), new \IAWP\Migrations\Migration_33(), new \IAWP\Migrations\Migration_34(), new \IAWP\Migrations\Migration_35(), new \IAWP\Migrations\Migration_36(), new \IAWP\Migrations\Migration_37(), new \IAWP\Migrations\Migration_38(), new \IAWP\Migrations\Migration_39(), new \IAWP\Migrations\Migration_40(), new \IAWP\Migrations\Migration_41(), new \IAWP\Migrations\Migration_42(), new \IAWP\Migrations\Migration_43()]);
45 if ($completed === \true) {
46 \update_option('iawp_is_migrating', '0', \true);
47 \delete_option('iawp_migration_started_at');
48 \delete_option('iawp_last_finished_migration_step');
49 \delete_option('iawp_migration_error');
50 \delete_option('iawp_migration_error_query');
51 }
52 }
53 }
54 /**
55 * is_migrating is serving multiple purposes. It's also being used to stop ajax requests and dashboard
56 * widgets from running when the database version is newer than one that comes with the installed version
57 * of independent analytics. The probably should be a method called something `database_ready` that serves
58 * this purpose more explicitly.
59 *
60 * @return bool
61 */
62 public static function is_migrating() : bool
63 {
64 $db_version = \get_option('iawp_db_version', '0');
65 $is_migrating = \get_option('iawp_is_migrating') === '1';
66 $is_current = \version_compare($db_version, '43', '=');
67 $is_outdated = !$is_current;
68 return $is_outdated || $is_migrating;
69 }
70 public static function is_database_ahead_of_plugin() : bool
71 {
72 $db_version = \get_option('iawp_db_version', '0');
73 return \version_compare($db_version, '43', '>');
74 }
75 public static function is_actually_migrating() : bool
76 {
77 return \get_option('iawp_is_migrating') === '1';
78 }
79 /**
80 * @return bool
81 */
82 public static function should_migrate() : bool
83 {
84 $db_version = \get_option('iawp_db_version', '0');
85 $is_migrating = \get_option('iawp_is_migrating') === '1';
86 $is_current = \version_compare($db_version, '43', '=');
87 $is_outdated = !$is_current;
88 return $is_outdated && !$is_migrating;
89 }
90 public static function handle_migration_18_error() : void
91 {
92 $directory = \trailingslashit(\wp_upload_dir()['basedir']) . 'iawp/';
93 $db_version = \get_option('iawp_db_version', '0');
94 $is_migrating = \get_option('iawp_is_migrating', '0') === '1';
95 if ($db_version === '17' && $is_migrating && \is_dir($directory)) {
96 \update_option('iawp_db_version', '18', \true);
97 \update_option('iawp_is_migrating', '0', \true);
98 \delete_option('iawp_migration_started_at');
99 \delete_option('iawp_last_finished_migration_step');
100 \delete_option('iawp_migration_error');
101 \delete_option('iawp_migration_error_query');
102 try {
103 $directory = \trailingslashit(\wp_upload_dir()['basedir']) . 'iawp/';
104 Dir::delete($directory);
105 } catch (\Throwable $e) {
106 }
107 }
108 }
109 public static function handle_migration_22_error() : void
110 {
111 $db_version = \get_option('iawp_db_version', '0');
112 $is_migrating = \get_option('iawp_is_migrating', '0') === '1';
113 $last_finished_step = \get_option('iawp_last_finished_migration_step', '0');
114 $has_error = \get_option('iawp_migration_error_query', null) !== null && \get_option('iawp_migration_error', null) !== null;
115 $referrers_table = Query::get_table_name(Query::REFERRERS);
116 $has_index = Database::has_index($referrers_table, 'referrers_domain_index');
117 if ($db_version === '21' && $is_migrating && $last_finished_step === '0' && $has_error && !$has_index) {
118 \update_option('iawp_is_migrating', '0', \true);
119 \delete_option('iawp_migration_started_at');
120 \delete_option('iawp_last_finished_migration_step');
121 \delete_option('iawp_migration_error');
122 \delete_option('iawp_migration_error_query');
123 }
124 }
125 public static function handle_migration_29_error() : void
126 {
127 global $wpdb;
128 $db_version = \get_option('iawp_db_version', '0');
129 $is_migrating = \get_option('iawp_is_migrating', '0') === '1';
130 $last_finished_step = \get_option('iawp_last_finished_migration_step', '0');
131 $has_error = \get_option('iawp_migration_error_query', null) !== null && \get_option('iawp_migration_error', null) !== null;
132 if ($db_version === '28' && $is_migrating && $last_finished_step === '5' && $has_error) {
133 $sessions_table = Query::get_table_name(Query::SESSIONS);
134 $wpdb->query("ALTER TABLE {$sessions_table} DROP COLUMN visitor_id");
135 $wpdb->query("ALTER TABLE {$sessions_table} CHANGE COLUMN old_visitor_id visitor_id varchar(32)");
136 \delete_option('iawp_last_finished_migration_step');
137 \delete_option('iawp_migration_error');
138 \delete_option('iawp_migration_error_query');
139 \update_option('iawp_is_migrating', '0', \true);
140 \delete_option('iawp_migration_started_at');
141 }
142 }
143 /**
144 * @param Step_Migration[] $migrations
145 *
146 * @return bool
147 */
148 private static function run_step_migrations(array $migrations) : bool
149 {
150 foreach ($migrations as $migration) {
151 $completed = $migration->migrate();
152 if (!$completed) {
153 return \false;
154 }
155 }
156 return \true;
157 }
158 }
159