PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.23
Booktics – Appointment Booking Calendar for Service Businesses v1.0.23
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 / core / settings / controllers / settings-controller.php

settings-controller.php in Booktics – Appointment Booking Calendar for Service Businesses 1.0.23, at core/settings/controllers/settings-controller.php

243 lines 7.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Booktics\Settings\Controllers;
4
5 use Booktics\Abstracts\Base_Rest_Controller;
6 use Booktics\Services\Schedule_Manager;
7 use Booktics\Settings\Settings;
8 use WP_Error;
9 use WP_HTTP_Response;
10 use WP_REST_Request;
11 use WP_REST_Server;
12
13 if ( ! function_exists( 'is_plugin_active' ) ) {
14 require_once ABSPATH . 'wp-admin/includes/plugin.php';
15 }
16
17 /**
18 * Settings controller
19 *
20 * @package Booktics/Appointment
21 */
22 class Settings_Controller extends Base_Rest_Controller {
23 /**
24 * Endpoint namespace
25 *
26 * @var string
27 */
28 protected $namespace = 'booktics/v1';
29
30 /**
31 * Route name
32 *
33 * @var string
34 */
35 protected $rest_base = 'settings';
36
37 /**
38 * Register routes
39 *
40 * @return void
41 */
42 public function register_routes(): void {
43 register_rest_route(
44 $this->namespace,
45 '/' . $this->rest_base,
46 array(
47 array(
48 'methods' => WP_REST_Server::READABLE,
49 'callback' => array( $this, 'get_item' ),
50 'args' => array(),
51 'permission_callback' => array( $this, 'get_item_permissions_check' ),
52 ),
53 array(
54 'methods' => WP_REST_Server::EDITABLE,
55 'callback' => array( $this, 'update_item' ),
56 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
57 'permission_callback' => array(
58 $this,
59 'get_item_permissions_check',
60 ),
61 ),
62 'schema' => array( $this, 'get_public_item_schema' ),
63 )
64 );
65
66 register_rest_route(
67 $this->namespace,
68 '/' . $this->rest_base . '/public',
69 array(
70 array(
71 'methods' => WP_REST_Server::READABLE,
72 'callback' => array( $this, 'get_public_item' ),
73 'args' => array(),
74 'permission_callback' => array(
75 $this,
76 'get_public_item_permissions_check',
77 ),
78 ),
79 )
80 );
81
82 register_rest_route(
83 $this->namespace,
84 '/' . $this->rest_base . '/stripe/disconnect',
85 array(
86 array(
87 'methods' => WP_REST_Server::EDITABLE,
88 'callback' => array(
89 $this,
90 'stripe_disconnect',
91 ),
92 'permission_callback' => array(
93 $this,
94 'stripe_disconnect_permissions_check',
95 ),
96 ),
97 )
98 );
99 }
100
101 /**
102 * Check if a given request has access to get items.
103 *
104 * @param WP_REST_Request $request Full data about the request.
105 *
106 * @return WP_Error
107 */
108 public function get_item_permissions_check( $request ): bool {
109 return current_user_can( 'manage_options' );
110 }
111
112 /**
113 * Format settings for API response.
114 *
115 * @param array $settings Settings array.
116 *
117 * @return array
118 */
119 private function format_settings_for_response( array $settings ): array {
120 $settings['reschedule_restriction'] = empty( $settings['reschedule_restriction'] ) ? (object) array() : $settings['reschedule_restriction'];
121 $settings['custom_reschedule_status'] = empty( $settings['custom_reschedule_status'] ) ? (object) array() : $settings['custom_reschedule_status'];
122 $settings['cancellation_restriction'] = empty( $settings['cancellation_restriction'] ) ? (object) array() : $settings['cancellation_restriction'];
123 $settings['stripe_addon_install_status'] = 0;
124
125 $settings = apply_filters( 'booktics_format_setting_response', $settings );
126
127 return $settings;
128 }
129
130 /**
131 * Get a collection of items.
132 *
133 * @param WP_REST_Request $request Full data about the request.
134 *
135 * @return WP_HTTP_Response
136 */
137 public function get_item( $request ) {
138 $settings = Settings::get();
139 $settings = apply_filters( 'booktics_rest_settings', $settings );
140 $settings = $this->format_settings_for_response( $settings );
141
142 return $this->response( $settings, __( 'Settings fetched successfully.', 'booktics' ) );
143 }
144
145 /**
146 * Update plugin settings.
147 *
148 * @param WP_Rest_Request $request Request object.
149 *
150 * @return WP_HTTP_Response
151 */
152 public function update_item( $request ) {
153 $params = $request->get_params();
154
155 if ( isset( $params['schedule'] ) || isset( $params['custom'] ) || isset( $params['holiday'] ) ) {
156 $input_data = json_decode( $request->get_body(), true );
157 $schedule_manager = Schedule_Manager::make( $input_data );
158 $schedule_manager->save();
159 unset( $params['schedule'], $params['custom'], $params['holiday'] );
160 }
161
162 // Enforce an integer minute value for the reservation hold timeout.
163 if ( isset( $params['pending_reservation_timeout'] ) ) {
164 $minutes = absint( $params['pending_reservation_timeout'] );
165 $params['pending_reservation_timeout'] = $minutes > 0 ? $minutes : 10;
166 }
167
168 Settings::update( $params );
169
170 $settings = Settings::get();
171 $settings = apply_filters( 'booktics_rest_settings', $settings );
172 $settings = $this->format_settings_for_response( $settings );
173
174 return $this->response( $settings, __( 'Settings updated successfully.', 'booktics' ) );
175 }
176
177 /**
178 * Get public settings
179 */
180 public function get_public_item( $request ) {
181 $all = Settings::get();
182 $allowed = [
183 'primary_color',
184 'secondary_color',
185 'currency',
186 'currency_symbol_position',
187 'currency_decimals',
188 'currency_price_separator',
189 'enable_stripe_payment',
190 'enable_paypal_payment',
191 'enable_local_payment',
192 'stripe_publishable_key',
193 'show_end_time',
194 'calendar_locale',
195 'allow_customer_rescheduling',
196 'allow_customer_cancellation',
197 'reschedule_restriction',
198 'cancellation_restriction',
199 ];
200
201 $public = array_intersect_key( $all, array_flip( $allowed ) );
202 $public = apply_filters( 'booktics_rest_public_settings', $public );
203
204 return $this->response( $public, __( 'Public settings fetched successfully.', 'booktics' ) );
205 }
206
207 /**
208 * Check if a given request has access to get items.
209 *
210 * @param WP_REST_Request $request Full data about the request.
211 *
212 * @return bool
213 */
214 public function get_public_item_permissions_check( $request ): bool {
215 return true;
216 }
217
218 /**
219 * Check if a given request has access to get items.
220 *
221 * @param WP_REST_Request $request Full data about the request.
222 *
223 * @return bool
224 */
225 public function stripe_disconnect_permissions_check( $request ): bool {
226 return current_user_can( 'manage_options' );
227 }
228
229 /**
230 * Disconnect Stripe account by clearing account ID
231 *
232 * @param $request
233 *
234 * @return WP_HTTP_Response
235 */
236 public function stripe_disconnect( $request ) {
237 Settings::update( 'stripe_account_id', '' );
238 Settings::update( 'stripe_account_type', '' );
239
240 return $this->response( array(), __( 'Successfully disconnected Stripe account.', 'booktics' ) );
241 }
242 }
243