| @@ -1,418 +1,432 @@ | ||
| 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 | -} | |
| 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_admin_page_with_frontend_booking_preview() ) { | |
| 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 | + * Preserve the required execution order for Booking Calendar scripts. | |
| 69 | + * | |
| 70 | + * Removes asynchronous loading attributes and excludes the scripts from | |
| 71 | + * Cloudflare Rocket Loader. The filter runs at a very late priority so these | |
| 72 | + * protections remain present after other script-tag optimization filters. | |
| 73 | + * | |
| 74 | + * @param string $tag The script tag. | |
| 75 | + * @param string $handle The registered script handle. | |
| 76 | + * @param string $src The script source URL. | |
| 77 | + * | |
| 78 | + * @return string Filtered script HTML string. | |
| 79 | + */ | |
| 80 | + public function filter_script_loader_tag( $tag, $handle, $src ) { | |
| 81 | + $is_required_script = ( | |
| 82 | + ( 'jquery-core' === $handle ) | |
| 83 | + || ( 'jquery-migrate' === $handle ) | |
| 84 | + || ( false !== strpos( $handle, 'wpbc_' ) ) // Booking Calendar script wpbc_all.js // FixIn: 10.1.2.3. | |
| 85 | + || ( false !== strpos( $handle, 'wpbc-' ) ) // Booking Calendar scripts | |
| 86 | + || ( false !== strpos( $handle, 'wpdevelop-' ) ) | |
| 87 | + || ( false !== strpos( $handle, 'wpbm-' ) ) | |
| 88 | + ); | |
| 89 | + | |
| 90 | + if ( $is_required_script ) { | |
| 91 | + foreach ( array( 'async', 'defer' ) as $attr ) { | |
| 92 | + // Match only a standalone attribute, not the "async" part of data-cfasync. | |
| 93 | + $pattern = '/\s+' . $attr . '(?:\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^\s>]+))?/i'; | |
| 94 | + $tag = preg_replace( $pattern, '', $tag ); | |
| 95 | + } | |
| 96 | + | |
| 97 | + // Rocket Loader can otherwise execute dependent scripts before wpbc_all.js defines _wpbc. | |
| 98 | + if ( false === strpos( $tag, 'data-cfasync=' ) ) { | |
| 99 | + $tag = preg_replace( '/<script\b/i', '<script data-cfasync="false"', $tag, 1 ); | |
| 100 | + } | |
| 101 | + } | |
| 102 | + | |
| 103 | + return $tag; | |
| 104 | + } | |
| 105 | + | |
| 106 | + | |
| 107 | + /** | |
| 108 | + * Deregister some conflict scripts from other plugins. | |
| 109 | + * | |
| 110 | + * @param type $where_to_load | |
| 111 | + */ | |
| 112 | + public function remove_conflicts( $where_to_load ) { | |
| 113 | + | |
| 114 | + if ( wpbc_is_bookings_page() ) { | |
| 115 | + if (function_exists('wp_dequeue_script')) { | |
| 116 | + //wp_dequeue_script( 'jquery.cookie' ); | |
| 117 | + //wp_dequeue_script( 'jquery-interdependencies' ); | |
| 118 | + wp_dequeue_script( 'chosen' ); | |
| 119 | + wp_dequeue_script( 'cs-framework' ); | |
| 120 | + wp_dequeue_script( 'cgmp-jquery-tools-tooltip' ); // Remove this script jquery.tools.tooltip.min.js, which is load by the "Comprehensive Google Map Plugin" | |
| 121 | + wp_dequeue_script( 'bootstrap-script' ); | |
| 122 | + } | |
| 123 | + } | |
| 124 | + } | |
| 125 | +} | |
| 126 | + | |
| 127 | + | |
| 128 | +/** Define JavaScript Varibales */ | |
| 129 | +function wpbc_js_load_vars( $where_to_load ) { | |
| 130 | + | |
| 131 | + | |
| 132 | +} | |
| 133 | + | |
| 134 | + | |
| 135 | +/** Default JavaScripts Libraries */ | |
| 136 | +function wpbc_js_load_libs( $where_to_load ) { | |
| 137 | + | |
| 138 | + wp_enqueue_script( 'jquery' ); // jQuery. | |
| 139 | + | |
| 140 | + // $src = ''; | |
| 141 | + // $deps = ''; | |
| 142 | + // $ver = false; | |
| 143 | + // wp_enqueue_script( 'jquery', $src, $deps, $ver, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); | |
| 144 | + | |
| 145 | + // Default Admin Libs | |
| 146 | + if ( 'admin' == $where_to_load ) { | |
| 147 | + if ( wpbc_is_settings_page() ) { | |
| 148 | + wp_enqueue_style( 'thickbox' ); // CSS Thickbox | |
| 149 | + wp_enqueue_script( 'thickbox' ); // JS Thickbox | |
| 150 | + wp_enqueue_media(); | |
| 151 | + } | |
| 152 | + wp_enqueue_style( 'wp-color-picker' ); // Color Picker | |
| 153 | + wp_enqueue_script( 'wp-color-picker' ); | |
| 154 | + wp_enqueue_script( 'jquery-ui-sortable' ); // UI Sortable | |
| 155 | + } | |
| 156 | + | |
| 157 | + // WP Util, that support wp.template, based on underscore _.template system | |
| 158 | + wp_enqueue_script( 'wp-util' ); //FixIn: TimeFreeGenerator // FixIn: 9.4.4.11. | |
| 159 | +} | |
| 160 | + | |
| 161 | + | |
| 162 | +/** Load JavaScript Files */ | |
| 163 | +function wpbc_js_load_files( $where_to_load ) { | |
| 164 | + | |
| 165 | + 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. | |
| 166 | + | |
| 167 | + /** | |
| 168 | + * Popover functionality. | |
| 169 | + * 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/ ) | |
| 170 | + * Install Alt + F12 run | |
| 171 | + * npm i @popperjs/core | |
| 172 | + * npm i tippy.js | |
| 173 | + * Copy ..\node_modules\@popperjs\core\dist\umd to ..\wp-content/plugins/booking/vendors/_custom/popper | |
| 174 | + * Copy ..\node_modules\tippy.js\{dist && themes} to ..\wp-content/plugins/booking/vendors/_custom/tippy.js | |
| 175 | + * In popper.js edit global.Popper to global.wpbc_Popper | |
| 176 | + * In tippy-bundle.umd.js edit global.Popper to global.wpbc_Popper and global.tippy to global.wpbc_tippy | |
| 177 | + */ | |
| 178 | + wp_enqueue_script( 'wpbc-popper', wpbc_plugin_url( '/vendors/_custom/popper/popper.js' ), array( 'wpbc_all' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: 9.0.1.1. | |
| 179 | + wp_enqueue_script( 'wpbc-tipcy', wpbc_plugin_url( '/vendors/_custom/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 | |
| 180 | + | |
| 181 | + if ( $where_to_load != 'client' ) { | |
| 182 | + wp_enqueue_script( 'wpbc-modal', wpbc_plugin_url( '/vendors/_custom/dropdown_modal/_out/dropdown_modal.js' ), array( 'jquery' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); //FixIn: 9.8.1 | |
| 183 | + } | |
| 184 | + | |
| 185 | + 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 | |
| 186 | + $calendar_localization_url = wpbc_get_calendar_localization_url(); // Localization | |
| 187 | + if ( ! empty( $calendar_localization_url ) ) { | |
| 188 | + 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 | |
| 189 | + } | |
| 190 | + | |
| 191 | + if ( ( $where_to_load == 'client' ) || wpbc_is_admin_page_with_frontend_booking_preview() ) { | |
| 192 | + | |
| 193 | + 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 | |
| 194 | + 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. | |
| 195 | + 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 | |
| 196 | + // if ( ( 'On' === get_bk_option( 'booking_timeslot_picker' ) ) || ( wpbc_is_setup_wizard_page() ) ) { | |
| 197 | + 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. | |
| 198 | + // } | |
| 199 | + wp_enqueue_script( 'wpbc-imask', wpbc_plugin_url( '/vendors/imask/dist/imask.js'), array( 'wpbc-main-client' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: 10.12.4.10. | |
| 200 | + $booking_is_use_phone_validation = get_bk_option( 'booking_is_use_phone_validation' ); | |
| 201 | + if ( 'On' === $booking_is_use_phone_validation ) { | |
| 202 | + wp_enqueue_script( 'wpbc-iphone-validator', wpbc_plugin_url( '/js/wpbc_phone_validator.js' ), array( 'wpbc-imask' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: 10.12.4.10. | |
| 203 | + } | |
| 204 | + } | |
| 205 | + | |
| 206 | + if ( 'admin' === $where_to_load ) { | |
| 207 | + wp_enqueue_script( 'wpbc-js-print', wpbc_plugin_url( '/vendors/_custom/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. | |
| 208 | + 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. | |
| 209 | + if ( wpbc_can_i_load_on_this_page__shortcode_config() ) { | |
| 210 | + 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. | |
| 211 | + } | |
| 212 | + 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 ) ); | |
| 213 | + wp_enqueue_script( 'wpbc-chosen', wpbc_plugin_url( '/vendors/chosen/chosen.jquery.js' ), array( 'wpbc_all' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // Chosen Library. | |
| 214 | + | |
| 215 | + // FixIn: 10.12.2.3. // docs: https://www.npmjs.com/package/simplebar#5-caveats . | |
| 216 | + wp_enqueue_script( 'wpbc-simplebar', wpbc_plugin_url( '/vendors/simplebar/dist/simplebar.min.js' ), array( 'wpbc_all' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // Chosen Library. | |
| 217 | + wp_enqueue_style( 'wpbc-simplebar', wpbc_plugin_url( '/vendors/simplebar/dist/simplebar.min.css' ), array(), WP_BK_VERSION_NUM ); | |
| 218 | + } | |
| 219 | + if ( in_array( $where_to_load, array( 'admin', 'both' ), true ) ) { | |
| 220 | + wp_enqueue_script( 'wpbc_all_admin', wpbc_plugin_url( '/_dist/all/_out/wpbc_all_admin.js' ), array( 'wpbc_all' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); | |
| 221 | + } | |
| 222 | +} | |
| 223 | + | |
| 224 | + | |
| 225 | +/** | |
| 226 | + * Remove JS libraries that conflict with Booking Calendar at the pages with booking forms. | |
| 227 | + * | |
| 228 | + * You can disable loading of all Booking Calendar JavaScript files at the Booking > Settings General page in "Advanced" section. | |
| 229 | + * 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. | |
| 230 | + * You can then specify a list of pages in a textarea where you want the Booking Calendar to appear. | |
| 231 | + * | |
| 232 | + * @return void | |
| 233 | + */ | |
| 234 | +function wpbc_remove_js_conflicts() { | |
| 235 | + //if ( wp_script_is( 'script-ID', 'registered' ) ) { } | |
| 236 | + wp_deregister_script( 'mphb-kbwood-datepick' ); | |
| 237 | +} | |
| 238 | + | |
| 239 | +//////////////////////////////////////////////////////////////////////////////// | |
| 240 | +// Support JavaScript functions | |
| 241 | +//////////////////////////////////////////////////////////////////////////////// | |
| 242 | + | |
| 243 | +/** | |
| 244 | + * Get URL Datepicker Localization JS File | |
| 245 | + * | |
| 246 | + * @return string - URL to calendar skin | |
| 247 | + */ | |
| 248 | +function wpbc_get_calendar_localization_url() { | |
| 249 | + // Datepicker Localization - translation for calendar. Example: $locale = 'fr_FR'; | |
| 250 | + $locale = wpbc_get_maybe_reloaded_booking_locale(); | |
| 251 | + | |
| 252 | + $calendar_localization_url = false; | |
| 253 | + | |
| 254 | + if ( ! empty( $locale ) ) { | |
| 255 | + | |
| 256 | + $locale_lang = strtolower( substr( $locale, 0, 2 ) ); // 7.0.1.51 | |
| 257 | + $locale_country = strtolower( substr( $locale, 3 ) ); | |
| 258 | + | |
| 259 | + if ( ( $locale_lang !== 'en') && ( wpbc_is_file_exist( '/js/datepick/jquery.datepick-' . $locale_lang . '.js' ) ) ) { | |
| 260 | + | |
| 261 | + $calendar_localization_url = wpbc_plugin_url( '/js/datepick/jquery.datepick-'. $locale_lang . '.js' ); | |
| 262 | + | |
| 263 | + } else if ( ( ! in_array( $locale, array( 'en_US', 'en_CA', 'en_GB', 'en_AU' ) ) ) // English Exceptions | |
| 264 | + && ( wpbc_is_file_exist( '/js/datepick/jquery.datepick-'. $locale_country . '.js' ) ) | |
| 265 | + ) { | |
| 266 | + | |
| 267 | + $calendar_localization_url = wpbc_plugin_url( '/js/datepick/jquery.datepick-'. $locale_country . '.js' ); | |
| 268 | + } | |
| 269 | + } | |
| 270 | + | |
| 271 | + return $calendar_localization_url; | |
| 272 | +} | |
| 273 | + | |
| 274 | + | |
| 275 | +/** | |
| 276 | + * Check if we activated loading of JS/CSS only on specific pages and then load or no it | |
| 277 | + * | |
| 278 | + * @param boolean $is_load_scripts - Default: true | |
| 279 | + * @return boolean - true | false | |
| 280 | + */ | |
| 281 | +function wpbc_is_load_css_js_on_client_page( $is_load_scripts ) { | |
| 282 | + | |
| 283 | + if ( ! is_admin() ) { // Check on Client side only | |
| 284 | + | |
| 285 | + $booking_is_load_js_css_on_specific_pages = get_bk_option( 'booking_is_load_js_css_on_specific_pages' ); | |
| 286 | + if ( $booking_is_load_js_css_on_specific_pages == 'On' ) { | |
| 287 | + | |
| 288 | + $booking_pages_for_load_js_css = get_bk_option( 'booking_pages_for_load_js_css' ); | |
| 289 | + | |
| 290 | + $booking_pages_for_load_js_css = preg_split('/[\r\n]+/', $booking_pages_for_load_js_css, -1, PREG_SPLIT_NO_EMPTY); | |
| 291 | + | |
| 292 | + $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 */ | |
| 293 | + $request_uri = $server_request_uri; //FixIn:5.4.1 | |
| 294 | + // FixIn: 8.4.5.8. | |
| 295 | + if ( | |
| 296 | + ( strpos( $request_uri, 'booking_hash=') !== false ) | |
| 297 | + || ( strpos( $request_uri, 'check_in=') !== false ) | |
| 298 | + ) { | |
| 299 | + $request_uri = wp_parse_url($request_uri); | |
| 300 | + if ( ( ! empty($request_uri ) ) && ( isset($request_uri['path'] ) ) ){ | |
| 301 | + $request_uri = $request_uri['path']; | |
| 302 | + } else { | |
| 303 | + $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 */ | |
| 304 | + $request_uri = $server_request_uri; | |
| 305 | + } | |
| 306 | + } | |
| 307 | + | |
| 308 | + if ( ( ! empty( $booking_pages_for_load_js_css ) ) && ( ! in_array( $request_uri, $booking_pages_for_load_js_css ) ) ) { | |
| 309 | + | |
| 310 | + 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 ==' );" ); | |
| 311 | + return false; | |
| 312 | + } | |
| 313 | + } | |
| 314 | + } | |
| 315 | + return true; | |
| 316 | +} | |
| 317 | +add_filter( 'wpbc_is_load_script_on_this_page', 'wpbc_is_load_css_js_on_client_page' ); | |
| 318 | + | |
| 319 | +/** | |
| 320 | + * Load JS and CSS files for loading modals correctly | |
| 321 | + * | |
| 322 | + * @return void | |
| 323 | + */ | |
| 324 | +function wpbc_load_js__required_for_modals() { | |
| 325 | + | |
| 326 | + // JS for opening Modals. | |
| 327 | + wp_enqueue_script( 'wpbc-modal', wpbc_plugin_url( '/vendors/_custom/dropdown_modal/_out/dropdown_modal.js' ), array( 'jquery' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: 9.8.1. | |
| 328 | + | |
| 329 | + // CSS. | |
| 330 | + wp_enqueue_style( 'wpdevelop-bts', wpbc_plugin_url( '/vendors/_custom/bootstrap-css/css/bootstrap.css' ), array(), WP_BK_VERSION_NUM ); // FixIn: 9.8.1. | |
| 331 | + wp_enqueue_style( 'wpdevelop-bts-theme', wpbc_plugin_url( '/vendors/_custom/bootstrap-css/css/bootstrap-theme.css' ), array(), WP_BK_VERSION_NUM ); // FixIn: 9.8.1. | |
| 332 | + | |
| 333 | + wp_enqueue_style( 'wpbc-admin-support', wpbc_plugin_url( '/core/any/css/admin-support.css' ), array(), WP_BK_VERSION_NUM ); | |
| 334 | + wp_enqueue_style( 'wpbc-admin-menu', wpbc_plugin_url( '/core/any/css/admin-menu.css' ), array(), WP_BK_VERSION_NUM ); | |
| 335 | + // wp_enqueue_style( 'wpbc-admin-toolbar', wpbc_plugin_url( '/core/any/css/admin-toolbar.css' ), array(), WP_BK_VERSION_NUM ); // . | |
| 336 | + wp_enqueue_style( 'wpbc-flex-toolbar', wpbc_plugin_url( '/includes/_toolbar_ui/_out/toolbar_ui.css' ), array(), WP_BK_VERSION_NUM ); | |
| 337 | + wp_enqueue_style( 'wpbc-admin-modal-popups', wpbc_plugin_url( '/css/modal.css' ), array(), WP_BK_VERSION_NUM ); | |
| 338 | + wp_enqueue_style( 'wpbc-admin-pages', wpbc_plugin_url( '/css/admin.css' ), array(), WP_BK_VERSION_NUM ); | |
| 339 | + 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. | |
| 340 | +} | |
| 341 | + | |
| 342 | +/** | |
| 343 | + * Load only the modal assets required by front-end popup shortcodes. | |
| 344 | + * | |
| 345 | + * This intentionally avoids the broader admin helper above, because front-end | |
| 346 | + * pages should not receive admin page/menu styles when only a modal booking | |
| 347 | + * form is needed. | |
| 348 | + * | |
| 349 | + * @return void | |
| 350 | + */ | |
| 351 | +function wpbc_load_js__required_for_front_end_modals() { | |
| 352 | + | |
| 353 | + // JS for opening modals. | |
| 354 | + wp_enqueue_script( 'wpbc-modal', wpbc_plugin_url( '/vendors/_custom/dropdown_modal/_out/dropdown_modal.js' ), array( 'jquery' ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); // FixIn: 9.8.1. | |
| 355 | + | |
| 356 | + // Base Bootstrap CSS is already loaded by Booking Calendar in normal front-end rendering. | |
| 357 | + if ( ! wp_style_is( 'wpdevelop-bts', 'enqueued' ) && ! wp_style_is( 'wpdevelop-bts', 'done' ) ) { | |
| 358 | + wp_enqueue_style( 'wpdevelop-bts', wpbc_plugin_url( '/vendors/_custom/bootstrap-css/css/bootstrap.css' ), array(), WP_BK_VERSION_NUM ); // FixIn: 9.8.1. | |
| 359 | + } | |
| 360 | + if ( ! wp_style_is( 'wpdevelop-bts-theme', 'enqueued' ) && ! wp_style_is( 'wpdevelop-bts-theme', 'done' ) ) { | |
| 361 | + wp_enqueue_style( 'wpdevelop-bts-theme', wpbc_plugin_url( '/vendors/_custom/bootstrap-css/css/bootstrap-theme.css' ), array(), WP_BK_VERSION_NUM ); // FixIn: 9.8.1. | |
| 362 | + } | |
| 363 | + | |
| 364 | + wp_enqueue_style( 'wpbc-admin-modal-popups', wpbc_plugin_url( '/css/modal.css' ), array(), WP_BK_VERSION_NUM ); | |
| 365 | +} | |
| 366 | + | |
| 367 | + | |
| 368 | +/** | |
| 369 | + * Load JS and CSS files for opening Media Upload PopUp in Admin Panel | |
| 370 | + * | |
| 371 | + * @return void | |
| 372 | + */ | |
| 373 | +function wpbc_load_js__required_for_media_upload(){ | |
| 374 | + | |
| 375 | + /** | |
| 376 | + * Internal WordPress depending on: | |
| 377 | + * 'wp-util' -> array( 'underscore', 'jquery' ) | |
| 378 | + * 'wp-backbone' -> array( 'backbone', 'wp-util' ) | |
| 379 | + * wp_enqueue_script( 'media-editor' ) -> 'wp-backbone' | |
| 380 | + */ | |
| 381 | + if ( ! wpbc_is_this_demo() ) { | |
| 382 | + wp_enqueue_media(); | |
| 383 | + wp_enqueue_script( 'wpbc_ui__media_upload', wpbc_plugin_url( '/includes/_media_upload/_out/wpbc_ui__media_upload.js' ), array( | |
| 384 | + 'jquery', | |
| 385 | + 'media-editor' | |
| 386 | + ), WP_BK_VERSION_NUM, array( 'in_footer' => WPBC_JS_IN_FOOTER ) ); | |
| 387 | + } else { | |
| 388 | + $script = "jQuery(document).ready(function() { "; | |
| 389 | + $script .= " jQuery( '.wpbc_media_upload_button' ).on( 'click', function( event ) { "; | |
| 390 | + $script .= " alert('Warning! This feature is restricted in the public live demo.' ); "; | |
| 391 | + $script .= " }); "; | |
| 392 | + $script .= "}); "; | |
| 393 | + wp_add_inline_script( 'jquery', $script ); | |
| 394 | + } | |
| 395 | +} | |
| 396 | + | |
| 397 | + | |
| 398 | +/** | |
| 399 | + * On jQuery(...).ready function Start | |
| 400 | + * | |
| 401 | + * @return string | |
| 402 | + */ | |
| 403 | +function wpbc_jq_ready_start() { | |
| 404 | + | |
| 405 | + return "(function() { var a = setInterval( function() { if ( ( 'undefined' === typeof _wpbc ) || ( 'undefined' === typeof jQuery ) || ! window.jQuery ) { return; } clearInterval( a ); jQuery( document ).ready( function (){"; | |
| 406 | + | |
| 407 | + // Help description: | |
| 408 | + ?><script type="text/javascript"> | |
| 409 | + (function (){ | |
| 410 | + var a = setInterval( function (){ | |
| 411 | + if ( ('undefined' === typeof jQuery) || !window.jQuery ){ | |
| 412 | + return; | |
| 413 | + } | |
| 414 | + clearInterval( a ); | |
| 415 | + // Here can be executed jQuery functions | |
| 416 | + jQuery( document ).ready( function (){ | |
| 417 | + // Here is my code start | |
| 418 | + } ); | |
| 419 | + }, 500 ); | |
| 420 | + })(); | |
| 421 | + </script><?php | |
| 422 | +} | |
| 423 | + | |
| 424 | + | |
| 425 | +/** | |
| 426 | + * On jQuery(...).ready function end | |
| 427 | + * @return string | |
| 428 | + */ | |
| 429 | +function wpbc_jq_ready_end() { | |
| 430 | + | |
| 431 | + return "} ); }, 500 ); })();"; | |
| 432 | +} | |