PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.19
Booktics – Appointment Booking Calendar for Service Businesses v1.0.19
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 1.0.4 1.0.5 1.0.6 1.0.7 All 27 releases
booktics / core / settings / controllers / settings-controller.php

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

237 lines 7.4 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 Settings::update( $params );
163
164 $settings = Settings::get();
165 $settings = apply_filters( 'booktics_rest_settings', $settings );
166 $settings = $this->format_settings_for_response( $settings );
167
168 return $this->response( $settings, __( 'Settings updated successfully.', 'booktics' ) );
169 }
170
171 /**
172 * Get public settings
173 */
174 public function get_public_item( $request ) {
175 $all = Settings::get();
176 $allowed = [
177 'primary_color',
178 'secondary_color',
179 'currency',
180 'currency_symbol_position',
181 'currency_decimals',
182 'currency_price_separator',
183 'enable_stripe_payment',
184 'enable_paypal_payment',
185 'enable_local_payment',
186 'stripe_publishable_key',
187 'show_end_time',
188 'calendar_locale',
189 'allow_customer_rescheduling',
190 'allow_customer_cancellation',
191 'reschedule_restriction',
192 'cancellation_restriction',
193 ];
194
195 $public = array_intersect_key( $all, array_flip( $allowed ) );
196 $public = apply_filters( 'booktics_rest_public_settings', $public );
197
198 return $this->response( $public, __( 'Public settings fetched successfully.', 'booktics' ) );
199 }
200
201 /**
202 * Check if a given request has access to get items.
203 *
204 * @param WP_REST_Request $request Full data about the request.
205 *
206 * @return bool
207 */
208 public function get_public_item_permissions_check( $request ): bool {
209 return true;
210 }
211
212 /**
213 * Check if a given request has access to get items.
214 *
215 * @param WP_REST_Request $request Full data about the request.
216 *
217 * @return bool
218 */
219 public function stripe_disconnect_permissions_check( $request ): bool {
220 return current_user_can( 'manage_options' );
221 }
222
223 /**
224 * Disconnect Stripe account by clearing account ID
225 *
226 * @param $request
227 *
228 * @return WP_HTTP_Response
229 */
230 public function stripe_disconnect( $request ) {
231 Settings::update( 'stripe_account_id', '' );
232 Settings::update( 'stripe_account_type', '' );
233
234 return $this->response( array(), __( 'Successfully disconnected Stripe account.', 'booktics' ) );
235 }
236 }
237