PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / GetMigrations.php
give / src / API / Endpoints / Migrations Last commit date
Endpoint.php 5 months ago GetMigrations.php 1 year ago RunMigration.php 1 year ago
GetMigrations.php
208 lines
1 <?php
2
3 namespace Give\API\Endpoints\Migrations;
4
5 use Give\Framework\Migrations\Contracts\BatchMigration;
6 use Give\Framework\Migrations\Contracts\Migration;
7 use Give\Framework\Migrations\Contracts\ReversibleMigration;
8 use Give\Framework\Migrations\MigrationsRegister;
9 use Give\MigrationLog\Helpers\MigrationHelper;
10 use Give\MigrationLog\MigrationLogRepository;
11 use Give\MigrationLog\MigrationLogStatus;
12 use WP_REST_Request;
13 use WP_REST_Response;
14
15 /**
16 * Class GetMigrations
17 * @package Give\API\Endpoints\Logs
18 *
19 * @since 2.10.0
20 */
21 class GetMigrations extends Endpoint
22 {
23 /**
24 * Enable sorting by these columns
25 */
26 const SORTABLE_COLUMNS = ['id', 'status', 'last_run', 'run_order', 'title', 'source'];
27
28 /** @var string */
29 protected $endpoint = 'migrations/get-migrations';
30
31 /**
32 * @var MigrationLogRepository
33 */
34 private $migrationRepository;
35
36 /**
37 * @var MigrationHelper
38 */
39 private $migrationHelper;
40
41 /**
42 * @var MigrationsRegister
43 */
44 private $migrationRegister;
45
46 /**
47 * GetLogs constructor.
48 *
49 * @param MigrationLogRepository $repository
50 * @param MigrationHelper $migrationHelper
51 * @param MigrationsRegister $migrationRegister
52 */
53 public function __construct(
54 MigrationLogRepository $repository,
55 MigrationHelper $migrationHelper,
56 MigrationsRegister $migrationRegister
57 ) {
58 $this->migrationRepository = $repository;
59 $this->migrationHelper = $migrationHelper;
60 $this->migrationRegister = $migrationRegister;
61 }
62
63 /**
64 * @inheritDoc
65 */
66 public function registerRoute()
67 {
68 register_rest_route(
69 'give-api/v2',
70 $this->endpoint,
71 [
72 [
73 'methods' => 'GET',
74 'callback' => [$this, 'handleRequest'],
75 'permission_callback' => [$this, 'permissionsCheck'],
76 'args' => [
77 'page' => [
78 'validate_callback' => function ($param) {
79 return filter_var($param, FILTER_VALIDATE_INT);
80 },
81 'default' => '1',
82 ],
83 'sort' => [
84 'validate_callback' => function ($param) {
85 if (empty($param)) {
86 return true;
87 }
88
89 return in_array($param, self::SORTABLE_COLUMNS, true);
90 },
91 'default' => 'run_order',
92 ],
93 'direction' => [
94 'validate_callback' => function ($param) {
95 if (empty($param)) {
96 return true;
97 }
98
99 return in_array(strtoupper($param), ['ASC', 'DESC'], true);
100 },
101 'default' => 'ASC',
102 ],
103 ],
104 ],
105 'schema' => [$this, 'getSchema'],
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 'page' => [
121 'type' => 'integer',
122 'description' => esc_html__('Current page', 'give'),
123 ],
124 'sort' => [
125 'type' => 'string',
126 'description' => esc_html__('Sort by column', 'give'),
127 ],
128 'direction' => [
129 'type' => 'string',
130 'description' => esc_html__('Sort direction', 'give'),
131 ],
132 ],
133 ];
134 }
135
136 /**
137 * @param WP_REST_Request $request
138 *
139 * @return WP_REST_Response
140 */
141 public function handleRequest(WP_REST_Request $request)
142 {
143 $data = [];
144 $migrationsPerPage = 10;
145 $migrations = $this->migrationRepository->getMigrations();
146 $migrationsCount = count($this->migrationRegister->getRegisteredIds());
147 $pendingMigrations = $this->migrationHelper->getPendingMigrations();
148
149 foreach ($migrations as $migration) {
150 // Get only registered migrations
151 if ( ! $this->migrationRegister->hasMigration($migration->getId())) {
152 continue;
153 }
154
155 /* @var Migration $migrationClass */
156 $migrationClass = $this->migrationRegister->getMigration($migration->getId());
157
158 $data[] = [
159 'id' => $migration->getId(),
160 'status' => $migration->getStatus(),
161 'error' => $migration->getError(),
162 'last_run' => $migration->getLastRunDate(),
163 'run_order' => $this->migrationHelper->getRunOrderForMigration($migration->getId()),
164 'source' => $migrationClass::source(),
165 'title' => $migrationClass::title(),
166 'isBatchMigration' => is_subclass_of($migrationClass, BatchMigration::class),
167 'isReversible' => is_subclass_of($migrationClass, ReversibleMigration::class),
168 ];
169 }
170
171 // Check for pending migrations
172 /* @var Migration $migration */
173 foreach ($pendingMigrations as $migration) {
174 $data[] = [
175 'id' => $migration::id(),
176 'status' => MigrationLogStatus::PENDING,
177 'error' => '',
178 'last_run' => '',
179 'run_order' => $this->migrationHelper->getRunOrderForMigration($migration::id()),
180 'source' => $migration::source(),
181 'title' => $migration::title(),
182 'isBatchMigration' => is_subclass_of($migration, BatchMigration::class)
183 ];
184 }
185
186 // Sort migrations
187 $sortColumn = array_column($data, $request->get_param('sort'));
188 $sortDirection = ('DESC' === strtoupper($request->get_param('direction'))) ? SORT_DESC : SORT_ASC;
189
190 array_multisort($sortColumn, $sortDirection, $data);
191
192 // Pagination
193 $page = $request->get_param('page');
194 $offset = ($page - 1) * $migrationsPerPage;
195 $data = array_slice($data, $offset, $migrationsPerPage);
196
197 return new WP_REST_Response(
198 [
199 'status' => true,
200 'data' => $data,
201 'pages' => ceil($migrationsCount / $migrationsPerPage),
202 'showOptions' => 'enabled' === give_get_option('enable_database_updates'),
203 ]
204 );
205 }
206
207 }
208