PluginProbe
Booking Calendar / 11.1
Booking Calendar v11.1
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 10.11.3 All 202 releases
booking / includes / page-availability / availability__page.php

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

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