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