PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / 1.0.64
Timetics – Appointment Booking Calendar & Scheduling v1.0.64
1.0.64 1.0.62 1.0.63 1.0.61 1.0.60 1.0.59 1.0.58 1.0.57 1.0.56 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.19 1.0.2 1.0.20 1.0.21 All 65 releases
← All changes | core/admin/hooks.php +88 -11 1.0.15 → 1.0.64 View file →
@@ -4,11 +4,13 @@
4 4 *
5 5 * @package Timetics
6 6 */
7 7 namespace Timetics\Core\Admin;
8 +
9 +defined( 'ABSPATH' ) || exit;
10 +
8 11 use Timetics\Utils\Singleton;
9 12
10 -use function Timetics\timetics;
11 13
12 14 class Hooks {
13 15 use Singleton;
14 16
@@ -31,8 +33,11 @@
31 33 add_action( 'wp_initialize_site', [ $this, 'update_user_role_on_insert_new_site' ], 110 );
32 34
33 35 add_action( 'set_user_role', [ $this, 'set_roles' ], 10, 2 );
34 36
37 + add_filter( 'show_admin_bar', [ $this, 'hide_admin_bar_for_customers' ] );
38 + add_action( 'admin_init', [ $this, 'block_admin_for_customers' ] );
39 +
35 40 add_filter( 'timetics_menu', [ $this, 'update_busyness_menu' ] );
36 41
37 42 add_filter( 'timetics_settings', [ $this, 'set_google_auth_url' ] );
38 43
@@ -71,8 +76,9 @@
71 76
72 77 echo wp_kses_post( $notice );
73 78
74 79 $admin_ajax_url = admin_url('admin-ajax.php');
80 + $nonce = wp_create_nonce( 'timetics_dismiss_wc_notice' );
75 81
76 82 ?>
77 83 <script>
78 84 jQuery(document).ready(function($) {
@@ -78,8 +84,9 @@
78 84 jQuery(document).ready(function($) {
79 85 $('.notice.is-dismissible').on('click', '.notice-dismiss', function() {
80 86 var data = {
81 87 action: 'dismiss_woocommerce_notice',
88 + nonce: '<?php echo esc_js( $nonce ); ?>',
82 89 };
83 90
84 91 $.post('<?php echo esc_url( $admin_ajax_url ); ?>', data, function(response) {
85 92 console.log(response);
@@ -95,8 +102,10 @@
95 102 *
96 103 * @return void
97 104 */
98 105 public function dismiss_woocommerce_notice() {
106 + check_ajax_referer( 'timetics_dismiss_wc_notice', 'nonce' );
107 +
99 108 // Store the notice state in user meta
100 109 update_user_meta( get_current_user_id(), 'timetics_woocommerce_notice_dismissed', true );
101 110
102 111 wp_send_json_success('Notice dismissed successfully.');
@@ -137,9 +146,10 @@
137 146
138 147 update_option( 'timetics_onboard_setup', true );
139 148 update_option( 'timetics_onboard_settings', false );
140 149
141 - exit( wp_redirect( admin_url('admin.php?page=timetics#/onboard') ) );
150 + wp_safe_redirect( admin_url('admin.php?page=timetics#/onboard') );
151 + exit;
142 152 }
143 153
144 154 /**
145 155 * Update site admin roles whne new site created
@@ -176,8 +186,61 @@
176 186 $user->add_role('timetics-customer');
177 187 }
178 188
179 189 /**
190 + * Hide the WP admin toolbar for customer-only users.
191 + *
192 + * @param bool $show
193 + *
194 + * @return bool
195 + */
196 + public function hide_admin_bar_for_customers( $show ) {
197 + $user = wp_get_current_user();
198 +
199 + if ( ! $user || ! $user->exists() ) {
200 + return $show;
201 + }
202 +
203 + if ( $this->is_customer_only( $user ) ) {
204 + return false;
205 + }
206 +
207 + return $show;
208 + }
209 +
210 + /**
211 + * Redirect customer-only users away from /wp-admin/.
212 + *
213 + * @return void
214 + */
215 + public function block_admin_for_customers() {
216 + if ( wp_doing_ajax() ) {
217 + return;
218 + }
219 +
220 + $user = wp_get_current_user();
221 +
222 + if ( $user && $user->exists() && $this->is_customer_only( $user ) ) {
223 + wp_safe_redirect( home_url() );
224 + exit;
225 + }
226 + }
227 +
228 + /**
229 + * Whether the given user's only Timetics-relevant role is timetics-customer.
230 + *
231 + * @param \WP_User $user
232 + *
233 + * @return bool
234 + */
235 + private function is_customer_only( $user ) {
236 + $roles = (array) $user->roles;
237 +
238 + return in_array( 'timetics-customer', $roles, true )
239 + && ! array_intersect( $roles, [ 'administrator', 'editor', 'author', 'contributor', 'timetics-staff' ] );
240 + }
241 +
242 + /**
180 243 * Update busyness menu item
181 244 *
182 245 * @param array $menu_items
183 246 *
@@ -225,47 +288,61 @@
225 288 * Set default settings
226 289 *
227 290 * @param array $settings [$settings description]
228 291 *
229 - * @return array
292 + * @return mixed
230 293 */
231 294 public function set_email_default_content( $settings ) {
295 +
296 +
232 297 $admin_email = get_option( 'admin_email' );
233 298
299 + /* translators: {%customer_name%} is a token replaced at runtime with the recipient customer's name */
300 + $customer_greeting = __( 'Hi {%customer_name%}', 'timetics' );
301 + /* translators: {%host_name%} is a token replaced at runtime with the recipient host's name */
302 + $host_greeting = __( 'Hi {%host_name%}', 'timetics' );
303 + $new_meeting_msg = __( 'A new meeting has been scheduled.', 'timetics' );
304 + /* translators: {%meeting_title%} is a token replaced at runtime with the meeting title */
305 + $canceled_msg = __( '{%meeting_title%} has been canceled.', 'timetics' );
306 + /* translators: {%meeting_title%} is a token replaced at runtime with the meeting title */
307 + $rescheduled_msg = __( '{%meeting_title%} has been rescheduled', 'timetics' );
308 + /* translators: {%meeting_title%}, {%meeting_date%}, {%meeting_time%} are tokens replaced at runtime with the meeting details */
309 + $reminder_msg = __( '{%meeting_title%} at {%meeting_date%} {%meeting_time%}', 'timetics' );
310 +
234 311 $defaults = [
235 312
236 313 'booking_created_customer_email_from' => $admin_email,
237 314 'booking_created_customer_email_title' => sprintf('%s', __( 'New meeting scheduled!', 'timetics' )),
238 - 'booking_created_customer_email_body' => sprintf('<p>%s</p><p>%s</p>', __( 'Hi {%customer_name%}', 'timetics' ), __( 'A new meeting has been scheduled.', 'timetics' )),
315 + 'booking_created_customer_email_body' => sprintf('<p>%s</p><p>%s</p>', $customer_greeting, $new_meeting_msg),
239 316
240 317 'booking_created_host_email_from' => $admin_email,
241 318 'booking_created_host_email_title' => sprintf('%s', __( 'New meeting scheduled!', 'timetics' )),
242 - 'booking_created_host_email_body' => sprintf('<p>%s</p><p>%s</p>', __( 'Hi {%host_name%}', 'timetics' ), __( 'A new meeting has been scheduled.', 'timetics' )),
319 + 'booking_created_host_email_body' => sprintf('<p>%s</p><p>%s</p>', $host_greeting, $new_meeting_msg),
243 320
244 321
245 322 'booking_canceled_customer_email_from' => $admin_email,
246 323 'booking_canceled_customer_email_title' => sprintf('%s', __( 'Meeting cancelled', 'timetics' )),
247 - 'booking_canceled_customer_email_body' => sprintf('<p>%s</p><p>%s</p>', __( 'Hi {%customer_name%}', 'timetics' ), __( '{%meeting_title%} has been canceled.', 'timetics' )),
324 + 'booking_canceled_customer_email_body' => sprintf('<p>%s</p><p>%s</p>', $customer_greeting, $canceled_msg),
248 325
249 326 'booking_canceled_host_email_from' => $admin_email,
250 327 'booking_canceled_host_email_title' => sprintf('%s', __( 'Meeting cancelled', 'timetics' )),
251 - 'booking_canceled_host_email_body' => sprintf('<p>%s</p><p>%s</p>', __( 'Hi {%host_name%}', 'timetics' ), __( '{%meeting_title%} has been canceled.', 'timetics' )),
328 + 'booking_canceled_host_email_body' => sprintf('<p>%s</p><p>%s</p>', $host_greeting, $canceled_msg),
252 329
253 330 'booking_rescheduled_customer_email_from' => $admin_email,
254 331 'booking_rescheduled_customer_email_title' => sprintf('%s', __( 'Meeting rescheduled!', 'timetics' )),
255 - 'booking_rescheduled_customer_email_body' => sprintf('<p>%s</p><p>%s</p>', __( 'Hi {%host_name%}', 'timetics' ), __( '{%meeting_title%} has been rescheduled', 'timetics' )),
332 + 'booking_rescheduled_customer_email_body' => sprintf('<p>%s</p><p>%s</p>', $host_greeting, $rescheduled_msg),
256 333
257 334 'booking_rescheduled_host_email_from' => $admin_email,
258 335 'booking_rescheduled_host_email_title' => sprintf('%s', __('Meeting rescheduled!', 'timetics' )),
259 - 'booking_rescheduled_host_email_body' => sprintf('<p>%s</p><p>%s</p>', __( 'Hi {%host_name%}', 'timetics' ), __( '{%meeting_title%} has been rescheduled', 'timetics' )),
336 + 'booking_rescheduled_host_email_body' => sprintf('<p>%s</p><p>%s</p>', $host_greeting, $rescheduled_msg),
260 337
261 338 'booking_reminder_customer_email_from' => $admin_email,
262 339 'booking_reminder_customer_email_title' => sprintf('%s', __( 'Meeting time reminder', 'timetics' )),
263 - 'booking_reminder_customer_email_body' => sprintf('<p>%s</p><p>%s</p>', __( 'Hi {%customer_name%}', 'timetics' ), __( '{%meeting_title%} at {%meeting_date%} {%meeting_time%}', 'timetics' )),
340 + 'booking_reminder_customer_email_body' => sprintf('<p>%s</p><p>%s</p>', $customer_greeting, $reminder_msg),
264 341
265 342 'booking_reminder_host_email_from' => $admin_email,
266 343 'booking_reminder_host_email_title' => sprintf('%s', __( 'Meeting time reminder', 'timetics' )),
267 - 'booking_reminder_host_email_body' => sprintf('<p>%s</p><p>%s</p>', __( 'Hi {%host_name%}', 'timetics' ), __( '{%meeting_title%} at {%meeting_date%} {%meeting_time%}', 'timetics' )),
344 + 'booking_reminder_host_email_body' => sprintf('<p>%s</p><p>%s</p>', $host_greeting, $reminder_msg),
268 345 ];
269 346
270 347 $settings = wp_parse_args( $settings, $defaults );
271 348