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 / CptController.php

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

310 lines 12.4 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\CPT\CptHelper;
7 use ReviewX\Services\CptService;
8 use ReviewX\Services\DataSyncService;
9 use ReviewX\Services\SettingService;
10 use ReviewX\Utilities\Helper;
11 use ReviewX\Services\CacheServices;
12 use Throwable;
13 use ReviewX\WPDrill\Response;
14 class CptController
15 {
16 protected CptService $cptService;
17 protected DataSyncService $dataSyncService;
18 protected CacheServices $cacheServices;
19 protected CptHelper $cptHelper;
20 public function __construct()
21 {
22 $this->cptService = new CptService();
23 $this->dataSyncService = new DataSyncService();
24 $this->cacheServices = new CacheServices();
25 $this->cptHelper = new CptHelper();
26 }
27 /**
28 * @return array
29 */
30 public function cptGetOnSync()
31 {
32 $response = $this->cptService->cptGet();
33 $status = $this->cptSettings($response);
34 return [$status, \json_decode($response, \true)];
35 }
36 /**
37 * @return Response
38 */
39 public function cptGet()
40 {
41 $response = $this->cptService->cptGet();
42 $this->cptSettings($response);
43 return Helper::getApiResponse($response);
44 }
45 /**
46 * @return Response
47 */
48 public function cptStore($request)
49 {
50 try {
51 $response = $this->cptService->cptStore($request->get_params());
52 $resData = Helper::saasResponse($response);
53 if ($response->getStatusCode() === 200) {
54 // Update (_rvx_cpt_settings) CPT Settings
55 $response = $this->cptService->cptGet();
56 $this->cptSettings($response);
57 // Update (_rvx_ettings_{post_type}) CPT Settings
58 $post_type = $resData->data['data']['post_type'] ? \strtolower($resData->data['data']['post_type']) : '';
59 if (!empty($post_type)) {
60 $review_response = (new \ReviewX\Rest\Controllers\SettingController())->getApiReviewSettingsOnSync($post_type);
61 // Update Review settings
62 $review_settings = $review_response['data']['review_settings'];
63 (new SettingService())->updateReviewSettingsOnSync($review_settings, \strtolower($post_type));
64 }
65 // Upload CPT data to Saas
66 $this->dataSyncService->dataSync('default', $post_type);
67 $this->cacheServices->removeCache();
68 }
69 return Helper::rvxApi($resData)->success('Create Success', 200);
70 } catch (Throwable $e) {
71 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Create Fails', $e->getCode());
72 }
73 }
74 /**
75 * @return Response
76 */
77 public function cptUpdate($request)
78 {
79 try {
80 $response = $this->cptService->cptUpdate($request->get_params());
81 $resData = Helper::saasResponse($response);
82 if ($response->getStatusCode() === 200) {
83 // Update (_rvx_cpt_settings) CPT Settings
84 $response = $this->cptService->cptGet();
85 $this->cptSettings($response);
86 }
87 return Helper::rvxApi($resData)->success('Update Success', 200);
88 } catch (Throwable $e) {
89 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Update Fails', $e->getCode());
90 }
91 }
92 /**
93 * @return Response
94 */
95 public function cptDelete($request)
96 {
97 try {
98 $response = $this->cptService->cptDelete($request->get_params());
99 $resData = Helper::saasResponse($response);
100 if ($response->getStatusCode() === 200) {
101 // Update (_rvx_cpt_settings) CPT Settings
102 $response = $this->cptService->cptGet();
103 $this->cptSettings($response);
104 }
105 return Helper::rvxApi($resData)->success('Delete Success', 200);
106 } catch (Throwable $e) {
107 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Delete Fails', $e->getCode());
108 }
109 }
110 public function customPostTypes($request)
111 {
112 try {
113 // Available post types
114 $cptList = \array_map(function ($cpt) {
115 return ['name' => \strtolower($cpt['name']), 'slug' => \strtolower($cpt['slug'])];
116 }, $this->cptHelper->getPublicCptList());
117 // Post type settings from WPDB
118 $cptSettings = $this->cptHelper->cptSettings();
119 $enabled = [];
120 $disabled = [];
121 $used = [];
122 $unused = [];
123 // Extract post types from settings
124 $reviewPostTypes = [];
125 if (!empty($cptSettings['reviews'])) {
126 foreach ($cptSettings['reviews'] as $review) {
127 $postType = \strtolower($review['post_type']);
128 $reviewPostTypes[$postType] = ['name' => $review['post_type'] ? \strtolower($review['post_type']) : $postType, 'slug' => $postType, 'status' => $review['status']];
129 }
130 }
131 // Categorize post types
132 foreach ($cptList as $cpt) {
133 $slug = \strtolower($cpt['slug']);
134 $name = \strtolower($cpt['name']);
135 if (isset($reviewPostTypes[$slug])) {
136 $used[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug];
137 if ($reviewPostTypes[$slug]['status'] === 'Enabled') {
138 $enabled[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug];
139 } else {
140 $disabled[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug];
141 }
142 } else {
143 $unused[] = ['name' => $name, 'slug' => $slug];
144 }
145 }
146 // Ensure 'product' post type is included in all except 'unused'
147 $productPostType = ['name' => 'product', 'slug' => 'product'];
148 if (!\in_array('product', \array_column($enabled, 'slug'))) {
149 $enabled[] = $productPostType;
150 }
151 if (!\in_array('product', \array_column($cptList, 'slug'))) {
152 $cptList[] = $productPostType;
153 }
154 if (!\in_array('product', \array_column($used, 'slug'))) {
155 $used[] = $productPostType;
156 }
157 // Get API param
158 $apiParam = 'all';
159 if (\is_string($request)) {
160 // $apiParam is a string
161 $apiParam = $request;
162 } elseif (\is_object($request)) {
163 // $apiParam is an array
164 $apiParam = \strtolower($request->get_param('cpt'));
165 }
166 $responseData = [];
167 switch ($apiParam) {
168 case 'enabled':
169 $responseData = $enabled;
170 break;
171 case 'disabled':
172 $responseData = $disabled;
173 break;
174 case 'used':
175 $responseData = $used;
176 break;
177 case 'unused':
178 $responseData = $unused;
179 break;
180 case 'all':
181 $responseData = $cptList;
182 break;
183 default:
184 $responseData = $cptList;
185 }
186 if (\is_string($request)) {
187 return $responseData;
188 } elseif (\is_object($request)) {
189 return Helper::rvxApi($responseData)->success();
190 }
191 } catch (Throwable $e) {
192 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Custom Post Types List Fails', $e->getCode());
193 }
194 }
195 public function customPostTypesOnSync($param)
196 {
197 try {
198 // Available post types
199 $cptList = \array_map(function ($cpt) {
200 return ['name' => \strtolower($cpt['name']), 'slug' => \strtolower($cpt['slug'])];
201 }, $this->cptHelper->getPublicCptList());
202 // Post type settings from WPDB
203 $cptSettings = $this->cptHelper->cptSettingsOnSync();
204 $enabled = [];
205 $disabled = [];
206 $used = [];
207 $unused = [];
208 // Extract post types from settings
209 $reviewPostTypes = [];
210 if (!empty($cptSettings['reviews'])) {
211 foreach ($cptSettings['reviews'] as $review) {
212 $postType = \strtolower($review['post_type']);
213 $reviewPostTypes[$postType] = ['name' => $review['post_type'] ? \strtolower($review['post_type']) : $postType, 'slug' => $postType, 'status' => $review['status']];
214 }
215 }
216 // Categorize post types
217 foreach ($cptList as $cpt) {
218 $slug = \strtolower($cpt['slug']);
219 $name = \strtolower($cpt['name']);
220 if (isset($reviewPostTypes[$slug])) {
221 $used[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug];
222 if ($reviewPostTypes[$slug]['status'] === 'Enabled') {
223 $enabled[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug];
224 } else {
225 $disabled[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug];
226 }
227 } else {
228 $unused[] = ['name' => $name, 'slug' => $slug];
229 }
230 }
231 // Ensure 'product' post type is included in all except 'unused'
232 $productPostType = ['name' => 'product', 'slug' => 'product'];
233 if (!\in_array('product', \array_column($enabled, 'slug'))) {
234 $enabled[] = $productPostType;
235 }
236 if (!\in_array('product', \array_column($cptList, 'slug'))) {
237 $cptList[] = $productPostType;
238 }
239 if (!\in_array('product', \array_column($used, 'slug'))) {
240 $used[] = $productPostType;
241 }
242 // Get param
243 if (empty($param)) {
244 // $param is a string
245 $apiParam = 'all';
246 } elseif (\is_string($param)) {
247 // $apiParam is an array
248 $apiParam = \strtolower($param);
249 }
250 $responseData = [];
251 switch ($apiParam) {
252 case 'enabled':
253 $responseData = $enabled;
254 break;
255 case 'disabled':
256 $responseData = $disabled;
257 break;
258 case 'used':
259 $responseData = $used;
260 break;
261 case 'unused':
262 $responseData = $unused;
263 break;
264 case 'all':
265 $responseData = $cptList;
266 break;
267 default:
268 $responseData = $cptList;
269 }
270 return $responseData;
271 } catch (Throwable $e) {
272 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Custom Post Types List Fails', $e->getCode());
273 }
274 }
275 /**
276 * @return Response
277 */
278 public function cptStatusChange($request)
279 {
280 try {
281 $response = $this->cptService->cptStatusChange($request->get_params());
282 $resData = Helper::saasResponse($response);
283 if ($response->getStatusCode() === 200) {
284 // Update (_rvx_cpt_settings) CPT Settings
285 $response = $this->cptService->cptGet();
286 $this->cptSettings($response);
287 // Update (_rvx_ettings_{post_type}) CPT Settings
288 $post_type = $resData->data['data']['post_type'] ? \strtolower($resData->data['data']['post_type']) : '';
289 // Upload CPT data to Saas
290 if ($resData->data['data']['status'] === 'Enabled') {
291 $this->dataSyncService->dataSync('default', $post_type);
292 $this->cacheServices->removeCache();
293 }
294 }
295 return Helper::rvxApi($resData)->success('Status Change Success', 200);
296 } catch (Throwable $e) {
297 return Helper::rvxApi(['error' => $e->getMessage()])->fails('Status Change Fails', $e->getCode());
298 }
299 }
300 public function cptSettings($response)
301 {
302 $status = \false;
303 $dataArray = \json_decode($response, \true);
304 if ($dataArray !== null) {
305 $status = \update_option('_rvx_cpt_settings', $dataArray['data']);
306 }
307 return $status;
308 }
309 }
310