PluginProbe
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.2.2
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.2.2
4.7.2 4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 All 281 releases
surecart / app / src / Controllers / Rest / ReviewsController.php
ReviewsController.php
110 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SureCart\Controllers\Rest;
4
5 use SureCart\Models\Review;
6 use SureCart\Models\User;
7
8 /**
9 * Handle Review requests through the REST API.
10 */
11 class ReviewsController extends RestController {
12 /**
13 * Class to make the requests.
14 *
15 * @var string
16 */
17 protected $class = Review::class;
18
19 /**
20 * Always fetch with these subcollections.
21 *
22 * @var array<string>
23 */
24 protected $with = [ 'product', 'product.price', 'product.featured_product_media' ];
25
26 /**
27 * Middleware before we make the request.
28 *
29 * @param \SureCart\Models\Model $class Model class instance.
30 * @param \WP_REST_Request $request Request object.
31 *
32 * @return \SureCart\Models\Model|\WP_Error
33 */
34 protected function middleware( $class, \WP_REST_Request $request ) {
35 // Only set the user for create operations (user review submissions).
36 // Skip for read operations (admin viewing) and other operations that don't require customer association runtime.
37 if ( 'POST' === $request->get_method() ) {
38 $class = $this->maybeSetUser( $class, $request );
39 }
40
41 // return the class.
42 return apply_filters( 'surecart/request/model', $class, $request );
43 }
44
45 /**
46 * Publish a review.
47 *
48 * @param \WP_REST_Request $request Full details about the request.
49 * @return \WP_REST_Response|\WP_Error Response object on success, or WP_Error object on failure.
50 */
51 public function publish( \WP_REST_Request $request ) {
52 $class = new $this->class( $request->get_json_params() );
53 $class->id = $request['id'];
54 $model = $this->middleware( $class, $request );
55 if ( is_wp_error( $model ) ) {
56 return $model;
57 }
58
59 return $model->where( $request->get_query_params() )->with( $this->with )->publish( $request['id'] );
60 }
61
62 /**
63 * Unpublish a review.
64 *
65 * @param \WP_REST_Request $request Full details about the request.
66 * @return \WP_REST_Response|\WP_Error Response object on success, or WP_Error object on failure.
67 */
68 public function unpublish( \WP_REST_Request $request ) {
69 $class = new $this->class( $request->get_json_params() );
70 $class->id = $request['id'];
71 $model = $this->middleware( $class, $request );
72 if ( is_wp_error( $model ) ) {
73 return $model;
74 }
75
76 return $model->where( $request->get_query_params() )->with( $this->with )->unpublish( $request['id'] );
77 }
78
79 /**
80 * Let's set the customer's email and name if they are already logged in.
81 *
82 * @param \SureCart\Models\Model $class Model class instance.
83 * @param \WP_REST_Request $request Request object.
84 *
85 * @return \SureCart\Models\Model|\WP_Error
86 */
87 protected function maybeSetUser( \SureCart\Models\Model $class, \WP_REST_Request $request ) {
88 // Must be logged in.
89 if ( ! is_user_logged_in() ) {
90 return new \WP_Error(
91 'surecart_rest_review_no_user',
92 __( 'You must be logged in to submit a review.', 'surecart' ),
93 [ 'status' => 401 ]
94 );
95 }
96
97 $user = User::current();
98
99 // Get or create live customer.
100 $customer_id = $user->getOrCreateLiveCustomerId();
101 if ( is_wp_error( $customer_id ) ) {
102 return $customer_id;
103 }
104
105 // Set the customer ID on the review.
106 $class['customer'] = sanitize_text_field( $customer_id );
107 return $class;
108 }
109 }
110