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