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