PluginProbe
StoreEngine — Complete eCommerce Solution with Memberships, Licensing, Affiliates & More / 2.1.0
StoreEngine — Complete eCommerce Solution with Memberships, Licensing, Affiliates & More v2.1.0
2.3.0 2.2.0 2.1.1 2.1.0 2.0.0 1.10.0 1.9.1 1.9.0 1.2.1 1.2.2 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 All 59 releases
storeengine / includes / api / payment.php

payment.php in StoreEngine — Complete eCommerce Solution with Memberships, Licensing, Affiliates & More 2.1.0, at includes/api/payment.php

235 lines 6.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace StoreEngine\API;
4
5 use StoreEngine\Classes\Exceptions\StoreEngineException;
6 use StoreEngine\Classes\Order;
7 use StoreEngine\Classes\OrderCollection;
8 use StoreEngine\Utils\Helper;
9 use WP_Error;
10 use WP_REST_Request;
11 use WP_REST_Server;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 class Payment extends AbstractRestApiController {
18 public static function init() {
19 $self = new self();
20 $self->namespace = STOREENGINE_PLUGIN_SLUG . '/v1';
21 $self->rest_base = 'payment';
22
23 add_action( 'rest_api_init', [ $self, 'register_routes' ] );
24 }
25
26
27 public function register_routes() {
28 register_rest_route( $this->namespace, '/' . $this->rest_base, [
29 [
30 'methods' => WP_REST_Server::READABLE,
31 'callback' => [ $this, 'get_payment' ],
32 'permission_callback' => [ $this, 'check_payment_permissions' ],
33 'args' => $this->get_item_schema(),
34 ],
35 ] );
36 register_rest_route( $this->namespace, '/' . $this->rest_base, [
37 [
38 'methods' => WP_REST_Server::CREATABLE,
39 'callback' => [ $this, 'create_payment' ],
40 'permission_callback' => [ $this, 'check_payment_permissions' ],
41 'args' => $this->get_item_schema(),
42 ],
43 ] );
44 register_rest_route( $this->namespace, '/' . $this->rest_base . '/all', [
45 [
46 'methods' => WP_REST_Server::READABLE,
47 'callback' => [ $this, 'get_payments' ],
48 'permission_callback' => [ $this, 'check_admin_permissions' ],
49 'args' => $this->get_collection_params(),
50 ],
51 ] );
52
53 register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P<id>[\d]+)', [
54 'args' => [
55 'id' => [
56 'description' => __( 'Unique identifier for the object.', 'storeengine' ),
57 'type' => 'integer',
58 ],
59 ],
60 [
61 'methods' => WP_REST_Server::READABLE,
62 'callback' => [ $this, 'get_item' ],
63 'permission_callback' => [ $this, 'permissions_check' ],
64 'args' => [
65 'context' => $this->get_context_param( [ 'default' => 'view' ] ),
66 ],
67 ],
68 'schema' => [ $this, 'get_item_schema' ],
69 ] );
70
71 // @TODO implement update method.
72 // @TODO implement delete method.
73 }
74
75 public function check_admin_permissions() {
76 return Helper::check_rest_user_cap( 'manage_options' );
77 }
78
79 public function check_payment_permissions( WP_REST_Request $request ): bool {
80 $order_id = $request->get_param( 'order_id' );
81 if ( $order_id ) {
82 $order = Helper::get_order( $order_id );
83
84 return $order instanceof Order;
85 }
86
87 return false;
88 }
89
90 public function permissions_check() {
91 return Helper::check_rest_user_cap( 'manage_options' );
92 }
93
94 public function create_payment(): WP_Error {
95 return new WP_Error(
96 'endpoint_is_deprecated',
97 __( 'Please use checkout workflow. this endpoint is deprecated.', 'storeengine' ),
98 [ 'status' => 400 ]
99 );
100 }
101
102 public function get_payment( $request ) {
103 $id = 0;
104
105 foreach ( [ 'id', 'order', 'order_id', 'payment', 'payment_id' ] as $key ) {
106 if ( $request->has_param( $key ) && $request->get_param( $key ) ) {
107 $id = absint( $request->get_param( $key ) );
108 break;
109 }
110 }
111
112 if ( ! $id ) {
113 return new WP_Error( 'invalid-request', __( 'Invalid request', 'storeengine' ), [ 'status' => 400 ] );
114 }
115
116 $order = Helper::get_order( $id );
117
118 if ( ! is_wp_error( $order ) ) {
119 return $order;
120 }
121
122 return rest_ensure_response( $this->prepare_item_for_response( $order, $request ) );
123 }
124
125 public function collect_payment(): WP_Error {
126 return new WP_Error( 'not-implemented', __( 'Not implemented.', 'storeengine' ), [ 'status' => 501 ] );
127 }
128
129 public function get_payments( $request ) {
130 $page = max( 1, absint( $request->get_param( 'page' ) ) );
131 $status = $request->get_param( 'status' );
132 $search = $request->get_param( 'search' );
133 $customer = $request->get_param( 'customer' );
134 $where = [
135 'relation' => 'AND',
136 [
137 'key' => 'type',
138 'value' => 'order',
139 ],
140 [
141 'key' => 'total_amount',
142 'value' => 0,
143 'compare' => '>',
144 'type' => 'NUMERIC',
145 ],
146 ];
147
148 if ( $status && ! in_array( $status, [ 'all', 'any', 'draft', 'auto-draft' ], true ) ) {
149 $where[] = [
150 'key' => 'status',
151 'value' => $status,
152 ];
153 } else {
154 $where[] = [
155 'key' => 'status',
156 'value' => [ 'draft', 'auto-draft' ],
157 'compare' => 'NOT IN',
158 ];
159 }
160
161 if ( $customer ) {
162 $where[] = [
163 'key' => 'customer_id',
164 'value' => $customer,
165 'compare' => '=',
166 'type' => 'NUMERIC',
167 ];
168
169 if ( $search ) {
170 $where[] = [
171 'key' => 'payment_method_title',
172 'value' => "%$search%",
173 'compare' => 'LIKE',
174 ];
175 }
176 } else {
177 if ( $search ) {
178 $where[] = [
179 'relation' => 'OR',
180 [
181 'key' => 'billing_email',
182 'value' => "%$search%",
183 'compare' => 'LIKE',
184 ],
185 [
186 'key' => 'payment_method_title',
187 'value' => "%$search%",
188 'compare' => 'LIKE',
189 ],
190 ];
191 }
192 }
193
194 try {
195 $query = new OrderCollection( [
196 'per_page' => absint( $request->get_param( 'per_page' ) ),
197 'page' => $page,
198 'where' => $where,
199 ] );
200
201 $payments = [];
202
203 foreach ( $query->get_results() as $order ) {
204 $response = rest_ensure_response( $this->prepare_item_for_response( $order, $request ) );
205 $response->add_links( $this->prepare_links( $order, $request ) );
206 $payments[] = $this->prepare_response_for_collection( $response );
207 }
208
209 return $this->prepare_query_response( $payments, $query, $request );
210 } catch ( StoreEngineException $exception ) {
211 return rest_ensure_response( $exception->toWpError() );
212 }
213 }
214
215 public function get_item( $request ) {
216 $order = Helper::get_order( $request['id'] );
217
218 if ( ! is_wp_error( $order ) ) {
219 return $order;
220 }
221
222 return rest_ensure_response( $this->prepare_item_for_response( $order, $request ) );
223 }
224
225 /**
226 * @param Order $item object.
227 * @param WP_REST_Request $request Requests.
228 *
229 * @return array
230 */
231 public function prepare_item_for_response( $item, $request ): array {
232 return Helper::get_payment_data( $item );
233 }
234 }
235