PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.14.0
GiveWP – Donation Plugin and Fundraising Platform v2.14.0
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
161 lines
1 <?php
2
3 namespace Give\Framework\Migrations;
4
5 use Exception;
6 use Give\Framework\Database\Exceptions\DatabaseQueryException;
7 use Give\Framework\Migrations\Contracts\Migration;
8 use Give\Log\Log;
9 use Give\MigrationLog\MigrationLogFactory;
10 use Give\MigrationLog\MigrationLogRepository;
11 use Give\MigrationLog\MigrationLogStatus;
12
13 /**
14 * Class MigrationsRunner
15 *
16 * @since 2.9.0
17 */
18 class MigrationsRunner {
19 /**
20 * List of completed migrations.
21 *
22 * @since 2.9.0
23 *
24 * @var array
25 */
26 private $completedMigrations;
27
28 /**
29 * @since 2.9.0
30 *
31 * @var MigrationsRegister
32 */
33 private $migrationRegister;
34
35 /**
36 * @since 2.10.0
37 *
38 * @var MigrationLogFactory
39 */
40 private $migrationLogFactory;
41
42 /**
43 * @since 2.10.0
44 * @var MigrationLogRepository
45 */
46 private $migrationLogRepository;
47
48 /**
49 * MigrationsRunner constructor.
50 *
51 * @param MigrationsRegister $migrationRegister
52 * @param MigrationLogFactory $migrationLogFactory
53 * @param MigrationLogRepository $migrationLogRepository
54 */
55 public function __construct(
56 MigrationsRegister $migrationRegister,
57 MigrationLogFactory $migrationLogFactory,
58 MigrationLogRepository $migrationLogRepository
59 ) {
60 $this->migrationRegister = $migrationRegister;
61 $this->migrationLogFactory = $migrationLogFactory;
62 $this->migrationLogRepository = $migrationLogRepository;
63 $this->completedMigrations = $this->migrationLogRepository->getCompletedMigrationsIDs();
64 }
65
66 /**
67 * Run database migrations.
68 *
69 * @since 2.9.0
70 */
71 public function run() {
72 global $wpdb;
73
74 if ( ! $this->hasMigrationToRun() ) {
75 return;
76 }
77
78 // Stop Migration Runner if there are failed migrations
79 if ( $this->migrationLogRepository->getFailedMigrationsCountByIds( $this->migrationRegister->getRegisteredIds() ) ) {
80 return;
81 }
82
83 // Store and sort migrations by timestamp
84 $migrations = [];
85
86 foreach ( $this->migrationRegister->getMigrations() as $migrationClass ) {
87 /* @var Migration $migrationClass */
88 $migrations[ $migrationClass::timestamp() . '_' . $migrationClass::id() ] = $migrationClass;
89 }
90
91 ksort( $migrations );
92
93 foreach ( $migrations as $key => $migrationClass ) {
94 $migrationId = $migrationClass::id();
95
96 if ( in_array( $migrationId, $this->completedMigrations, true ) ) {
97 continue;
98 }
99
100 $migrationLog = $this->migrationLogFactory->make( $migrationId );
101
102 // Begin transaction
103 $wpdb->query( 'START TRANSACTION' );
104
105 try {
106 /** @var Migration $migration */
107 $migration = give( $migrationClass );
108
109 $migration->run();
110
111 // Save migration status
112 $migrationLog->setStatus( MigrationLogStatus::SUCCESS );
113
114 } catch ( Exception $exception ) {
115 $wpdb->query( 'ROLLBACK' );
116
117 $migrationLog->setStatus( MigrationLogStatus::FAILED );
118 $migrationLog->setError( $exception );
119
120 give()->notices->register_notice(
121 [
122 'id' => 'migration-failure',
123 'description' => sprintf(
124 '%1$s <a href="https://givewp.com/support/">https://givewp.com/support</a>',
125 esc_html__( 'There was a problem running the migrations. Please reach out to GiveWP support for assistance:', 'give' )
126 ),
127 ]
128 );
129
130 break;
131 }
132
133 try {
134 $migrationLog->save();
135 } catch ( DatabaseQueryException $e ) {
136 Log::error(
137 'Failed to save migration log',
138 [
139 'Error Message' => $e->getMessage(),
140 'Query Errors' => $e->getQueryErrors(),
141 ]
142 );
143 }
144
145 // Commit transaction if successful
146 $wpdb->query( 'COMMIT' );
147 }
148 }
149
150 /**
151 * Return whether or not all migrations completed.
152 *
153 * @since 2.9.0
154 *
155 * @return bool
156 */
157 public function hasMigrationToRun() {
158 return (bool) array_diff( $this->migrationRegister->getRegisteredIds(), $this->completedMigrations );
159 }
160 }
161