PluginProbe
Booking Calendar / 10.10
Booking Calendar v10.10
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 / core / wpbc-js.php

wpbc-js.php in Booking Calendar 10.10, at core/wpbc-js.php

415 lines 19.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php /**
2 * @version 1.0
3 * @package Booking Calendar
4 * @category JavaScript files and varibales
5 * @author wpdevelop
6 *
7 * @web-site https://wpbookingcalendar.com/
8 * @email info@wpbookingcalendar.com
9 *
10 * @modified 19.10.2015
11 */
12
13 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
14
15 class WPBC_JS extends WPBC_JS_CSS {
16
17 public function define() {
18
19 $this->setType('js');
20
21 /*
22 $this->add( array(
23 'handle' => 'wpbc-datepick',
24 'src' => wpbc_plugin_url( '/js/datepick/jquery.datepick.js'),
25 'deps' => array( 'wpbc_all' ),
26 'version' => '1.1',
27 'where_to_load' => array( 'admin', 'client' ), //Usage: array( 'admin', 'client' )
28 'condition' => false
29 ) );
30 */
31 }
32
33 /**
34 * Enqueue Files and Varibales.
35 * Useful in case, if we use get_options and current user functions...
36 *
37 * @param type $where_to_load
38 */
39 public function enqueue( $where_to_load ) {
40
41 wpbc_remove_js_conflicts(); // FixIn: 9.5.4.2.
42
43 wpbc_js_load_vars( $where_to_load );
44 do_action( 'wpbc_define_js_vars', $where_to_load ); // Define JavaScript variables in all other files
45
46 wpbc_js_load_libs( $where_to_load );
47 wpbc_js_load_files( $where_to_load );
48
49 if ( wpbc_is_new_booking_page() || wpbc_is_settings_form_page() || wpbc_is_setup_wizard_page() ) {
50 $where_to_load = 'both';
51 }
52
53 // Load JavaScript files in all other versions
54 do_action( 'wpbc_enqueue_js_files', $where_to_load );
55
56 /*
57 * Remove `async` and `defer` ( check more here https://javascript.info/script-async-defer )
58 * for scripts registered or enqueued, that required for correct working of plugin, like
59 * jquery and all Booking Calendar scripts
60 * because inside content of the page can be something like jQuery( document ).ready( function(){ ...} which will
61 * generate Uncaught ReferenceError: jQuery is not defined
62 */
63 add_filter( 'script_loader_tag', array( $this, 'filter_script_loader_tag' ), 9000000000 , 3 );
64 }
65
66
67 /**
68 * Remove `async` and `defer` ( check more here https://javascript.info/script-async-defer )
69 * for scripts registered or enqueued, that required for correct working of plugin, like
70 * jquery and all Booking Calendar scripts
71 *
72 * @param string $tag The script tag.
73 * @param string $handle The script handle.
74 *
75 * @return string Script HTML string.
76 *
77 */
78 public function filter_script_loader_tag( $tag, $handle, $src ) {
79
80 $script_handles_prevent_defer = array(
81 'jquery-core' // exact value
82 , 'jquery-migrate'
83 //, 'wpbc-' //starting from 'wpbc-' it's not the exact value
84 //, 'wpdevelop-'
85 );
86
87
88 // Remove defer and async attribute from the src.
89 if (
90 ( 'jquery-core' === $handle )
91 || ( 'jquery-migrate' === $handle )
92 || ( false !== strpos( $handle, 'wpbc_' ) ) // Booking Calendar script wpbc_all.js // FixIn: 10.1.2.3.
93 || ( false !== strpos( $handle, 'wpbc-' ) ) // Booking Calendar scripts
94 || ( false !== strpos( $handle, 'wpdevelop-' ) )
95 || ( false !== strpos( $handle, 'wpbm-' ) )
96 ) {
97
98 foreach ( array( 'async', 'defer' ) as $attr ) {
99
100 if ( preg_match( ":\s$attr(=|>|\s):", $tag ) ) {
101 $tag = str_replace($attr, '', $tag);
102 $tag = str_replace('=""', '', $tag);
103 $tag = str_replace("=''", '', $tag);
104
105 /*
106 * Test here https://regex101.com/
107 *
108 * Expression: \s+defer(\s*=\s*["']defer["'])?\s?
109 * Test string: <script type='text/javascript' defer = 'defer' defer="defer" src='http://beta/wp-content/plugins/booking-manager/js/wpbm_vars.js?ver=1.1' id='wpbm-global-vars-js'></script>
110 *
111 */
112 $pattern = ":\s+{$attr}(\s*=\s*[\"']{$attr}[\"'])?\s?:mi";
113 $replacement = ' ';
114 $tag = preg_replace($pattern, $replacement, $tag);
115 }
116 }
117 }
118
119 return $tag;
120 }
121
122
123 /**
124 * Deregister some conflict scripts from other plugins.
125 *
126 * @param type $where_to_load
127 */
128 public function remove_conflicts( $where_to_load ) {
129
130 if ( wpbc_is_bookings_page() ) {
131 if (function_exists('wp_dequeue_script')) {
132 //wp_dequeue_script( 'jquery.cookie' );
133 //wp_dequeue_script( 'jquery-interdependencies' );
134 wp_dequeue_script( 'chosen' );
135 wp_dequeue_script( 'cs-framework' );
136 wp_dequeue_script( 'cgmp-jquery-tools-tooltip' ); // Remove this script jquery.tools.tooltip.min.js, which is load by the "Comprehensive Google Map Plugin"
137 wp_dequeue_script( 'bootstrap-script' );
138 }
139 }
140 }
141 }
142
143
144 /** Define JavaScript Varibales */
145 function wpbc_js_load_vars( $where_to_load ) {
146
147
148 }
149
150
151 /** Default JavaScripts Libraries */
152 function wpbc_js_load_libs( $where_to_load ) {
153
154 wp_enqueue_script( 'jquery' ); // jQuery.
155
156 // $src = '';
157 // $deps = '';
158 // $ver = false;
159 // wp_enqueue_script( 'jquery', $src, $deps, $ver, array( 'in_footer' => WPBC_JS_IN_FOOTER ) );
160
161 // Default Admin Libs
162 if ( 'admin' == $where_to_load ) {
163 if ( wpbc_is_settings_page() ) {
164 wp_enqueue_style( 'thickbox' ); // CSS Thickbox
165 wp_enqueue_script( 'thickbox' ); // JS Thickbox
166 wp_enqueue_media();
167 }
168 wp_enqueue_style( 'wp-color-picker' ); // Color Picker
169 wp_enqueue_script( 'wp-color-picker' );
170 wp_enqueue_script( 'jquery-ui-sortable' ); // UI Sortable
171 }
172
173 // WP Util, that support wp.template, based on underscore _.template system
174 wp_enqueue_script( 'wp-util' ); //FixIn: TimeFreeGenerator // FixIn: 9.4.4.11.
175 }
176
177
178 /** Load JavaScript Files */
179 function wpbc_js_load_files( $where_to_load ) {
180
181 wp_enqueue_script( 'wpbc_all', wpbc_plugin_url( '/_dist/all/_out/wpbc_all.js' ), array( 'jquery' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: 9.8.6.1.
182
183 /**
184 * Popover functionality.
185 * Popover based on Tippy.js ( https://atomiks.github.io/tippyjs/v6/all-props/#allowhtml ), which is based on popper.js ( https://popper.js.org/docs/v2/tutorial/ )
186 * Install Alt + F12 run
187 * npm i @popperjs/core
188 * npm i tippy.js
189 * Copy ..\node_modules\@popperjs\core\dist\umd to ..\wp-content/plugins/booking/assets/libs/popper
190 * Copy ..\node_modules\tippy.js\{dist && themes} to ..\wp-content/plugins/booking/assets/libs/tippy.js
191 * In popper.js edit global.Popper to global.wpbc_Popper
192 * In tippy-bundle.umd.js edit global.Popper to global.wpbc_Popper and global.tippy to global.wpbc_tippy
193 */
194 wp_enqueue_script( 'wpbc-popper', wpbc_plugin_url( '/assets/libs/popper/popper.js' ), array( 'wpbc_all' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: 9.0.1.1.
195 wp_enqueue_script( 'wpbc-tipcy', wpbc_plugin_url( '/assets/libs/tippy.js/dist/tippy-bundle.umd.js' ), array( 'wpbc-popper' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); //FixIn: 9.8.1
196
197 if ( $where_to_load != 'client' ) {
198 wp_enqueue_script( 'wpbc-modal', wpbc_plugin_url( '/assets/libs/ui/_out/dropdown_modal.js' ), array( 'jquery' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); //FixIn: 9.8.1
199 }
200
201 wp_enqueue_script( 'wpbc-datepick', wpbc_plugin_url( '/js/datepick/jquery.datepick.wpbc.9.0.js'), array( 'wpbc_all' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); //FixIn: 9.8.1
202 $calendar_localization_url = wpbc_get_calendar_localization_url(); // Localization
203 if ( ! empty( $calendar_localization_url ) ) {
204 wp_enqueue_script( 'wpbc-datepick-localize', $calendar_localization_url, array( 'wpbc-datepick' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); //FixIn: 9.8.1
205 }
206
207 if ( ( $where_to_load == 'client' ) || ( wpbc_is_new_booking_page() ) || ( wpbc_is_settings_form_page() || wpbc_is_setup_wizard_page() ) ) {
208
209 wp_enqueue_script( 'wpbc-main-client', wpbc_plugin_url( '/js/client.js' ), array( 'wpbc-datepick' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // Client
210 wp_enqueue_script( 'wpbc_capacity', wpbc_plugin_url( '/includes/_capacity/_out/create_booking.js' ), array( 'wpbc-main-client' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // Add new bookings // FixIn: 9.8.0.3.
211 wp_enqueue_script( 'wpbc-times', wpbc_plugin_url( '/js/wpbc_times.js' ), array( 'wpbc-main-client' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: TimeFree 2 //UnComment it for Booking Calendar Free version
212 if ( ( 'On' === get_bk_option( 'booking_timeslot_picker' ) ) || ( wpbc_is_setup_wizard_page() ) ) {
213 wp_enqueue_script( 'wpbc-time-selector', wpbc_plugin_url( '/js/wpbc_time-selector.js'), array( 'wpbc-times' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: 8.7.11.10.
214 }
215 }
216
217 if ( $where_to_load == 'admin' ) {
218 wp_enqueue_script( 'wpbc-js-print', wpbc_plugin_url( '/assets/libs/wpbc_js_print/wpbc_js_print.js' ), array( 'jquery' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); //FixIn: 9.8.1 //FixIn: 9.2.1.6 // FixIn: 9.1.2.13.
219 wp_enqueue_script( 'wpbc-admin-main', wpbc_plugin_url( '/js/admin.js'), array( 'wpbc_all' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // Admin
220 if ( wpbc_can_i_load_on_this_page__shortcode_config() ) {
221 wp_enqueue_script( 'wpbc_shortcode_popup', wpbc_plugin_url( '/includes/ui_modal__shortcodes/_out/wpbc_shortcode_popup.js' ), array( 'jquery' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: 9.8.6.1.
222 }
223 wp_enqueue_script( 'wpbc-admin-support', wpbc_plugin_url( '/core/any/js/admin-support.js'), array( 'wpbc_all' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) );
224 wp_enqueue_script( 'wpbc-chosen', wpbc_plugin_url( '/assets/libs/chosen/chosen.jquery.min.js'), array( 'wpbc_all' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // Chosen Library
225 }
226 }
227
228
229 /**
230 * Remove JS libraries that conflict with Booking Calendar at the pages with booking forms.
231 *
232 * You can disable loading of all Booking Calendar JavaScript files at the Booking > Settings General page in "Advanced" section.
233 * To do so, you can expand the "Show advanced settings of JavaScript loading" option and select the "Load JS and CSS files only on specific pages" checkbox.
234 * You can then specify a list of pages in a textarea where you want the Booking Calendar to appear.
235 *
236 * @return void
237 */
238 function wpbc_remove_js_conflicts() {
239 //if ( wp_script_is( 'script-ID', 'registered' ) ) { }
240 wp_deregister_script( 'mphb-kbwood-datepick' );
241 }
242
243 ////////////////////////////////////////////////////////////////////////////////
244 // Support JavaScript functions
245 ////////////////////////////////////////////////////////////////////////////////
246
247 /**
248 * Get URL Datepicker Localization JS File
249 *
250 * @return string - URL to calendar skin
251 */
252 function wpbc_get_calendar_localization_url() {
253 // Datepicker Localization - translation for calendar. Example: $locale = 'fr_FR';
254 $locale = wpbc_get_maybe_reloaded_booking_locale();
255
256 $calendar_localization_url = false;
257
258 if ( ! empty( $locale ) ) {
259
260 $locale_lang = strtolower( substr( $locale, 0, 2 ) ); // 7.0.1.51
261 $locale_country = strtolower( substr( $locale, 3 ) );
262
263 if ( ( $locale_lang !== 'en') && ( wpbc_is_file_exist( '/js/datepick/jquery.datepick-' . $locale_lang . '.js' ) ) ) {
264
265 $calendar_localization_url = wpbc_plugin_url( '/js/datepick/jquery.datepick-'. $locale_lang . '.js' );
266
267 } else if ( ( ! in_array( $locale, array( 'en_US', 'en_CA', 'en_GB', 'en_AU' ) ) ) // English Exceptions
268 && ( wpbc_is_file_exist( '/js/datepick/jquery.datepick-'. $locale_country . '.js' ) )
269 ) {
270
271 $calendar_localization_url = wpbc_plugin_url( '/js/datepick/jquery.datepick-'. $locale_country . '.js' );
272 }
273 }
274
275 return $calendar_localization_url;
276 }
277
278
279 /**
280 * Check if we activated loading of JS/CSS only on specific pages and then load or no it
281 *
282 * @param boolean $is_load_scripts - Default: true
283 * @return boolean - true | false
284 */
285 function wpbc_is_load_css_js_on_client_page( $is_load_scripts ) {
286
287 if ( ! is_admin() ) { // Check on Client side only
288
289 $booking_is_load_js_css_on_specific_pages = get_bk_option( 'booking_is_load_js_css_on_specific_pages' );
290 if ( $booking_is_load_js_css_on_specific_pages == 'On' ) {
291
292 $booking_pages_for_load_js_css = get_bk_option( 'booking_pages_for_load_js_css' );
293
294 $booking_pages_for_load_js_css = preg_split('/[\r\n]+/', $booking_pages_for_load_js_css, -1, PREG_SPLIT_NO_EMPTY);
295
296 $server_request_uri = ( ( isset( $_SERVER['REQUEST_URI'] ) ) ? sanitize_text_field( $_SERVER['REQUEST_URI'] ) : '' ); /* phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.MissingUnslash */ /* FixIn: sanitize_unslash */
297 $request_uri = $server_request_uri; //FixIn:5.4.1
298 // FixIn: 8.4.5.8.
299 if (
300 ( strpos( $request_uri, 'booking_hash=') !== false )
301 || ( strpos( $request_uri, 'check_in=') !== false )
302 ) {
303 $request_uri = wp_parse_url($request_uri);
304 if ( ( ! empty($request_uri ) ) && ( isset($request_uri['path'] ) ) ){
305 $request_uri = $request_uri['path'];
306 } else {
307 $server_request_uri = ( ( isset( $_SERVER['REQUEST_URI'] ) ) ? sanitize_text_field( $_SERVER['REQUEST_URI'] ) : '' ); /* phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.MissingUnslash */ /* FixIn: sanitize_unslash */
308 $request_uri = $server_request_uri;
309 }
310 }
311
312 if ( ( ! empty( $booking_pages_for_load_js_css ) ) && ( ! in_array( $request_uri, $booking_pages_for_load_js_css ) ) ) {
313
314 wp_add_inline_script( 'jquery', "console.log( '== WPBC :: Loading of JS/CSS files disabled for this page at WP Booking Calendar > Settings General page in Advanced section ==' );" );
315 return false;
316 }
317 }
318 }
319 return true;
320 }
321 add_filter( 'wpbc_is_load_script_on_this_page', 'wpbc_is_load_css_js_on_client_page' );
322
323 /**
324 * Load JS and CSS files for loading modals correctly
325 *
326 * @return void
327 */
328 function wpbc_load_js__required_for_modals(){
329
330 // JS for opening Modals
331 wp_enqueue_script( 'wpbc-modal', wpbc_plugin_url( '/assets/libs/ui/_out/dropdown_modal.js' ), array( 'jquery' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); //FixIn: 9.8.1
332
333 // CSS
334 wp_enqueue_style( 'wpdevelop-bts', wpbc_plugin_url( '/assets/libs/bootstrap-css/css/bootstrap.css' ), array(), WP_BK_VERSION_NUM ); //FixIn: 9.8.1
335 wp_enqueue_style( 'wpdevelop-bts-theme', wpbc_plugin_url( '/assets/libs/bootstrap-css/css/bootstrap-theme.css' ), array(), WP_BK_VERSION_NUM ); //FixIn: 9.8.1
336
337 wp_enqueue_style( 'wpbc-admin-support', wpbc_plugin_url( '/core/any/css/admin-support.css' ), array(), WP_BK_VERSION_NUM );
338 wp_enqueue_style( 'wpbc-admin-menu', wpbc_plugin_url( '/core/any/css/admin-menu.css' ), array(), WP_BK_VERSION_NUM );
339 //wp_enqueue_style( 'wpbc-admin-toolbar', wpbc_plugin_url( '/core/any/css/admin-toolbar.css' ), array(), WP_BK_VERSION_NUM );
340 wp_enqueue_style( 'wpbc-flex-toolbar', wpbc_plugin_url( '/includes/_toolbar_ui/_src/toolbar_ui.css' ), array(), WP_BK_VERSION_NUM );
341 wp_enqueue_style( 'wpbc-admin-modal-popups', wpbc_plugin_url( '/css/modal.css' ), array(), WP_BK_VERSION_NUM );
342 wp_enqueue_style( 'wpbc-admin-pages', wpbc_plugin_url( '/css/admin.css' ), array(), WP_BK_VERSION_NUM );
343 wp_enqueue_style( 'wpbc-admin-skin', wpbc_plugin_url( '/css/admin-skin.css' ), array( 'wpbc-admin-pages' ), WP_BK_VERSION_NUM ); // FixIn: 8.0.2.4.
344 //if ( 'legacy' != get_bk_option( 'booking_admin_panel_skin' ) ) { // FixIn: 9.5.5.7.
345 wp_enqueue_style( 'wpbc-admin-skin-modern_1', wpbc_plugin_url( '/css/admin-skin-modern_1.css' ), array( 'wpbc-admin-skin' ), WP_BK_VERSION_NUM ); // FixIn: 9.5.5.1.
346 //}
347 }
348
349
350 /**
351 * Load JS and CSS files for opening Media Upload PopUp in Admin Panel
352 *
353 * @return void
354 */
355 function wpbc_load_js__required_for_media_upload(){
356
357 /**
358 * Internal WordPress depending on:
359 * 'wp-util' -> array( 'underscore', 'jquery' )
360 * 'wp-backbone' -> array( 'backbone', 'wp-util' )
361 * wp_enqueue_script( 'media-editor' ) -> 'wp-backbone'
362 */
363 if ( ! wpbc_is_this_demo() ) {
364 wp_enqueue_media();
365 wp_enqueue_script( 'wpbc_ui__media_upload', wpbc_plugin_url( '/includes/_media_upload/_out/wpbc_ui__media_upload.js' ), array(
366 'jquery',
367 'media-editor'
368 ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) );
369 } else {
370 $script = "jQuery(document).ready(function() { ";
371 $script .= " jQuery( '.wpbc_media_upload_button' ).on( 'click', function( event ) { ";
372 $script .= " alert('Warning! This feature is restricted in the public live demo.' ); ";
373 $script .= " }); ";
374 $script .= "}); ";
375 wp_add_inline_script( 'jquery', $script );
376 }
377 }
378
379
380 /**
381 * On jQuery(...).ready function Start
382 *
383 * @return string
384 */
385 function wpbc_jq_ready_start() {
386
387 return "(function() { var a = setInterval( function() { if ( ( 'undefined' === typeof _wpbc ) || ( 'undefined' === typeof jQuery ) || ! window.jQuery ) { return; } clearInterval( a ); jQuery( document ).ready( function (){";
388
389 // Help description:
390 ?><script type="text/javascript">
391 (function (){
392 var a = setInterval( function (){
393 if ( ('undefined' === typeof jQuery) || !window.jQuery ){
394 return;
395 }
396 clearInterval( a );
397 // Here can be executed jQuery functions
398 jQuery( document ).ready( function (){
399 // Here is my code start
400 } );
401 }, 500 );
402 })();
403 </script><?php
404 }
405
406
407 /**
408 * On jQuery(...).ready function end
409 * @return string
410 */
411 function wpbc_jq_ready_end() {
412
413 return "} ); }, 500 ); })();";
414 }
415