PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.6.4
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.6.4
1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk 1.2.0 All 47 releases
fluent-cart / app / Http / Controllers / CouponsController.php

CouponsController.php in FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler 1.6.4, at app/Http/Controllers/CouponsController.php

238 lines 7.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCart\App\Http\Controllers;
4
5
6 use FluentCart\Api\Resource\CouponResource;
7 use FluentCart\Api\Resource\FluentMetaResource;
8 use FluentCart\Api\Resource\FrontendResource\CartResource;
9 use FluentCart\App\Helpers\CouponHelper;
10 use FluentCart\App\Http\Requests\CouponRequest;
11 use FluentCart\App\Http\Requests\FrontendRequests\CouponRequest as OrderCouponRequest;
12 use FluentCart\App\Models\Coupon;
13 use FluentCart\App\Models\Meta;
14 use FluentCart\App\Services\DateTime\DateTime;
15 use FluentCart\Framework\Http\Request\Request;
16 use FluentCart\Framework\Support\Arr;
17 use FluentCart\App\Services\Filter\CouponFilter;
18
19 class CouponsController extends Controller
20 {
21
22 public function index(Request $request)
23 {
24 $coupons = CouponFilter::fromRequest($request)->paginate();
25
26 foreach ($coupons as $coupon) {
27 CouponHelper::updateCouponStatus($coupon);
28 }
29
30 return $this->sendSuccess([
31 'coupons' => $coupons
32 ]);
33 }
34
35 public function viewDetails(Request $request, $id)
36 {
37 $coupon = CouponResource::viewDetails($id);
38
39 if (!$coupon) {
40 return CouponResource::makeErrorResponse([
41 ['code' => 404, 'message' => __('Coupon not found, please reload the page and try again!', 'fluent-cart')]
42 ], 404);
43 }
44
45 return ['coupon' => $coupon];
46 }
47
48 public function create(CouponRequest $request)
49 {
50
51 $data = $request->getSafe($request->sanitize());
52
53 if (!empty($data['start_date'])) {
54 $data['start_date'] = DateTime::anyTimeToGmt($data['start_date']);
55 }
56
57 if (!empty($data['end_date'])) {
58 $data['end_date'] = DateTime::anyTimeToGmt($data['end_date']);
59 }
60
61 $isCreated = CouponResource::create($data);
62
63 if (is_wp_error($isCreated)) {
64 return $this->response->sendError($isCreated->get_error_message());
65 }
66
67 // Log activity for coupon creation
68 $createdId = Arr::get($isCreated, 'data.id');
69 if ($createdId) {
70 \fluent_cart_add_log(
71 __('Coupon Created', 'fluent-cart'),
72 sprintf(
73 /* translators: 1: coupon title, 2: user display name */
74 __('Coupon "%1$s" created by %2$s', 'fluent-cart'), Arr::get($isCreated, 'data.title', ''), wp_get_current_user()->display_name ?? 'FCT-BOT'),
75 'success',
76 [
77 'module_name' => 'coupon',
78 'module_id' => intval($createdId)
79 ]
80 );
81 }
82
83
84 do_action('fluent_cart/coupon_created', [
85 'data' => $data,
86 'coupon' => $isCreated['data']
87 ]);
88 return $this->response->sendSuccess($isCreated);
89 }
90
91 public function update(CouponRequest $request, $id)
92 {
93
94 $data = $request->getSafe($request->sanitize());
95
96 if (!empty($data['start_date'])) {
97 $data['start_date'] = DateTime::anyTimeToGmt($data['start_date']);
98 }
99
100 if (!empty($data['end_date'])) {
101 $data['end_date'] = DateTime::anyTimeToGmt($data['end_date']);
102 }
103
104 // @todo: we will remove this, stopping 100% recurring for now
105 // if (Arr::get($data, 'conditions.is_recurring') === 'yes') {
106 // if ((Arr::get($data, 'type') === 'percentage') && Arr::get($data, 'amount') >= 100) {
107 // return $this->response->sendError(
108 // [
109 // 'code' => 400,
110 // 'message' => __('Recurring is not supported for 100% discount.', 'fluent-cart')
111 // ]
112 // );
113 // }
114 // }
115
116 $isUpdated = CouponResource::update($data, $id);
117 if (is_wp_error($isUpdated)) {
118 return $isUpdated;
119 }
120 do_action('fluent_cart/coupon_updated', [
121 'data' => $data,
122 'coupon' => $isUpdated['data']
123 ]);
124
125 // Log activity for coupon update
126 $updatedId = Arr::get($isUpdated, 'data.id', $id);
127 if ($updatedId) {
128 \fluent_cart_add_log(
129 __('Coupon Updated', 'fluent-cart'),
130 sprintf(
131 /* translators: 1: coupon title, 2: user display name */
132 __('Coupon "%1$s" updated by %2$s', 'fluent-cart'), Arr::get($isUpdated, 'data.title', ''), wp_get_current_user()->display_name ?? 'FCT-BOT'),
133 'info',
134 [
135 'module_name' => 'coupon',
136 'module_id' => intval($updatedId)
137 ]
138 );
139 }
140
141
142 return $this->response->sendSuccess($isUpdated);
143 }
144
145 public function delete(Request $request)
146 {
147
148 $id = Arr::get($request->all(), 'id', null);
149 $isDeleted = CouponResource::delete($id);
150
151 if (is_wp_error($isDeleted)) {
152 return $isDeleted;
153
154 }
155 return $this->response->sendSuccess($isDeleted);
156 }
157
158 public function applyCoupon(OrderCouponRequest $request)
159 {
160 $data = $request->getSafe($request->sanitize());
161 $isApplied = CouponResource::applyCoupon($data);
162
163 if (is_wp_error($isApplied)) {
164 return $isApplied;
165 }
166 return $this->response->sendSuccess($isApplied);
167 }
168
169
170 public function cancelCoupon(OrderCouponRequest $request)
171 {
172 $data = $request->getSafe($request->sanitize());
173 $isCancelled = CouponResource::cancelCoupon($data);
174
175 if (is_wp_error($isCancelled)) {
176 return $isCancelled;
177
178 }
179 return $this->response->sendSuccess($isCancelled);
180 }
181
182 public function reapplyCoupon(Request $request)
183 {
184 $data = $request->getSafe([
185 'order_uuid' => 'sanitize_text_field',
186 'applied_coupons.*' => 'intval',
187 'customer_email' => 'sanitize_email',
188 ]);
189 $data['order_items'] = Arr::except(Arr::get($request->all(), 'order_items', []), ['*']);
190
191 $isApplied = CouponResource::reapplyCoupon($data);
192
193 if (is_wp_error($isApplied)) {
194 return $isApplied;
195 }
196 return $this->response->sendSuccess($isApplied);
197 }
198
199
200 public function listCoupons(Request $request)
201 {
202 return ['coupons' => CouponResource::listCoupon()];
203 }
204
205 public function isProductEligible(Request $request)
206 {
207 $productId = Arr::get($request->all(), 'productId', null);
208 $appliedCoupons = Arr::get($request->all(), 'appliedCoupons', []);
209 $origin = Arr::get($request->all(), 'origin', null);
210 $checkEligibility = CouponResource::checkProductEligibilityForCodes($productId, $appliedCoupons, $origin);
211 return $checkEligibility;
212 }
213
214 public function storeCouponSettings(Request $request)
215 {
216 $id = "";
217 $params = [];
218 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
219 $data['meta_key'] = 'fluent_cart_coupon_settings';
220 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
221 $data['meta_value'] = $showOnCheckout = Arr::get($request->all(), 'show_on_checkout', false) ? 1 : 0;
222
223 $isSaved = FluentMetaResource::update($data, $id, $params);
224 if (is_wp_error($isSaved)) {
225 return $isSaved;
226 }
227 return $isSaved;
228 }
229
230 public function getSettings()
231 {
232 $couponSettings = Meta::where('meta_key', 'fluent_cart_coupon_settings')->first();
233 return $this->response->sendSuccess([
234 'show_on_checkout' => $couponSettings ? $couponSettings['value'] : false
235 ]);
236 }
237 }
238