PluginProbe
Booking Calendar / 11.8
Booking Calendar v11.8
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 / includes / ui_modal__shortcodes / tiny-button-popup.php

tiny-button-popup.php in Booking Calendar 11.8, at includes/ui_modal__shortcodes/tiny-button-popup.php

340 lines 14.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @version 1.0
4 * @package Booking Calendar
5 * @subpackage Files Loading
6 * @category Bookings
7 *
8 * @author wpdevelop
9 * @link https://wpbookingcalendar.com/
10 * @email info@wpbookingcalendar.com
11 *
12 * @modified 29.09.2015
13 */
14
15 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
16
17 // FixIn: 9.9.0.15.
18
19 class WPBC_TinyMCE_Buttons {
20
21 // <editor-fold defaultstate="collapsed" desc=" I n i t + H o o k s" >
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 }
40
41 /** Init all hooks for showing Button in Tiny Toolbar */
42 public function define_init_hooks() {
43
44 if ( wpbc_can_i_load_on_this_page__shortcode_config() ) {
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
59 // Load JS file - TinyMCE plugin
60 add_filter( 'mce_external_plugins', array( $this, 'load_tiny_js_plugin' ) );
61
62 // Add the custom TinyMCE buttons
63 if ( 1 === $this->settings['tiny_btn_row'] ) {
64 add_filter( 'mce_buttons', array( $this, 'add_tiny_button' ) );
65 } else {
66 add_filter( 'mce_buttons_' . $this->settings['tiny_btn_row'], array( $this, 'add_tiny_button' ) );
67 }
68
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.
70 add_action( 'edit_page_form', array( $this, 'add_html_button' ) );
71 add_action( 'admin_head', array( $this, 'insert_button') ); // Tiny Button
72 add_action( 'admin_footer', array( $this, 'modal_content' ) ); // Modal Content
73
74
75 // JS & CSS
76 wpbc_load_js__required_for_modals();
77
78 add_action( 'customize_controls_print_footer_scripts', array( $this, 'add_html_button' ) ); // FixIn: 8.8.2.12.
79 add_action( 'customize_controls_print_footer_scripts', array( $this, 'insert_button' ) );
80 add_action( 'customize_controls_print_footer_scripts', array( $this, 'modal_content' ) ); // Modal Content
81 }
82 }
83 // </editor-fold>
84
85
86 // <editor-fold defaultstate="collapsed" desc=" TinyMCE - Add Button " >
87
88 /**
89 * Load JS file - TinyMCE plugin
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 /**
104 * Add the custom TinyMCE buttons
105 *
106 * @param array $buttons
107 *
108 * @return array
109 */
110 public function add_tiny_button( $buttons ) {
111
112 array_push( $buttons, 'separator' );
113
114 foreach ( $this->settings['buttons'] as $type => $strings ) {
115 array_push( $buttons, $this->settings['tiny_prefix'] . '_' . $type );
116 }
117
118 return $buttons;
119 }
120
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
169 public function insert_button() {
170
171 $script = '';
172
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 ) );
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' .
182
183 if ( ! empty( $this->settings['buttons'] ) ){
184
185 $script .= '<script type="text/javascript">';
186
187 $script .= ' function '. $this->settings['tiny_js_function'] . '(ed, url) {';
188
189 foreach ( $this->settings['buttons'] as $type => $props ) {
190
191 $script .= " if ( typeof ".$props['js_func_name_click']." == 'undefined' ) return; ";
192 $script .= " ed.addButton('". $this->settings['tiny_prefix'] . '_' . $type ."', {";
193 $script .= " title : '". $props['hint'] ."',";
194 //$script .= " image : '". $props['img'] ."',";
195 $script .= " image : '" . $mune_icon_url . "',";
196 $script .= " onclick : function() {";
197 $script .= " ". $props['js_func_name_click'] ."('". $type ."');";
198 $script .= " }";
199 $script .= " });";
200 }
201 $script .= ' }';
202
203 $script .= '</script>';
204
205 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
206 echo $script;
207 }
208 }
209
210 // </editor-fold>
211
212
213 // <editor-fold defaultstate="collapsed" desc=" M o d a l C o n t e n t " >
214 public function modal_content() {
215
216 ?><span class="wpdevelop wpbc_page"><div class="visibility_container clearfix-height" style="display:block;"><?php
217 ?><div id="wpbc_tiny_modal" class="modal wpbc_popup_modal wpbc_tiny_modal wpbc_shortcode_config__scroll_mode" tabindex="-1" role="dialog">
218 <div class="modal-dialog modal-lg">
219 <div class="modal-content">
220 <div class="modal-header">
221 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
222 <h4 class="modal-title">
223 <span>WP Booking Calendar</span>
224 <span style="padding: 0 1em;"> / </span>
225 <span> <?php esc_html_e( 'Shortcode Configuration', 'booking' ); ?></span></h4>
226 </div>
227 <div class="modal-body">
228
229 <div class="wpbc_settings_flex_container">
230
231 <div class="wpbc_settings_flex_container_left" style="flex: 1 1 150px;">
232 <?php
233 wpbc_shortcode_config__navigation_panel();
234 ?>
235 </div>
236 <div class="wpbc_settings_flex_container_right">
237 <div class="wpbc_sc_container__all_shortcodes">
238 <input name="wpbc_shortcode_type" id="wpbc_shortcode_type" value="booking" autocomplete="off" type="hidden" />
239 <?php
240
241 // [booking ... ] ------------------------------------------------------------------
242 wpbc_shortcode_config__content__booking();
243
244 // [bookingcalendar ... ] ----------------------------------------------------------
245 wpbc_shortcode_config__content__bookingcalendar();
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
253 // [bookingselect ... ] ------------------------------------------------------------
254 wpbc_shortcode_config__content__bookingselect();
255
256 // [bookingtimeline ... ] ----------------------------------------------------------
257 wpbc_shortcode_config__content__bookingtimeline();
258
259 // [bookingsearch searchresults='https://servcer.com/search-form/' searchresultstitle='{searchresults} Result(s) Found' noresultstitle='Nothing Found']
260 wpbc_shortcode_config__content__bookingsearch();
261
262 // [bookingform type=1 selected_dates='03.03.2024'] --------------------------------
263 wpbc_shortcode_config__content__bookingform();
264
265 // [bookingedit] , [bookingcustomerlisting] , [bookingresource type=6 show='capacity'] , [booking_confirm]
266 wpbc_shortcode_config__content__bookingother();
267
268 // Booking Import of .ics feed shortcode
269 wpbc_shortcode_config__content__booking_ics_import();
270
271 // Booking Listing of .ics feed shortcode
272 wpbc_shortcode_config__content__booking_ics_listing();
273
274 ?>
275 </div>
276 <div style="display: flex;flex-flow: row wrap;justify-content: flex-start;align-items: baseline;" for="wpbc_text_put_in_shortcode">
277 <input name="wpbc_text_put_in_shortcode" id="wpbc_text_put_in_shortcode" class="put-in" readonly="readonly" onfocus="this.select()" type="text"
278 style="width: auto;flex: 1;" />
279 </div>
280 <input name="wpbc_text_gettenberg_section_id" id="wpbc_text_gettenberg_section_id" type="text" style="display: none;" />
281 </div>
282 </div>
283
284 </div>
285 <div class="modal-footer" style="text-align:center;">
286 <div class="wpbc_shortcode_config_content_toolbar__container">
287 <div class="wpbc_shortcode_config_content_toolbar__reset">
288 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__reset_to_resource wpbc_ui_button_danger"
289 onclick="javascript:wpbc_shortcode_config__reset( jQuery('#wpbc_shortcode_type').val().trim() );" ><?php esc_html_e( 'Reset', 'booking' ); ?></a>
290 </div>
291 <div class="wpbc_shortcode_config_content_toolbar__insert">
292 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__insert_to_editor" style="float:none;"
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>
294 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__insert_to_resource" style="float:none;display:none;"
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-->
297 </div>
298 </div>
299 </div>
300 </div><!-- /.modal-content -->
301 </div><!-- /.modal-dialog -->
302 </div><!-- /.modal -->
303 <?php
304 ?></div></span><?php
305
306 }
307 // </editor-fold>
308
309 }
310
311
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 }
322
323
324 if (
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 }
340