PluginProbe
Independent Analytics – WordPress Analytics Plugin / 1.23.1
Independent Analytics – WordPress Analytics Plugin v1.23.1
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 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 All 120 releases
independent-analytics / IAWP / Migrations / Migration.php
Migration.php
99 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace IAWP_SCOPED\IAWP\Migrations;
4
5 abstract class Migration
6 {
7 /**
8 * Classes that extend must provide their database version
9 *
10 * @var string
11 */
12 protected $database_version = '0';
13 public final function __construct()
14 {
15 $this->migrate();
16 }
17 /**
18 * Trigger the migration
19 *
20 * @return void
21 */
22 protected final function migrate() : void
23 {
24 $db_version = \get_option('iawp_db_version', '0');
25 if (\version_compare($db_version, $this->database_version, '<')) {
26 // Trigger the classes' migration function
27 $this->handle();
28 \update_option('iawp_db_version', $this->database_version);
29 }
30 }
31 /**
32 * Classes that extend must define a handle method where migration work is done
33 *
34 * @return void
35 */
36 protected abstract function handle() : void;
37 /**
38 * @return void
39 */
40 public static function create_or_migrate() : void
41 {
42 if (self::should_migrate()) {
43 \update_option('iawp_is_migrating', '1');
44 new Migration_1_0();
45 new Migration_1_6();
46 new Migration_1_8();
47 new Migration_1_9();
48 new Migration_2();
49 new Migration_3();
50 new Migration_4();
51 new Migration_5();
52 new Migration_6();
53 new Migration_7();
54 new Migration_8();
55 new Migration_9();
56 new Migration_10();
57 new Migration_11();
58 new Migration_12();
59 \update_option('iawp_is_migrating', '0');
60 }
61 }
62 /**
63 * is_migrating is serving multiple purposes. It's also being used to stop ajax requests and dashboard
64 * widgets from running when the database version is newer than one that comes with the installed version
65 * of independent analytics. The probably should be a method called something `database_ready` that serves
66 * this purpose more explicitly.
67 *
68 * @return bool
69 */
70 public static function is_migrating() : bool
71 {
72 $db_version = \get_option('iawp_db_version', '0');
73 $is_migrating = \get_option('iawp_is_migrating') === '1';
74 $is_current = \version_compare($db_version, '12', '=');
75 $is_outdated = !$is_current;
76 return $is_outdated || $is_migrating;
77 }
78 public static function has_newer_database_version() : bool
79 {
80 $db_version = \get_option('iawp_db_version', '0');
81 return \version_compare($db_version, '12', '>');
82 }
83 public static function is_actually_migrating() : bool
84 {
85 return \get_option('iawp_is_migrating') === '1';
86 }
87 /**
88 * @return bool
89 */
90 public static function should_migrate() : bool
91 {
92 $db_version = \get_option('iawp_db_version', '0');
93 $is_migrating = \get_option('iawp_is_migrating') === '1';
94 $is_current = \version_compare($db_version, '12', '=');
95 $is_outdated = !$is_current;
96 return $is_outdated && !$is_migrating;
97 }
98 }
99