PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.3.20
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.3.20
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 / CustomerController.php

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

271 lines 8.0 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 use FluentCart\Api\Resource\CustomerAddressResource;
6 use FluentCart\Api\Resource\CustomerResource;
7 use FluentCart\App\Helpers\CustomerHelper;
8 use FluentCart\App\Http\Requests\AttachUserRequest;
9 use FluentCart\App\Http\Requests\CustomerAddressRequest;
10 use FluentCart\App\Http\Requests\CustomerRequest;
11 use FluentCart\App\Models\Customer;
12 use FluentCart\App\Models\User;
13 use FluentCart\App\Services\Filter\CustomerFilter;
14 use FluentCart\App\Services\Filter\OrderFilter;
15 use FluentCart\Framework\Database\Orm\Collection;
16 use FluentCart\Framework\Http\Request\Request;
17 use FluentCart\Framework\Support\Arr;
18
19 class CustomerController extends Controller
20 {
21 public function index(Request $request): \WP_REST_Response
22 {
23 return $this->sendSuccess(
24 [
25 'customers' => CustomerFilter::fromRequest($request)->paginate()
26 ]
27 );
28 }
29
30 public function store(CustomerRequest $request)
31 {
32 $data = $request->getSafe($request->sanitize());
33 $isCreated = CustomerResource::create($data);
34
35 if (is_wp_error($isCreated)) {
36 return $isCreated;
37 }
38 return $this->response->sendSuccess($isCreated);
39 }
40
41 public function update(CustomerRequest $request, $customerId)
42 {
43 $data = $request->getSafe($request->sanitize());
44 $isUpdated = CustomerResource::update($data, $customerId);
45
46 if (is_wp_error($isUpdated)) {
47 return $isUpdated;
48 }
49 return $this->response->sendSuccess($isUpdated);
50 }
51
52 public function find(Request $request, $customerId)
53 {
54
55 $with = $request->get('with', []);
56
57 $customer = Customer::with($with)->find($customerId);
58
59 if (empty($customer)) {
60 return $this->entityNotFoundError(
61 __('Customer not found', 'fluent-cart'),
62 __('Back to Customer List', 'fluent-cart'),
63 '/customers'
64 );
65 }
66
67 $selectedLabels = Collection::make($customer['labels'])->pluck('label_id');
68 if ($request->get('params.customer_only') === 'yes') {
69 return $this->sendSuccess(['customer' => $customer]);
70 }
71
72 $customer['selected_labels'] = $selectedLabels;
73
74 $customer = apply_filters('fluent_cart/customer/view', $customer, $request->all());
75 return $this->sendSuccess(['customer' => $customer]);
76 }
77
78 public function findOrder(Request $request, $customerId)
79 {
80 return ['data' => CustomerResource::findOrder($customerId)];
81 }
82
83 public function updateAdditionalInfo(Request $request, $customerId)
84 {
85 $isUpdated = CustomerResource::updateAdditionalInfo($request->all(), $customerId);
86
87 if (is_wp_error($isUpdated)) {
88 return $isUpdated;
89 }
90 return $this->response->sendSuccess($isUpdated);
91 }
92
93 public function getAddress(Request $request, $customerId)
94 {
95 return [
96 'addresses' => CustomerAddressResource::get([
97 'customer_id' => $customerId,
98 'type' => $request->type
99 ])
100 ];
101 }
102
103 public function createAddress(CustomerAddressRequest $request, $customerId)
104 {
105
106 $data = $request->getSafe($request->sanitize());
107 $isCreated = CustomerAddressResource::create($data, ['id' => $customerId, 'order_id' => intval(Arr::get($request->all(), 'order_id', null))]);
108
109 if (is_wp_error($isCreated)) {
110 return $isCreated;
111 }
112 return $this->response->sendSuccess($isCreated);
113 }
114
115 public function updateAddress(CustomerAddressRequest $request)
116 {
117
118 $data = $request->getSafe($request->sanitize());
119 $id = Arr::get($request->all(), 'id');
120 $isUpdated = CustomerAddressResource::update($data, $id, ['order_id' => intval(Arr::get($request->all(), 'order_id', null))]);
121
122 if (is_wp_error($isUpdated)) {
123 return $isUpdated;
124 }
125 return $this->response->sendSuccess($isUpdated);
126 }
127
128 public function removeAddress(Request $request)
129 {
130
131 $id = Arr::get($request->address, 'id', false);
132 $isDeleted = CustomerAddressResource::delete($id);
133
134 if (is_wp_error($isDeleted)) {
135 return $isDeleted;
136 }
137 return $this->response->sendSuccess($isDeleted);
138 }
139
140 public function setAddressPrimary(Request $request, $customerId)
141 {
142 $isUpdated = CustomerAddressResource::makePrimary(
143 $customerId,
144 $request->getSafe('addressId', 'intval'),
145 $request->getSafe('type', 'sanitize_text_field')
146 );
147
148 if (is_wp_error($isUpdated)) {
149 return $isUpdated;
150 }
151 return $this->response->sendSuccess($isUpdated);
152 }
153
154 public function getCustomerOrders(Request $request, $customerId): array
155 {
156 $orderFilter = OrderFilter::fromRequest($request);
157 $orderFilter->query = $orderFilter->query->where('customer_id', $customerId);
158 return [
159 'orders' => $orderFilter->paginate()
160 ];
161 }
162
163 public function handleBulkActions(Request $request, CustomerHelper $customerHelper)
164 {
165 $isUpdated = CustomerResource::manageCustomer($request->all());
166
167 if (is_wp_error($isUpdated)) {
168 return $isUpdated;
169 }
170 return $this->response->sendSuccess($isUpdated);
171 }
172
173 public function getStats($customerId): \WP_REST_Response
174 {
175 $customer = CustomerResource::find($customerId);
176 return $this->sendSuccess([
177 'widgets' => apply_filters('fluent_cart/widgets/single_customer', [], $customer)
178 ]);
179 }
180
181
182 public function getAttachableUser(): \WP_REST_Response
183 {
184 return $this->sendSuccess([
185 'users' => User::query()->select('ID', 'display_name', 'user_email')->whereDoesntHave('customer')->get()
186 ]);
187 }
188
189 public function setAttachableUser(AttachUserRequest $request, $customerId): \WP_REST_Response
190 {
191
192 $customer = Customer::query()->with('wpUser')->find($customerId);
193
194 if (empty($customer)) {
195
196 return $this->sendError([
197 'message' => __('Customer not found.', 'fluent-cart')
198 ]);
199 }
200
201 if (!empty($customer->wpUser)) {
202 return $this->sendError([
203 'message' => __('Can not attach user', 'fluent-cart')
204 ]);
205 }
206
207 $data = $request->getSafe($request->sanitize());
208 $userId = Arr::get($data, 'user_id');
209
210
211 $customer->user_id = $userId;
212 $attached = $customer->save();
213
214 if ($attached) {
215 return $this->sendSuccess([
216 'message' => __('User attached successfully', 'fluent-cart')
217 ]);
218 } else {
219 return $this->sendError([
220 'message' => __('Can not attach user', 'fluent-cart')
221 ]);
222 }
223
224
225 }
226
227 public function detachCustomer(Request $request, $customerId): \WP_REST_Response
228 {
229
230 $customer = Customer::query()->find($customerId);
231
232 if (empty($customer)) {
233 return $this->sendError([
234 'message' => __('Customer not found.', 'fluent-cart')
235 ]);
236 }
237
238
239 $customer->user_id = null;
240 $detached = $customer->save();
241
242 if ($detached) {
243 return $this->sendSuccess([
244 'message' => __('User detached successfully', 'fluent-cart')
245 ]);
246 } else {
247 return $this->sendError([
248 'message' => __('Can not detach user', 'fluent-cart')
249 ]);
250 }
251 }
252
253 public function recalculateLtv(Request $request, $customerId): \WP_REST_Response
254 {
255 $customer = Customer::query()->find($customerId);
256
257 if (empty($customer)) {
258 return $this->sendError([
259 'message' => __('Customer not found.', 'fluent-cart')
260 ]);
261 }
262
263 $customer->recountStat();
264
265 return $this->sendSuccess([
266 'message' => __('Lifetime value recalculated successfully', 'fluent-cart'),
267 'customer' => $customer
268 ]);
269 }
270 }
271