PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.9.1
GiveWP – Donation Plugin and Fundraising Platform v2.9.1
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Framework / Migrations / MigrationsRunner.php
give / src / Framework / Migrations Last commit date
Contracts 5 years ago MigrationsRegister.php 5 years ago MigrationsRunner.php 5 years ago MigrationsServiceProvider.php 5 years ago
MigrationsRunner.php
134 lines
1 <?php
2
3 namespace Give\Framework\Migrations;
4
5 use Exception;
6 use Give\Framework\Migrations\Contracts\Migration;
7 use Give_Notices;
8
9 /**
10 * Class MigrationsRunner
11 *
12 * @since 2.9.0
13 */
14 class MigrationsRunner {
15 /**
16 * Option name to store competed migrations.
17 *
18 * @var string
19 */
20 private $optionNameToStoreCompletedMigrations = 'give_database_migrations';
21
22 /**
23 * List of completed migrations.
24 *
25 * @since 2.9.0
26 *
27 * @var array
28 */
29 private $completedMigrations;
30
31 /**
32 * @since 2.9.0
33 *
34 * @var MigrationsRegister
35 */
36 private $migrationRegister;
37
38 /**
39 * MigrationsRunner constructor.
40 *
41 * @param MigrationsRegister $migrationRegister
42 */
43 public function __construct( MigrationsRegister $migrationRegister ) {
44 $this->migrationRegister = $migrationRegister;
45
46 $this->completedMigrations = get_option( $this->optionNameToStoreCompletedMigrations, [] );
47 }
48
49 /**
50 * Run database migrations.
51 *
52 * @since 2.9.0
53 */
54 public function run() {
55 global $wpdb;
56
57 if ( ! $this->hasMigrationToRun() ) {
58 return;
59 }
60
61 // Store and sort migrations by timestamp
62 $migrations = [];
63
64 foreach ( $this->migrationRegister->getMigrations() as $migrationClass ) {
65 /* @var Migration $migrationClass */
66 $migrations[ $migrationClass::timestamp() . '_' . $migrationClass::id() ] = $migrationClass;
67 }
68
69 ksort( $migrations );
70
71 // Process migrations.
72 $newMigrations = [];
73
74 foreach ( $migrations as $migrationClass ) {
75 $migrationId = $migrationClass::id();
76
77 if ( in_array( $migrationId, $this->completedMigrations, true ) ) {
78 continue;
79 }
80
81 // Begin transaction
82 $wpdb->query( 'START TRANSACTION' );
83
84 try {
85 /** @var Migration $migration */
86 $migration = give( $migrationClass );
87
88 $migration->run();
89 } catch ( Exception $exception ) {
90 $wpdb->query( 'ROLLBACK' );
91
92 give_record_log( 'Migration Failed', print_r( $exception, true ), 0, 'update' );
93 give()->notices->register_notice(
94 [
95 'id' => 'migration-failure',
96 'description' => sprintf(
97 '%1$s <a href="https://givewp.com/support/">https://givewp.com/support</a>',
98 esc_html__( 'There was a problem running the migrations. Please reach out to GiveWP support for assistance:', 'give' )
99 ),
100 ]
101 );
102
103 break;
104 }
105
106 // Commit transaction if successful
107 $wpdb->query( 'COMMIT' );
108
109 $newMigrations[] = $migrationId;
110 }
111
112 // Save processed migrations.
113 $this->completedMigrations = array_unique( array_merge( $this->completedMigrations, $newMigrations ) );
114
115 if ( $newMigrations ) {
116 update_option(
117 $this->optionNameToStoreCompletedMigrations,
118 $this->completedMigrations
119 );
120 }
121 }
122
123 /**
124 * Return whether or not all migrations completed.
125 *
126 * @since 2.9.0
127 *
128 * @return bool
129 */
130 public function hasMigrationToRun() {
131 return (bool) array_diff( $this->migrationRegister->getRegisteredIds(), $this->completedMigrations );
132 }
133 }
134