PluginProbe
Booking Manager – Sync WP Booking Calendar – Import Events, Export Bookings to ICS Calendar / 2.1.21
Booking Manager – Sync WP Booking Calendar – Import Events, Export Bookings to ICS Calendar v2.1.21
2.1.22 2.1.21 2.1.20 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 trunk 1.1 2.0 2.0.1 2.0.10.2 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.17 2.0.18 2.0.2 2.0.20 2.0.21 All 56 releases
← All changes | core/wpbm-functions.php +379 -540 2.0.22 → 2.1.21 View file →
@@ -71,10 +71,10 @@
71 71 */
72 72 function wpbm_is_this_demo() {
73 73 //return ! true; //TODO: comment it. 2016-09-27 // Replaced!
74 74 if (
75 - ( ( isset( $_SERVER['SCRIPT_FILENAME'] ) ) && ( strpos( $_SERVER['SCRIPT_FILENAME'], 'oplugins.com' ) !== false ) )
76 - || ( ( isset( $_SERVER['HTTP_HOST'] ) ) && ( strpos( $_SERVER['HTTP_HOST'], 'oplugins.com' ) !== false ) )
75 + ( ( isset( $_SERVER['SCRIPT_FILENAME'] ) ) && ( strpos( sanitize_text_field( wp_unslash($_SERVER['SCRIPT_FILENAME']) ), 'oplugins.com' ) !== false ) )
76 + || ( ( isset( $_SERVER['HTTP_HOST'] ) ) && ( strpos( sanitize_text_field( wp_unslash($_SERVER['HTTP_HOST'])), 'oplugins.com' ) !== false ) )
77 77 )
78 78 return true;
79 79 else
80 80 return false;
@@ -89,191 +89,9 @@
89 89 /** Show System Info (status) at item > Settings General page
90 90 * Link: http://server.com/wp-admin/admin.php?page=wpbm-settings&system_info=show#wpbm_general_settings_system_info_metabox
91 91 */
92 92 function wpbm_system_info() {
93 -
94 - if ( wpbm_is_this_demo() ) return;
95 -
96 - if ( current_user_can( 'activate_plugins' ) ) { // Only for Administrator or Super admin. More here: https://codex.wordpress.org/Roles_and_Capabilities
97 -
98 - global $wpdb, $wp_version;
99 -
100 - $all_plugins = get_plugins();
101 - $active_plugins = get_option( 'active_plugins' );
102 -
103 - $mysql_info = $wpdb->get_results( "SHOW VARIABLES LIKE 'sql_mode'" );
104 - if ( is_array( $mysql_info ) ) $sql_mode = $mysql_info[0]->Value;
105 - if ( empty( $sql_mode ) ) $sql_mode = 'Not set';
106 -
107 - $safe_mode = ( ini_get( 'safe_mode' ) ) ? 'On' : 'Off';
108 - $allow_url_fopen = ( ini_get( 'allow_url_fopen' ) ) ? 'On' : 'Off';
109 - $upload_max_filesize = ( ini_get( 'upload_max_filesize' ) ) ? ini_get( 'upload_max_filesize' ) : 'N/A';
110 - $post_max_size = ( ini_get( 'post_max_size' ) ) ? ini_get( 'post_max_size' ) : 'N/A';
111 - $max_execution_time = ( ini_get( 'max_execution_time' ) ) ? ini_get( 'max_execution_time' ) : 'N/A';
112 - $memory_limit = ( ini_get( 'memory_limit' ) ) ? ini_get( 'memory_limit' ) : 'N/A';
113 - $memory_usage = ( function_exists( 'memory_get_usage' ) ) ? round( memory_get_usage() / 1024 / 1024, 2 ) . ' Mb' : 'N/A';
114 - $exif_read_data = ( is_callable( 'exif_read_data' ) ) ? 'Yes' . " ( V" . substr( phpversion( 'exif' ), 0, 4 ) . ")" : 'No';
115 - $iptcparse = ( is_callable( 'iptcparse' ) ) ? 'Yes' : 'No';
116 - $xml_parser_create = ( is_callable( 'xml_parser_create' ) ) ? 'Yes' : 'No';
117 - $theme = ( function_exists( 'wp_get_theme' ) ) ? wp_get_theme() : get_theme( get_current_theme() );
118 -
119 - if ( function_exists( 'is_multisite' ) ) {
120 - if ( is_multisite() ) $multisite = 'Yes';
121 - else $multisite = 'No';
122 - } else { $multisite = 'N/A';
123 - }
124 -
125 - $system_info = array(
126 - 'system_info' => '',
127 - 'php_info' => '',
128 - 'active_plugins' => '',
129 - 'inactive_plugins' => ''
130 - );
131 -
132 - $ver_small_name = get_wpbm_version();
133 - if ( class_exists( 'wpbm_multiuser' ) ) $ver_small_name = 'multiuser';
134 -
135 - $system_info['system_info'] = array(
136 - 'Plugin Update' => ( defined( 'WPBM_VERSION' ) ) ? WPBM_VERSION : 'N/A',
137 - 'Plugin Version' => ucwords( $ver_small_name ),
138 - 'Plugin Update Date' => date( "Y-m-d", filemtime( WPBM_FILE ) ),
139 -
140 - 'WP Version' => $wp_version,
141 - 'WP DEBUG' => ( ( defined('WP_DEBUG') ) && ( WP_DEBUG ) ) ? 'On' : 'Off',
142 - 'WP DB Version' => get_option( 'db_version' ),
143 - 'Operating System' => PHP_OS,
144 - 'Server' => $_SERVER["SERVER_SOFTWARE"],
145 - 'PHP Version' => PHP_VERSION,
146 - 'PHP Safe Mode' => $safe_mode,
147 - 'MYSQL Version' => $wpdb->get_var( "SELECT VERSION() AS version" ),
148 - 'SQL Mode' => $sql_mode,
149 - 'Memory usage' => $memory_usage,
150 - 'Site URL' => get_option( 'siteurl' ),
151 - 'Home URL' => home_url(),
152 - 'SERVER[HTTP_HOST]' => $_SERVER['HTTP_HOST'],
153 - 'SERVER[SERVER_NAME]' => $_SERVER['SERVER_NAME'],
154 - 'Multisite' => $multisite,
155 - 'Active Theme' => $theme['Name'] . ' ' . $theme['Version']
156 - );
157 -
158 - $system_info['php_info'] = array(
159 - 'PHP Version' => PHP_VERSION,
160 - 'PHP Safe Mode' => $safe_mode,
161 - 'PHP Memory Limit' => '<strong>' . $memory_limit . '</strong>',
162 - 'PHP Max Script Execute Time' => '<strong>' . $max_execution_time . '</strong>',
163 -
164 - 'PHP Max Post Size' => '<strong>' . $post_max_size . '</strong>',
165 - 'PHP MAX Input Vars' => '<strong>' . ( ( ini_get( 'max_input_vars' ) ) ? ini_get( 'max_input_vars' ) : 'N/A' ) . '</strong>', //How many input variables may be accepted (limit is applied to $_GET, $_POST and $_COOKIE superglobal separately).
166 -
167 - 'PHP Max Upload Size' => $upload_max_filesize,
168 - 'PHP Allow URL fopen' => $allow_url_fopen,
169 - 'PHP Exif support' => $exif_read_data,
170 - 'PHP IPTC support' => $iptcparse,
171 - 'PHP XML support' => $xml_parser_create
172 - );
173 -
174 - $system_info['php_info']['PHP cURL'] = ( function_exists('curl_init') ) ? 'On' : 'Off';
175 - $system_info['php_info']['Max Nesting Level'] = ( ( ini_get( 'max_input_nesting_level' ) ) ? ini_get( 'max_input_nesting_level' ) : 'N/A' );
176 - $system_info['php_info']['Max Time 4 script'] = ( ( ini_get( 'max_input_time' ) ) ? ini_get( 'max_input_time' ) : 'N/A' ); //Maximum amount of time each script may spend parsing request data
177 - $system_info['php_info']['Log'] = ( ( ini_get( 'error_log' ) ) ? ini_get( 'error_log' ) : 'N/A' );
178 -
179 - if ( ini_get( "suhosin.get.max_value_length" ) ) {
180 -
181 - $system_info['suhosin_info'] = array();
182 - $system_info['suhosin_info']['POST max_array_index_length'] = ( ( ini_get( 'suhosin.post.max_array_index_length' ) ) ? ini_get( 'suhosin.post.max_array_index_length' ) : 'N/A' );
183 - $system_info['suhosin_info']['REQUEST max_array_index_length'] = ( ( ini_get( 'suhosin.request.max_array_index_length' ) ) ? ini_get( 'suhosin.request.max_array_index_length' ) : 'N/A' );
184 -
185 - $system_info['suhosin_info']['POST max_totalname_length'] = ( ( ini_get( 'suhosin.post.max_totalname_length' ) ) ? ini_get( 'suhosin.post.max_totalname_length' ) : 'N/A' );
186 - $system_info['suhosin_info']['REQUEST max_totalname_length'] = ( ( ini_get( 'suhosin.request.max_totalname_length' ) ) ? ini_get( 'suhosin.request.max_totalname_length' ) : 'N/A' );
187 -
188 - $system_info['suhosin_info']['POST max_vars'] = ( ( ini_get( 'suhosin.post.max_vars' ) ) ? ini_get( 'suhosin.post.max_vars' ) : 'N/A' );
189 - $system_info['suhosin_info']['REQUEST max_vars'] = ( ( ini_get( 'suhosin.request.max_vars' ) ) ? ini_get( 'suhosin.request.max_vars' ) : 'N/A' );
190 -
191 - $system_info['suhosin_info']['POST max_value_length'] = ( ( ini_get( 'suhosin.post.max_value_length' ) ) ? ini_get( 'suhosin.post.max_value_length' ) : 'N/A' );
192 - $system_info['suhosin_info']['REQUEST max_value_length'] = ( ( ini_get( 'suhosin.request.max_value_length' ) ) ? ini_get( 'suhosin.request.max_value_length' ) : 'N/A' );
193 -
194 - $system_info['suhosin_info']['POST max_name_length'] = ( ( ini_get( 'suhosin.post.max_name_length' ) ) ? ini_get( 'suhosin.post.max_name_length' ) : 'N/A' );
195 - $system_info['suhosin_info']['REQUEST max_varname_length'] = ( ( ini_get( 'suhosin.request.max_varname_length' ) ) ? ini_get( 'suhosin.request.max_varname_length' ) : 'N/A' );
196 -
197 - $system_info['suhosin_info']['POST max_array_depth'] = ( ( ini_get( 'suhosin.post.max_array_depth' ) ) ? ini_get( 'suhosin.post.max_array_depth' ) : 'N/A' );
198 - $system_info['suhosin_info']['REQUEST max_array_depth'] = ( ( ini_get( 'suhosin.request.max_array_depth' ) ) ? ini_get( 'suhosin.request.max_array_depth' ) : 'N/A' );
199 - }
200 -
201 -
202 - if ( function_exists('gd_info') ) {
203 - $gd_info = gd_info();
204 - if ( isset( $gd_info['GD Version'] ) )
205 - $gd_info = $gd_info['GD Version'];
206 - else
207 - $gd_info = json_encode( $gd_info );
208 - } else {
209 - $gd_info = 'Off';
210 - }
211 - $system_info['php_info']['PHP GD'] = $gd_info;
212 -
213 - // More here https://docs.woocommerce.com/document/problems-with-large-amounts-of-data-not-saving-variations-rates-etc/
214 -
215 -
216 - foreach ( $all_plugins as $path => $plugin ) {
217 - if ( is_plugin_active( $path ) )
218 - $system_info['active_plugins'][$plugin['Name']] = $plugin['Version'];
219 - else
220 - $system_info['inactive_plugins'][$plugin['Name']] = $plugin['Version'];
221 - }
222 -
223 - // Showing
224 - foreach ( $system_info as $section_name => $section_values ) {
225 - ?>
226 - <span class="wpdevelop">
227 - <table class="table table-striped table-bordered">
228 - <thead><tr><th colspan="2" style="border-bottom: 1px solid #eeeeee;padding: 10px;"><?php echo strtoupper( $section_name ); ?></th></tr></thead>
229 - <tbody>
230 - <?php
231 - if ( !empty( $section_values ) ) {
232 - foreach ( $section_values as $key => $value ) {
233 - ?>
234 - <tr>
235 - <td scope="row" style="width:18em;padding:4px 8px;"><?php echo $key; ?></td>
236 - <td scope="row" style="padding:4px 8px;"><?php echo $value; ?></td>
237 - </tr>
238 - <?php
239 - }
240 - }
241 - ?>
242 - </tbody>
243 - </table>
244 - </span>
245 - <div class="clear"></div>
246 - <?php
247 - }
248 -?>
249 -<hr>
250 -<div style="color:#777;">
251 -<h4 style="font-size:1.1em;">Commonly required configuration vars in php.ini file:</h4>
252 -<h4>General section:</h4>
253 -<pre><code>memory_limit = 256M
254 -max_execution_time = 120
255 -post_max_size = 8M
256 -upload_max_filesize = 8M
257 -max_input_vars = 20480
258 -post_max_size = 64M</code></pre>
259 -<h4>Suhosin section (if installed):</h4>
260 -<pre><code>suhosin.post.max_array_index_length = 1024
261 -suhosin.post.max_totalname_length = 65535
262 -suhosin.post.max_vars = 2048
263 -suhosin.post.max_value_length = 1000000
264 -suhosin.post.max_name_length = 256
265 -suhosin.post.max_array_depth = 1000
266 -suhosin.request.max_array_index_length = 1024
267 -suhosin.request.max_totalname_length = 65535
268 -suhosin.request.max_vars = 2048
269 -suhosin.request.max_value_length = 1000000
270 -suhosin.request.max_varname_length = 256
271 -suhosin.request.max_array_depth = 1000</code></pre>
272 -</div>
273 -<?php
274 - // phpinfo();
275 - }
93 + echo '---';
276 94 }
277 95
278 96
279 97
@@ -296,9 +114,9 @@
296 114 function wpbm_is_wpbc_supported() {
297 115
298 116 // 7.2.1 - its start version of Booking Calendar which support integration with Booking Manager 2.0
299 117
300 - if ( version_compare( wpbm_get_wpbc_version(), '7.2.1') >= 0 ) {
118 + if ( version_compare( wpbm_get_wpbc_version(), '9.8') >= 0 ) {
301 119 return true;
302 120 } else {
303 121 return false;
304 122 }
@@ -431,9 +249,9 @@
431 249 '', // Unknown/unhandled entities
432 250 ' ' // Runs of spaces, post-handling
433 251 );
434 252
435 - $newstring = preg_replace( $plain_search_array, $get_plain_replace_array, strip_tags( $string ) );
253 + $newstring = preg_replace( $plain_search_array, $get_plain_replace_array, wp_strip_all_tags( $string ) );
436 254
437 255 return $newstring;
438 256 }
439 257 // </editor-fold>
@@ -462,8 +280,10 @@
462 280 $replace = wp_parse_args( $replace_array, $defaults );
463 281
464 282 foreach ( $replace as $replace_shortcode => $replace_value ) {
465 283
284 + $replace_value = esc_js( $replace_value ); // FixIn:
285 +
466 286 $subject = str_replace( array( '[' . $replace_shortcode . ']'
467 287 , '{' . $replace_shortcode . '}' )
468 288 , $replace_value
469 289 , $subject );
@@ -476,10 +296,50 @@
476 296
477 297 return $subject;
478 298 }
479 299
300 +
301 +/**
302 + * Sanitize the frontend listing template.
303 + *
304 + * The listing template is stored as an option and rendered by the public
305 + * [booking-manager-listing] shortcode, so script-capable markup must never be
306 + * persisted or returned to visitors.
307 + *
308 + * @param string $template Template HTML with Booking Manager placeholders.
309 + * @return string Safe template HTML.
310 + */
311 +function wpbm_sanitize_listing_template( $template ) {
312 +
313 + if ( ! is_string( $template ) ) {
314 + $template = '';
315 + }
316 +
317 + $allowed_html = wp_kses_allowed_html( 'post' );
318 +
319 + // Keep compatibility with templates that embed safe external content.
320 + $allowed_html['iframe'] = array(
321 + 'src' => true
322 + , 'style' => true
323 + , 'id' => true
324 + , 'class' => true
325 + , 'width' => true
326 + , 'height' => true
327 + , 'title' => true
328 + , 'loading' => true
329 + , 'allowfullscreen' => true
330 + );
331 +
332 + if ( isset( $allowed_html['a'] ) ) {
333 + $allowed_html['a']['target'] = true;
334 + $allowed_html['a']['rel'] = true;
335 + }
336 +
337 + return wp_kses( $template, $allowed_html );
338 +}
339 +
480 340 /** Simple hack to make array strings lowercase
481 - *
341 + *
482 342 * @param type $array
483 343 * @return type
484 344 */
485 345 function wpbm_arraytolower( $array ){
@@ -506,22 +366,22 @@
506 366 }
507 367 }
508 368
509 369 /** Check if this valid timestamp
510 - *
370 + *
511 371 * @param string|int $timestamp
512 372 * @return bool
513 373 */
514 374 function wpbm_is_valid_timestamp( $timestamp ) {
515 - return ( ( (string) (int) $timestamp === $timestamp)
375 + return ( ( (string) (int) $timestamp === $timestamp)
516 376 && ($timestamp <= PHP_INT_MAX)
517 - && ($timestamp >= ~PHP_INT_MAX)
377 + && ($timestamp >= ~PHP_INT_MAX)
518 378 );
519 379 }
520 380 // </editor-fold>
521 381
522 -
523 -// <editor-fold defaultstate="collapsed" desc=" F i l e s && U R L s " >
382 +
383 +// <editor-fold defaultstate="collapsed" desc=" F i l e s && U R L s " >
524 384 ////////////////////////////////////////////////////////////////////////////////
525 385 // F i l e s && U R L s
526 386 ////////////////////////////////////////////////////////////////////////////////
527 387
@@ -546,9 +406,9 @@
546 406 return trailingslashit( WPBM_PLUGIN_URL ) . ltrim( $path, '/\\' );
547 407 }
548 408
549 409 /** Check if such file exist or not.
550 - *
410 + *
551 411 * @param string $path - relative path to file (relative to plugin folder).
552 412 * @return boolean true | false
553 413 */
554 414 function wpbm_is_file_exist( $path ) {
@@ -554,14 +414,14 @@
554 414 function wpbm_is_file_exist( $path ) {
555 415
556 416 if ( file_exists( trailingslashit( WPBM_PLUGIN_DIR ) . ltrim( $path, '/\\' ) ) ) // check if this file exist
557 417 return true;
558 - else
418 + else
559 419 return false;
560 420 }
561 -
421 +
562 422 /** Set URL from absolute to relative (starting from /)
563 - *
423 + *
564 424 * @param type $url
565 425 * @return type
566 426 */
567 427 function wpbm_set_relative_url( $url ){
@@ -574,24 +434,24 @@
574 434 $url = trim($url_path, '/');
575 435 return '/' . $url;
576 436 }
577 437
578 -/** Get Correct Relative URL
579 - *
438 +/** Get Correct Relative URL
439 + *
580 440 * @param type $link
581 441 * @return string
582 442 */
583 443 function wpbm_make_link_relative( $link ){
584 444
585 - if ( $link == get_option('siteurl') )
445 + if ( $link == get_option('siteurl') )
586 446 $link = '/';
587 - $link = '/' . trim( wp_make_link_relative( $link ), '/' );
447 + $link = '/' . trim( wp_make_link_relative( $link ), '/' );
588 448
589 - return $link;
449 + return $link;
590 450 }
591 451
592 -/** Get Correct Absolute URL
593 - *
452 +/** Get Correct Absolute URL
453 + *
594 454 * @param string $link
595 455 * @return type
596 456 */
597 457 function wpbm_make_link_absolute( $link ){
@@ -596,17 +456,17 @@
596 456 */
597 457 function wpbm_make_link_absolute( $link ){
598 458
599 459 if ( ( $link != get_option('siteurl') ) && ( strpos($link, 'http') !== 0 ) )
600 - $link = get_option('siteurl') . '/' . trim( wp_make_link_relative( $link ), '/' );
460 + $link = get_option('siteurl') . '/' . trim( wp_make_link_relative( $link ), '/' );
601 461 return esc_js( $link ) ;
602 462 }
603 463
604 464
605 465 if (!function_exists ('get_file_data_wpdev')) {
606 -
466 +
607 467 /** Get header info from this file, just for compatibility with WordPress 2.8 and older versions
608 - *
468 + *
609 469 * @param type $file
610 470 * @param type $default_headers
611 471 * @param type $context
612 472 * @return type
@@ -612,15 +472,15 @@
612 472 * @return type
613 473 */
614 474 function get_file_data_wpdev( $file, $default_headers, $context = '' ) {
615 475 // We don't need to write to the file, so just open for reading.
616 - $fp = fopen( $file, 'r' );
476 + $fp = fopen( $file, 'r' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_fopen
617 477
618 478 // Pull only the first 8kiB of the file in.
619 - $file_data = fread( $fp, 8192 );
479 + $file_data = fread( $fp, 8192 );// phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_fread
620 480
621 481 // PHP will close file handle, but we are good citizens.
622 - fclose( $fp );
482 + fclose( $fp );// phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_fclose
623 483
624 484 if( $context != '' ) {
625 485 $extra_headers = array(); //apply_filters( "extra_$context".'_headers', array() );
626 486
@@ -648,9 +508,9 @@
648 508 }
649 509
650 510
651 511 /** Get content from specific URL
652 - *
512 + *
653 513 * @param string $url
654 514 * @return string|boolean (false on error)
655 515 */
656 516 function wpbm_get_ssl_page_content( $url ) {
@@ -658,14 +518,14 @@
658 518 $request = new WP_Http();
659 519
660 520 $result = $request->request( $url
661 521 , array( // Default Parameters
662 - //FixIn: 2.0.12.1
663 - 'user-agent' => 'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405'
522 + 'reject_unsafe_urls' => true, //FixIn: 2.0.29.1
523 + 'user-agent' => 'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405' //FixIn: 2.0.12.1
664 524 // 'method' => 'GET',
665 525 // 'timeout' => 5, // timeout value for an HTTP request.
666 - // 'redirection' => 5, // number of redirects allowed during an HTTP request.
667 - // 'httpversion' => '1.0',
526 + // 'redirection' => 5, // number of redirects allowed during an HTTP request.
527 + // 'httpversion' => '1.0',
668 528 // 'user-agent' => 'WordPress/' . get_bloginfo( 'version' ) . '; ' . get_bloginfo( 'url' ),
669 529 // 'reject_unsafe_urls' => false,
670 530 // 'blocking' => true,
671 531 // 'headers' => array(),
@@ -677,14 +537,14 @@
677 537 // 'sslcertificates' => ABSPATH . WPINC . '/certificates/ca-bundle.crt',
678 538 // 'stream' => false,
679 539 // 'filename' => null,
680 540 // 'limit_response_size' => null
681 - )
541 + )
682 542 );
683 543
684 - if (
685 - ( ! is_wp_error( $result ) )
686 - && ( $result[ 'response' ][ 'code' ] == '200' )
544 + if (
545 + ( ! is_wp_error( $result ) )
546 + && ( $result[ 'response' ][ 'code' ] == '200' )
687 547 ) {
688 548
689 549 return $result[ 'body' ];
690 550
@@ -760,15 +620,15 @@
760 620
761 621 // </editor-fold>
762 622
763 623
764 -// <editor-fold defaultstate="collapsed" desc=" A d m i n M e n u L i n k s " >
624 +// <editor-fold defaultstate="collapsed" desc=" A d m i n M e n u L i n k s " >
765 625 ////////////////////////////////////////////////////////////////////////////
766 626 // A d m i n M e n u L i n k s
767 627 ////////////////////////////////////////////////////////////////////////////
768 628
769 629 /** Get URL to specific Admin Menu page
770 - *
630 + *
771 631 * @param string $menu_type - { item | add | resources | settings }
772 632 * @param boolean $is_absolute_url - Absolute or relative url { default: true }
773 633 * @return string - URL to menu
774 634 */
@@ -796,19 +656,19 @@
796 656 }
797 657
798 658 if ( $is_absolute_url ) {
799 659 $link = admin_url( 'admin.php' ) . '?page=' . $link ;
800 - }
660 + }
801 661
802 - return $link;
662 + return $link;
803 663 }
804 664
805 665 // // // // // // // // // // // // // // // // // // // // // // // // // /
806 666
807 667 /** Get URL of item Listing or Calendar Overview page
808 - *
668 + *
809 669 * @param boolean $is_absolute_url - Absolute or relative url { default: true }
810 - * @param boolean $is_old - { default: true }
670 + * @param boolean $is_old - { default: true }
811 671 * @return string - URL to menu
812 672 */
813 673 function wpbm_get_master_url( $is_absolute_url = true ) {
814 674 return wpbm_get_menu_url( 'master', $is_absolute_url );
@@ -813,12 +673,12 @@
813 673 function wpbm_get_master_url( $is_absolute_url = true ) {
814 674 return wpbm_get_menu_url( 'master', $is_absolute_url );
815 675 }
816 676
817 -/** Get URL of item > Add item page
818 - *
677 +/** Get URL of item > Add item page
678 + *
819 679 * @param boolean $is_absolute_url - Absolute or relative url { default: true }
820 - * @param boolean $is_old - { default: true }
680 + * @param boolean $is_old - { default: true }
821 681 * @return string - URL to menu
822 682 */
823 683 function wpbm_get_new_wpbm_url( $is_absolute_url = true ) {
824 684 return wpbm_get_menu_url( 'add', $is_absolute_url );
@@ -823,18 +683,18 @@
823 683 function wpbm_get_new_wpbm_url( $is_absolute_url = true ) {
824 684 return wpbm_get_menu_url( 'add', $is_absolute_url );
825 685 }
826 686
827 -/** Get URL of item > Settings page
828 - *
687 +/** Get URL of item > Settings page
688 + *
829 689 * @param boolean $is_absolute_url - Absolute or relative url { default: true }
830 - * @param boolean $is_old - { default: true }
690 + * @param boolean $is_old - { default: true }
831 691 * @return string - URL to menu
832 692 */
833 693 function wpbm_get_settings_url( $is_absolute_url = true ) {
834 694 return wpbm_get_menu_url( 'settings', $is_absolute_url );
835 695 }
836 -
696 +
837 697 // // // // // // // // // // // // // // // // // // // // // // // // // /
838 698
839 699 /** Check if this item Listing or Calendar Overview page
840 700 * @param string $server_param - 'REQUEST_URI' | 'HTTP_REFERER' Default: 'REQUEST_URI'
@@ -839,62 +699,62 @@
839 699 /** Check if this item Listing or Calendar Overview page
840 700 * @param string $server_param - 'REQUEST_URI' | 'HTTP_REFERER' Default: 'REQUEST_URI'
841 701 * @return boolean true | false
842 702 */
843 -function wpbm_is_master_page( $server_param = 'REQUEST_URI' ) {
703 +function wpbm_is_master_page( $server_param = 'REQUEST_URI' ) {
844 704
845 - if ( ( is_admin() ) &&
846 - ( strpos($_SERVER[ $server_param ],'page=oplugins') !== false ) &&
847 - ( strpos($_SERVER[ $server_param ],'tab=wpbm-') === false ) && // not the settings
848 - ( ( strpos($_SERVER[ $server_param ],'tab=wpbm') !== false ) // tab specified
849 - || ( strpos($_SERVER[ $server_param ],'tab=') === false ) ) // or tab not specified at all
705 + if ( ( is_admin() ) && isset($_SERVER[ $server_param ]) &&
706 + ( strpos(sanitize_text_field( wp_unslash($_SERVER[ $server_param ])),'page=oplugins') !== false ) && // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
707 + ( strpos(sanitize_text_field( wp_unslash($_SERVER[ $server_param ])),'tab=wpbm-') === false ) && // not the settings // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
708 + ( ( strpos(sanitize_text_field( wp_unslash($_SERVER[ $server_param ])),'tab=wpbm') !== false ) // tab specified // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
709 + || ( strpos(sanitize_text_field( wp_unslash($_SERVER[ $server_param ])),'tab=') === false ) ) // or tab not specified at all // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
850 710 ) {
851 711 return true;
852 - }
712 + }
853 713 return false;
854 714 }
855 715
856 -/** Check if this item > Add item page
716 +/** Check if this item > Add item page
857 717 * @param string $server_param - 'REQUEST_URI' | 'HTTP_REFERER' Default: 'REQUEST_URI'
858 718 * @return boolean true | false
859 719 */
860 720 function wpbm_is_new_wpbm_page( $server_param = 'REQUEST_URI' ) {
861 721
862 - if ( ( is_admin() ) &&
863 - ( strpos($_SERVER[ $server_param ],'page=oplugins') !== false ) &&
864 - ( strpos($_SERVER[ $server_param ],'tab=wpbm-new') !== false )
722 + if ( ( is_admin() ) && isset($_SERVER[ $server_param ]) &&
723 + ( strpos(sanitize_text_field( wp_unslash($_SERVER[ $server_param ])),'page=oplugins') !== false ) && // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
724 + ( strpos(sanitize_text_field( wp_unslash($_SERVER[ $server_param ])),'tab=wpbm-new') !== false ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
865 725 ) {
866 726 return true;
867 - }
727 + }
868 728 return false;
869 729 }
870 730
871 731
872 -/** Check if this item > Settings page
732 +/** Check if this item > Settings page
873 733 * @param string $server_param - 'REQUEST_URI' | 'HTTP_REFERER' Default: 'REQUEST_URI'
874 734 * @return boolean true | false
875 - */
735 + */
876 736 function wpbm_is_settings_page( $server_param = 'REQUEST_URI' ) {
877 737
878 - if ( ( is_admin() ) &&
879 - ( strpos($_SERVER[ $server_param ],'page=oplugins') !== false ) &&
880 - ( strpos($_SERVER[ $server_param ],'tab=wpbm-settings') !== false )
738 + if ( ( is_admin() ) && isset($_SERVER[ $server_param ]) &&
739 + ( strpos(sanitize_text_field( wp_unslash($_SERVER[ $server_param ])),'page=oplugins') !== false ) && // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
740 + ( strpos(sanitize_text_field( wp_unslash($_SERVER[ $server_param ])),'tab=wpbm-settings') !== false ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
881 741 ) {
882 742 return true;
883 - }
743 + }
884 744 return false;
885 745 }
886 746
887 747 // </editor-fold>
888 -
889 748
890 -// <editor-fold defaultstate="collapsed" desc=" A d m i n U I E l e m e n t s " >
749 +
750 +// <editor-fold defaultstate="collapsed" desc=" A d m i n U I E l e m e n t s " >
891 751 ////////////////////////////////////////////////////////////////////////////
892 752 // A d m i n U I E l e m e n t s
893 753 ////////////////////////////////////////////////////////////////////////////
894 754
895 755 /** Get Number of new items
896 - *
756 + *
897 757 * @return int
898 758 */
899 759 function wpbm_get_number_new_items(){
900 760 return 0;
@@ -901,9 +761,9 @@
901 761 }
902 762
903 763
904 764 /** Show Admin B A R .
905 - *
765 + *
906 766 * @global type $wp_admin_bar
907 767 * @return type
908 768 */
909 769 function wp_admin_bar_items_menu(){
@@ -930,9 +790,9 @@
930 790 $update_title = $title;
931 791
932 792
933 793 if ( $update_count > 0 ) {
934 - $update_count_title = "&nbsp;<span id='ab-updates' class='wpbm-count bk-update-count' >" . number_format_i18n($update_count) . "</span>" ; //id='wpbm-count'
794 + $update_count_title = "&nbsp;<span class='wpbm-count bk-update-count' style='background: #f0f0f1;color: #2c3338;display: inline;padding: 2px 5px;font-weight: 600;border-radius: 10px;'>" . number_format_i18n($update_count) . "</span>" ; //id='wpbm-count'
935 795 $update_title .= $update_count_title;
936 796 }
937 797
938 798 $link_items = wpbm_get_master_url();
@@ -991,33 +851,16 @@
991 851 // add_action( 'admin_bar_menu', 'wp_admin_bar_items_menu', 70 ); // Add Admin Bar
992 852
993 853
994 854 /** Show Rating link at footer */
995 -function wpbm_show_wpbm_footer(){
855 +function wpbm_show_wpbm_footer(){
996 856
997 - if ( ! wpbm_is_this_demo() ) {
857 + // Nothing here.
858 +}
859 +// </editor-fold>
998 860
999 - $message = sprintf( __( 'If you like %s please leave us a %s rating. A huge thank you in advance!', 'booking-manager')
1000 - , '<strong>Booking Manager</strong>' . ' ' . WPBM_VERSION_NUM
1001 - , '<a href="https://wordpress.org/support/plugin/booking-manager/reviews/#new-post" target="_blank" title="' . esc_attr__( 'Thanks :)', 'booking-manager') . '">'
1002 - . '&#9733;&#9733;&#9733;&#9733;&#9733;'
1003 - . '</a>'
1004 - );
1005 861
1006 - echo '<div id="wpbm-footer" style="position:absolute;bottom:40px;text-align:left;width:95%;font-size:0.9em;text-shadow:0 1px 0 #fff;margin:0;color:#888;">' . $message . '</div>';
1007 - ?>
1008 - <script type="text/javascript">
1009 - jQuery(document).ready(function(){
1010 - jQuery('#wpfooter').append( jQuery('#wpbm-footer') );
1011 - });
1012 - </script>
1013 - <?php
1014 - }
1015 -}
1016 -// </editor-fold>
1017 -
1018 -
1019 -// <editor-fold defaultstate="collapsed" desc=" DB - cheking if table, field or index exists " >
862 +// <editor-fold defaultstate="collapsed" desc=" DB - cheking if table, field or index exists " >
1020 863 ////////////////////////////////////////////////////////////////////////////
1021 864 // DB - cheking if table, field or index exists
1022 865 ////////////////////////////////////////////////////////////////////////////
1023 866
@@ -1022,9 +865,9 @@
1022 865 ////////////////////////////////////////////////////////////////////////////
1023 866
1024 867 /**
1025 868 * Check if table exist
1026 - *
869 + *
1027 870 * @global type $wpdb
1028 871 * @param string $tablename
1029 872 * @return 0|1
1030 873 */
@@ -1031,31 +874,23 @@
1031 874 function wpbm_is_table_exists( $tablename ) {
1032 875
1033 876 global $wpdb;
1034 877
1035 - if ( (! empty($wpdb->prefix) ) && ( strpos($tablename, $wpdb->prefix) === false ) )
1036 - $tablename = $wpdb->prefix . $tablename ;
878 + if ( ( ! empty( $wpdb->prefix ) ) && ( strpos( $tablename, $wpdb->prefix ) === false ) ) {
879 + $tablename = $wpdb->prefix . $tablename;
880 + }
1037 881
1038 - $sql_check_table = $wpdb->prepare("SHOW TABLES LIKE %s" , $tablename ); //FixIn 5.4.3
1039 882
1040 - $res = $wpdb->get_results( $sql_check_table );
1041 883
1042 - return count($res); //FixIn 5.4.3
1043 - /*
1044 - $sql_check_table = $wpdb->prepare("
1045 - SELECT COUNT(*) AS count
1046 - FROM information_schema.tables
1047 - WHERE table_schema = '". DB_NAME ."'
1048 - AND table_name = %s " , $tablename );
884 + $res = $wpdb->get_results( $wpdb->prepare( "SHOW TABLES LIKE %s", $tablename ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1049 885
1050 - $res = $wpdb->get_results( $sql_check_table );
1051 - return $res[0]->count;*/
886 + return count( $res ); //FixIn 5.4.3.
1052 887 }
1053 888
1054 889
1055 890 /**
1056 891 * Check if table exist
1057 - *
892 + *
1058 893 * @global type $wpdb
1059 894 * @param string $tablename
1060 895 * @param type $fieldname
1061 896 * @return 0|1
@@ -1064,9 +899,9 @@
1064 899 global $wpdb;
1065 900 if ( (! empty($wpdb->prefix) ) && ( strpos($tablename, $wpdb->prefix) === false ) ) $tablename = $wpdb->prefix . $tablename ;
1066 901 $sql_check_table = "SHOW COLUMNS FROM {$tablename}" ;
1067 902
1068 - $res = $wpdb->get_results( $sql_check_table );
903 + $res = $wpdb->get_results( $sql_check_table ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter
1069 904
1070 905 foreach ($res as $fld) {
1071 906 if ($fld->Field == $fieldname) return 1;
1072 907 }
@@ -1076,9 +911,9 @@
1076 911
1077 912
1078 913 /**
1079 914 * Check if index exist
1080 - *
915 + *
1081 916 * @global type $wpdb
1082 917 * @param string $tablename
1083 918 * @param type $fieldindex
1084 919 * @return 0|1
@@ -1085,24 +920,24 @@
1085 920 */
1086 921 function wpbm_is_index_in_table_exists( $tablename , $fieldindex) {
1087 922 global $wpdb;
1088 923 if ( (! empty($wpdb->prefix) ) && ( strpos($tablename, $wpdb->prefix) === false ) ) $tablename = $wpdb->prefix . $tablename ;
1089 - $sql_check_table = $wpdb->prepare("SHOW INDEX FROM {$tablename} WHERE Key_name = %s", $fieldindex );
1090 - $res = $wpdb->get_results( $sql_check_table );
924 +
925 + $res = $wpdb->get_results( $wpdb->prepare("SHOW INDEX FROM {$tablename} WHERE Key_name = %s", $fieldindex ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
1091 926 if (count($res)>0) return 1;
1092 927 else return 0;
1093 928 }
1094 929
1095 930 // </editor-fold>
1096 -
1097 -
1098 -// <editor-fold defaultstate="collapsed" desc=" E s c a p i n g " >
931 +
932 +
933 +// <editor-fold defaultstate="collapsed" desc=" E s c a p i n g " >
1099 934 ////////////////////////////////////////////////////////////////////////////
1100 935 // E s c a p i n g
1101 936 ////////////////////////////////////////////////////////////////////////////
1102 937
1103 938 /** Transform the REQESTS parameters (GET and POST) into URL
1104 - *
939 + *
1105 940 * @param type $page_param
1106 941 * @param array $exclude_params
1107 942 * @param type $only_these_parameters
1108 943 * @return type
@@ -1110,25 +945,25 @@
1110 945 function wpbm_get_params_in_url( $page_param , $exclude_params = array(), $only_these_parameters = false, $is_escape_url = false, $only_get = false ){
1111 946
1112 947 $exclude_params[] = 'page';
1113 948
1114 - if ( isset( $_GET['page'] ) )
1115 - $page_param = $_GET['page'];
949 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
950 + if ( isset( $_GET['page'] ) ) { $page_param = $_GET['page']; }
1116 951
1117 952 $get_paramaters = array( 'page' => $page_param );
1118 953
1119 954 if ( $only_get )
1120 - $check_params = $_GET;
1121 - else
1122 - $check_params = $_REQUEST;
1123 -//debuge($check_params);
955 + $check_params = $_GET; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
956 + else
957 + $check_params = $_REQUEST; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
958 +//debuge($check_params);
1124 959 foreach ( $check_params as $prm_key => $prm_value ) {
1125 960
1126 961 // Skip parameters arrays, like $_GET['rvaluation_to'] = Array ( [0] => 6, [1] => 14, [2] => 14 )
1127 - if (
1128 - ( is_string( $prm_value ) )
1129 - || ( is_numeric( $prm_value ) )
1130 - ) {
962 + if (
963 + ( is_string( $prm_value ) )
964 + || ( is_numeric( $prm_value ) )
965 + ) {
1131 966
1132 967 if ( strlen( $prm_value ) > 1000 ) { // Check about TOOO long parameters, if it exist then reset it.
1133 968 $prm_value = '';
1134 969 }
@@ -1137,9 +972,9 @@
1137 972 if ( ( $only_these_parameters === false ) || ( in_array( $prm_key, $only_these_parameters ) ) )
1138 973 $get_paramaters[ $prm_key ] = $prm_value;
1139 974 }
1140 975 }
1141 -//debuge($check_params, $get_paramaters, $exclude_params );
976 +//debuge($check_params, $get_paramaters, $exclude_params );
1142 977 $url = admin_url( add_query_arg( $get_paramaters , 'admin.php' ) );
1143 978
1144 979 if ( $is_escape_url )
1145 980 $url = esc_url( $url );
@@ -1148,9 +983,9 @@
1148 983
1149 984 /* // Old variant:
1150 985 if ( isset( $_GET['page'] ) ) $page_param = $_GET['page'];
1151 986
1152 - $url_start = 'admin.php?page=' . $page_param . '&';
987 + $url_start = 'admin.php?page=' . $page_param . '&';
1153 988 $exclude_params[] = 'page';
1154 989 foreach ( $_REQUEST as $prm_key => $prm_value ) {
1155 990
1156 991 if ( !in_array( $prm_key, $exclude_params ) )
@@ -1161,18 +996,18 @@
1161 996 }
1162 997 $url_start = substr( $url_start, 0, -1 );
1163 998
1164 999 return $url_start;
1165 - */
1000 + */
1166 1001 }
1167 1002
1168 1003
1169 1004 /** Clean Request Parameters
1170 - *
1005 + *
1171 1006 */
1172 -function wpbm_check_request_paramters() {
1007 +function wpbm_check_request_paramters() {
1173 1008
1174 - $clean_params = array();
1009 + $clean_params = array();
1175 1010
1176 1011 $clean_params[ 'wh_wpbm_id' ] = 'digit_or_csd'; // '0' | '1' | ''
1177 1012 $clean_params[ 'wh_wpbm_date' ] = 'digit_or_date'; // number | date 2016-07-20
1178 1013 $clean_params[ 'wh_wpbm_datenext' ] = 'd'; // '1' | '2' ....
@@ -1183,13 +1018,13 @@
1183 1018
1184 1019 // elements only listed in array::
1185 1020 if ( is_array( $clean_type ) ) { // check only values from the list in this array
1186 1021
1187 - if ( ( isset( $_REQUEST[ $request_key ] ) ) && ( ! in_array( $_REQUEST[ $request_key ], $clean_type ) ) )
1188 - $clean_type = 's';
1189 - else
1022 + if ( ( isset( $_REQUEST[ $request_key ] ) ) && ( ! in_array( $_REQUEST[ $request_key ], $clean_type ) ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1023 + $clean_type = 's';
1024 + else
1190 1025 $clean_type = 'checked_skip_it';
1191 - }
1026 + }
1192 1027
1193 1028 switch ( $clean_type ) {
1194 1029
1195 1030 case 'checked_skip_it':
@@ -1196,36 +1031,34 @@
1196 1031
1197 1032 break;
1198 1033
1199 1034 case 'digit_or_date': // digit or comma separated digit
1200 - if ( isset( $_REQUEST[ $request_key ] ) )
1201 - $_REQUEST[ $request_key ] = wpbm_clean_digit_or_date( $_REQUEST[ $request_key ] ); // nums
1035 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1036 + if ( isset( $_REQUEST[ $request_key ] ) ) { $_REQUEST[ $request_key ] = wpbm_clean_digit_or_date( $_REQUEST[ $request_key ] ); } // nums
1202 1037
1203 1038 break;
1204 1039
1205 1040 case 'digit_or_csd': // digit or comma separated digit
1206 - if ( isset( $_REQUEST[ $request_key ] ) )
1207 - $_REQUEST[ $request_key ] = wpbm_clean_digit_or_csd( $_REQUEST[ $request_key ] ); // nums
1041 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1042 + if ( isset( $_REQUEST[ $request_key ] ) ) { $_REQUEST[ $request_key ] = wpbm_clean_digit_or_csd( $_REQUEST[ $request_key ] ); } // nums
1208 1043
1209 1044 break;
1210 1045
1211 1046 case 's': // string
1212 - if ( isset( $_REQUEST[ $request_key ] ) )
1213 - $_REQUEST[ $request_key ] = wpbm_clean_like_string_for_db( $_REQUEST[ $request_key ] );
1047 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1048 + if ( isset( $_REQUEST[ $request_key ] ) ) { $_REQUEST[ $request_key ] = wpbm_clean_like_string_for_db( $_REQUEST[ $request_key ] ); }
1214 1049
1215 1050 break;
1216 1051
1217 1052 case 'd': // digit
1218 - if ( isset( $_REQUEST[ $request_key ] ) )
1219 - if ( $_REQUEST[ $request_key ] !== '' )
1220 - $_REQUEST[ $request_key ] = intval( $_REQUEST[ $request_key ] );
1053 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1054 + if (( isset( $_REQUEST[ $request_key ] ) ) && ( $_REQUEST[ $request_key ] !== '' )) { $_REQUEST[ $request_key ] = intval( $_REQUEST[ $request_key ] ); }
1221 1055
1222 1056 break;
1223 1057
1224 1058 default:
1225 - if ( isset( $_REQUEST[ $request_key ] ) ) {
1226 - $_REQUEST[ $request_key ] = intval( $_REQUEST[ $request_key ] );
1227 - }
1059 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1060 + if ( isset( $_REQUEST[ $request_key ] ) ) { $_REQUEST[ $request_key ] = intval( $_REQUEST[ $request_key ] ); }
1228 1061 break;
1229 1062 }
1230 1063
1231 1064
@@ -1232,15 +1065,15 @@
1232 1065 }
1233 1066
1234 1067 }
1235 1068
1236 -
1069 +
1237 1070 /** Check paramter if it number or comma separated list of numbers
1238 - *
1071 + *
1239 1072 * @global type $wpdb
1240 1073 * @param string $value
1241 1074 * @return string
1242 - *
1075 + *
1243 1076 * Exmaple:
1244 1077 wpbm_clean_digit_or_csd( '12,a,45,9' ) => '12,0,45,9'
1245 1078 * or
1246 1079 wpbm_clean_digit_or_csd( '10a' ) => '10
@@ -1246,9 +1079,9 @@
1246 1079 wpbm_clean_digit_or_csd( '10a' ) => '10
1247 1080 * or
1248 1081 wpbm_clean_digit_or_csd( array( '12,a,45,9', '10a' ) ) => array ( '12,0,45,9', '10' )
1249 1082 */
1250 -function wpbm_clean_digit_or_csd( $value ) { //FixIn:6.2.1.4
1083 +function wpbm_clean_digit_or_csd( $value ) { //FixIn:6.2.1.4
1251 1084
1252 1085 if ( $value === '' ) return $value;
1253 1086
1254 1087
@@ -1253,9 +1086,9 @@
1253 1086
1254 1087
1255 1088 if ( is_array( $value ) ) {
1256 1089 foreach ( $value as $key => $check_value ) {
1257 - $value[ $key ] = wpbm_clean_digit_or_csd( $check_value );
1090 + $value[ $key ] = wpbm_clean_digit_or_csd( $check_value );
1258 1091 }
1259 1092 return $value;
1260 1093 }
1261 1094
@@ -1272,12 +1105,12 @@
1272 1105 }
1273 1106 $result = implode(',', $result );
1274 1107 return $result;
1275 1108 }
1276 -
1277 -
1109 +
1110 +
1278 1111 /** Cehck about Valid date, like 2016-07-20 or digit
1279 - *
1112 + *
1280 1113 * @param string $value
1281 1114 * @return string or int
1282 1115 */
1283 1116 function wpbm_clean_digit_or_date( $value ) { //FixIn:6.2.1.4
@@ -1291,12 +1124,12 @@
1291 1124 return intval( $value );
1292 1125 }
1293 1126
1294 1127 }
1295 -
1296 1128
1129 +
1297 1130 /** Check $value for injection here
1298 - *
1131 + *
1299 1132 * @param type $value
1300 1133 * @return type
1301 1134 */
1302 1135 function wpbm_clean_parameter( $value ) {
@@ -1301,16 +1134,16 @@
1301 1134 */
1302 1135 function wpbm_clean_parameter( $value ) {
1303 1136
1304 1137 $value = preg_replace( '/<[^>]*>/', '', $value ); // clean any tags
1305 - $value = str_replace( '<', ' ', $value );
1306 - $value = str_replace( '>', ' ', $value );
1307 - $value = strip_tags( $value );
1138 + $value = str_replace( '<', ' ', $value );
1139 + $value = str_replace( '>', ' ', $value );
1140 + $value = wp_strip_all_tags( $value );
1308 1141
1309 - // Clean SQL injection
1142 + // Clean SQL injection
1310 1143 $value = esc_sql( $value );
1311 1144
1312 - return $value;
1145 + return $value;
1313 1146 }
1314 1147
1315 1148
1316 1149 function wpbm_esc_like( $value_trimmed ) {
@@ -1323,14 +1156,14 @@
1323 1156 }
1324 1157
1325 1158
1326 1159 /** Clean user string for using in SQL LIKE statement - append to LIKE sql
1327 - *
1160 + *
1328 1161 * @param string $value - to clean
1329 1162 * @return string - escaped
1330 - * Exmaple:
1163 + * Exmaple:
1331 1164 * $search_escaped_like_title = wpbm_clean_like_string_for_append_in_sql_for_db( $input_var );
1332 - *
1165 + *
1333 1166 * $where_sql = " WHERE title LIKE ". $search_escaped_like_title ." ";
1334 1167 */
1335 1168 function wpbm_clean_like_string_for_append_in_sql_for_db( $value ) {
1336 1169 global $wpdb;
@@ -1335,13 +1168,13 @@
1335 1168 function wpbm_clean_like_string_for_append_in_sql_for_db( $value ) {
1336 1169 global $wpdb;
1337 1170
1338 1171 $value_trimmed = trim( stripslashes( $value ) );
1339 -$wild = '%';
1340 -$like = $wild . wpbm_esc_like( $value_trimmed ) . $wild;
1341 -$sql = $wpdb->prepare( "'%s'", $like );
1172 + $wild = '%';
1173 + $like = $wild . wpbm_esc_like( $value_trimmed ) . $wild;
1174 + $sql = $wpdb->prepare( "'%s'", $like ); // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.QuotedSimplePlaceholder
1342 1175
1343 - return $sql;
1176 + return $sql;
1344 1177
1345 1178
1346 1179 /* Help:
1347 1180 * First half of escaping for LIKE special characters % and _ before preparing for MySQL.
@@ -1356,22 +1189,22 @@
1356 1189 *
1357 1190 * Example Escape Chain:
1358 1191 *
1359 1192 * $sql = esc_sql( wpbm_esc_like( $input ) );
1360 - */
1193 + */
1361 1194
1362 1195 }
1363 1196
1364 1197
1365 -/** Clean string for using in SQL LIKE requests inside single quotes: WHERE title LIKE '%". $escaped_search_title ."%'
1198 +/** Clean string for using in SQL LIKE requests inside single quotes: WHERE title LIKE '%". $escaped_search_title ."%'
1366 1199 * Replaced _ to \_ % to \% \ to \\
1367 1200 * @param string $value - to clean
1368 1201 * @return string - escaped
1369 - * Exmaple:
1202 + * Exmaple:
1370 1203 * $search_escaped_like_title = wpbm_clean_like_string_for_db( $input_var );
1371 - *
1204 + *
1372 1205 * $where_sql = " WHERE title LIKE '%". $search_escaped_like_title ."%' ";
1373 - *
1206 + *
1374 1207 * Important! Use SINGLE quotes after in SQL query: LIKE '%".$data."%'
1375 1208 */
1376 1209 function wpbm_clean_like_string_for_db( $value ){
1377 1210
@@ -1380,9 +1213,9 @@
1380 1213 $value_trimmed = trim( stripslashes( $value ) );
1381 1214
1382 1215 $value_trimmed = wpbm_esc_like( $value_trimmed );
1383 1216
1384 - $value = trim( $wpdb->prepare( "'%s'", $value_trimmed ) , "'" );
1217 + $value = trim( $wpdb->prepare( "'%s'", $value_trimmed ) , "'" ); // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.QuotedSimplePlaceholder
1385 1218
1386 1219 return $value;
1387 1220
1388 1221 /* Help:
@@ -1398,26 +1231,26 @@
1398 1231 *
1399 1232 * Example Escape Chain:
1400 1233 *
1401 1234 * $sql = esc_sql( wpbm_esc_like( $input ) );
1402 - */
1235 + */
1403 1236 }
1404 1237
1405 1238
1406 1239 /** Escape string from SQL for the HTML form field
1407 - *
1240 + *
1408 1241 * @param string $value
1409 1242 * @return string
1410 - *
1243 + *
1411 1244 * Used: esc_sql function.
1412 - *
1413 - * https://codex.wordpress.org/Function_Reference/esc_sql
1414 - * Note: Be careful to use this function correctly. It will only escape values to be used in strings in the query.
1415 - * That is, it only provides escaping for values that will be within quotes in the SQL (as in field = '{$escaped_value}').
1416 - * If your value is not going to be within quotes, your code will still be vulnerable to SQL injection.
1417 - * For example, this is vulnerable, because the escaped value is not surrounded by quotes in the SQL query:
1418 - * ORDER BY {$escaped_value}. As such, this function does not escape unquoted numeric values, field names, or SQL keywords.
1419 - *
1245 + *
1246 + * https://codex.wordpress.org/Function_Reference/esc_sql
1247 + * Note: Be careful to use this function correctly. It will only escape values to be used in strings in the query.
1248 + * That is, it only provides escaping for values that will be within quotes in the SQL (as in field = '{$escaped_value}').
1249 + * If your value is not going to be within quotes, your code will still be vulnerable to SQL injection.
1250 + * For example, this is vulnerable, because the escaped value is not surrounded by quotes in the SQL query:
1251 + * ORDER BY {$escaped_value}. As such, this function does not escape unquoted numeric values, field names, or SQL keywords.
1252 + *
1420 1253 */
1421 1254 function wpbm_clean_string_for_form( $value ){
1422 1255
1423 1256 global $wpdb;
@@ -1434,16 +1267,16 @@
1434 1267
1435 1268 }
1436 1269 // </editor-fold>
1437 1270
1438 -
1439 -// <editor-fold defaultstate="collapsed" desc=" U s e r s " >
1271 +
1272 +// <editor-fold defaultstate="collapsed" desc=" U s e r s " >
1440 1273 ////////////////////////////////////////////////////////////////////////////////
1441 1274 // U s e r s
1442 1275 ////////////////////////////////////////////////////////////////////////////////
1443 1276
1444 1277 /** Get ID of active user
1445 - *
1278 + *
1446 1279 * @return type
1447 1280 */
1448 1281 function get_wpbm_current_user_id() {
1449 1282 $user = wp_get_current_user();
@@ -1450,11 +1283,35 @@
1450 1283 return ( isset( $user->ID ) ? (int) $user->ID : 0 );
1451 1284 }
1452 1285
1453 1286
1287 +/**
1288 + * Resolve a requested per-user settings target to the current user.
1289 + *
1290 + * Booking Manager's established AJAX payloads include a user ID. The value is
1291 + * retained for request compatibility, but it must never authorize a write to
1292 + * another user's preferences.
1293 + *
1294 + * @param mixed $requested_user_id User ID supplied by the request.
1295 + *
1296 + * @return int Current user ID when the request target matches; otherwise 0.
1297 + */
1298 +function wpbm_get_authorized_user_option_target_id( $requested_user_id ) {
1299 + $current_user_id = get_wpbm_current_user_id();
1300 +
1301 + if ( 0 === $current_user_id || ! is_scalar( $requested_user_id ) ) {
1302 + return 0;
1303 + }
1304 +
1305 + $requested_user_id = absint( wp_unslash( (string) $requested_user_id ) );
1306 +
1307 + return ( $current_user_id === $requested_user_id ) ? $current_user_id : 0;
1308 +}
1309 +
1310 +
1454 1311 /** Check if Current User have specific Role
1455 - *
1456 - * @return bool Whether the current user has the given capability.
1312 + *
1313 + * @return bool Whether the current user has the given capability.
1457 1314 */
1458 1315 function wpbm_is_current_user_have_this_role( $user_role ) {
1459 1316
1460 1317 if ( $user_role == 'administrator' ) $user_role = 'activate_plugins';
@@ -1467,64 +1324,44 @@
1467 1324 }
1468 1325
1469 1326
1470 1327 function wpbm_get_user_ip() {
1471 -//return '84.243.195.114' ; // Test //90.36.89.174
1472 - if (isset($_SERVER['HTTP_CLIENT_IP'])) {
1473 - $userIP = $_SERVER['HTTP_CLIENT_IP'] ;
1474 - } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
1475 - $userIP = $_SERVER['HTTP_X_FORWARDED_FOR'] ;
1476 - } elseif (isset($_SERVER['HTTP_X_FORWARDED'])) {
1477 - $userIP = $_SERVER['HTTP_X_FORWARDED'] ;
1478 - } elseif (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
1479 - $userIP = $_SERVER['HTTP_FORWARDED_FOR'] ;
1480 - } elseif (isset($_SERVER['HTTP_FORWARDED'])) {
1481 - $userIP = $_SERVER['HTTP_FORWARDED'] ;
1482 - } elseif (isset($_SERVER['REMOTE_ADDR'])) {
1483 - $userIP = $_SERVER['REMOTE_ADDR'] ;
1484 - } else {
1485 - $userIP = "" ;
1486 - }
1487 -
1488 - $userIP = explode( ',', $userIP );
1489 - $userIP = array_map( 'trim', $userIP );
1490 -
1491 - return $userIP[0] ;
1328 + return '---';
1492 1329 }
1493 1330 add_wpbm_filter( 'wpbm_get_user_ip', 'wpbm_get_user_ip' );
1494 1331 // </editor-fold>
1495 1332
1496 1333
1497 -// <editor-fold defaultstate="collapsed" desc=" Mesages for Admin panel " >
1498 -////////////////////////////////////////////////////////////////////////////////
1499 -// Mesages for Admin panel
1500 -////////////////////////////////////////////////////////////////////////////////
1334 +// <editor-fold defaultstate="collapsed" desc=" Mesages for Admin panel " >
1335 +////////////////////////////////////////////////////////////////////////////////
1336 +// Mesages for Admin panel
1337 +////////////////////////////////////////////////////////////////////////////////
1501 1338
1502 1339 function wpbm_show_fixed_message( $message, $time_to_show , $message_type = 'updated' , $notice_id = 0, $is_dismissible = false ) {
1503 1340
1504 1341 // Generate unique HTML ID for the message
1505 1342 if ( $notice_id == 0 )
1506 - $notice_id = intval( time() * rand(10, 100) );
1343 + $notice_id = intval( time() * wp_rand(10, 100) );
1507 1344
1508 1345 $notice_id = 'wpbm_system_notice_' . $notice_id;
1509 1346
1510 1347 $is_dismissible = false;
1511 1348
1512 - if (
1349 + if (
1513 1350 ( ( $is_dismissible ) && ( ! wpbm_section_is_dismissed( $notice_id ) ) )
1514 1351 || ( ! $is_dismissible )
1515 - // || true
1352 + // || true
1516 1353 ){
1517 1354
1518 - ?><div id="<?php echo $notice_id; ?>"
1519 - class="wpbm_system_notice wpbm_is_dismissible wpbm_is_hideable <?php echo $message_type; ?>"
1520 - data-nonce="<?php echo wp_create_nonce( $nonce_name = $notice_id . '_wpbmnonce' ); ?>"
1521 - data-user-id="<?php echo get_current_user_id(); ?>"
1522 - ><?php
1355 + ?><div id="<?php echo esc_attr($notice_id); ?>"
1356 + class="wpbm_system_notice wpbm_is_dismissible wpbm_is_hideable <?php echo esc_attr( $message_type ); ?>"
1357 + data-nonce="<?php echo esc_attr(wp_create_nonce( $nonce_name = $notice_id . '_wpbmnonce' )); ?>"
1358 + data-user-id="<?php echo esc_attr(get_current_user_id()); ?>"
1359 + ><?php
1523 1360
1524 1361 wpbm_x_dismiss_button();
1525 1362
1526 - echo $message;
1363 + echo wp_kses_post($message);
1527 1364
1528 1365 ?></div><?php
1529 1366
1530 1367 // Get the time of message showing
@@ -1529,19 +1366,19 @@
1529 1366
1530 1367 // Get the time of message showing
1531 1368 $time_to_show = intval( $time_to_show ) * 1000;
1532 1369
1533 - if ( $time_to_show > 0 ) {
1534 - ?> <script type="text/javascript">
1535 - jQuery('#<?php echo $notice_id; ?>').animate({opacity: 1},<?php echo $time_to_show; ?>).fadeOut( 2000 );
1370 + if ( $time_to_show > 0 ) {
1371 + ?> <script type="text/javascript">
1372 + jQuery('#<?php echo esc_attr($notice_id); ?>').animate({opacity: 1},<?php echo esc_attr( $time_to_show ); ?>).fadeOut( 2000 );
1536 1373 </script> <?php
1537 - }
1538 - }
1374 + }
1375 + }
1539 1376 }
1540 1377
1541 1378
1542 1379 /** Show Ajax message at the top of page
1543 - *
1380 + *
1544 1381 * @param type $message
1545 1382 * @param type $time_to_show
1546 1383 * @param type $is_error
1547 1384 */
@@ -1553,24 +1390,24 @@
1553 1390 // Escape any JavaScript from message
1554 1391 $notice = html_entity_decode( esc_js( $message ) ,ENT_QUOTES) ;
1555 1392
1556 1393 ?><script type="text/javascript">
1557 - var my_message = '<?php echo $notice; ?>';
1558 - wpbm_admin_show_message( my_message, '<?php echo ( $is_error ? 'error' : 'success' ); ?>', <?php echo $time_to_show; ?> );
1394 + var my_message = '<?php echo esc_js( $notice ); ?>';
1395 + wpbm_admin_show_message( my_message, '<?php echo ( $is_error ? 'error' : 'success' ); ?>', <?php echo esc_attr($time_to_show); ?> );
1559 1396 </script><?php
1560 1397 }
1561 1398
1562 1399
1563 1400 /** Show "Saved Changes" message at the top of settings page.
1564 - *
1565 - */
1401 + *
1402 + */
1566 1403 function wpbm_show_changes_saved_message() {
1567 1404 wpbm_show_message ( __('Changes saved.', 'booking-manager'), 5 );
1568 -}
1405 +}
1569 1406
1570 1407
1571 1408 /** Show Message at Top of Admin Pages
1572 - *
1409 + *
1573 1410 * @param type $message - mesage to show
1574 1411 * @param type $time_to_show - number of seconds to show, if 0 or skiped, then unlimited time.
1575 1412 * @param type $message_type - Default: updated { updated | error | notice }
1576 1413 */
@@ -1576,9 +1413,9 @@
1576 1413 */
1577 1414 function wpbm_show_message ( $message, $time_to_show , $message_type = 'updated') {
1578 1415
1579 1416 // Generate unique HTML ID for the message
1580 - $inner_message_id = intval( time() * rand(10, 100) );
1417 + $inner_message_id = intval( time() * wp_rand(10, 100) );
1581 1418
1582 1419 // Get formated HTML message
1583 1420 $notice = wpbm_get_formated_message( $message, $message_type, $inner_message_id );
1584 1421
@@ -1585,13 +1422,16 @@
1585 1422 // Get the time of message showing
1586 1423 $time_to_show = intval( $time_to_show ) * 1000;
1587 1424
1588 1425 // Show this Message
1589 - ?> <script type="text/javascript">
1426 + ?> <script type="text/javascript">
1590 1427 if ( jQuery('.wpbm_admin_message').length ) {
1591 - jQuery('.wpbm_admin_message').append( '<?php echo $notice; ?>' );
1428 + jQuery('.wpbm_admin_message').append( '<?php
1429 + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1430 + echo ($notice);
1431 + ?>' );
1592 1432 <?php if ( $time_to_show > 0 ) { ?>
1593 - jQuery('#wpbm_inner_message_<?php echo $inner_message_id; ?>').animate({opacity: 1},<?php echo $time_to_show; ?>).fadeOut( 2000 );
1433 + jQuery('#wpbm_inner_message_<?php echo esc_attr($inner_message_id); ?>').animate({opacity: 1},<?php echo esc_attr($time_to_show); ?>).fadeOut( 2000 );
1594 1434 <?php } ?>
1595 1435 }
1596 1436 </script> <?php
1597 1437 }
@@ -1597,9 +1437,9 @@
1597 1437 }
1598 1438
1599 1439
1600 1440 /** Escape and prepare message to show it
1601 - *
1441 + *
1602 1442 * @param type $message - message
1603 1443 * @param type $message_type - Default: updated { updated | error | notice }
1604 1444 * @param string $inner_message_id - ID of message DIV, can be skipped
1605 1445 * @return string
@@ -1624,13 +1464,13 @@
1624 1464 }
1625 1465
1626 1466
1627 1467 /** Show system info in settings page
1628 - *
1629 - * @param string $message ...
1468 + *
1469 + * @param string $message ...
1630 1470 * @param string $message_type 'info' | 'warning' | 'error'
1631 1471 * @param string $title __('Important!' , 'booking-manager') | __('Note' , 'booking-manager')
1632 - *
1472 + *
1633 1473 * Exmaple: wpbm_show_message_in_settings( __( 'Nothing Found', 'booking-manager'), 'warning', __('Important!' , 'booking-manager') );
1634 1474 */
1635 1475 function wpbm_show_message_in_settings( $message, $message_type = 'info', $title = '' , $is_echo = true ) {
1636 1476
@@ -1649,9 +1489,9 @@
1649 1489
1650 1490 $message_content .= '<div class="clear"></div>';
1651 1491
1652 1492 if ( $is_echo )
1653 - echo $message_content;
1493 + echo wp_kses_post( $message_content );
1654 1494 else
1655 1495 return $message_content;
1656 1496
1657 1497 }
@@ -1657,12 +1497,12 @@
1657 1497 }
1658 1498 // </editor-fold>
1659 1499
1660 1500
1661 -// <editor-fold defaultstate="collapsed" desc=" Settings Meta Boxes " >
1662 -////////////////////////////////////////////////////////////////////////////////
1501 +// <editor-fold defaultstate="collapsed" desc=" Settings Meta Boxes " >
1502 +////////////////////////////////////////////////////////////////////////////////
1663 1503 // Settings Meta Boxes
1664 -////////////////////////////////////////////////////////////////////////////////
1504 +////////////////////////////////////////////////////////////////////////////////
1665 1505 function wpbm_open_meta_box_section( $metabox_id, $title ) {
1666 1506
1667 1507 $my_close_open_win_id = $metabox_id . '_metabox';
1668 1508 //FixIn: 2.0.16.1
@@ -1668,17 +1508,17 @@
1668 1508 //FixIn: 2.0.16.1
1669 1509 ?>
1670 1510 <div class='meta-box'>
1671 1511 <div
1672 - id="<?php echo $my_close_open_win_id; ?>"
1512 + id="<?php echo esc_attr($my_close_open_win_id); ?>"
1673 1513 class="postbox <?php if ( '1' == get_user_option( 'wpbm_win_' . $my_close_open_win_id ) ) echo 'closed'; ?>"
1674 1514 ><div class="postbox-header" style="display: flex;flex-flow: row nowrap;border-bottom: 1px solid #ccd0d4;"><?php //FixIn: 8.7.8.1 ?>
1675 1515 <h3 class='hndle' style="flex: 1 1 auto;border: none;">
1676 1516 <span><?php echo wp_kses_post( $title ); ?></span>
1677 1517 </h3>
1678 - <div title="<?php _e('Click to toggle','booking-manager'); ?>"
1518 + <div title="<?php echo esc_attr(__('Click to toggle','booking-manager')); ?>"
1679 1519 class="handlediv"
1680 - onclick="javascript:wpbm_verify_window_opening(<?php echo get_wpbm_current_user_id(); ?>, '<?php echo $my_close_open_win_id; ?>');"
1520 + onclick="javascript:wpbm_verify_window_opening(<?php echo esc_attr( get_wpbm_current_user_id() ); ?>, '<?php echo esc_attr($my_close_open_win_id); ?>');"
1681 1521 ><br/></div>
1682 1522 </div>
1683 1523 <div class="inside">
1684 1524 <?php
@@ -1685,11 +1525,11 @@
1685 1525 }
1686 1526
1687 1527 function wpbm_close_meta_box_section() {
1688 1528 ?>
1689 - </div>
1690 - </div>
1691 - </div>
1529 + </div>
1530 + </div>
1531 + </div>
1692 1532 <?php
1693 1533 }
1694 1534 // </editor-fold>
1695 1535
@@ -1694,23 +1534,23 @@
1694 1534 // </editor-fold>
1695 1535
1696 1536
1697 1537 // from Toolbar
1698 -// <editor-fold defaultstate="collapsed" desc=" M o d a l s " >
1699 -////////////////////////////////////////////////////////////////////////////////
1538 +// <editor-fold defaultstate="collapsed" desc=" M o d a l s " >
1539 +////////////////////////////////////////////////////////////////////////////////
1700 1540 // M o d a l s
1701 1541 ////////////////////////////////////////////////////////////////////////////////
1702 1542
1703 -/** Start Loyouts - Modal Window structure */
1543 +/** Start Loyouts - Modal Window structure */
1704 1544 function wpbm_write_content_for_modals_start_here() {
1705 -
1545 +
1706 1546 ?><span id="wpbm_content_for_modals"></span><?php
1707 1547 }
1708 -add_wpbm_action( 'wpbm_write_content_for_modals', 'wpbm_write_content_for_modals_start_here');
1548 +add_wpbm_action( 'wpbm_write_content_for_modals', 'wpbm_write_content_for_modals_start_here');
1709 1549 // </editor-fold>
1710 1550
1711 1551
1712 -// <editor-fold defaultstate="collapsed" desc=" Inline JavaScript " >
1552 +// <editor-fold defaultstate="collapsed" desc=" Inline JavaScript " >
1713 1553 ////////////////////////////////////////////////////////////////////////////////
1714 1554 // Inline J a v a S c r i p t to Footer page
1715 1555 ////////////////////////////////////////////////////////////////////////////////
1716 1556 /**
@@ -1746,9 +1586,9 @@
1746 1586
1747 1587 $wpbm_queued_js = preg_replace( '/&#(x)?0*(?(1)27|39);?/i', "'", $wpbm_queued_js );
1748 1588 $wpbm_queued_js = str_replace( "\r", '', $wpbm_queued_js );
1749 1589
1750 - echo $wpbm_queued_js . "});\n</script>\n<!-- End WPBM JavaScript -->\n";
1590 + echo $wpbm_queued_js . "});\n</script>\n<!-- End WPBM JavaScript -->\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1751 1591
1752 1592 $wpbm_queued_js = '';
1753 1593 unset( $wpbm_queued_js );
1754 1594 }
@@ -1756,9 +1596,9 @@
1756 1596
1757 1597 // </editor-fold>
1758 1598
1759 1599 // from Toolbar
1760 -// <editor-fold defaultstate="collapsed" desc=" JS & CSS - Tooltips & Popover" >
1600 +// <editor-fold defaultstate="collapsed" desc=" JS & CSS - Tooltips & Popover" >
1761 1601 ////////////////////////////////////////////////////////////////////////////////
1762 1602 // JS & CSS
1763 1603 ////////////////////////////////////////////////////////////////////////////////
1764 1604
@@ -1763,15 +1603,15 @@
1763 1603 ////////////////////////////////////////////////////////////////////////////////
1764 1604
1765 1605 /** Load suport JavaScript for "Items" page*/
1766 1606 function wpbm_js_for_items_page() {
1767 -
1607 +
1768 1608 $is_use_hints = get_wpbm_option( 'wpbm_is_use_hints_at_admin_panel' );
1769 1609 if ( $is_use_hints == 'On' )
1770 1610 wpbm_bs_javascript_tooltips(); // JS Tooltips
1771 1611
1772 - wpbm_bs_javascript_popover(); // JS Popover
1773 -
1612 + wpbm_bs_javascript_popover(); // JS Popover
1613 +
1774 1614 //wpbm_datepicker_js(); // JS Datepicker
1775 1615 wpbm_datepicker_css(); // CSS DatePicker
1776 1616 }
1777 1617
@@ -1777,14 +1617,14 @@
1777 1617
1778 1618
1779 1619 /** Datepicker activation JavaScript */
1780 1620 function wpbm_datepicker_js() {
1781 -
1621 +
1782 1622 ?><script type="text/javascript">
1783 1623 jQuery(document).ready( function(){
1784 1624
1785 1625 function applyCSStoDays( date ){
1786 - return [true, 'date_available'];
1626 + return [true, 'date_available'];
1787 1627 }
1788 1628 jQuery('input.wpbm-filters-section-calendar').datepick(
1789 1629 { beforeShowDay: applyCSStoDays,
1790 1630 showOn: 'focus',
@@ -1795,9 +1635,9 @@
1795 1635 nextText: '&raquo;',
1796 1636 dateFormat: 'yy-mm-dd',
1797 1637 changeMonth: false,
1798 1638 changeYear: false,
1799 - minDate: null,
1639 + minDate: null,
1800 1640 maxDate: null, //'1Y',
1801 1641 showStatus: false,
1802 1642 multiSeparator: ', ',
1803 1643 closeAtTop: false,
@@ -1808,9 +1648,9 @@
1808 1648 mandatory: true
1809 1649 }
1810 1650 );
1811 1651 });
1812 - </script><?php
1652 + </script><?php
1813 1653 }
1814 1654
1815 1655
1816 1656 /** Support CSS - datepick, etc... */
@@ -1846,16 +1686,16 @@
1846 1686 height: auto;
1847 1687 }
1848 1688 </style>
1849 1689 <?php
1850 -}
1690 +}
1851 1691
1852 1692
1853 1693 /** Sortable Table JavaScript */
1854 1694 function wpbm_sortable_js() {
1855 1695 ?>
1856 - <script type="text/javascript">
1857 - // Activate Sortable Functionality
1696 + <script type="text/javascript">
1697 + // Activate Sortable Functionality
1858 1698 jQuery( document ).ready(function(){
1859 1699
1860 1700 jQuery('.wpbm_input_table tbody th').css('cursor','move');
1861 1701
@@ -1879,20 +1719,20 @@
1879 1719 });
1880 1720 });
1881 1721 </script>
1882 1722 <?php
1883 -
1723 +
1884 1724 }
1885 1725 // </editor-fold>
1886 1726
1887 1727
1888 -// <editor-fold defaultstate="collapsed" desc=" R e l o a d p a g e " >
1728 +// <editor-fold defaultstate="collapsed" desc=" R e l o a d p a g e " >
1889 1729 ////////////////////////////////////////////////////////////////////////////////
1890 1730 // R e l o a d p a g e
1891 1731 ////////////////////////////////////////////////////////////////////////////////
1892 1732 /**
1893 1733 * Reload page by using JavaScript
1894 - *
1734 + *
1895 1735 * @param string $url - URL of page to load
1896 1736 */
1897 1737 function wpbm_reload_page_by_js( $url ) {
1898 1738
@@ -1899,10 +1739,10 @@
1899 1739 $redir = html_entity_decode( esc_url( $url ) );
1900 1740
1901 1741 if ( ! empty( $redir ) ) {
1902 1742 ?>
1903 - <script type="text/javascript">
1904 - window.location.href = '<?php echo $redir ?>';
1743 + <script type="text/javascript">
1744 + window.location.href = '<?php echo esc_url($redir); ?>';
1905 1745 </script>
1906 1746 <?php
1907 1747 }
1908 1748 }
@@ -1908,9 +1748,9 @@
1908 1748 }
1909 1749
1910 1750
1911 1751 /** Redirect browser to a specific page
1912 - *
1752 + *
1913 1753 * @param string $url - URL of page to redirect
1914 1754 */
1915 1755 function wpbm_redirect( $url ) {
1916 1756
@@ -1918,20 +1758,20 @@
1918 1758
1919 1759 $url = html_entity_decode( esc_url( $url ) );
1920 1760
1921 1761 echo '<script type="text/javascript">';
1922 - echo 'window.location.href="'.$url.'";';
1762 + echo 'window.location.href="'.esc_url($url).'";';
1923 1763 echo '</script>';
1924 1764 echo '<noscript>';
1925 - echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
1765 + echo '<meta http-equiv="refresh" content="0;url='.esc_url($url).'" />';
1926 1766 echo '</noscript>';
1927 1767 }
1928 1768 // </editor-fold>
1929 1769
1930 1770
1931 -// <editor-fold defaultstate="collapsed" desc=" P a g i n a t i o n o f T a b l e L i s t i n g " >
1771 +// <editor-fold defaultstate="collapsed" desc=" P a g i n a t i o n o f T a b l e L i s t i n g " >
1932 1772 /** Show P a g i n a t i o n
1933 - *
1773 + *
1934 1774 * @param int $summ_number_of_items - total number of items
1935 1775 * @param int $active_page_num - number of activated page
1936 1776 * @param int $num_items_per_page - number of items per page
1937 1777 * @param array $only_these_parameters - array of keys to exclude from links
@@ -1947,11 +1787,10 @@
1947 1787 if ( $pages_number < 2 )
1948 1788 return;
1949 1789
1950 1790 //Fix: 5.1.4 - Just in case we are having tooo much resources, then we need to show all resources - and its empty string
1951 - if ( ( isset($_REQUEST['wh_wpbm_type'] ) ) && ( strlen($_REQUEST['wh_wpbm_type']) > 1000 ) ) {
1952 - $_REQUEST['wh_wpbm_type'] = '';
1953 - }
1791 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1792 + if ( ( isset($_REQUEST['wh_wpbm_type'] ) ) && ( strlen($_REQUEST['wh_wpbm_type']) > 1000 ) ) { $_REQUEST['wh_wpbm_type'] = ''; }
1954 1793
1955 1794 // First parameter will overwriten by $_GET['page'] parameter
1956 1795 $bk_admin_url = wpbm_get_params_in_url( wpbm_get_master_url( false ), array('page_num'), $only_these_parameters );
1957 1796
@@ -1957,9 +1796,9 @@
1957 1796
1958 1797
1959 1798 ?>
1960 1799 <span class="wpdevelop wpbm-pagination">
1961 - <div class="container-fluid">
1800 + <div class="container-fluid">
1962 1801 <div class="row">
1963 1802 <div class="col-sm-12 text-center control-group0">
1964 1803 <nav class="btn-toolbar">
1965 1804 <div class="btn-group wpbm-no-margin" style="float:none;">
@@ -1964,13 +1803,13 @@
1964 1803 <nav class="btn-toolbar">
1965 1804 <div class="btn-group wpbm-no-margin" style="float:none;">
1966 1805
1967 1806 <?php if ( $pages_number > 1 ) { ?>
1968 - <a class="button button-secondary <?php echo ( $active_page_num == 1 ) ? ' disabled' : ''; ?>"
1969 - href="<?php echo $bk_admin_url; ?>&page_num=<?php if ($active_page_num == 1) { echo $active_page_num; } else { echo ($active_page_num-1); } echo $url_sufix; ?>">
1970 - <?php _e('Prev', 'booking-manager'); ?>
1807 + <a class="button button-secondary <?php echo ( $active_page_num == 1 ) ? ' disabled' : ''; ?>"
1808 + href="<?php echo esc_url($bk_admin_url); ?>&page_num=<?php if ($active_page_num == 1) { echo esc_attr( $active_page_num ); } else { echo esc_attr($active_page_num-1); } echo esc_attr( $url_sufix ); ?>">
1809 + <?php esc_html_e('Prev', 'booking-manager'); ?>
1971 1810 </a>
1972 - <?php }
1811 + <?php }
1973 1812
1974 1813 /** Number visible pages (links) that linked to active page, other pages skipped by "..." */
1975 1814 $num_closed_steps = 3;
1976 1815
@@ -1975,23 +1814,23 @@
1975 1814 $num_closed_steps = 3;
1976 1815
1977 1816 for ( $pg_num = 1; $pg_num <= $pages_number; $pg_num++ ) {
1978 1817
1979 - if ( ! (
1980 - ( $pages_number > ( $num_closed_steps * 4) )
1981 - && ( $pg_num > $num_closed_steps )
1982 - && ( ( $pages_number - $pg_num + 1 ) > $num_closed_steps )
1983 - && ( abs( $active_page_num - $pg_num ) > $num_closed_steps )
1818 + if ( ! (
1819 + ( $pages_number > ( $num_closed_steps * 4) )
1820 + && ( $pg_num > $num_closed_steps )
1821 + && ( ( $pages_number - $pg_num + 1 ) > $num_closed_steps )
1822 + && ( abs( $active_page_num - $pg_num ) > $num_closed_steps )
1984 1823 ) ) {
1985 - ?> <a class="button button-secondary <?php if ($pg_num == $active_page_num ) echo ' active'; ?>"
1986 - href="<?php echo $bk_admin_url; ?>&page_num=<?php echo $pg_num; echo $url_sufix; ?>">
1987 - <?php echo $pg_num; ?>
1988 - </a><?php
1824 + ?> <a class="button button-secondary <?php if ($pg_num == $active_page_num ) echo ' active'; ?>"
1825 + href="<?php echo esc_attr( $bk_admin_url ); ?>&page_num=<?php echo esc_attr( $pg_num); echo esc_attr( $url_sufix); ?>">
1826 + <?php echo esc_html($pg_num); ?>
1827 + </a><?php
1989 1828
1990 - if ( ( $pages_number > ( $num_closed_steps * 4) )
1991 - && ( ($pg_num+1) > $num_closed_steps )
1992 - && ( ( $pages_number - ( $pg_num + 1 ) ) > $num_closed_steps )
1993 - && ( abs($active_page_num - ( $pg_num + 1 ) ) > $num_closed_steps )
1829 + if ( ( $pages_number > ( $num_closed_steps * 4) )
1830 + && ( ($pg_num+1) > $num_closed_steps )
1831 + && ( ( $pages_number - ( $pg_num + 1 ) ) > $num_closed_steps )
1832 + && ( abs($active_page_num - ( $pg_num + 1 ) ) > $num_closed_steps )
1994 1833 ) {
1995 1834 echo ' <a class="button button-secondary disabled" href="javascript:void(0);">...</a> ';
1996 1835 }
1997 1836 }
@@ -1997,11 +1836,11 @@
1997 1836 }
1998 1837 }
1999 1838
2000 1839 if ( $pages_number > 1 ) { ?>
2001 - <a class="button button-secondary <?php echo ( $active_page_num == $pages_number ) ? ' disabled' : ''; ?>"
2002 - href="<?php echo $bk_admin_url; ?>&page_num=<?php if ($active_page_num == $pages_number) { echo $active_page_num; } else { echo ($active_page_num+1); } echo $url_sufix; ?>">
2003 - <?php _e('Next', 'booking-manager'); ?>
1840 + <a class="button button-secondary <?php echo ( $active_page_num == $pages_number ) ? ' disabled' : ''; ?>"
1841 + href="<?php echo esc_attr( $bk_admin_url ); ?>&page_num=<?php if ($active_page_num == $pages_number) { echo esc_attr( $active_page_num); } else { echo esc_attr($active_page_num+1); } echo esc_attr( $url_sufix); ?>">
1842 + <?php esc_html_e('Next', 'booking-manager'); ?>
2004 1843 </a>
2005 1844 <?php } ?>
2006 1845
2007 1846 </div>
@@ -2014,9 +1853,9 @@
2014 1853 }
2015 1854 // </editor-fold>
2016 1855
2017 1856
2018 -// <editor-fold defaultstate="collapsed" desc=" D a t e s " >
1857 +// <editor-fold defaultstate="collapsed" desc=" D a t e s " >
2019 1858 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2020 1859 // Dates Format
2021 1860 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2022 1861
@@ -2021,9 +1860,9 @@
2021 1860 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2022 1861
2023 1862
2024 1863 /** Get Formated Date & time
2025 - *
1864 + *
2026 1865 * @param string $date_sql - 2017-07-31 00:00:00 || 2017-07-31
2027 1866 * @param string $date_format - Optional. - "m / d / Y, D H:i:s"
2028 1867 * @param string $seperator - Optional. - " "
2029 1868 * @return string - July 29, 2014 12:00 am
@@ -2028,21 +1867,21 @@
2028 1867 * @param string $seperator - Optional. - " "
2029 1868 * @return string - July 29, 2014 12:00 am
2030 1869 */
2031 1870 function wpbm_get_date_time_formatted( $date_sql, $date_format = false, $seperator = ' ', $skip_midnight_time = false ) {
2032 -
1871 +
2033 1872 $return_date = wpbm_get_date_formatted( $date_sql, $date_format );
2034 -
2035 - $return_time = wpbm_get_time_formatted( $date_sql, $date_format, $skip_midnight_time );
1873 +
1874 + $return_time = wpbm_get_time_formatted( $date_sql, $date_format, $skip_midnight_time );
2036 1875 if ( ! empty( $return_time ) )
2037 1876 $return_date .= $seperator . $return_time;
2038 -
1877 +
2039 1878 return $return_date;
2040 1879 }
2041 1880
2042 1881
2043 1882 /** Get Formated Date
2044 - *
1883 + *
2045 1884 * @param string $date_sql - 2017-07-31 00:00:00 || 2017-07-31
2046 1885 * @param string $date_format - Optional. - "m / d / Y, D"
2047 1886 * @param bool $skip_midnight_time - Default false - if 00:00:00 then return '';
2048 1887 * @return string - July 29, 2014
@@ -2050,17 +1889,17 @@
2050 1889 function wpbm_get_date_formatted( $date_sql, $date_format = false ) {
2051 1890
2052 1891 if ( $date_format === false ) $date_format = get_wpbm_option( 'wpbm_date_format' );
2053 1892 if ( empty( $date_format ) ) $date_format = "m / d / Y, D";
2054 -
1893 +
2055 1894 $formated_date = date_i18n( $date_format, strtotime( $date_sql ) );
2056 -
1895 +
2057 1896 return $formated_date;
2058 1897 }
2059 1898
2060 1899
2061 1900 /** Get Formated Date & time
2062 - *
1901 + *
2063 1902 * @param string $date_sql - 2017-07-31 00:00:00 || 2017-07-31
2064 1903 * @param string $time_format - Optional. - "H:i:s"
2065 1904 * @return string - 12:00 am
2066 1905 */
@@ -2067,20 +1906,20 @@
2067 1906 function wpbm_get_time_formatted( $date_sql, $time_format = false , $skip_midnight_time = false ) {
2068 1907
2069 1908 if ( ( $skip_midnight_time ) && ( '00:00:00' == substr( $date_sql, -8 ) ) )
2070 1909 return '';
2071 -
1910 +
2072 1911 if ( $time_format === false ) $time_format = get_wpbm_option( 'wpbm_time_format' );
2073 1912 if ( empty( $time_format ) ) $time_format = 'h:i a';
2074 -
1913 +
2075 1914 $formated_date = date_i18n( $time_format, strtotime( $date_sql ) );
2076 -
2077 - return $formated_date;
1915 +
1916 + return $formated_date;
2078 1917 }
2079 1918
2080 1919
2081 1920 /** Check if "current_day" is tomorrow from "next_day"
2082 - *
1921 + *
2083 1922 * @param string $current_day_sql_check : 2015-02-29 00:00:00
2084 1923 * @param string $next_day_sql_check : 2015-02-30 00:00:00
2085 1924 * @return boolean : true | false
2086 1925 */
@@ -2087,28 +1926,28 @@
2087 1926 function wpbm_is_next_day( $current_day_sql_check, $next_day_sql_check ) {
2088 1927
2089 1928 // Current day
2090 1929 $current_day_unix = strtotime( $current_day_sql_check );
2091 -
1930 +
2092 1931 $current_day_midnight_sql = date_i18n( 'Y-m-d', $current_day_unix );
2093 1932 $current_day_midnight_unix = strtotime( $current_day_midnight_sql );
2094 -
1933 +
2095 1934 $calc_next_day_unix = strtotime( '+1 day', $current_day_midnight_unix );
2096 -
1935 +
2097 1936 // Next day
2098 - $next_day_unix = strtotime( $next_day_sql_check );
1937 + $next_day_unix = strtotime( $next_day_sql_check );
2099 1938 $next_day_midnight_sql = date_i18n( 'Y-m-d', $next_day_unix );
2100 1939 $next_day_midnight_unix = strtotime( $next_day_midnight_sql );
2101 -
2102 -
2103 - if ( $calc_next_day_unix == $next_day_midnight_unix )
2104 - return true;
2105 - else
2106 - return false;
1940 +
1941 +
1942 + if ( $calc_next_day_unix == $next_day_midnight_unix )
1943 + return true;
1944 + else
1945 + return false;
2107 1946 }
2108 1947
2109 1948 /** Check if "current_day" is same day of "other_day"
2110 - *
1949 + *
2111 1950 * @param string $current_day_sql_check : 2015-02-29 00:00:00
2112 1951 * @param string $other_day_sql_check : 2015-02-30 00:00:00
2113 1952 * @return boolean : true | false
2114 1953 */
@@ -2115,27 +1954,27 @@
2115 1954 function wpbm_is_this_same_day( $current_day_sql_check, $other_day_sql_check ) {
2116 1955
2117 1956 // Current day
2118 1957 $current_day_unix = strtotime( $current_day_sql_check );
2119 -
1958 +
2120 1959 $current_day_midnight_sql = date_i18n( 'Y-m-d', $current_day_unix );
2121 1960 $current_day_midnight_unix = strtotime( $current_day_midnight_sql );
2122 -
1961 +
2123 1962 // Other day
2124 - $other_day_unix = strtotime( $other_day_sql_check );
1963 + $other_day_unix = strtotime( $other_day_sql_check );
2125 1964 $other_day_midnight_sql = date_i18n( 'Y-m-d', $other_day_unix );
2126 1965 $other_day_midnight_unix = strtotime( $other_day_midnight_sql );
2127 -
2128 -
2129 - if ( $current_day_midnight_unix == $other_day_midnight_unix )
2130 - return true;
2131 - else
2132 - return false;
1966 +
1967 +
1968 + if ( $current_day_midnight_unix == $other_day_midnight_unix )
1969 + return true;
1970 + else
1971 + return false;
2133 1972 }
2134 1973
2135 1974
2136 1975 /** Get days in short format view
2137 - *
1976 + *
2138 1977 * @param string $days Dates: 15.05.2015, 16.05.2015, 17.05.2015
2139 1978 * @return string Dates in format: 15.05.2015 - 17.05.2015
2140 1979 */
2141 1980 function wpbm_get_dates_short_format( $dates_sql_csv ) { // $days - string with comma seperated dates
@@ -2149,24 +1988,24 @@
2149 1988 $result_string = '';
2150 1989 $last_show_day = '';
2151 1990
2152 1991 foreach ( $days as $day ) {
2153 -
1992 +
2154 1993 $is_fin_at_end = false;
2155 -
1994 +
2156 1995 if ( $previosday === false ) { // First Day
2157 -
1996 +
2158 1997 $result_string = wpbm_get_date_time_formatted( $day, false, ' ', true ); // echo format for first day
2159 1998 $last_show_day = $day;
2160 1999 $previosday = $day; // Set previos day for next loop
2161 -
2000 +
2162 2001 } else { // Not first day
2163 -
2164 - if (
2165 - wpbm_is_next_day( $previosday, $day )
2166 - || wpbm_is_this_same_day( $previosday, $day )
2002 +
2003 + if (
2004 + wpbm_is_next_day( $previosday, $day )
2005 + || wpbm_is_this_same_day( $previosday, $day )
2167 2006 ) { // Check if $day next day from previous
2168 -
2007 +
2169 2008 $previosday = $day; // Set previos day for next loop
2170 2009 $is_fin_at_end = true;
2171 2010 } else {
2172 2011 if ( $last_show_day !== $previosday ) { // check if previos day was show or no
@@ -2175,10 +2014,10 @@
2175 2014 $result_string .= ', ' . wpbm_get_date_time_formatted( $day, false, ' ', true ); // assign in needed format this day
2176 2015 $previosday = $day; // Set previos day for next loop
2177 2016 $last_show_day = $day;
2178 2017 }
2179 - }
2180 -
2018 + }
2019 +
2181 2020 }
2182 2021
2183 2022 if ( $is_fin_at_end ) {
2184 2023 $result_string .= ' - ' . wpbm_get_date_time_formatted( $day, false, ' ', true );
@@ -2186,5 +2025,5 @@
2186 2025
2187 2026 return $result_string;
2188 2027 }
2189 2028
2190 -// </editor-fold>
2029 +// </editor-fold>