PluginProbe
Booking Calendar / 10.10
Booking Calendar v10.10
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.10, at includes/page-availability/availability__page.php

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