PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 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 All 205 releases
← All changes | includes/ui_modal__shortcodes/tiny-button-popup.php +161 -148 10.1.3 → 11.9 View file →
@@ -13,47 +13,50 @@
13 13 */
14 14
15 15 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
16 16
17 -//FixIn: 9.9.0.15
17 +// FixIn: 9.9.0.15.
18 18
19 19 class WPBC_TinyMCE_Buttons {
20 20
21 21 // <editor-fold defaultstate="collapsed" desc=" I n i t + H o o k s" >
22 - private $settings = array();
22 + private $settings = array();
23 +
24 + public function __construct( $params ) {
25 +
26 + $this->settings = array(
27 + 'tiny_prefix' => 'wpbc_tiny',
28 + 'tiny_icon_url' => '', // WPBC_PLUGIN_URL . '/assets/img/bc_black-16x16.png'.
29 + 'tiny_js_plugin' => WPBC_PLUGIN_URL . '/js/wpbc_tinymce_btn.js',
30 + 'tiny_js_function' => 'wpbc_init_tinymce_buttons', // This function NAME exist inside of this JS file: ['tiny_js_plugin'].
31 + 'tiny_btn_row' => 1,
32 + 'pages_where_insert' => array(), // FixIn: 10.6.5.1.
33 + 'buttons' => array(), // FixIn: 10.6.5.1.
34 + );
35 +
36 + $this->settings = wp_parse_args( $params, $this->settings );
37 +
38 + add_action( 'init', array( $this, 'define_init_hooks' ) ); // Define init hooks.
39 + }
23 40
24 - function __construct( $params ) {
25 -
26 - $this->settings = array(
27 - 'tiny_prefix' => 'wpbc_tiny'
28 - , 'tiny_icon_url' => WPBC_PLUGIN_URL . '/assets/img/bc_black-16x16.png'
29 - , 'tiny_js_plugin' => WPBC_PLUGIN_URL . '/js/wpbc_tinymce_btn.js'
30 - , 'tiny_js_function' => 'wpbc_init_tinymce_buttons' // This function NAME exist inside of this JS file: ['tiny_js_plugin']
31 - , 'tiny_btn_row' => 1
32 - , 'pages_where_insert' => array( 'post-new.php', 'page-new.php', 'post.php', 'page.php', 'widgets.php', 'customize.php' ) //FixIn: 8.8.2.12
33 - , 'buttons' => array(
34 - 'booking_insert' => array(
35 - 'hint' => __('Insert booking calendar' ,'booking')
36 - , 'title' => __('Booking calendar' ,'booking')
37 - , 'img' => WPBC_PLUGIN_URL . '/assets/img/bc_black-16x16.png'
38 - , 'class' => 'bookig_buttons'
39 - , 'js_func_name_click' => 'wpbc_tiny_btn_click'
40 - , 'bookmark' => 'booking'
41 - , 'is_close_bookmark' => 0
42 - )
43 - )
44 - );
45 -
46 - $this->settings = wp_parse_args( $params, $this->settings );
47 -
48 - add_action( 'init', array( $this, 'define_init_hooks' ) ); // Define init hooks
49 - }
50 -
51 41 /** Init all hooks for showing Button in Tiny Toolbar */
52 42 public function define_init_hooks() {
53 43
54 44 if ( wpbc_can_i_load_on_this_page__shortcode_config() ) {
55 45
46 + // FixIn: 10.6.5.1.
47 + $this->settings['buttons'] = array(
48 + 'booking_insert' => array(
49 + 'hint' => __('Insert WP Booking Calendar' ,'booking')
50 + , 'title' => __('Booking calendar' ,'booking')
51 + , 'img' => ''//WPBC_PLUGIN_URL . '/assets/img/bc_black-16x16.png'
52 + , 'class' => 'bookig_buttons'
53 + , 'js_func_name_click' => 'wpbc_tiny_btn_click'
54 + , 'bookmark' => 'booking'
55 + , 'is_close_bookmark' => 0
56 + )
57 + );
58 +
56 59 // Load JS file - TinyMCE plugin
57 60 add_filter( 'mce_external_plugins', array( $this, 'load_tiny_js_plugin' ) );
58 61
59 62 // Add the custom TinyMCE buttons
@@ -66,107 +69,117 @@
66 69 // Add the old style button to the non-TinyMCE editor views //Fix: 8.4.2.10 - compatibility with Gutenberg 4.1- 4.3 ( or newer ) at edit post page.
67 70 add_action( 'edit_page_form', array( $this, 'add_html_button' ) );
68 71 add_action( 'admin_head', array( $this, 'insert_button') ); // Tiny Button
69 72 add_action( 'admin_footer', array( $this, 'modal_content' ) ); // Modal Content
70 -
73 +
74 +
71 75 // JS & CSS
72 76 wpbc_load_js__required_for_modals();
73 77
74 - add_action( 'customize_controls_print_footer_scripts', array( $this, 'add_html_button' ) ); //FixIn: 8.8.2.12
78 + add_action( 'customize_controls_print_footer_scripts', array( $this, 'add_html_button' ) ); // FixIn: 8.8.2.12.
75 79 add_action( 'customize_controls_print_footer_scripts', array( $this, 'insert_button' ) );
76 80 add_action( 'customize_controls_print_footer_scripts', array( $this, 'modal_content' ) ); // Modal Content
77 81 }
78 82 }
79 83 // </editor-fold>
80 -
81 -
84 +
85 +
82 86 // <editor-fold defaultstate="collapsed" desc=" TinyMCE - Add Button " >
83 87
84 - /**
88 + /**
85 89 * Load JS file - TinyMCE plugin
86 - *
87 - * @param array $plugins
88 - * @return array
89 - */
90 - public function load_tiny_js_plugin( $plugins ){
91 -
92 - $plugins[ $this->settings['tiny_prefix'] . '_quicktags'] = $this->settings['tiny_js_plugin'];
93 -
94 - return $plugins;
95 - }
96 -
97 -
98 - /**
90 + *
91 + * @param array $plugins
92 + *
93 + * @return array
94 + */
95 + public function load_tiny_js_plugin( $plugins ) {
96 +
97 + $plugins[ $this->settings['tiny_prefix'] . '_quicktags' ] = $this->settings['tiny_js_plugin'];
98 +
99 + return $plugins;
100 + }
101 +
102 +
103 + /**
99 104 * Add the custom TinyMCE buttons
100 - *
101 - * @param array $buttons
102 - * @return array
103 - */
104 - public function add_tiny_button( $buttons ) {
105 -
106 - array_push( $buttons, "separator" );
107 -
108 - foreach ( $this->settings['buttons'] as $type => $strings ) {
109 - array_push( $buttons, $this->settings['tiny_prefix'] . '_' . $type );
110 - }
105 + *
106 + * @param array $buttons
107 + *
108 + * @return array
109 + */
110 + public function add_tiny_button( $buttons ) {
111 111
112 - return $buttons;
113 - }
114 -
115 -
116 - /** Add the old style button to the non-TinyMCE editor views */
117 - public function add_html_button() {
118 -
119 - $buttonshtml = '';
120 - $datajs='';
121 -
122 - foreach ( $this->settings['buttons'] as $type => $props ) {
112 + array_push( $buttons, 'separator' );
123 113
124 - $buttonshtml .= '<input type="button" class="ed_button button button-small" onclick="'
125 - .$props['js_func_name_click'].'(\'' . $type . '\')" title="' . $props['hint'] . '" value="' . $props['title'] . '" />';
114 + foreach ( $this->settings['buttons'] as $type => $strings ) {
115 + array_push( $buttons, $this->settings['tiny_prefix'] . '_' . $type );
116 + }
126 117
127 - $datajs.= " wpbc_tiny_btn_data['$type'] = {\n";
128 - $datajs.= ' title: "' . esc_js( $props['title'] ) . '",' . "\n";
129 - $datajs.= ' tag: "' . esc_js( $props['bookmark'] ) . '",' . "\n";
130 - $datajs.= ' tag_close: "' . esc_js( $props['is_close_bookmark'] ) . '",' . "\n";
131 - $datajs.= ' cal_count: "' . get_bk_option( 'booking_client_cal_count' ) . '"' . "\n";
132 - $datajs.= "\n };\n";
133 - }
134 -
135 - ?><script type="text/javascript">
136 - // <![CDATA[
137 -
138 - function wpbc_add_html_button_to_toolbar(){ // Add buttons ( HTML view )
139 - if ( jQuery( '#ed_toolbar' ).length == 0 )
140 - setTimeout( 'wpbc_add_html_button_to_toolbar()' , 100 );
141 - else
142 - jQuery("#ed_toolbar").append( '<?php echo wp_specialchars_decode( esc_js( $buttonshtml ), ENT_COMPAT ); ?>' );
143 - }
144 - jQuery(document).ready(function(){
145 - setTimeout( 'wpbc_add_html_button_to_toolbar()' , 100 );
146 - });
118 + return $buttons;
119 + }
147 120
148 - var selected_booking_shortcode = 'bookingform';
149 - var wpbc_tiny_btn_data={};
150 - <?php echo $datajs; ?>
151 -
152 - // ]]>
153 - </script><?php
154 -
155 - }
156 -
157 -
121 +
122 + /** Add the old style button to the non-TinyMCE editor views */
123 + public function add_html_button() {
124 +
125 + $buttonshtml = '';
126 + $datajs = '';
127 +
128 + foreach ( $this->settings['buttons'] as $type => $props ) {
129 +
130 + $buttonshtml .= '<input type="button" class="ed_button button button-small" onclick="' . $props['js_func_name_click'] . '(\'' . $type . '\')" title="' . $props['hint'] . '" value="' . $props['title'] . '" />';
131 +
132 + $datajs .= " wpbc_tiny_btn_data['$type'] = {\n";
133 + $datajs .= ' title: "' . esc_js( $props['title'] ) . '",' . "\n";
134 + $datajs .= ' tag: "' . esc_js( $props['bookmark'] ) . '",' . "\n";
135 + $datajs .= ' tag_close: "' . esc_js( $props['is_close_bookmark'] ) . '",' . "\n";
136 + $datajs .= ' cal_count: "' . get_bk_option( 'booking_client_cal_count' ) . '"' . "\n";
137 + $datajs .= "\n };\n";
138 + }
139 +
140 + ?>
141 + <script type="text/javascript">
142 + // <![CDATA[
143 + function wpbc_add_html_button_to_toolbar() { // Add buttons ( HTML view ).
144 + if ( jQuery( '#ed_toolbar' ).length == 0 )
145 + setTimeout( 'wpbc_add_html_button_to_toolbar()', 100 );
146 + else {
147 + jQuery( "#ed_toolbar" ).append( '<?php
148 + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
149 + echo wp_specialchars_decode( esc_js( $buttonshtml ), ENT_COMPAT ); ?>' );
150 + }
151 + }
152 +
153 + jQuery( document ).ready( function () {
154 + setTimeout( 'wpbc_add_html_button_to_toolbar()', 100 );
155 + } );
156 +
157 + var selected_booking_shortcode = 'bookingform';
158 + var wpbc_tiny_btn_data = {};
159 + <?php
160 + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
161 + echo $datajs; ?>
162 + // ]]>
163 + </script>
164 + <?php
165 +
166 + }
167 +
168 +
158 169 public function insert_button() {
159 170
160 171 $script = '';
161 172
162 - // calendar3-range https://icons.getbootstrap.com/icons/calendar3-range/
163 - $svg_icon_integarted = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-calendar3-range" viewBox="-2 -1 20 20">'
164 - . '<path d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z"/>'
165 - . '<path d="M7 10a1 1 0 0 0 0-2H1v2h6zm2-3h6V5H9a1 1 0 0 0 0 2z"/>'
166 - . '</svg>';
167 - $mune_icon_url = sprintf( 'data:image/svg+xml;base64,%s', base64_encode( $svg_icon_integarted ) );
173 +// // calendar3-range https://icons.getbootstrap.com/icons/calendar3-range/
174 +// $svg_icon_integarted = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-calendar3-range" viewBox="-2 -1 20 20">'
175 +// . '<path d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z"/>'
176 +// . '<path d="M7 10a1 1 0 0 0 0-2H1v2h6zm2-3h6V5H9a1 1 0 0 0 0 2z"/>'
177 +// . '</svg>';
178 +// $mune_icon_url = sprintf( 'data:image/svg+xml;base64,%s', base64_encode( $svg_icon_integarted ) );
168 179
180 + // FixIn: 10.11.3.3.
181 + $mune_icon_url = wpbc_get_svg_logo_for_background( '#000', '#aaa', '0.3' ); // '#aaa', '#aaa', '0.2' .
169 182
170 183 if ( ! empty( $this->settings['buttons'] ) ){
171 184
172 185 $script .= '<script type="text/javascript">';
@@ -187,10 +200,11 @@
187 200 }
188 201 $script .= ' }';
189 202
190 203 $script .= '</script>';
191 -
192 - echo $script;
204 +
205 + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
206 + echo $script;
193 207 }
194 208 }
195 209
196 210 // </editor-fold>
@@ -199,9 +213,9 @@
199 213 // <editor-fold defaultstate="collapsed" desc=" M o d a l C o n t e n t " >
200 214 public function modal_content() {
201 215
202 216 ?><span class="wpdevelop wpbc_page"><div class="visibility_container clearfix-height" style="display:block;"><?php
203 - ?><div id="wpbc_tiny_modal" class="modal wpbc_popup_modal wpbc_tiny_modal" tabindex="-1" role="dialog">
217 + ?><div id="wpbc_tiny_modal" class="modal wpbc_popup_modal wpbc_tiny_modal wpbc_shortcode_config__scroll_mode" tabindex="-1" role="dialog">
204 218 <div class="modal-dialog modal-lg">
205 219 <div class="modal-content">
206 220 <div class="modal-header">
207 221 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
@@ -207,12 +221,9 @@
207 221 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
208 222 <h4 class="modal-title">
209 223 <span>WP Booking Calendar</span>
210 224 <span style="padding: 0 1em;"> / </span>
211 - <span>
212 - <?php
213 - _e( 'Shortcode Configuration', 'booking' );
214 - ?></span></h4>
225 + <span> <?php esc_html_e( 'Shortcode Configuration', 'booking' ); ?></span></h4>
215 226 </div>
216 227 <div class="modal-body">
217 228
218 229 <div class="wpbc_settings_flex_container">
@@ -232,8 +243,14 @@
232 243
233 244 // [bookingcalendar ... ] ----------------------------------------------------------
234 245 wpbc_shortcode_config__content__bookingcalendar();
235 246
247 + // [booking_appointment ... ] --------------------------------------------------
248 + wpbc_shortcode_config__content__booking_appointment();
249 +
250 + // [booking_resource_selector ... ] --------------------------------------------
251 + wpbc_shortcode_config__content__booking_resource_selector();
252 +
236 253 // [bookingselect ... ] ------------------------------------------------------------
237 254 wpbc_shortcode_config__content__bookingselect();
238 255
239 256 // [bookingtimeline ... ] ----------------------------------------------------------
@@ -268,16 +285,16 @@
268 285 <div class="modal-footer" style="text-align:center;">
269 286 <div class="wpbc_shortcode_config_content_toolbar__container">
270 287 <div class="wpbc_shortcode_config_content_toolbar__reset">
271 288 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__reset_to_resource wpbc_ui_button_danger"
272 - onclick="javascript:wpbc_shortcode_config__reset( jQuery('#wpbc_shortcode_type').val().trim() );" ><?php _e( 'Reset' ); ?></a>
289 + onclick="javascript:wpbc_shortcode_config__reset( jQuery('#wpbc_shortcode_type').val().trim() );" ><?php esc_html_e( 'Reset', 'booking' ); ?></a>
273 290 </div>
274 291 <div class="wpbc_shortcode_config_content_toolbar__insert">
275 292 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__insert_to_editor" style="float:none;"
276 - onclick="javascript:wpbc_send_text_to_editor( jQuery('#wpbc_text_put_in_shortcode').val().trim() );wpbc_tiny_close();"><?php _e( 'Insert' ); ?></a>
293 + onclick="javascript:wpbc_send_text_to_editor( jQuery('#wpbc_text_put_in_shortcode').val().trim() );wpbc_tiny_close();"><?php esc_html_e( 'Insert', 'booking' ); ?></a>
277 294 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__insert_to_resource" style="float:none;display:none;"
278 - onclick="javascript:wpbc_send_text_to_resource( jQuery('#wpbc_text_put_in_shortcode').val().trim() );wpbc_tiny_close();" ><?php _e( 'Insert' ); ?></a>
279 - <!--a href="javascript:void(0)" class="button" style="float:none;" data-dismiss="modal"><?php _e('Close' ,'booking'); ?></a-->
295 + onclick="javascript:wpbc_send_text_to_resource( jQuery('#wpbc_text_put_in_shortcode').val().trim() );wpbc_tiny_close();" ><?php esc_html_e( 'Insert', 'booking' ); ?></a>
296 + <!--a href="javascript:void(0)" class="button" style="float:none;" data-dismiss="modal"><?php esc_html_e('Close' ,'booking'); ?></a-->
280 297 </div>
281 298 </div>
282 299 </div>
283 300 </div><!-- /.modal-content -->
@@ -287,40 +304,36 @@
287 304 ?></div></span><?php
288 305
289 306 }
290 307 // </editor-fold>
291 -
292 308
293 309 }
294 310
295 311
296 -$wpbc_pages_where_insert_btn = array( 'post-new.php', 'page-new.php', 'post.php', 'page.php', 'widgets.php', 'customize.php' ); //FixIn: 8.8.2.11 //FixIn: 8.8.2.12
312 +function wpbc_get_pages_where_insert_tiny_mce_buttons() {
313 + return array(
314 + 'post-new.php',
315 + 'page-new.php',
316 + 'post.php',
317 + 'page.php',
318 + 'widgets.php',
319 + 'customize.php',
320 + ); // FixIn: 8.8.2.11 // FixIn: 8.8.2.12.
321 +}
297 322
323 +
298 324 if (
299 - ( in_array( basename( $_SERVER['PHP_SELF'] ), $wpbc_pages_where_insert_btn ) )
300 - || (
301 - ( isset( $_REQUEST['page'] )
302 - && ( $_REQUEST['page'] == 'wpbc-resources' ) ) // Check if this Booking > Resources page
303 - )
304 - ){
305 - new WPBC_TinyMCE_Buttons(
306 - array(
307 - 'tiny_prefix' => 'wpbc_tiny'
308 - , 'tiny_icon_url' => WPBC_PLUGIN_URL . '/assets/img/bc_black-16x16.png'
309 - , 'tiny_js_plugin' => WPBC_PLUGIN_URL . '/js/wpbc_tinymce_btn.js'
310 - , 'tiny_js_function' => 'wpbc_init_tinymce_buttons' // This function NAME exist inside of this file: ['tiny_js_plugin']
311 - , 'tiny_btn_row' => 1
312 - , 'pages_where_insert' => $wpbc_pages_where_insert_btn
313 - , 'buttons' => array(
314 - 'booking_insert' => array(
315 - 'hint' => __('Insert WP Booking Calendar' ,'booking')
316 - , 'title' => __('Booking calendar' ,'booking')
317 - , 'img' => WPBC_PLUGIN_URL . '/assets/img/bc_black-16x16.png'
318 - , 'class' => 'bookig_buttons'
319 - , 'js_func_name_click' => 'wpbc_tiny_btn_click'
320 - , 'bookmark' => 'booking'
321 - , 'is_close_bookmark' => 0
322 - )
323 - )
324 - )
325 - );
326 -}
325 + ( in_array( basename( $_SERVER['PHP_SELF'] ), wpbc_get_pages_where_insert_tiny_mce_buttons() ) ) // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
326 + || wpbc_can_i_load_on__resources_page()
327 + || wpbc_is_setup_wizard_page() // || wpbc_is_bookings_page() // FixIn: 10.6.6.2.
328 + || wpbc_is_builder_booking_form_page()
329 +) {
330 + // FixIn: 10.6.5.1.
331 + new WPBC_TinyMCE_Buttons( array(
332 + 'tiny_prefix' => 'wpbc_tiny',
333 + 'tiny_icon_url' => '', // WPBC_PLUGIN_URL . '/assets/img/bc_black-16x16.png'.
334 + 'tiny_js_plugin' => WPBC_PLUGIN_URL . '/js/wpbc_tinymce_btn.js',
335 + 'tiny_js_function' => 'wpbc_init_tinymce_buttons', // This function NAME exist inside of this file: ['tiny_js_plugin'].
336 + 'tiny_btn_row' => 1,
337 + 'pages_where_insert' => wpbc_get_pages_where_insert_tiny_mce_buttons(),
338 + ) );
339 +}