PluginProbe
Booking Calendar / 10.10
Booking Calendar v10.10
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 10.11 10.11.2 All 203 releases
booking / includes / ui_modal__shortcodes / tiny-button-popup.php

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

327 lines 15.0 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 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 // JS & CSS
75 wpbc_load_js__required_for_modals();
76
77 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, 'insert_button' ) );
79 add_action( 'customize_controls_print_footer_scripts', array( $this, 'modal_content' ) ); // Modal Content
80 }
81 }
82 // </editor-fold>
83
84
85 // <editor-fold defaultstate="collapsed" desc=" TinyMCE - Add Button " >
86
87 /**
88 * Load JS file - TinyMCE plugin
89 *
90 * @param array $plugins
91 * @return array
92 */
93 public function load_tiny_js_plugin( $plugins ){
94
95 $plugins[ $this->settings['tiny_prefix'] . '_quicktags'] = $this->settings['tiny_js_plugin'];
96
97 return $plugins;
98 }
99
100
101 /**
102 * Add the custom TinyMCE buttons
103 *
104 * @param array $buttons
105 * @return array
106 */
107 public function add_tiny_button( $buttons ) {
108
109 array_push( $buttons, "separator" );
110
111 foreach ( $this->settings['buttons'] as $type => $strings ) {
112 array_push( $buttons, $this->settings['tiny_prefix'] . '_' . $type );
113 }
114
115 return $buttons;
116 }
117
118
119 /** Add the old style button to the non-TinyMCE editor views */
120 public function add_html_button() {
121
122 $buttonshtml = '';
123 $datajs='';
124
125 foreach ( $this->settings['buttons'] as $type => $props ) {
126
127 $buttonshtml .= '<input type="button" class="ed_button button button-small" onclick="'
128 .$props['js_func_name_click'].'(\'' . $type . '\')" title="' . $props['hint'] . '" value="' . $props['title'] . '" />';
129
130 $datajs.= " wpbc_tiny_btn_data['$type'] = {\n";
131 $datajs.= ' title: "' . esc_js( $props['title'] ) . '",' . "\n";
132 $datajs.= ' tag: "' . esc_js( $props['bookmark'] ) . '",' . "\n";
133 $datajs.= ' tag_close: "' . esc_js( $props['is_close_bookmark'] ) . '",' . "\n";
134 $datajs.= ' cal_count: "' . get_bk_option( 'booking_client_cal_count' ) . '"' . "\n";
135 $datajs.= "\n };\n";
136 }
137
138 ?><script type="text/javascript">
139 // <![CDATA[
140
141 function wpbc_add_html_button_to_toolbar(){ // Add buttons ( HTML view )
142 if ( jQuery( '#ed_toolbar' ).length == 0 )
143 setTimeout( 'wpbc_add_html_button_to_toolbar()' , 100 );
144 else
145 jQuery("#ed_toolbar").append( '<?php
146 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
147 echo wp_specialchars_decode( esc_js( $buttonshtml ), ENT_COMPAT ); ?>');
148 }
149 jQuery(document).ready(function(){
150 setTimeout( 'wpbc_add_html_button_to_toolbar()' , 100 );
151 });
152
153 var selected_booking_shortcode = 'bookingform';
154 var wpbc_tiny_btn_data={};
155 <?php
156 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
157 echo $datajs; ?>
158
159 // ]]>
160 </script><?php
161
162 }
163
164
165 public function insert_button() {
166
167 $script = '';
168
169 // calendar3-range https://icons.getbootstrap.com/icons/calendar3-range/
170 $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">'
171 . '<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"/>'
172 . '<path d="M7 10a1 1 0 0 0 0-2H1v2h6zm2-3h6V5H9a1 1 0 0 0 0 2z"/>'
173 . '</svg>';
174 $mune_icon_url = sprintf( 'data:image/svg+xml;base64,%s', base64_encode( $svg_icon_integarted ) );
175
176
177 if ( ! empty( $this->settings['buttons'] ) ){
178
179 $script .= '<script type="text/javascript">';
180
181 $script .= ' function '. $this->settings['tiny_js_function'] . '(ed, url) {';
182
183 foreach ( $this->settings['buttons'] as $type => $props ) {
184
185 $script .= " if ( typeof ".$props['js_func_name_click']." == 'undefined' ) return; ";
186 $script .= " ed.addButton('". $this->settings['tiny_prefix'] . '_' . $type ."', {";
187 $script .= " title : '". $props['hint'] ."',";
188 //$script .= " image : '". $props['img'] ."',";
189 $script .= " image : '" . $mune_icon_url . "',";
190 $script .= " onclick : function() {";
191 $script .= " ". $props['js_func_name_click'] ."('". $type ."');";
192 $script .= " }";
193 $script .= " });";
194 }
195 $script .= ' }';
196
197 $script .= '</script>';
198
199 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
200 echo $script;
201 }
202 }
203
204 // </editor-fold>
205
206
207 // <editor-fold defaultstate="collapsed" desc=" M o d a l C o n t e n t " >
208 public function modal_content() {
209
210 ?><span class="wpdevelop wpbc_page"><div class="visibility_container clearfix-height" style="display:block;"><?php
211 ?><div id="wpbc_tiny_modal" class="modal wpbc_popup_modal wpbc_tiny_modal" tabindex="-1" role="dialog">
212 <div class="modal-dialog modal-lg">
213 <div class="modal-content">
214 <div class="modal-header">
215 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
216 <h4 class="modal-title">
217 <span>WP Booking Calendar</span>
218 <span style="padding: 0 1em;"> / </span>
219 <span> <?php esc_html_e( 'Shortcode Configuration', 'booking' ); ?></span></h4>
220 </div>
221 <div class="modal-body">
222
223 <div class="wpbc_settings_flex_container">
224
225 <div class="wpbc_settings_flex_container_left" style="flex: 1 1 150px;">
226 <?php
227 wpbc_shortcode_config__navigation_panel();
228 ?>
229 </div>
230 <div class="wpbc_settings_flex_container_right">
231 <div class="wpbc_sc_container__all_shortcodes">
232 <input name="wpbc_shortcode_type" id="wpbc_shortcode_type" value="booking" autocomplete="off" type="hidden" />
233 <?php
234
235 // [booking ... ] ------------------------------------------------------------------
236 wpbc_shortcode_config__content__booking();
237
238 // [bookingcalendar ... ] ----------------------------------------------------------
239 wpbc_shortcode_config__content__bookingcalendar();
240
241 // [bookingselect ... ] ------------------------------------------------------------
242 wpbc_shortcode_config__content__bookingselect();
243
244 // [bookingtimeline ... ] ----------------------------------------------------------
245 wpbc_shortcode_config__content__bookingtimeline();
246
247 // [bookingsearch searchresults='https://servcer.com/search-form/' searchresultstitle='{searchresults} Result(s) Found' noresultstitle='Nothing Found']
248 wpbc_shortcode_config__content__bookingsearch();
249
250 // [bookingform type=1 selected_dates='03.03.2024'] --------------------------------
251 wpbc_shortcode_config__content__bookingform();
252
253 // [bookingedit] , [bookingcustomerlisting] , [bookingresource type=6 show='capacity'] , [booking_confirm]
254 wpbc_shortcode_config__content__bookingother();
255
256 // Booking Import of .ics feed shortcode
257 wpbc_shortcode_config__content__booking_ics_import();
258
259 // Booking Listing of .ics feed shortcode
260 wpbc_shortcode_config__content__booking_ics_listing();
261
262 ?>
263 </div>
264 <div style="display: flex;flex-flow: row wrap;justify-content: flex-start;align-items: baseline;" for="wpbc_text_put_in_shortcode">
265 <input name="wpbc_text_put_in_shortcode" id="wpbc_text_put_in_shortcode" class="put-in" readonly="readonly" onfocus="this.select()" type="text"
266 style="width: auto;flex: 1;" />
267 </div>
268 <input name="wpbc_text_gettenberg_section_id" id="wpbc_text_gettenberg_section_id" type="text" style="display: none;" />
269 </div>
270 </div>
271
272 </div>
273 <div class="modal-footer" style="text-align:center;">
274 <div class="wpbc_shortcode_config_content_toolbar__container">
275 <div class="wpbc_shortcode_config_content_toolbar__reset">
276 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__reset_to_resource wpbc_ui_button_danger"
277 onclick="javascript:wpbc_shortcode_config__reset( jQuery('#wpbc_shortcode_type').val().trim() );" ><?php esc_html_e( 'Reset', 'booking' ); ?></a>
278 </div>
279 <div class="wpbc_shortcode_config_content_toolbar__insert">
280 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__insert_to_editor" style="float:none;"
281 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>
282 <a href="javascript:void(0)" class="button button-primary wpbc_tiny_button__insert_to_resource" style="float:none;display:none;"
283 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>
284 <!--a href="javascript:void(0)" class="button" style="float:none;" data-dismiss="modal"><?php esc_html_e('Close' ,'booking'); ?></a-->
285 </div>
286 </div>
287 </div>
288 </div><!-- /.modal-content -->
289 </div><!-- /.modal-dialog -->
290 </div><!-- /.modal -->
291 <?php
292 ?></div></span><?php
293
294 }
295 // </editor-fold>
296
297 }
298
299
300 function wpbc_get_pages_where_insert_tiny_mce_buttons() {
301 return array(
302 'post-new.php',
303 'page-new.php',
304 'post.php',
305 'page.php',
306 'widgets.php',
307 'customize.php',
308 ); // FixIn: 8.8.2.11 // FixIn: 8.8.2.12.
309 }
310
311
312 if (
313 ( 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
314 || ( ( isset( $_REQUEST['page'] ) && ( 'wpbc-resources' === $_REQUEST['page'] ) ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
315 || wpbc_is_setup_wizard_page() // || wpbc_is_bookings_page() // FixIn: 10.6.6.2.
316 ) {
317 // FixIn: 10.6.5.1.
318 new WPBC_TinyMCE_Buttons( array(
319 'tiny_prefix' => 'wpbc_tiny',
320 'tiny_icon_url' => '', // WPBC_PLUGIN_URL . '/assets/img/bc_black-16x16.png'.
321 'tiny_js_plugin' => WPBC_PLUGIN_URL . '/js/wpbc_tinymce_btn.js',
322 'tiny_js_function' => 'wpbc_init_tinymce_buttons', // This function NAME exist inside of this file: ['tiny_js_plugin'].
323 'tiny_btn_row' => 1,
324 'pages_where_insert' => wpbc_get_pages_where_insert_tiny_mce_buttons(),
325 ) );
326 }
327