PluginProbe
Booking Calendar / 10.1.3
Booking Calendar v10.1.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 10.11.3 All 202 releases
booking / core / wpbc-js.php

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

419 lines 18.8 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-global-vars' ),
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()) {
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 // JavaScripts Variables
149 ////////////////////////////////////////////////////////////////////////////
150
151 wp_enqueue_script( 'wpbc-global-vars', wpbc_plugin_url( '/js/wpbc_vars.js' ), array( 'jquery' ), WP_BK_VERSION_NUM ); // Blank JS File
152
153 // wp_localize_script( 'wpbc-global-vars' ,
154 // 'wpbc_js_global', array(
155 // 'wpdev_bk_plugin_url' => plugins_url( '', WPBC_FILE )
156 // )
157 // );
158
159 }
160
161
162 /** Default JavaScripts Libraries */
163 function wpbc_js_load_libs( $where_to_load ) {
164
165 wp_enqueue_script( 'jquery' ); // jQuery
166
167 // Default Admin Libs
168 if ( 'admin' == $where_to_load ) {
169 if ( wpbc_is_settings_page() ) {
170 wp_enqueue_style( 'thickbox' ); // CSS Thickbox
171 wp_enqueue_script( 'thickbox' ); // JS Thickbox
172 wp_enqueue_media();
173 }
174 wp_enqueue_style( 'wp-color-picker' ); // Color Picker
175 wp_enqueue_script( 'wp-color-picker' );
176 wp_enqueue_script( 'jquery-ui-sortable' ); // UI Sortable
177 }
178
179 // WP Util, that support wp.template, based on underscore _.template system
180 wp_enqueue_script( 'wp-util' ); //FixIn: TimeFreeGenerator //FixIn: 9.4.4.11
181 }
182
183
184 /** Load JavaScript Files */
185 function wpbc_js_load_files( $where_to_load ) {
186
187 wp_enqueue_script( 'wpbc_all', wpbc_plugin_url( '/_dist/all/_out/wpbc_all.js' ), array( 'jquery' ), WP_BK_VERSION_NUM ); //FixIn: 9.8.6.1
188
189 /**
190 * Popover functionality.
191 * 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/ )
192 * Install Alt + F12 run
193 * npm i @popperjs/core
194 * npm i tippy.js
195 * Copy ..\node_modules\@popperjs\core\dist\umd to ..\wp-content/plugins/booking/assets/libs/popper
196 * Copy ..\node_modules\tippy.js\{dist && themes} to ..\wp-content/plugins/booking/assets/libs/tippy.js
197 * In popper.js edit global.Popper to global.wpbc_Popper
198 * In tippy-bundle.umd.js edit global.Popper to global.wpbc_Popper and global.tippy to global.wpbc_tippy
199 */
200 wp_enqueue_script( 'wpbc-popper', wpbc_plugin_url( '/assets/libs/popper/popper.js' ), array( 'wpbc-global-vars' ), WP_BK_VERSION_NUM ); //FixIn: 9.0.1.1
201 wp_enqueue_script( 'wpbc-tipcy', wpbc_plugin_url( '/assets/libs/tippy.js/dist/tippy-bundle.umd.js' ), array( 'wpbc-popper' ) , WP_BK_VERSION_NUM ); //FixIn: 9.8.1
202
203 if ( $where_to_load != 'client' ) {
204 wp_enqueue_script( 'wpbc-modal', wpbc_plugin_url( '/assets/libs/ui/_out/dropdown_modal.js' ), array( 'jquery' ), WP_BK_VERSION_NUM ); //FixIn: 9.8.1
205 }
206
207 wp_enqueue_script( 'wpbc-datepick', wpbc_plugin_url( '/js/datepick/jquery.datepick.wpbc.9.0.js'), array( 'wpbc-global-vars' ), WP_BK_VERSION_NUM ); //FixIn: 9.8.1
208 $calendar_localization_url = wpbc_get_calendar_localization_url(); // Localization
209 if ( ! empty( $calendar_localization_url ) ) {
210 wp_enqueue_script( 'wpbc-datepick-localize', $calendar_localization_url, array( 'wpbc-datepick' ), WP_BK_VERSION_NUM ); //FixIn: 9.8.1
211 }
212
213 if ( ( $where_to_load == 'client' ) || ( wpbc_is_new_booking_page() ) || ( wpbc_is_settings_form_page() ) ) {
214
215 wp_enqueue_script( 'wpbc-main-client', wpbc_plugin_url( '/js/client.js' ), array( 'wpbc-datepick' ), WP_BK_VERSION_NUM ); // Client
216 wp_enqueue_script( 'wpbc_capacity', wpbc_plugin_url( '/includes/_capacity/_out/create_booking.js' ), array( 'wpbc-main-client' ), WP_BK_VERSION_NUM ); // Add new bookings //FixIn: 9.8.0.3
217 wp_enqueue_script( 'wpbc-times', wpbc_plugin_url( '/js/wpbc_times.js' ), array( 'wpbc-main-client' ), WP_BK_VERSION_NUM ); // FixIn: TimeFree 2 //UnComment it for Booking Calendar Free version
218 if ( 'On' === get_bk_option( 'booking_timeslot_picker' ) ) {
219 wp_enqueue_script( 'wpbc-time-selector', wpbc_plugin_url( '/js/wpbc_time-selector.js'), array( 'wpbc-times' ), WP_BK_VERSION_NUM); //FixIn: 8.7.11.10
220 }
221 }
222
223 if ( $where_to_load == 'admin' ) {
224 wp_enqueue_script( 'wpbc-js-print', wpbc_plugin_url( '/assets/libs/wpbc_js_print/wpbc_js_print.js' ), array( 'jquery' ) , WP_BK_VERSION_NUM ); //FixIn: 9.8.1 //FixIn: 9.2.1.6 //FixIn: 9.1.2.13
225 wp_enqueue_script( 'wpbc-admin-main', wpbc_plugin_url( '/js/admin.js'), array( 'wpbc-global-vars' ), WP_BK_VERSION_NUM ); // Admin
226 if ( wpbc_can_i_load_on_this_page__shortcode_config() ) {
227 wp_enqueue_script( 'wpbc_shortcode_popup', wpbc_plugin_url( '/includes/ui_modal__shortcodes/_out/wpbc_shortcode_popup.js' ), array( 'jquery' ), WP_BK_VERSION_NUM ); //FixIn: 9.8.6.1
228 }
229 wp_enqueue_script( 'wpbc-admin-support', wpbc_plugin_url( '/core/any/js/admin-support.js'), array( 'wpbc-global-vars' ), WP_BK_VERSION_NUM );
230 wp_enqueue_script( 'wpbc-chosen', wpbc_plugin_url( '/assets/libs/chosen/chosen.jquery.min.js'), array( 'wpbc-global-vars' ), WP_BK_VERSION_NUM ); // Chosen Library
231 }
232 }
233
234
235 /**
236 * Remove JS libraries that conflict with Booking Calendar at the pages with booking forms.
237 *
238 * You can disable loading of all Booking Calendar JavaScript files at the Booking > Settings General page in "Advanced" section.
239 * 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.
240 * You can then specify a list of pages in a textarea where you want the Booking Calendar to appear.
241 *
242 * @return void
243 */
244 function wpbc_remove_js_conflicts() {
245 //if ( wp_script_is( 'script-ID', 'registered' ) ) { }
246 wp_deregister_script( 'mphb-kbwood-datepick' );
247 }
248
249 ////////////////////////////////////////////////////////////////////////////////
250 // Support JavaScript functions
251 ////////////////////////////////////////////////////////////////////////////////
252
253 /**
254 * Get URL Datepicker Localization JS File
255 *
256 * @return string - URL to calendar skin
257 */
258 function wpbc_get_calendar_localization_url() {
259 // Datepicker Localization - translation for calendar. Example: $locale = 'fr_FR';
260 $locale = wpbc_get_maybe_reloaded_booking_locale();
261
262 $calendar_localization_url = false;
263
264 if ( ! empty( $locale ) ) {
265
266 $locale_lang = strtolower( substr( $locale, 0, 2 ) ); // 7.0.1.51
267 $locale_country = strtolower( substr( $locale, 3 ) );
268
269 if ( ( $locale_lang !== 'en') && ( wpbc_is_file_exist( '/js/datepick/jquery.datepick-' . $locale_lang . '.js' ) ) ) {
270
271 $calendar_localization_url = wpbc_plugin_url( '/js/datepick/jquery.datepick-'. $locale_lang . '.js' );
272
273 } else if ( ( ! in_array( $locale, array( 'en_US', 'en_CA', 'en_GB', 'en_AU' ) ) ) // English Exceptions
274 && ( wpbc_is_file_exist( '/js/datepick/jquery.datepick-'. $locale_country . '.js' ) )
275 ) {
276
277 $calendar_localization_url = wpbc_plugin_url( '/js/datepick/jquery.datepick-'. $locale_country . '.js' );
278 }
279 }
280
281 return $calendar_localization_url;
282 }
283
284
285 /**
286 * Check if we activated loading of JS/CSS only on specific pages and then load or no it
287 *
288 * @param boolean $is_load_scripts - Default: true
289 * @return boolean - true | false
290 */
291 function wpbc_is_load_css_js_on_client_page( $is_load_scripts ) {
292
293 if ( ! is_admin() ) { // Check on Client side only
294
295 $booking_is_load_js_css_on_specific_pages = get_bk_option( 'booking_is_load_js_css_on_specific_pages' );
296 if ( $booking_is_load_js_css_on_specific_pages == 'On' ) {
297
298 $booking_pages_for_load_js_css = get_bk_option( 'booking_pages_for_load_js_css' );
299
300 $booking_pages_for_load_js_css = preg_split('/[\r\n]+/', $booking_pages_for_load_js_css, -1, PREG_SPLIT_NO_EMPTY);
301
302 $request_uri = $_SERVER['REQUEST_URI']; //FixIn:5.4.1
303 //FixIn: 8.4.5.8
304 if (
305 ( strpos( $request_uri, 'booking_hash=') !== false )
306 || ( strpos( $request_uri, 'check_in=') !== false )
307 ) {
308 $request_uri = parse_url($request_uri);
309 if ( ( ! empty($request_uri ) ) && ( isset($request_uri['path'] ) ) ){
310 $request_uri = $request_uri['path'];
311 } else {
312 $request_uri = $_SERVER['REQUEST_URI'];
313 }
314 }
315
316 if ( ( ! empty( $booking_pages_for_load_js_css ) ) && ( ! in_array( $request_uri, $booking_pages_for_load_js_css ) ) ) {
317
318 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 ==' );" );
319 return false;
320 }
321 }
322 }
323 return true;
324 }
325 add_filter( 'wpbc_is_load_script_on_this_page', 'wpbc_is_load_css_js_on_client_page' );
326
327 /**
328 * Load JS and CSS files for loading modals correctly
329 *
330 * @return void
331 */
332 function wpbc_load_js__required_for_modals(){
333
334 // JS for opening Modals
335 wp_enqueue_script( 'wpbc-modal', wpbc_plugin_url( '/assets/libs/ui/_out/dropdown_modal.js' ), array( 'jquery' ), WP_BK_VERSION_NUM ); //FixIn: 9.8.1
336
337 // CSS
338 wp_enqueue_style( 'wpdevelop-bts', wpbc_plugin_url( '/assets/libs/bootstrap-css/css/bootstrap.css' ), array(), WP_BK_VERSION_NUM ); //FixIn: 9.8.1
339 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
340
341 wp_enqueue_style( 'wpbc-admin-support', wpbc_plugin_url( '/core/any/css/admin-support.css' ), array(), WP_BK_VERSION_NUM );
342 wp_enqueue_style( 'wpbc-admin-menu', wpbc_plugin_url( '/core/any/css/admin-menu.css' ), array(), WP_BK_VERSION_NUM );
343 //wp_enqueue_style( 'wpbc-admin-toolbar', wpbc_plugin_url( '/core/any/css/admin-toolbar.css' ), array(), WP_BK_VERSION_NUM );
344 wp_enqueue_style( 'wpbc-flex-toolbar', wpbc_plugin_url( '/includes/_toolbar_ui/_src/toolbar_ui.css' ), array(), WP_BK_VERSION_NUM );
345 wp_enqueue_style( 'wpbc-admin-modal-popups', wpbc_plugin_url( '/css/modal.css' ), array(), WP_BK_VERSION_NUM);
346 wp_enqueue_style( 'wpbc-admin-pages', wpbc_plugin_url( '/css/admin.css' ), array(), WP_BK_VERSION_NUM);
347 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
348 //if ( 'legacy' != get_bk_option( 'booking_admin_panel_skin' ) ) { //FixIn: 9.5.5.7
349 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
350 //}
351 }
352
353
354 /**
355 * Load JS and CSS files for opening Media Upload PopUp in Admin Panel
356 *
357 * @return void
358 */
359 function wpbc_load_js__required_for_media_upload(){
360
361 /**
362 * Internal WordPress depending on:
363 * 'wp-util' -> array( 'underscore', 'jquery' )
364 * 'wp-backbone' -> array( 'backbone', 'wp-util' )
365 * wp_enqueue_script( 'media-editor' ) -> 'wp-backbone'
366 */
367 if ( ! wpbc_is_this_demo() ) {
368 wp_enqueue_media();
369 wp_enqueue_script( 'wpbc_ui__media_upload', wpbc_plugin_url( '/includes/_media_upload/_out/wpbc_ui__media_upload.js' ), array(
370 'jquery',
371 'media-editor'
372 ), WP_BK_VERSION_NUM );
373 } else {
374 $script = "jQuery(document).ready(function() { ";
375 $script .= " jQuery( '.wpbc_media_upload_button' ).on( 'click', function( event ) { ";
376 $script .= " alert('Warning! This feature is restricted in the public live demo.' ); ";
377 $script .= " }); ";
378 $script .= "}); ";
379 wp_add_inline_script( 'jquery', $script );
380 }
381 }
382
383
384 /**
385 * On jQuery(...).ready function Start
386 *
387 * @return string
388 */
389 function wpbc_jq_ready_start() {
390
391 return "(function() { var a = setInterval( function() { if ( ( 'undefined' === typeof jQuery ) || ! window.jQuery ) { return; } clearInterval( a ); jQuery( document ).ready( function (){";
392
393 // Help description:
394 ?><script type="text/javascript">
395 (function (){
396 var a = setInterval( function (){
397 if ( ('undefined' === typeof jQuery) || !window.jQuery ){
398 return;
399 }
400 clearInterval( a );
401 // Here can be executed jQuery functions
402 jQuery( document ).ready( function (){
403 // Here is my code start
404 } );
405 }, 500 );
406 })();
407 </script><?php
408 }
409
410
411 /**
412 * On jQuery(...).ready function end
413 * @return string
414 */
415 function wpbc_jq_ready_end() {
416
417 return "} ); }, 500 ); })();";
418 }
419