PluginProbe
ReviewX – Multi-Criteria Reviews for WooCommerce with Google Reviews & Schema / trunk
ReviewX – Multi-Criteria Reviews for WooCommerce with Google Reviews & Schema vtrunk
2.5.1 2.5.0 2.4.1 2.4.0 2.3.11 2.3.10 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 All 143 releases
reviewx / app / Rest / Controllers / DiscountController.php

DiscountController.php in ReviewX – Multi-Criteria Reviews for WooCommerce with Google Reviews & Schema trunk, at app/Rest/Controllers/DiscountController.php

192 lines 8.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ReviewX\Rest\Controllers;
4
5 \defined("ABSPATH") || exit;
6 use ReviewX\Services\DiscountService;
7 use ReviewX\Utilities\Auth\Client;
8 use ReviewX\Utilities\Helper;
9 use WP_REST_Request;
10 use Throwable;
11 use ReviewX\WPDrill\Response;
12 class DiscountController
13 {
14 private const DISCOUNT_SETTINGS_CACHE_KEY = 'rvx_discount_settings';
15 private const DISCOUNT_TEMPLATE_CACHE_KEY = 'rvx_discount_email_content';
16 protected $couponService;
17 /**
18 * @param DiscountService $couponService
19 */
20 public function __construct(DiscountService $couponService)
21 {
22 $this->couponService = $couponService;
23 }
24 /**
25 * @param $request
26 * @return Response
27 */
28 public function wpDiscountCreate($request) : Response
29 {
30 try {
31 $coupon = $this->couponService->wpDiscountCreate($request->get_params());
32 if (!$coupon) {
33 return Helper::rvxApi()->fails('Failed to create discount');
34 }
35 $couponData = $coupon->get_data();
36 $couponId = Helper::arrayGet($couponData, 'id');
37 // Return coupon data directly to the SaaS caller.
38 // CouponSaveHandler fires automatically on $coupon->save() and syncs
39 // the new WC coupon to SaaS via coupon-sync, so we don't need to call
40 // back here — doing so would create a duplicate record.
41 return Helper::rvxApi(['code' => Helper::arrayGet($couponData, 'code'), 'amount' => Helper::arrayGet($couponData, 'amount'), 'wp_id' => $couponId, 'wp_unique_id' => Client::getUid() . '-' . $couponId])->success('Coupon created successfully');
42 } catch (Throwable $e) {
43 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Create Fails', $e->getCode());
44 }
45 }
46 /**
47 * @return Response
48 */
49 public function getDiscount()
50 {
51 $resp = $this->couponService->getDiscount();
52 return Helper::getApiResponse($resp);
53 }
54 public function couponCodes()
55 {
56 try {
57 $data = $this->couponService->getCouponCodes();
58 return Helper::rvxApi($data)->success('Coupon codes retrieved');
59 } catch (Throwable $e) {
60 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon codes retrieval failed', $e->getCode());
61 }
62 }
63 /**
64 * @return Response
65 */
66 public function discountSetting()
67 {
68 $cached = \get_transient(self::DISCOUNT_SETTINGS_CACHE_KEY);
69 if (\is_array($cached)) {
70 return Helper::rest($cached)->success();
71 }
72 $resp = $this->couponService->discountSetting();
73 if ($resp->getStatusCode() >= 200 && $resp->getStatusCode() < 300) {
74 \set_transient(self::DISCOUNT_SETTINGS_CACHE_KEY, $resp->getApiData(), HOUR_IN_SECONDS);
75 }
76 return Helper::getApiResponse($resp);
77 }
78 public function discountSettingsSave($request)
79 {
80 try {
81 $response = $this->couponService->discountSettingsSave($request->get_params());
82 if ($response->getStatusCode() >= 200 && $response->getStatusCode() < 300) {
83 \delete_transient(self::DISCOUNT_SETTINGS_CACHE_KEY);
84 }
85 return Helper::saasResponse($response);
86 } catch (Throwable $e) {
87 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Create Fails', $e->getCode());
88 }
89 }
90 public function saveDiscount($request)
91 {
92 try {
93 $response = $this->couponService->saveDiscount($request->get_params());
94 $this->couponService->clearCouponCodesCache();
95 return Helper::saasResponse($response);
96 } catch (Throwable $e) {
97 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Create Fails', $e->getCode());
98 }
99 }
100 public function couponCodesDelete(WP_REST_Request $request)
101 {
102 try {
103 $response = $this->couponService->deleteCouponCode(['wp_id' => (int) $request->get_param('wp_id'), 'uid' => (string) $request->get_param('uid'), 'wp_unique_id' => (string) $request->get_param('wp_unique_id'), 'resource_type' => (string) $request->get_param('resource_type')]);
104 if (!\is_object($response) || !\method_exists($response, 'getStatusCode')) {
105 return Helper::rvxApi()->fails('Coupon code delete failed');
106 }
107 return Helper::saasResponse($response);
108 } catch (Throwable $e) {
109 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon delete failed', $e->getCode());
110 }
111 }
112 public function discountTemplateGet()
113 {
114 try {
115 $cached = \get_transient(self::DISCOUNT_TEMPLATE_CACHE_KEY);
116 if (\is_array($cached)) {
117 return Helper::rest($cached)->success();
118 }
119 $response = $this->couponService->discountTemplateGet();
120 if ($response->getStatusCode() >= 200 && $response->getStatusCode() < 300) {
121 \set_transient(self::DISCOUNT_TEMPLATE_CACHE_KEY, $response->getApiData(), HOUR_IN_SECONDS);
122 }
123 return Helper::saasResponse($response);
124 } catch (Throwable $e) {
125 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Template Get Fails', $e->getCode());
126 }
127 }
128 public function discountTemplatePost($request)
129 {
130 try {
131 $response = $this->couponService->discountTemplatePost($request->get_params());
132 if ($response->getStatusCode() >= 200 && $response->getStatusCode() < 300) {
133 \delete_transient(self::DISCOUNT_TEMPLATE_CACHE_KEY);
134 }
135 return Helper::saasResponse($response);
136 } catch (Throwable $e) {
137 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Template Fails', $e->getCode());
138 }
139 }
140 public function discountMessage($request)
141 {
142 try {
143 $response = $this->couponService->discountMessage($request->get_params());
144 if ($response->getStatusCode() >= 200 && $response->getStatusCode() < 300) {
145 // discount/message mutates the same discount_contents blob that discountTemplateGet reads.
146 \delete_transient(self::DISCOUNT_TEMPLATE_CACHE_KEY);
147 }
148 return Helper::saasResponse($response);
149 } catch (Throwable $e) {
150 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Discount Message', $e->getCode());
151 }
152 }
153 public function discountEmails($request)
154 {
155 try {
156 $params = \array_filter($request->get_params(), fn($v) => $v !== null && $v !== '');
157 $response = $this->couponService->discountEmails($params);
158 return Helper::saasResponse($response);
159 } catch (Throwable $e) {
160 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Discount Emails Failed', $e->getCode());
161 }
162 }
163 public function wpApplyCoupon($request)
164 {
165 try {
166 $code = \sanitize_text_field($request->get_param('code') ?? '');
167 if (empty($code)) {
168 return Helper::rvxApi()->fails('Coupon code is required');
169 }
170 if (!\function_exists('ReviewX\\WC') || !WC()->cart) {
171 return Helper::rvxApi()->fails('WooCommerce cart not available');
172 }
173 $applied = WC()->cart->apply_coupon($code);
174 if ($applied) {
175 return Helper::rvxApi(['code' => $code])->success('Coupon applied successfully');
176 }
177 return Helper::rvxApi()->fails('Failed to apply coupon');
178 } catch (Throwable $e) {
179 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Apply Failed', $e->getCode());
180 }
181 }
182 public function manualSendDiscountEmail($request)
183 {
184 try {
185 $response = $this->couponService->manualSendDiscountEmail($request->get_params());
186 return Helper::saasResponse($response);
187 } catch (Throwable $e) {
188 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Manual Discount Email Failed', $e->getCode());
189 }
190 }
191 }
192