PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.11
Booktics – Appointment Booking Calendar for Service Businesses v1.0.11
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.11, at core/settings/controllers/settings-controller.php

214 lines 6.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\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' => '__return_true',
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 ): array {
175 return array();
176 }
177
178 /**
179 * Check if a given request has access to get items.
180 *
181 * @param WP_REST_Request $request Full data about the request.
182 *
183 * @return bool
184 */
185 public function get_public_item_permissions_check( $request ): bool {
186 return true;
187 }
188
189 /**
190 * Check if a given request has access to get items.
191 *
192 * @param WP_REST_Request $request Full data about the request.
193 *
194 * @return bool
195 */
196 public function stripe_disconnect_permissions_check( $request ): bool {
197 return current_user_can( 'manage_options' );
198 }
199
200 /**
201 * Disconnect Stripe account by clearing account ID
202 *
203 * @param $request
204 *
205 * @return WP_HTTP_Response
206 */
207 public function stripe_disconnect( $request ) {
208 Settings::update( 'stripe_account_id', '' );
209 Settings::update( 'stripe_account_type', '' );
210
211 return $this->response( array(), __( 'Successfully disconnected Stripe account.', 'booktics' ) );
212 }
213 }
214