PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.5.1
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.5.1
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.5.1, at app/Http/Controllers/CustomerController.php

274 lines 8.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 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 $data = CustomerAddressResource::normalizeBusinessFields($data);
108 $isCreated = CustomerAddressResource::create($data, ['id' => $customerId, 'order_id' => intval(Arr::get($request->all(), 'order_id', null))]);
109
110 if (is_wp_error($isCreated)) {
111 return $isCreated;
112 }
113 return $this->response->sendSuccess($isCreated);
114 }
115
116 public function updateAddress(CustomerAddressRequest $request)
117 {
118
119 $data = $request->getSafe($request->sanitize());
120 $data = CustomerAddressResource::normalizeBusinessFields($data);
121 $id = Arr::get($request->all(), 'id');
122 $isUpdated = CustomerAddressResource::update($data, $id, ['order_id' => intval(Arr::get($request->all(), 'order_id', null))]);
123
124 if (is_wp_error($isUpdated)) {
125 return $isUpdated;
126 }
127 return $this->response->sendSuccess($isUpdated);
128 }
129
130 public function removeAddress(Request $request)
131 {
132
133 $id = Arr::get($request->address, 'id', false);
134 $isDeleted = CustomerAddressResource::delete($id);
135
136 if (is_wp_error($isDeleted)) {
137 return $isDeleted;
138 }
139 return $this->response->sendSuccess($isDeleted);
140 }
141
142 public function setAddressPrimary(Request $request, $customerId)
143 {
144 $isUpdated = CustomerAddressResource::makePrimary(
145 $customerId,
146 $request->getSafe('addressId', 'intval'),
147 $request->getSafe('type', 'sanitize_text_field')
148 );
149
150 if (is_wp_error($isUpdated)) {
151 return $isUpdated;
152 }
153 return $this->response->sendSuccess($isUpdated);
154 }
155
156 public function getCustomerOrders(Request $request, $customerId): array
157 {
158 $orderFilter = OrderFilter::fromRequest($request);
159 $orderFilter->query = $orderFilter->query->where('customer_id', $customerId);
160 return [
161 'orders' => $orderFilter->paginate()
162 ];
163 }
164
165 public function handleBulkActions(Request $request, CustomerHelper $customerHelper)
166 {
167 $isUpdated = CustomerResource::manageCustomer($request->all());
168
169 if (is_wp_error($isUpdated)) {
170 return $isUpdated;
171 }
172 return $this->response->sendSuccess($isUpdated);
173 }
174
175 public function getStats($customerId): \WP_REST_Response
176 {
177 $customer = CustomerResource::find($customerId);
178 return $this->sendSuccess([
179 'widgets' => apply_filters('fluent_cart/widgets/single_customer', [], $customer)
180 ]);
181 }
182
183
184 public function getAttachableUser(): \WP_REST_Response
185 {
186 return $this->sendSuccess([
187 'users' => User::query()->select('ID', 'display_name', 'user_email')->whereDoesntHave('customer')->get()
188 ]);
189 }
190
191 public function setAttachableUser(AttachUserRequest $request, $customerId): \WP_REST_Response
192 {
193
194 $customer = Customer::query()->with('wpUser')->find($customerId);
195
196 if (empty($customer)) {
197
198 return $this->sendError([
199 'message' => __('Customer not found.', 'fluent-cart')
200 ]);
201 }
202
203 if (!empty($customer->wpUser)) {
204 return $this->sendError([
205 'message' => __('Can not attach user', 'fluent-cart')
206 ]);
207 }
208
209 $data = $request->getSafe($request->sanitize());
210 $userId = Arr::get($data, 'user_id');
211
212
213 $customer->user_id = $userId;
214 $attached = $customer->save();
215
216 if ($attached) {
217 return $this->sendSuccess([
218 'message' => __('User attached successfully', 'fluent-cart')
219 ]);
220 } else {
221 return $this->sendError([
222 'message' => __('Can not attach user', 'fluent-cart')
223 ]);
224 }
225
226
227 }
228
229 public function detachCustomer(Request $request, $customerId): \WP_REST_Response
230 {
231
232 $customer = Customer::query()->find($customerId);
233
234 if (empty($customer)) {
235 return $this->sendError([
236 'message' => __('Customer not found.', 'fluent-cart')
237 ]);
238 }
239
240
241 $customer->user_id = null;
242 $detached = $customer->save();
243
244 if ($detached) {
245 return $this->sendSuccess([
246 'message' => __('User detached successfully', 'fluent-cart')
247 ]);
248 } else {
249 return $this->sendError([
250 'message' => __('Can not detach user', 'fluent-cart')
251 ]);
252 }
253 }
254
255 public function recalculateLtv(Request $request, $customerId): \WP_REST_Response
256 {
257 $customer = Customer::query()->find($customerId);
258
259 if (empty($customer)) {
260 return $this->sendError([
261 'message' => __('Customer not found.', 'fluent-cart')
262 ]);
263 }
264
265 $customer->recountStat();
266
267 return $this->sendSuccess([
268 'message' => __('Lifetime value recalculated successfully', 'fluent-cart'),
269 'customer' => $customer
270 ]);
271 }
272
273 }
274