PluginProbe
Booking Calendar / 11.1
Booking Calendar v11.1
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.1, at includes/ui_modal__shortcodes/tiny-button-popup.php

334 lines 14.3 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" 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 // [bookingselect ... ] ------------------------------------------------------------
248 wpbc_shortcode_config__content__bookingselect();
249
250 // [bookingtimeline ... ] ----------------------------------------------------------
251 wpbc_shortcode_config__content__bookingtimeline();
252
253 // [bookingsearch searchresults='https://servcer.com/search-form/' searchresultstitle='{searchresults} Result(s) Found' noresultstitle='Nothing Found']
254 wpbc_shortcode_config__content__bookingsearch();
255
256 // [bookingform type=1 selected_dates='03.03.2024'] --------------------------------
257 wpbc_shortcode_config__content__bookingform();
258
259 // [bookingedit] , [bookingcustomerlisting] , [bookingresource type=6 show='capacity'] , [booking_confirm]
260 wpbc_shortcode_config__content__bookingother();
261
262 // Booking Import of .ics feed shortcode
263 wpbc_shortcode_config__content__booking_ics_import();
264
265 // Booking Listing of .ics feed shortcode
266 wpbc_shortcode_config__content__booking_ics_listing();
267
268 ?>
269 </div>
270 <div style="display: flex;flex-flow: row wrap;justify-content: flex-start;align-items: baseline;" for="wpbc_text_put_in_shortcode">
271 <input name="wpbc_text_put_in_shortcode" id="wpbc_text_put_in_shortcode" class="put-in" readonly="readonly" onfocus="this.select()" type="text"
272 style="width: auto;flex: 1;" />
273 </div>
274 <input name="wpbc_text_gettenberg_section_id" id="wpbc_text_gettenberg_section_id" type="text" style="display: none;" />
275 </div>
276 </div>
277
278 </div>
279 <div class="modal-footer" style="text-align:center;">
280 <div class="wpbc_shortcode_config_content_toolbar__container">
281 <div class="wpbc_shortcode_config_content_toolbar__reset">
282 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__reset_to_resource wpbc_ui_button_danger"
283 onclick="javascript:wpbc_shortcode_config__reset( jQuery('#wpbc_shortcode_type').val().trim() );" ><?php esc_html_e( 'Reset', 'booking' ); ?></a>
284 </div>
285 <div class="wpbc_shortcode_config_content_toolbar__insert">
286 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__insert_to_editor" style="float:none;"
287 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>
288 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__insert_to_resource" style="float:none;display:none;"
289 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>
290 <!--a href="javascript:void(0)" class="button" style="float:none;" data-dismiss="modal"><?php esc_html_e('Close' ,'booking'); ?></a-->
291 </div>
292 </div>
293 </div>
294 </div><!-- /.modal-content -->
295 </div><!-- /.modal-dialog -->
296 </div><!-- /.modal -->
297 <?php
298 ?></div></span><?php
299
300 }
301 // </editor-fold>
302
303 }
304
305
306 function wpbc_get_pages_where_insert_tiny_mce_buttons() {
307 return array(
308 'post-new.php',
309 'page-new.php',
310 'post.php',
311 'page.php',
312 'widgets.php',
313 'customize.php',
314 ); // FixIn: 8.8.2.11 // FixIn: 8.8.2.12.
315 }
316
317
318 if (
319 ( 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
320 || ( ( isset( $_REQUEST['page'] ) && ( 'wpbc-resources' === $_REQUEST['page'] ) ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
321 || wpbc_is_setup_wizard_page() // || wpbc_is_bookings_page() // FixIn: 10.6.6.2.
322 || wpbc_is_builder_booking_form_page()
323 ) {
324 // FixIn: 10.6.5.1.
325 new WPBC_TinyMCE_Buttons( array(
326 'tiny_prefix' => 'wpbc_tiny',
327 'tiny_icon_url' => '', // WPBC_PLUGIN_URL . '/assets/img/bc_black-16x16.png'.
328 'tiny_js_plugin' => WPBC_PLUGIN_URL . '/js/wpbc_tinymce_btn.js',
329 'tiny_js_function' => 'wpbc_init_tinymce_buttons', // This function NAME exist inside of this file: ['tiny_js_plugin'].
330 'tiny_btn_row' => 1,
331 'pages_where_insert' => wpbc_get_pages_where_insert_tiny_mce_buttons(),
332 ) );
333 }
334