PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.2.1
GiveWP – Donation Plugin and Fundraising Platform v4.2.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 / API / Endpoints / Migrations / RunMigration.php
give / src / API / Endpoints / Migrations Last commit date
Endpoint.php 4 years ago GetMigrations.php 1 year ago RunMigration.php 1 year ago
RunMigration.php
237 lines
1 <?php
2
3 namespace Give\API\Endpoints\Migrations;
4
5 use Exception;
6 use Give\Framework\Database\DB;
7 use Give\Framework\Migrations\Contracts\BatchMigration;
8 use Give\Framework\Migrations\Contracts\Migration;
9 use Give\Framework\Migrations\Controllers\BatchMigrationRunner;
10 use Give\Framework\Migrations\MigrationsRegister;
11 use Give\MigrationLog\MigrationLogFactory;
12 use Give\MigrationLog\MigrationLogStatus;
13 use WP_REST_Request;
14 use WP_REST_Response;
15
16 /**
17 * Class RunMigration
18 * @package Give\API\Endpoints\Migrations
19 *
20 * @since 4.0.0 run batch migrations
21 * @since 2.10.0
22 */
23 class RunMigration extends Endpoint
24 {
25 /**
26 * @var MigrationsRegister
27 */
28 private $migrationRegister;
29
30 /**
31 * @var MigrationLogFactory
32 */
33 private $migrationLogFactory;
34
35 /**
36 * RunMigration constructor.
37 *
38 * @param MigrationsRegister $migrationsRegister
39 * @param MigrationLogFactory $migrationLogFactory
40 */
41 public function __construct(
42 MigrationsRegister $migrationsRegister,
43 MigrationLogFactory $migrationLogFactory
44 ) {
45 $this->migrationRegister = $migrationsRegister;
46 $this->migrationLogFactory = $migrationLogFactory;
47 }
48
49 /**
50 * @inheritDoc
51 */
52 public function registerRoute()
53 {
54 register_rest_route(
55 'give-api/v2',
56 'migrations/run-migration',
57 [
58 [
59 'methods' => 'POST',
60 'callback' => [$this, 'runMigration'],
61 'permission_callback' => [$this, 'permissionsCheck'],
62 'args' => [
63 'id' => [
64 'type' => 'string',
65 'required' => true,
66 ],
67 ],
68 ],
69 'schema' => [$this, 'getSchema'],
70 ]
71 );
72
73 register_rest_route(
74 'give-api/v2',
75 'migrations/run-batch-migration',
76 [
77 [
78 'methods' => 'POST',
79 'callback' => [$this, 'runBatchMigration'],
80 'permission_callback' => [$this, 'permissionsCheck'],
81 'args' => [
82 'id' => [
83 'type' => 'string',
84 'required' => true,
85 ],
86 ],
87 ],
88 ]
89 );
90
91 register_rest_route(
92 'give-api/v2',
93 'migrations/reschedule-failed-actions',
94 [
95 [
96 'methods' => 'POST',
97 'callback' => [$this, 'rescheduleFailedActions'],
98 'permission_callback' => [$this, 'permissionsCheck'],
99 'args' => [
100 'id' => [
101 'type' => 'string',
102 'required' => true,
103 ],
104 ],
105 ],
106 ]
107 );
108 }
109
110 /**
111 * @return array
112 */
113 public function getSchema()
114 {
115 return [
116 '$schema' => 'http://json-schema.org/draft-04/schema#',
117 'title' => 'logs',
118 'type' => 'object',
119 'properties' => [
120 'id' => [
121 'type' => 'string',
122 'description' => esc_html__('Migration ID', 'give'),
123 ],
124 ],
125 ];
126 }
127
128 /**
129 * @param WP_REST_Request $request
130 *
131 * @return WP_REST_Response
132 */
133 public function runMigration(WP_REST_Request $request): WP_REST_Response
134 {
135 $migrationId = $request->get_param('id');
136 $migrationLog = $this->migrationLogFactory->make($migrationId);
137
138 // Begin transaction
139 DB::beginTransaction();
140
141 try {
142 $migrationClass = $this->migrationRegister->getMigration($migrationId);
143 /**
144 * @var Migration $migration
145 */
146 $migration = give($migrationClass);
147 $migration->run();
148 // Save migration status
149 $migrationLog->setStatus(MigrationLogStatus::SUCCESS);
150 $migrationLog->setError(null);
151 $migrationLog->save();
152
153 DB::commit();
154
155 return new WP_REST_Response(['status' => true]);
156 } catch (Exception $exception) {
157 DB::rollback();
158
159 $migrationLog->setStatus(MigrationLogStatus::FAILED);
160 $migrationLog->setError($exception);
161 $migrationLog->save();
162 }
163
164 return new WP_REST_Response(
165 [
166 'status' => false,
167 'message' => $exception->getMessage(),
168 ]
169 );
170 }
171
172
173 /**
174 * Run batch migration
175 *
176 * @since 4.0.0
177 */
178 public function runBatchMigration(WP_REST_Request $request): WP_REST_Response
179 {
180 $migrationId = $request->get_param('id');
181 $migrationClass = $this->migrationRegister->getMigration($migrationId);
182
183 if ( ! is_subclass_of($migrationClass, BatchMigration::class)) {
184 return new WP_REST_Response([
185 'status' => false,
186 'message' => 'Migration is not an instance of ' . BatchMigration::class,
187 ]);
188 }
189
190 try {
191 // We are not running migration directly,
192 // we just have to set migration status to PENDING and Migration Runner will handle it
193 $migrationLog = $this->migrationLogFactory->make($migrationId);
194 $migrationLog->setStatus(MigrationLogStatus::PENDING);
195 $migrationLog->save();
196 } catch (Exception $e) {
197 return new WP_REST_Response([
198 'status' => false,
199 'message' => $e->getMessage(),
200 ]);
201 }
202
203 return new WP_REST_Response(['status' => true]);
204 }
205
206 /**
207 * Reschedule failed actions
208 *
209 * @since 4.0.0
210 */
211 public function rescheduleFailedActions(WP_REST_Request $request): WP_REST_Response
212 {
213 $migrationId = $request->get_param('id');
214 $migrationClass = $this->migrationRegister->getMigration($migrationId);
215 $migration = give($migrationClass);
216
217 if ( ! is_subclass_of($migration, BatchMigration::class)) {
218 return new WP_REST_Response([
219 'status' => false,
220 'message' => 'Migration is not an instance of ' . BatchMigration::class,
221 ]);
222 }
223
224 try {
225 (new BatchMigrationRunner($migration))->rescheduleFailedActions();
226 } catch (Exception $e) {
227 return new WP_REST_Response([
228 'status' => false,
229 'message' => $e->getMessage(),
230 ]);
231 }
232
233 return new WP_REST_Response(['status' => true]);
234 }
235
236 }
237