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