PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.3
Booktics – Appointment Booking Calendar for Service Businesses v1.0.3
1.0.29 1.0.28 1.0.27 1.0.26 1.0.25 1.0.24 1.0.23 1.0.22 1.0.21 1.0.20 1.0.19 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.2 1.0.3 All 31 releases
booktics / trunk / core / extensions / controllers / module-controller.php

module-controller.php in Booktics – Appointment Booking Calendar for Service Businesses 1.0.3, at trunk/core/extensions/controllers/module-controller.php

249 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 Booktics\Extensions\Controllers;
4
5 use Booktics\Abstracts\Base_Rest_Controller;
6 use Arraytics\ToolsSdk\Extension as ExtensionManager;
7 use WP_HTTP_Response;
8 use WP_REST_Request;
9
10 /**
11 * Module Controller
12 *
13 * @package Booktics/Module
14 */
15 class Module_Controller extends Base_Rest_Controller {
16 /**
17 * The namespace of this controller's route.
18 *
19 * @since 1.0.0
20 * @var string
21 */
22 protected $namespace = 'booktics/v1';
23
24 /**
25 * The base of this controller's route.
26 *
27 * @since 1.0.0
28 * @var string
29 */
30 protected $rest_base = 'module';
31
32 /**
33 * Extension manager instance
34 *
35 * @var ExtensionManager
36 */
37 protected $extensions;
38
39 /**
40 * Initialize the class and set its properties.
41 */
42 public function __construct() {
43 $this->extensions = new ExtensionManager('booktics_available_modules', booktics_modules_list());
44 }
45
46 /**
47 * Register the routes for the objects of the controller.
48 *
49 * @since 1.0.0
50 *
51 * @return void
52 */
53 public function register_routes(): void {
54 register_rest_route($this->namespace, '/' . $this->rest_base, [
55 [
56 'methods' => \WP_REST_Server::READABLE,
57 'callback' => [$this, 'get_items'],
58 'permission_callback' => [$this, 'get_items_permissions_check'],
59 'args' => [
60 'type' => [
61 'description' => __('Type of extensions to retrieve (module, addon, plugin, all).', 'booktics'),
62 'type' => 'string',
63 'enum' => ['module', 'addon', 'plugin', 'all'],
64 'default' => 'all',
65 ],
66 ],
67 ],
68 [
69 'methods' => \WP_REST_Server::EDITABLE,
70 'callback' => [$this, 'update_item'],
71 'permission_callback' => [$this, 'update_item_permissions_check'],
72 ],
73 ]);
74 }
75
76 /**
77 * Check if a given request has permission to get items.
78 *
79 * @since 1.0.0
80 *
81 * @param WP_REST_Request $request Full data about the request.
82 * @return bool True if the request has read access, false otherwise.
83 */
84 public function get_items_permissions_check($request) {
85 return current_user_can('manage_options');
86 }
87
88 /**
89 * Check if a given request has permission to update items.
90 *
91 * @since 1.0.0
92 *
93 * @param WP_REST_Request $request Full data about the request.
94 * @return bool True if the request has update access, false otherwise.
95 */
96 public function update_item_permissions_check($request) {
97 return current_user_can('manage_options');
98 }
99
100 /**
101 * Get all extensions
102 *
103 * @since 1.0.0
104 *
105 * @param WP_REST_Request $request Full data about the request.
106 * @return WP_HTTP_Response Response object on success, or WP_Error object on failure.
107 */
108 public function get_items($request) {
109 $type = !empty($request['type']) ? $request['type'] : 'all';
110
111 $types = [
112 'module' => $this->extensions->get_modules(),
113 'addon' => $this->extensions->get_addons(),
114 'plugin' => $this->extensions->get_plugins(),
115 'all' => $this->extensions->get()
116 ];
117
118 if (!isset($types[$type])) {
119 return $this->error(
120 __('Invalid extension type', 'booktics'),
121 400,
122 'invalid_extension_type'
123 );
124 }
125
126 foreach ($types[$type] as $data) {
127 $modules_list[] = $data;
128 }
129
130 return $this->response($modules_list);
131 }
132
133 /**
134 * Update extension status
135 *
136 * @since 1.0.0
137 *
138 * @param WP_REST_Request $request Full data about the request.
139 * @return WP_HTTP_Response Response object on success, or WP_Error object on failure.
140 */
141 public function update_item($request) {
142 $params = json_decode($request->get_body(), true);
143
144 $name = isset($params['name']) ? sanitize_text_field($params['name']) : '';
145 $status = isset($params['status']) ? sanitize_text_field($params['status']) : '';
146
147 $valid_statuses = ['off', 'on', 'install', 'activate', 'deactivate'];
148
149 if (empty($name)) {
150 return $this->error(
151 __('Please enter extension name', 'booktics'),
152 422,
153 'extension_name_error'
154 );
155 }
156
157 if (empty($status)) {
158 return $this->error(
159 /* translators: %s: extension name */
160 sprintf(__('Please provide status for extension %s', 'booktics'), $name),
161 422,
162 'extension_status_error'
163 );
164 }
165
166 if (!in_array($status, $valid_statuses, true)) {
167 return $this->error(
168 /* translators: %s: extension status */
169 sprintf(__('Invalid status %s provided', 'booktics'), $status),
170 422,
171 'invalid_status'
172 );
173 }
174
175 $extension = $this->extensions->find($name);
176
177 if (!$extension) {
178 return $this->error(
179 /* translators: %s: extension name */
180 sprintf(__('Extension %s not found', 'booktics'), $name),
181 404,
182 'extension_not_found'
183 );
184 }
185
186 $result = $this->extensions->update($name, $status);
187
188 if (false === $result) {
189 return $this->error(
190 /* translators: %s: extension name */
191 sprintf(__('Could not %s the extension', 'booktics'), $status),
192 500,
193 'operation_failed'
194 );
195 }
196
197 $this->update_relevant_settings($name, $status);
198
199 return $this->response([
200 'name' => $name,
201 'status' => $status,
202 ],
203 /* translators: %s: extension name */
204 sprintf(__('Extension %s successfully', 'booktics'), $status)
205 );
206 }
207
208 /**
209 * Update relevant settings based on extension status
210 *
211 * @since 1.0.0
212 *
213 * @param string $extension_name Extension name.
214 * @param string $extension_status Extension status.
215 * @return void
216 */
217 public function update_relevant_settings($extension_name, $extension_status) {
218 $is_enabled = $extension_status === 'on';
219
220 switch ($extension_name) {
221 case 'stripe':
222 booktics_update_option('stripe_addon_install_status', $is_enabled ? 1 : 0);
223 booktics_update_option('enable_stripe', $is_enabled);
224 break;
225
226 case 'paypal':
227 booktics_update_option('paypal_connected', $is_enabled);
228 booktics_update_option('enable_paypal', $is_enabled);
229 break;
230
231 case 'google-calendar':
232 booktics_update_option('google_redirect_url', booktics_get_auth_redirect_uri('google-auth'));
233 booktics_update_option('google_calendar_connected', $is_enabled);
234 booktics_update_option('enable_google_calendar', $is_enabled);
235 break;
236
237 case 'outlook-calendar':
238 booktics_update_option('enable_outlook_calendar', $is_enabled);
239 break;
240
241 case 'fluentcrm':
242 booktics_update_option('enable_fluentcrm', $is_enabled);
243 break;
244 }
245 }
246 }
247
248
249