PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.9.4
GiveWP – Donation Plugin and Fundraising Platform v2.9.4
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
Actions 5 years ago Contracts 5 years ago Controllers 5 years ago Exceptions 5 years ago MigrationsRegister.php 5 years ago MigrationsRunner.php 5 years ago MigrationsServiceProvider.php 5 years ago
MigrationsRunner.php
132 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 for completed migrations
17 */
18 const MIGRATION_OPTION = 'give_database_migrations';
19
20 /**
21 * List of completed migrations.
22 *
23 * @since 2.9.0
24 *
25 * @var array
26 */
27 private $completedMigrations;
28
29 /**
30 * @since 2.9.0
31 *
32 * @var MigrationsRegister
33 */
34 private $migrationRegister;
35
36 /**
37 * MigrationsRunner constructor.
38 *
39 * @param MigrationsRegister $migrationRegister
40 */
41 public function __construct( MigrationsRegister $migrationRegister ) {
42 $this->migrationRegister = $migrationRegister;
43
44 $this->completedMigrations = get_option( self::MIGRATION_OPTION, [] );
45 }
46
47 /**
48 * Run database migrations.
49 *
50 * @since 2.9.0
51 */
52 public function run() {
53 global $wpdb;
54
55 if ( ! $this->hasMigrationToRun() ) {
56 return;
57 }
58
59 // Store and sort migrations by timestamp
60 $migrations = [];
61
62 foreach ( $this->migrationRegister->getMigrations() as $migrationClass ) {
63 /* @var Migration $migrationClass */
64 $migrations[ $migrationClass::timestamp() . '_' . $migrationClass::id() ] = $migrationClass;
65 }
66
67 ksort( $migrations );
68
69 // Process migrations.
70 $newMigrations = [];
71
72 foreach ( $migrations as $migrationClass ) {
73 $migrationId = $migrationClass::id();
74
75 if ( in_array( $migrationId, $this->completedMigrations, true ) ) {
76 continue;
77 }
78
79 // Begin transaction
80 $wpdb->query( 'START TRANSACTION' );
81
82 try {
83 /** @var Migration $migration */
84 $migration = give( $migrationClass );
85
86 $migration->run();
87 } catch ( Exception $exception ) {
88 $wpdb->query( 'ROLLBACK' );
89
90 give_record_log( 'Migration Failed', print_r( $exception, true ), 0, 'update' );
91 give()->notices->register_notice(
92 [
93 'id' => 'migration-failure',
94 'description' => sprintf(
95 '%1$s <a href="https://givewp.com/support/">https://givewp.com/support</a>',
96 esc_html__( 'There was a problem running the migrations. Please reach out to GiveWP support for assistance:', 'give' )
97 ),
98 ]
99 );
100
101 break;
102 }
103
104 // Commit transaction if successful
105 $wpdb->query( 'COMMIT' );
106
107 $newMigrations[] = $migrationId;
108 }
109
110 // Save processed migrations.
111 $this->completedMigrations = array_unique( array_merge( $this->completedMigrations, $newMigrations ) );
112
113 if ( $newMigrations ) {
114 update_option(
115 self::MIGRATION_OPTION,
116 $this->completedMigrations
117 );
118 }
119 }
120
121 /**
122 * Return whether or not all migrations completed.
123 *
124 * @since 2.9.0
125 *
126 * @return bool
127 */
128 public function hasMigrationToRun() {
129 return (bool) array_diff( $this->migrationRegister->getRegisteredIds(), $this->completedMigrations );
130 }
131 }
132