PluginProbe
Booking Calendar / 10.11.2
Booking Calendar v10.11.2
11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 10.11.2 All 203 releases
booking / includes / page-availability / availability__page.php

availability__page.php in Booking Calendar 10.11.2, at includes/page-availability/availability__page.php

454 lines 22.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 * @package: AJX_Bookings Page
4 * @category: o Email Reminders
5 * @description: Define AJX_Bookings in admin settings page. - Sending friendly email reminders based on custom ajx_booking.
6 * Plugin URI: https://oplugins.com/plugins/email-reminders/#premium
7 * Author URI: https://oplugins.com
8 * Author: wpdevelop, oplugins
9 * Version: 0.0.1
10 * @modified 2020-05-11
11 */
12 //FixIn: 9.2.1
13 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
14
15
16 /** Show Content
17 * Update Content
18 * Define Slug
19 * Define where to show
20 */
21 class WPBC_Page_AJX_Availability extends WPBC_Page_Structure {
22
23
24 public function __construct() {
25
26 parent::__construct();
27
28 add_action( 'wpbc_toolbar_top_tabs_insert', array( $this, 'wpbc_toolbar_toolbar_tabs' ) );
29 }
30
31
32 public function in_page() {
33 return 'wpbc-availability';
34 }
35
36
37 public function tabs() {
38
39
40 $tabs = array();
41 $tabs[ 'availability' ] = array(
42 'title' => __( 'Days Availability', 'booking' ) // Title of TAB //FixIn: 9.8.15.2.2
43 , 'hint' => __( 'Define available and unavailable days for your calendar(s).', 'booking' ) // Hint
44 , 'page_title' => __( 'Days Availability', 'booking' ) // Title of Page
45 , 'link' => '' // Can be skiped, then generated link based on Page and Tab tags. Or can be extenral link
46 , 'position' => '' // 'left' || 'right' || ''
47 , 'css_classes' => '' // CSS class(es)
48 , 'icon' => '' // Icon - link to the real PNG img
49 , 'font_icon' => 'wpbc-bi-calendar2-check'//'wpbc_icn_free_cancellation' // CSS definition of forn Icon
50 , 'font_icon_right' => 'wpbc-bi-question-circle'
51 , 'default' => true // Is this tab activated by default or not: true || false.
52 , 'disabled' => false // Is this tab disbaled: true || false.
53 , 'hided' => false // Is this tab hided: true || false.
54 , 'subtabs' => array()
55 );
56 // $subtabs = array();
57 // $tabs[ 'items' ][ 'subtabs' ] = $subtabs;
58 return $tabs;
59 }
60
61
62 /**
63 * Show custom tabs for Toolbar at . - . R i g h t . s i d e.
64 *
65 * @param string $menu_in_page_tag - active page
66 */
67 public function wpbc_toolbar_toolbar_tabs( $menu_in_page_tag ) {
68
69 // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
70 if ( ( $this->in_page() === $menu_in_page_tag ) && ( ( empty( $_GET['tab'] ) ) || ( 'availability' === $_GET['tab'] ) ) ) { // FixIn: 9.8.15.2.2.
71
72 wpbc_bs_toolbar_tabs_html_container_start();
73
74 $escaped_search_request_params = $this->get_cleaned_params__saved_requestvalue_default();
75
76 // Check if by some reason, user was saved request without this parameter, then get default value.
77 if ( ! empty( $escaped_search_request_params['ui_usr__availability_selected_toolbar'] ) ) {
78 $selected_tab = $escaped_search_request_params['ui_usr__availability_selected_toolbar'];
79 } else {
80 $default_search_request_params = WPBC_AJX__Availability::request_rules_structure();
81 $selected_tab = $default_search_request_params ['ui_usr__availability_selected_toolbar']['default'];
82 }
83
84 wpbc_bs_display_tab( array(
85 'title' => __( 'Set Availability', 'booking' )
86 , 'hint' => array( 'title' => __('Availability' ,'booking') , 'position' => 'top' )
87 , 'onclick' => "jQuery('.ui_container_toolbar').hide();"
88 . "jQuery('.ui_container_info').show();"
89 . "jQuery('.wpbc_availability_support_tabs').removeClass('nav-tab-active');"
90 . "jQuery(this).addClass('nav-tab-active');"
91 . "jQuery('.nav-tab i.icon-white').removeClass('icon-white');"
92 . "jQuery('.nav-tab-active i').addClass('icon-white');"
93 /**
94 * It will save such changes, and if we have selected bookings, then deselect them
95 */
96 // . "wpbc_ajx_booking_send_search_request_with_params( { 'ui_usr__availability_selected_toolbar': 'filters' });"
97 /**
98 * It will save changes with NEXT search request, but not immediately
99 * it is handy, in case if we have selected bookings,
100 * we will not lose selection.
101 */
102 . "wpbc_ajx_availability.search_set_param( 'ui_usr__availability_selected_toolbar', 'info' );"
103 , 'font_icon' => 'wpbc-bi-calendar2-check' //'wpbc_icn_info_outline'
104 , 'default' => ( 'info' == $selected_tab ) ? true : false
105 //, 'position' => 'right'
106 , 'css_classes' => 'wpbc_availability_support_tabs'
107 ) );
108
109 wpbc_bs_display_tab( array(
110 'title' => __('Options', 'booking')
111 , 'hint' => array( 'title' => __('User Options' ,'booking') , 'position' => 'top' )
112 , 'onclick' => "jQuery('.ui_container_toolbar').hide();"
113 . "jQuery('.ui_container_options').show();"
114 . "jQuery('.wpbc_availability_support_tabs').removeClass('nav-tab-active');"
115 . "jQuery(this).addClass('nav-tab-active');"
116 . "jQuery('.nav-tab i.icon-white').removeClass('icon-white');"
117 . "jQuery('.nav-tab-active i').addClass('icon-white');"
118 /**
119 * It will save such changes, and if we have selected bookings, then deselect them
120 */
121 // . "wpbc_ajx_booking_send_search_request_with_params( { 'ui_usr__availability_selected_toolbar': 'options' });"
122 /**
123 * It will save changes with NEXT search request, but not immediately
124 * it is handy, in case if we have selected bookings,
125 * we will not lose selection.
126 */
127 . "wpbc_ajx_availability.search_set_param( 'ui_usr__availability_selected_toolbar', 'calendar_settings' );"
128 , 'font_icon' => 'wpbc_icn_tune'
129 , 'default' => ( 'calendar_settings' == $selected_tab ) ? true : false
130 //, 'position' => 'right'
131 , 'css_classes' => 'wpbc_availability_support_tabs'
132
133 ) );
134
135 wpbc_bs_toolbar_tabs_html_container_end();
136
137 }
138 }
139
140
141 /**
142 * Get sanitised request parameters. :: Firstly check if user saved it. :: Otherwise, check $_REQUEST. :: Otherwise get default.
143 *
144 * @return array|false
145 */
146 public function get_cleaned_params__saved_requestvalue_default(){
147
148 $user_request = new WPBC_AJX__REQUEST( array(
149 'db_option_name' => 'booking_availability_request_params',
150 'user_id' => wpbc_get_current_user_id(),
151 'request_rules_structure' => WPBC_AJX__Availability::request_rules_structure()
152 )
153 );
154 $escaped_request_params_arr = $user_request->get_sanitized__saved__user_request_params(); // Get Saved
155
156 //Fix Calendar cell heights in versions older than // FixIn: 9.7.3.2.
157 if ( ( false !== $escaped_request_params_arr )
158 && ( '' === $escaped_request_params_arr['calendar__view__cell_height'] )
159 ) {
160 $user_request->user_request_params__db_delete(); // Delete from DB.
161 }
162
163 if ( false === $escaped_request_params_arr ) { // This request was not saved before, then get sanitized direct parameters, like: $_REQUEST['resource_id']
164
165 $request_prefix = false;
166 $escaped_request_params_arr = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // Direct: $_REQUEST['resource_id']
167 }
168
169
170 //MU
171 if ( class_exists( 'wpdev_bk_multiuser' ) ) {
172
173 // Check if this MU user activated or superadmin, otherwise show warning
174 if ( ! wpbc_is_mu_user_can_be_here('activated_user') )
175 return false;
176
177 // Check if this MU user owner of this resource or superadmin, otherwise show warning
178 if ( ! wpbc_is_mu_user_can_be_here( 'resource_owner', $escaped_request_params_arr['resource_id'] ) ) {
179 $default_values = $user_request->get_request_rules__default();
180 $escaped_request_params_arr['resource_id'] = $default_values['resource_id'];
181 }
182
183 }
184
185
186
187 return $escaped_request_params_arr;
188 }
189
190
191 public function content() {
192
193 $this->css_fix();
194
195 do_action( 'wpbc_hook_settings_page_header', 'page_booking_availability'); // Define Notices Section and show some static messages, if needed.
196
197 if ( ! wpbc_is_mu_user_can_be_here( 'activated_user' ) ) { return false; } // Check if MU user activated, otherwise show Warning message.
198
199 // if ( ! wpbc_set_default_resource_to__get() ) return false; // Define default booking resources for $_GET and check if booking resource belong to user.
200
201
202 // Get and escape request parameters ////////////////////////////////////////////////////////////////////////
203 $escaped_request_params_arr = $this->get_cleaned_params__saved_requestvalue_default();
204
205 // During initial load of the page, we need to reset 'dates_selection' value in our saved parameter
206 $escaped_request_params_arr['dates_selection'] = '';
207 $escaped_request_params_arr['calendar__start_week_day'] = intval(get_bk_option( 'booking_start_day_weeek' ));
208
209
210 // Submit /////////////////////////////////////////////////////////////
211 $submit_form_name = 'wpbc_ajx_availability_form'; // Define form name
212
213 ?><span class="wpdevelop"><?php // BS UI CSS Class
214
215 wpbc_js_for_bookings_page(); // JavaScript functions
216
217 $this->wpbc_toolbar_toolbar_tabs( $this->in_page() );
218 wpbc_ajx_availability__toolbar( $escaped_request_params_arr );
219
220 ?></span><?php
221
222 ?><div id="wpbc_log_screen" class="wpbc_log_screen"></div><?php
223
224 // Content ////////////////////////////////////////////////////////////
225 ?>
226 <div class="clear" style="margin-bottom:10px;"></div>
227 <span class="metabox-holder">
228 <form name="<?php echo esc_attr( $submit_form_name ); ?>" id="<?php echo esc_attr( $submit_form_name ); ?>" action="" method="post" >
229 <?php
230 // N o n c e field, and key for checking S u b m i t
231 wp_nonce_field( 'wpbc_settings_page_' . $submit_form_name );
232 ?><input type="hidden" name="is_form_sbmitted_<?php echo esc_attr( $submit_form_name ); ?>" id="is_form_sbmitted_<?php echo esc_attr( $submit_form_name ); ?>" value="1" /><?php
233
234 //wpbc_ajx_booking_modify_container_show(); // Container for showing Edit ajx_booking and define Edit and Delete ajx_booking JavaScript vars.
235
236 wpbc_clear_div();
237
238 $this->ajx_availability_container__show( $escaped_request_params_arr );
239
240 wpbc_clear_div();
241
242 ?></form>
243 </span>
244 <?php
245
246 //wpbc_show_wpbc_footer(); // Rating
247
248 do_action( 'wpbc_hook_settings_page_footer', 'wpbc-ajx_booking_availability' );
249 }
250
251 private function ajx_availability_container__show( $escaped_request_params_arr ) {
252
253 ?>
254 <div id="ajx_nonce_calendar_section"></div>
255 <div class="wpbc_ajx_availability_container wpbc_selectable_table wpdevelop" wpbc_loaded="first_time">
256 <style type="text/css">
257 .wpbc_calendar_loading .wpbc_icn_autorenew::before{
258 font-size: 1.2em;
259 }
260 .wpbc_calendar_loading {
261 width:95%;
262 text-align: center;
263 margin:2em 0;
264 font-size: 1.2em;
265 font-weight: 600;
266 }
267 </style>
268 <div class="wpbc_calendar_loading"><span class="wpbc_icn_autorenew wpbc_spin"></span>&nbsp;&nbsp;<span><?php esc_html_e( 'Loading', 'booking' ); ?>...</span>
269 </div>
270 </div>
271 <script type="text/javascript">
272 jQuery( document ).ready( function (){
273
274 // Set Security - Nonce for Ajax - Listing
275 wpbc_ajx_availability.set_secure_param( 'nonce', '<?php echo esc_js( wp_create_nonce( 'wpbc_ajx_availability_ajx' . '_wpbcnonce' ) ); ?>' );
276 wpbc_ajx_availability.set_secure_param( 'user_id', '<?php echo esc_js( wpbc_get_current_user_id() ); ?>' );
277 wpbc_ajx_availability.set_secure_param( 'locale', '<?php echo esc_js( get_user_locale() ); ?>' );
278
279 // Set other parameters
280 wpbc_ajx_availability.set_other_param( 'listing_container', '.wpbc_ajx_availability_container' );
281
282 // Send Ajax request and show listing after this.
283 wpbc_ajx_availability__send_request_with_params( <?php echo wp_json_encode( $escaped_request_params_arr ); ?> );
284 } );
285 </script>
286 <?php
287 // FixIn: 10.0.0.5.
288 if ( 0 ) {
289 $resource_id = 220;
290 // phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedStylesheet
291 ?><style type="text/css" rel="stylesheet"> .hasDatepick .datepick-inline .datepick-title-row th, .hasDatepick .datepick-inline .datepick-days-cell { height: 50px; } </style><?php
292
293 ?>
294 <div class="wpbc_calendar_wraper wpbc_change_over_triangle">
295 <div class="bk_calendar_frame months_num_in_row_4 cal_month_num_4" style="width:100%;max-width:100%;">
296 <div id="calendar_booking<?php echo esc_attr( $resource_id ); ?>"><?php esc_html_e('Calendar is loading...', 'booking'); ?></div>
297 </div>
298 </div><?php
299
300 $selected_dates_if_no_calendar = '';
301 echo '<textarea rows="3" cols="50" id="date_booking' . esc_attr( $resource_id ) . '" name="date_booking' . esc_attr( $resource_id ) . '" autocomplete="off" style="display:none;">' .
302 esc_textarea( $selected_dates_if_no_calendar ) . '</textarea>';
303 if(1){
304 $start_script_code = wpbc__calendar__load( array(
305
306 'resource_id' => $resource_id,
307 'aggregate_resource_id_arr' => array(), // It is array of booking resources from aggregate parameter()
308 'selected_dates_without_calendar' => $selected_dates_if_no_calendar, // $selected_dates_if_no_calendar
309 'calendar_number_of_months' => 12, // $my_boook_count
310 'start_month_calendar' => false, // $start_month_calendar
311 'shortcode_options' => '', // options from the Booking Calendar shortcode. Usually it's conditional dates selection parameters
312 'custom_form' => 'standard'
313
314 ));
315 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
316 echo $start_script_code;
317 } else {
318 ?>
319 <script type='text/javascript'> jQuery( document ).ready( function (){
320 _wpbc.balancer__set_max_threads( 1 );
321 _wpbc.calendar__set_param_value( 220, 'calendar_scroll_to', false );
322 _wpbc.calendar__set_param_value( 220, 'booking_max_monthes_in_calendar', '2y' );
323 _wpbc.calendar__set_param_value( 220, 'booking_start_day_weeek', '1' );
324 _wpbc.calendar__set_param_value( 220, 'calendar_number_of_months', '12' );
325 _wpbc.calendar__set_param_value( 220, 'days_select_mode', 'dynamic' );
326 _wpbc.calendar__set_param_value( 220, 'fixed__days_num', 7 );
327 _wpbc.calendar__set_param_value( 220, 'fixed__week_days__start', [-1] );
328 _wpbc.calendar__set_param_value( 220, 'dynamic__days_min', 1 );
329 _wpbc.calendar__set_param_value( 220, 'dynamic__days_max', 30 );
330 _wpbc.calendar__set_param_value( 220, 'dynamic__days_specific', [] );
331 _wpbc.calendar__set_param_value( 220, 'dynamic__week_days__start', [-1] );
332 _wpbc.calendar__set_param_value( 220, 'booking_date_format', 'j M Y' );
333 _wpbc.calendar__set_param_value( 220, 'booking_time_format', 'g:i A' );
334 _wpbc.set_message( 'message_dates_times_unavailable', 'These dates and times in this calendar are already booked or unavailable.' );
335 _wpbc.set_message( 'message_choose_alternative_dates', 'Please choose alternative date(s), times, or adjust the number of slots booked.' );
336 _wpbc.set_message( 'message_cannot_save_in_one_resource', 'It is not possible to store this sequence of the dates into the one same resource.' );
337 _wpbc.calendar__set_param_value( 220, 'is_parent_resource', 0 );
338 _wpbc.calendar__set_param_value( 220, 'booking_capacity_field', 'visitors' );
339 _wpbc.calendar__set_param_value( 220, 'booking_is_dissbale_booking_for_different_sub_resources', 'Off' );
340 _wpbc.calendar__set_param_value( 220, 'booking_recurrent_time', 'Off' );
341 if ( 'function' === typeof (wpbc__conditions__SAVE_INITIAL__days_selection_params__bm) ){ wpbc__conditions__SAVE_INITIAL__days_selection_params__bm( 220 ); }
342 _wpbc.calendar__set_param_value( 220, 'conditions', {
343 "select-day": {
344 "weekday": [{
345 "for" : "0",
346 "value": "7,14"
347 }]
348 }
349 } );
350 _wpbc.seasons__set( 220, [] );
351 wpbc_calendar_show( '220' );
352 _wpbc.set_secure_param( 'nonce', '<?php echo esc_attr( wp_create_nonce( 'wpbc_calendar_load_ajx' . '_wpbcnonce' ) ); ?>' );
353 _wpbc.set_secure_param( 'user_id','<?php echo esc_attr( wpbc_get_current_user_id() ); ?>' );
354 _wpbc.set_secure_param( 'locale', '<?php echo esc_attr( get_user_locale() ); ?>' );
355 wpbc_calendar__load_data__ajx( {
356 "resource_id" : 220,
357 "booking_hash" : "",
358 "request_uri" : "\/2024-03-221132\/",
359 "custom_form" : "standard",
360 "aggregate_resource_id_str": "",
361 "aggregate_type" : "all"
362 } );
363 } );
364 </script>
365 <?php
366 }
367 }
368
369
370 }
371
372 /**
373 * Hide first "Availability tab", because we have only one tab hhere, and need to show only tabs for toolbar
374 * @return void
375 */
376 private function css_fix(){
377 // FixIn: 9.8.15.2.
378 /*
379
380 ?><style type="text/css">
381 .nav-tabs .nav-tab:first-child{
382 display:none;
383 }
384 </style><?php
385 */
386 }
387
388 }
389 add_action('wpbc_menu_created', array( new WPBC_Page_AJX_Availability() , '__construct') ); // Executed after creation of Menu
390
391
392 /**
393 * Duplicated Genal Availability Tab - Redirect to Booking > Settings General page in "Availability" section
394 *
395 */
396 class WPBC_Page_Availability_General extends WPBC_Page_Structure {
397
398
399 public function in_page() {
400
401 if ( ! wpbc_is_mu_user_can_be_here( 'only_super_admin' ) ) { // If this User not "super admin", then do not load this page at all
402 return (string) wp_rand( 100000, 1000000 ); // If this User not "super admin", then do not load this page at all
403 }
404
405 return 'wpbc-availability';
406 }
407
408
409
410 public function tabs() {
411
412
413 $separator_i = 0;
414 $subtab_default = array(
415 'type' => 'subtab', // Required| Possible values: 'subtab' | 'separator' | 'button' | 'goto-link' | 'html'.
416 'title' => '', // Example: __( 'Dashboard' // Title of TAB.
417 'page_title' => '', // __( 'Search Availability' // Title of Page.
418 'hint' => '', // __( 'Configure the layout and functionality of both the search form and search results.' // Hint.
419 'link' => '', // wpbc_get_settings_url() . '&scroll_to_section=wpbc_general_settings_dashboard_tab', // Link.
420 'css_classes' => '', // cls CSS .
421 'font_icon' => 'wpbc_icn_dashboard',
422 'font_icon_right' => 'wpbc-bi-question-circle', // 'wpbc-bi-question-circle' .
423 'default' => false, // Is this sub tab activated by default or not: true || false.
424 );
425
426 $tabs = array();
427 $tabs[ 'general_availability' . ( ++$separator_i ) ] = array_merge( $subtab_default, array( 'type' => 'separator' ,'folder_style' => 'order:200;' ) );
428 $tabs[ 'general_availability' ] = array(
429 'title' => __( 'General Availability', 'booking' ) // Title of TAB //FixIn: 9.8.15.2.2
430 , 'hint' => __( 'Define unavailable weekdays for all calendar(s) and unavailable dates depend from today date', 'booking' ) // Hint
431 , 'page_title' => __( 'General Availability', 'booking' ) // Title of Page
432 , 'link' => wpbc_get_settings_url( true, false ) . '&scroll_to_section=wpbc_general_settings_availability_tab' // Can be skiped, then generated link based on Page and Tab tags. Or can be extenral link
433 , 'position' => '' // 'left' || 'right' || ''
434 , 'css_classes' => 'wpbc_top_tab__general_availability' // CSS class(es)
435 , 'icon' => '' // Icon - link to the real PNG img
436 , 'font_icon' => 'wpbc-bi-calendar2-day 0wpbc-bi-calendar2-check'//'wpbc_icn_free_cancellation' // CSS definition of forn Icon
437 , 'font_icon_right' => 'wpbc-bi-question-circle'
438 , 'default' => false // Is this tab activated by default or not: true || false.
439 , 'disabled' => false // Is this tab disbaled: true || false.
440 , 'hided' => false // Is this tab hided: true || false.
441 , 'subtabs' => array()
442 , 'folder_style' => 'order:200;',
443 );
444 // $subtabs = array();
445 // $tabs[ 'items' ][ 'subtabs' ] = $subtabs;
446 return $tabs;
447 }
448
449 public function content() {
450
451 }
452 }
453 add_action('wpbc_menu_created', array( new WPBC_Page_Availability_General() , '__construct') ); // Executed after creation of Menu
454