PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.5.4
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.5.4
1.6.5 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 All 48 releases
fluent-cart / app / Http / Controllers / CouponsController.php

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

230 lines 7.2 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
38 return ['coupon' => CouponResource::viewDetails($id)];
39 }
40
41 public function create(CouponRequest $request)
42 {
43
44 $data = $request->getSafe($request->sanitize());
45
46 if (!empty($data['start_date'])) {
47 $data['start_date'] = DateTime::anyTimeToGmt($data['start_date']);
48 }
49
50 if (!empty($data['end_date'])) {
51 $data['end_date'] = DateTime::anyTimeToGmt($data['end_date']);
52 }
53
54 $isCreated = CouponResource::create($data);
55
56 if (is_wp_error($isCreated)) {
57 return $this->response->sendError($isCreated->get_error_message());
58 }
59
60 // Log activity for coupon creation
61 $createdId = Arr::get($isCreated, 'data.id');
62 if ($createdId) {
63 \fluent_cart_add_log(
64 __('Coupon Created', 'fluent-cart'),
65 sprintf(
66 /* translators: 1: coupon title, 2: user display name */
67 __('Coupon "%1$s" created by %2$s', 'fluent-cart'), Arr::get($isCreated, 'data.title', ''), wp_get_current_user()->display_name ?? 'FCT-BOT'),
68 'success',
69 [
70 'module_name' => 'coupon',
71 'module_id' => intval($createdId)
72 ]
73 );
74 }
75
76
77 do_action('fluent_cart/coupon_created', [
78 'data' => $data,
79 'coupon' => $isCreated['data']
80 ]);
81 return $this->response->sendSuccess($isCreated);
82 }
83
84 public function update(CouponRequest $request, $id)
85 {
86
87 $data = $request->getSafe($request->sanitize());
88
89 if (!empty($data['start_date'])) {
90 $data['start_date'] = DateTime::anyTimeToGmt($data['start_date']);
91 }
92
93 if (!empty($data['end_date'])) {
94 $data['end_date'] = DateTime::anyTimeToGmt($data['end_date']);
95 }
96
97 // @todo: we will remove this, stopping 100% recurring for now
98 // if (Arr::get($data, 'conditions.is_recurring') === 'yes') {
99 // if ((Arr::get($data, 'type') === 'percentage') && Arr::get($data, 'amount') >= 100) {
100 // return $this->response->sendError(
101 // [
102 // 'code' => 400,
103 // 'message' => __('Recurring is not supported for 100% discount.', 'fluent-cart')
104 // ]
105 // );
106 // }
107 // }
108
109 $isUpdated = CouponResource::update($data, $id);
110 if (is_wp_error($isUpdated)) {
111 return $isUpdated;
112 }
113 do_action('fluent_cart/coupon_updated', [
114 'data' => $data,
115 'coupon' => $isUpdated['data']
116 ]);
117
118 // Log activity for coupon update
119 $updatedId = Arr::get($isUpdated, 'data.id', $id);
120 if ($updatedId) {
121 \fluent_cart_add_log(
122 __('Coupon Updated', 'fluent-cart'),
123 sprintf(
124 /* translators: 1: coupon title, 2: user display name */
125 __('Coupon "%1$s" updated by %2$s', 'fluent-cart'), Arr::get($isUpdated, 'data.title', ''), wp_get_current_user()->display_name ?? 'FCT-BOT'),
126 'info',
127 [
128 'module_name' => 'coupon',
129 'module_id' => intval($updatedId)
130 ]
131 );
132 }
133
134
135 return $this->response->sendSuccess($isUpdated);
136 }
137
138 public function delete(Request $request)
139 {
140
141 $id = Arr::get($request->all(), 'id', null);
142 $isDeleted = CouponResource::delete($id);
143
144 if (is_wp_error($isDeleted)) {
145 return $isDeleted;
146
147 }
148 return $this->response->sendSuccess($isDeleted);
149 }
150
151 public function applyCoupon(OrderCouponRequest $request)
152 {
153 $data = $request->getSafe($request->sanitize());
154 $isApplied = CouponResource::applyCoupon($data);
155
156 if (is_wp_error($isApplied)) {
157 return $isApplied;
158 }
159 return $this->response->sendSuccess($isApplied);
160 }
161
162
163 public function cancelCoupon(OrderCouponRequest $request)
164 {
165 $data = $request->getSafe($request->sanitize());
166 $isCancelled = CouponResource::cancelCoupon($data);
167
168 if (is_wp_error($isCancelled)) {
169 return $isCancelled;
170
171 }
172 return $this->response->sendSuccess($isCancelled);
173 }
174
175 public function reapplyCoupon(Request $request)
176 {
177 $data = $request->getSafe([
178 'order_uuid' => 'sanitize_text_field',
179 'applied_coupons.*' => 'intval',
180 ]);
181 $data['order_items'] = Arr::except(Arr::get($request->all(), 'order_items', []), ['*']);
182
183 $isApplied = CouponResource::reapplyCoupon($data);
184
185 if (is_wp_error($isApplied)) {
186 return $isApplied;
187 }
188 return $this->response->sendSuccess($isApplied);
189 }
190
191
192 public function listCoupons(Request $request)
193 {
194 return ['coupons' => CouponResource::listCoupon()];
195 }
196
197 public function isProductEligible(Request $request)
198 {
199 $productId = Arr::get($request->all(), 'productId', null);
200 $appliedCoupons = Arr::get($request->all(), 'appliedCoupons', []);
201 $origin = Arr::get($request->all(), 'origin', null);
202 $checkEligibility = CouponResource::checkProductEligibility($productId, $appliedCoupons, $origin);
203 return $checkEligibility;
204 }
205
206 public function storeCouponSettings(Request $request)
207 {
208 $id = "";
209 $params = [];
210 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
211 $data['meta_key'] = 'fluent_cart_coupon_settings';
212 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
213 $data['meta_value'] = $showOnCheckout = Arr::get($request->all(), 'show_on_checkout', false) ? 1 : 0;
214
215 $isSaved = FluentMetaResource::update($data, $id, $params);
216 if (is_wp_error($isSaved)) {
217 return $isSaved;
218 }
219 return $isSaved;
220 }
221
222 public function getSettings()
223 {
224 $couponSettings = Meta::where('meta_key', 'fluent_cart_coupon_settings')->first();
225 return $this->response->sendSuccess([
226 'show_on_checkout' => $couponSettings ? $couponSettings['value'] : false
227 ]);
228 }
229 }
230