Booking Calendar - Version 9.4

Version Description

  • Changes in all versions:
    • New. Update styles of calendar skins. More clear and modern look. Defined minimum width for calendars. Adding padding between months in multi months view modes. (9.3.1.4)
    • New. 2 new calendar skins without outer border. (9.3.1.4)
    • Improvement. Showing calendars at mobile devices, while defined size of calendar in shortcode parameter. (9.3.1.5)
    • New. Parameter strong_width for definition of calendar width in shortcode for option parameter. Please check more here https://wpbookingcalendar.com/faq/shortcode-booking-form/#booking-options (9.3.1.6)
    • Improvement. Removed meta tags from the email templates to prevent marked bookings emails as spam in some servers. (9.3.1.3)
    • Improvement. During validation when submitting the booking form, focus on the first field that requires action. This will help complete the booking form. (9.3.1.9)
    • Under Hood. New WPBC_AJX__REQUEST class for sanitizing, saving and helping working with user requests. (9.3.1.2)
    • Fix. Fix dashboard/agenda links of showing "New | Pending | Today " bookings, in a new ajax Booking Listing page. (9.3.1.7)
    • Fix. Fix border width issue in Chrome browser in calendars. (9.3.1.8)
  • Changes in Personal / Business Small / Business Medium / Business Large / MultiUser versions:
    • Improvement. Disable booked time slots, for predefined selected date in the booking form (it's shortcode for booking form, without the calendar) (9.3.1.1)
    • Fix. Update text in settings. (9.3.1.8)
Download this release

Release Info

Developer wpdevelop
Plugin Icon 128x128 Booking Calendar
Version 9.4
Comparing to
See all releases

Code changes from version 9.3 to 9.4

Files changed (43) hide show
  1. core/admin/page-new.php +1 -0
  2. core/admin/wpbc-dashboard.php +9 -9
  3. core/admin/wpbc-settings-functions.php +5 -4
  4. core/admin/wpbc-toolbars.php +6 -7
  5. core/any/emails_tpl/plain-html-tpl.php +2 -2
  6. core/any/emails_tpl/standard-html-tpl.php +4 -4
  7. core/class/wpbc-class-welcome.php +167 -80
  8. core/lib/wpdev-booking-class.php +31 -15
  9. core/wpbc-activation.php +4 -4
  10. core/wpbc-constants.php +0 -1
  11. core/wpbc-include.php +5 -0
  12. css/calendar.css +219 -84
  13. css/client.css +4 -4
  14. css/skins/black-2.css +23 -32
  15. css/skins/black.css +17 -25
  16. css/skins/multidays.css +17 -24
  17. css/skins/premium-black.css +26 -27
  18. css/skins/premium-light-noborder.css +258 -0
  19. css/skins/premium-light.css +17 -24
  20. css/skins/premium-marine.css +16 -24
  21. css/skins/premium-steel-noborder.css +258 -0
  22. css/skins/premium-steel.css +16 -23
  23. css/skins/standard.css +16 -23
  24. css/skins/traditional-light.css +20 -27
  25. css/skins/traditional-times.css +274 -0
  26. css/skins/traditional.css +16 -23
  27. includes/_feedback/feedback_01.php +1 -1
  28. includes/_request/wpbc_request.php +744 -0
  29. includes/page-availability/_out/availability_calendar.css +0 -0
  30. includes/page-availability/_out/availability_calendar.js +2 -0
  31. includes/page-availability/_out/availability_calendar.min.css +2 -0
  32. includes/page-availability/_src/availability_calendar.css +0 -0
  33. includes/page-availability/_src/availability_calendar.js +0 -0
  34. includes/page-availability/availability__class.php +148 -0
  35. includes/page-availability/availability__page.php +24 -157
  36. includes/page-bookings/bookings__actions.php +26 -8
  37. includes/page-bookings/bookings__listing.php +9 -75
  38. includes/page-bookings/bookings__page.php +22 -151
  39. includes/page-bookings/bookings__sql.php +84 -469
  40. js/client.js +30 -7
  41. js/wpbc_times.js +5 -5
  42. readme.txt +53 -34
  43. wpdev-booking.php +6 -3
core/admin/page-new.php CHANGED
@@ -135,6 +135,7 @@ class WPBC_Page_AddNewBooking extends WPBC_Page_Structure {
135
  if ( ! empty( $user_calendar_options['calendar_width'] ) ) {
136
  $unit_value = ( esc_attr( $user_calendar_options['calendar_widthunits'] ) == 'percent' ) ? '%' : esc_attr( $user_calendar_options['calendar_widthunits'] );
137
  $option_width = ' width=' . intval( $user_calendar_options['calendar_width'] ) . $unit_value;
 
138
  } else $option_width = '';
139
 
140
  if ( ! empty( $user_calendar_options['calendar_cell_height'] ) ) {
135
  if ( ! empty( $user_calendar_options['calendar_width'] ) ) {
136
  $unit_value = ( esc_attr( $user_calendar_options['calendar_widthunits'] ) == 'percent' ) ? '%' : esc_attr( $user_calendar_options['calendar_widthunits'] );
137
  $option_width = ' width=' . intval( $user_calendar_options['calendar_width'] ) . $unit_value;
138
+ $option_width .= ' strong_width=' . intval( $user_calendar_options['calendar_width'] ) . $unit_value; //FixIn: 9.3.1.6
139
  } else $option_width = '';
140
 
141
  if ( ! empty( $user_calendar_options['calendar_cell_height'] ) ) {
core/admin/wpbc-dashboard.php CHANGED
@@ -518,19 +518,19 @@ function wpbc_dashboard_section_version() {
518
 
519
  /** Dashboard Statistic Section */
520
  function wpbc_dashboard_section_statistic( $counter ) {
521
-
522
  $bk_admin_url = wpbc_get_bookings_url() . '&wh_approved=';
523
  ?>
524
  <div class="wpbc_dashboard_section bk_right">
525
  <span class="bk_header"><?php _e('Statistic' ,'booking');?>:</span>
526
  <table class="bk_table">
527
  <tr class="first">
528
- <td class="first"> <a href="<?php echo $bk_admin_url,'&wh_is_new=1&wh_booking_date=3&view_mode=vm_listing'; ?>"><span class=""><?php echo $counter['new']; ?></span></a> </td>
529
- <td class=""> <a href="<?php echo $bk_admin_url,'&wh_is_new=1&wh_booking_date=3&view_mode=vm_listing'; ?>"><?php _e('New (unverified) booking(s)' ,'booking');?></a></td>
530
  </tr>
531
  <tr>
532
- <td class="first"> <a href="<?php echo $bk_admin_url,'&wh_approved=0&wh_booking_date=3&view_mode=vm_listing'; ?>"><span class=""><?php echo $counter['pending']; ?></span></a></td>
533
- <td class="pending"><a href="<?php echo $bk_admin_url,'&wh_approved=0&wh_booking_date=3&view_mode=vm_listing'; ?>" class=""><?php _e('Pending booking(s)' ,'booking');?></a></td>
534
  </tr>
535
  </table>
536
  </div>
@@ -538,12 +538,12 @@ function wpbc_dashboard_section_statistic( $counter ) {
538
  <span class="bk_header"><?php _e('Agenda' ,'booking');?>:</span>
539
  <table class="bk_table">
540
  <tr class="first">
541
- <td class="first"> <a href="<?php echo $bk_admin_url,'&wh_modification_date=1&wh_booking_date=3&view_mode=vm_listing'; ?>"><span><?php echo $counter['was_made_today']; ?></span></a> </td>
542
- <td class="new-bookings"><a href="<?php echo $bk_admin_url,'&wh_modification_date=1&wh_booking_date=3&view_mode=vm_listing'; ?>" class=""><?php _e('New booking(s) made today' ,'booking');?></a> </td>
543
  </tr>
544
  <tr>
545
- <td class="first"> <a href="<?php echo $bk_admin_url,'&wh_booking_date=1&view_mode=vm_listing'; ?>"><span><?php echo $counter['booking_today']; ?></span></a> </td>
546
- <td class="actual-bookings"> <a href="<?php echo $bk_admin_url,'&wh_booking_date=1&view_mode=vm_listing'; ?>" class=""><?php _e('Bookings for today' ,'booking');?></a> </td>
547
  </tr>
548
  </table>
549
  </div>
518
 
519
  /** Dashboard Statistic Section */
520
  function wpbc_dashboard_section_statistic( $counter ) {
521
+ //FixIn: 9.3.1.7
522
  $bk_admin_url = wpbc_get_bookings_url() . '&wh_approved=';
523
  ?>
524
  <div class="wpbc_dashboard_section bk_right">
525
  <span class="bk_header"><?php _e('Statistic' ,'booking');?>:</span>
526
  <table class="bk_table">
527
  <tr class="first">
528
+ <td class="first"> <a href="<?php echo $bk_admin_url,'&wh_what_bookings=new&wh_booking_date[]=3&view_mode=vm_listing&overwrite=1'; ?>"><span class=""><?php echo $counter['new']; ?></span></a> </td>
529
+ <td class=""> <a href="<?php echo $bk_admin_url,'&wh_what_bookings=new&wh_booking_date[]=3&view_mode=vm_listing&overwrite=1'; ?>"><?php _e('New (unverified) booking(s)' ,'booking');?></a></td>
530
  </tr>
531
  <tr>
532
+ <td class="first"> <a href="<?php echo $bk_admin_url,'&wh_approved=0&wh_booking_date[]=3&view_mode=vm_listing&overwrite=1'; ?>"><span class=""><?php echo $counter['pending']; ?></span></a></td>
533
+ <td class="pending"><a href="<?php echo $bk_admin_url,'&wh_approved=0&wh_booking_date[]=3&view_mode=vm_listing&overwrite=1'; ?>" class=""><?php _e('Pending booking(s)' ,'booking');?></a></td>
534
  </tr>
535
  </table>
536
  </div>
538
  <span class="bk_header"><?php _e('Agenda' ,'booking');?>:</span>
539
  <table class="bk_table">
540
  <tr class="first">
541
+ <td class="first"> <a href="<?php echo $bk_admin_url,'&wh_modification_date[]=1&wh_booking_date[]=3&view_mode=vm_listing&overwrite=1'; ?>"><span><?php echo $counter['was_made_today']; ?></span></a> </td>
542
+ <td class="new-bookings"><a href="<?php echo $bk_admin_url,'&wh_modification_date[]=1&wh_booking_date[]=3&view_mode=vm_listing&overwrite=1'; ?>" class=""><?php _e('New booking(s) made today' ,'booking');?></a> </td>
543
  </tr>
544
  <tr>
545
+ <td class="first"> <a href="<?php echo $bk_admin_url,'&wh_booking_date[]=1&view_mode=vm_listing&overwrite=1'; ?>"><span><?php echo $counter['booking_today']; ?></span></a> </td>
546
+ <td class="actual-bookings"> <a href="<?php echo $bk_admin_url,'&wh_booking_date[]=1&view_mode=vm_listing&overwrite=1'; ?>" class=""><?php _e('Bookings for today' ,'booking');?></a> </td>
547
  </tr>
548
  </table>
549
  </div>
core/admin/wpbc-settings-functions.php CHANGED
@@ -351,10 +351,11 @@ function wpbc_settings__system_info__restore_dismissed_windows(){
351
 
352
 
353
  foreach ( $all_plugins as $path => $plugin ) {
354
- if ( is_plugin_active( $path ) )
355
- $system_info['active_plugins'][$plugin['Name']] = $plugin['Version'];
356
- else
357
- $system_info['inactive_plugins'][$plugin['Name']] = $plugin['Version'];
 
358
  }
359
 
360
  // Showing
351
 
352
 
353
  foreach ( $all_plugins as $path => $plugin ) {
354
+ if ( is_plugin_active( $path ) ) {
355
+ $system_info['active_plugins'][ $plugin['Name'] ] = $plugin['Version'];
356
+ } else {
357
+ $system_info['inactive_plugins'][ $plugin['Name'] ] = $plugin['Version'];
358
+ }
359
  }
360
 
361
  // Showing
core/admin/wpbc-toolbars.php CHANGED
@@ -2409,6 +2409,9 @@ function wpbc_datepicker_css(){
2409
 
2410
  ?>
2411
  <style type="text/css">
 
 
 
2412
  #datepick-div .datepick-header {
2413
  width: <?php echo $width ?>px !important;
2414
  }
@@ -2419,19 +2422,15 @@ function wpbc_datepicker_css(){
2419
  display: none;
2420
  }
2421
  #datepick-div {
2422
- -border-radius: 3px;
2423
- -box-shadow: 0 0 2px #888888;
2424
- -webkit-border-radius: 3px;
2425
- -webkit-box-shadow: 0 0 2px #888888;
2426
- -moz-border-radius: 3px;
2427
- -moz-box-shadow: 0 0 2px #888888;
2428
  width: <?php echo $width ?>px !important;
2429
  }
2430
  #datepick-div .datepick .datepick-days-cell a{
2431
  font-size: 12px;
2432
  }
2433
  #datepick-div table.datepick tr td {
2434
- border-top: 0 none !important;
2435
  /*line-height: 24px;*/
2436
  padding: 0 !important;
2437
  /*width: 24px;*/
2409
 
2410
  ?>
2411
  <style type="text/css">
2412
+ #datepick-div {
2413
+ background: #fff;
2414
+ }
2415
  #datepick-div .datepick-header {
2416
  width: <?php echo $width ?>px !important;
2417
  }
2422
  display: none;
2423
  }
2424
  #datepick-div {
2425
+ /*border: 1px solid #ccc; !* FixIn: 9.3.1.4 *!*/
2426
+ margin-top: 2px;
 
 
 
 
2427
  width: <?php echo $width ?>px !important;
2428
  }
2429
  #datepick-div .datepick .datepick-days-cell a{
2430
  font-size: 12px;
2431
  }
2432
  #datepick-div table.datepick tr td {
2433
+ /*border-top: 0 none !important;*/
2434
  /*line-height: 24px;*/
2435
  padding: 0 !important;
2436
  /*width: 24px;*/
core/any/emails_tpl/plain-html-tpl.php CHANGED
@@ -37,12 +37,12 @@ function wpbc_email_template_plain_html( $fields_values ) {
37
  ?>
38
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
39
  <html xmlns="http://www.w3.org/1999/xhtml"> <!-- dir="<?php echo is_rtl() ? 'rtl' : 'ltr'?>" -->
40
- <head>
41
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
42
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
43
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
44
  <title></title>
45
- </head>
46
  <body style="Margin:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;min-width:100%;<?php echo $body_color; ?>" <?php echo is_rtl() ? 'rightmargin="0"' : 'leftmargin="0"'; ?> >
47
  <div class="wrapper" style="table-layout:fixed;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;Margin:0;padding-top:10px;padding-bottom:10px;padding-right:10px;padding-left:10px;<?php echo $body_color; ?>" <?php echo is_rtl() ? 'dir="rtl"' : 'dir="ltr"'?> >
48
  <?php
37
  ?>
38
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
39
  <html xmlns="http://www.w3.org/1999/xhtml"> <!-- dir="<?php echo is_rtl() ? 'rtl' : 'ltr'?>" -->
40
+ <head><?php /* //FixIn: 9.3.1.3 ?>
41
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
42
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
43
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
44
  <title></title>
45
+ <?php */ ?></head>
46
  <body style="Margin:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;min-width:100%;<?php echo $body_color; ?>" <?php echo is_rtl() ? 'rightmargin="0"' : 'leftmargin="0"'; ?> >
47
  <div class="wrapper" style="table-layout:fixed;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;Margin:0;padding-top:10px;padding-bottom:10px;padding-right:10px;padding-left:10px;<?php echo $body_color; ?>" <?php echo is_rtl() ? 'dir="rtl"' : 'dir="ltr"'?> >
48
  <?php
core/any/emails_tpl/standard-html-tpl.php CHANGED
@@ -31,11 +31,11 @@ function wpbc_email_template_standard_html( $fields_values ) {
31
  ?>
32
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
33
  <html xmlns="http://www.w3.org/1999/xhtml"> <!-- dir="<?php echo is_rtl() ? 'rtl' : 'ltr'?>" -->
34
- <head>
35
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
36
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
37
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
38
- <title></title>
39
  <style type="text/css">
40
  body {
41
  Margin: 0;
@@ -315,11 +315,11 @@ return;
315
  ?>
316
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
317
  <html xmlns="http://www.w3.org/1999/xhtml"> <!-- dir="<?php echo is_rtl() ? 'rtl' : 'ltr'?>" -->
318
- <head>
319
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
320
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
321
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
322
- <title></title>
323
  <style type="text/css">
324
  body {
325
  Margin: 0;
31
  ?>
32
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
33
  <html xmlns="http://www.w3.org/1999/xhtml"> <!-- dir="<?php echo is_rtl() ? 'rtl' : 'ltr'?>" -->
34
+ <head><?php /* //FixIn: 9.3.1.3 ?>
35
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
36
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
37
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
38
+ <?php */ ?><title></title>
39
  <style type="text/css">
40
  body {
41
  Margin: 0;
315
  ?>
316
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
317
  <html xmlns="http://www.w3.org/1999/xhtml"> <!-- dir="<?php echo is_rtl() ? 'rtl' : 'ltr'?>" -->
318
+ <head><?php /* //FixIn: 9.3.1.3 ?>
319
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
320
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
321
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
322
+ <?php */ ?><title></title>
323
  <style type="text/css">
324
  body {
325
  Margin: 0;
core/class/wpbc-class-welcome.php CHANGED
@@ -439,6 +439,8 @@ class WPBC_Welcome {
439
 
440
  $this->maintence_section();
441
 
 
 
442
  $this->section_9_3();
443
 
444
  $this->section_9_2();
@@ -533,68 +535,113 @@ class WPBC_Welcome {
533
  $this->expand_section_end( $section_param_arr );
534
  }
535
 
 
536
 
537
- function section_9_2(){
538
-
539
- $section_param_arr = array( 'version_num' => '9.2', 'show_expand' => true );
540
 
541
  $this->expand_section_start( $section_param_arr );
542
 
543
-
544
  ?><div class="feature-section one-col">
545
  <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
546
- <?php echo '<h4>' .wpbc_recheck_strong_symbols( 'New Booking Listing - modern looking & instant working' ) . '</h4>' ;?>
547
- <img src="<?php echo $this->asset_path; ?>9.2/booking_listing_text_searching_long.png"
548
- style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
549
- class="wpbc-section-image" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
550
  </div>
551
  <div class="col col-2 last-feature" style="flex: 1 1 100%;width: 100%;">
552
  <?php echo
553
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
554
- . '<li>' . wpbc_recheck_strong_symbols( '**New modern toolbar** with handy buttons, dropdown lists and other elements that have been redesigned and rearranged in a new smarter way.' ) . '</li>'
555
- . '<li>' . wpbc_recheck_strong_symbols( '**Refreshed colors** of labels, icons, buttons and other UI elements for modern and clear look.' ) . '</li>'
556
- . '<li>' . wpbc_recheck_strong_symbols( 'Rearranged content of booking details in unified way for all Booking Calendar versions.' ) . '</li>'
557
- . '</ul>';
558
  ?>
559
  </div>
560
  </div><?php
561
 
 
 
 
 
 
 
 
 
 
 
562
  $this->show_separator();
563
 
564
  ?><div class="feature-section two-col">
565
  <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
566
  <?php echo
567
- '<h4>' .wpbc_recheck_strong_symbols( 'Instant working without page reloading' ) . '</h4>' .
568
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
569
- . '<li>' . wpbc_recheck_strong_symbols( '**Instant showing booking listing**, using ajax without page reloading when filtering search results. Single page app design.' ) . '</li>'
570
- . '<li>' . wpbc_recheck_strong_symbols( 'Immediate **searching** of bookings for a **specific keyword**. Reservations are displayed just after entering a specific keyword without other user actions.' ) . '</li>'
571
- . '<li>' . wpbc_recheck_strong_symbols( '**Highlighting** certain **keywords** in booking details to make it easier to find specific data when entering keywords.' ) . '</li>'
572
  . '</ul>' ;
573
  ?>
574
  </div>
575
- <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
576
-
577
- <img src="<?php echo $this->asset_path; ?>9.2/screenshot-01_high_res.gif"
578
- style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
579
- class="wpbc-section-image" />
 
 
 
 
 
 
 
 
 
 
 
580
  </div>
581
  </div><?php
582
 
583
- $this->show_separator();
 
 
 
 
 
 
 
 
 
 
584
 
585
  ?><div class="feature-section two-col">
586
  <div class="col col-1" style="flex: 1 1 75%;width: 100%;">
587
- <img src="<?php echo $this->asset_path; ?>9.2/booking_listing_dates_filtering.png"
588
  style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
589
  class="wpbc-section-image" />
590
  </div>
591
- <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
592
  <?php echo
593
- '<h4>' .wpbc_recheck_strong_symbols( 'User Saved Options' ) . '</h4>' .
594
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
595
- . '<li>' . wpbc_recheck_strong_symbols( '**Saving** any choice of **filter options** (select-boxes and other UI toolbar elements), toolbar selection or user options **personally for each user**. User will see last configured search filter parameters each time, when open admin panel.' ) . '</li>'
596
- . '<li>' . wpbc_recheck_strong_symbols( '**Keeping** last selected **filter or actions toolbar**, during each time, when user open booking admin panel. No need to define default state of toolbars in the settings.' ) . '</li>'
597
- . '<li>' . wpbc_recheck_strong_symbols( '**New user options toolbar**, where possible to select "Emails sending" on specific actions or "Show notes" by default (in paid versions).' ) . '</li>'
 
598
  . '</ul>';
599
  ?>
600
  </div>
@@ -602,21 +649,37 @@ class WPBC_Welcome {
602
 
603
  $this->show_separator();
604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
605
  ?><div class="feature-section two-col">
606
  <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
607
  <?php echo
608
- '<h4>' .wpbc_recheck_strong_symbols( 'Print functionality' ) . '</h4>' .
609
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
610
- . '<li>' . wpbc_recheck_strong_symbols( 'The new **print feature** is available in the **Free version**.' ) . '</li>'
611
- . '<li>' . wpbc_recheck_strong_symbols( 'New **print layout** displaying the exact content of the booking listing page.' ) . '</li>'
612
- . '<li>' . wpbc_recheck_strong_symbols( '**Print any selected bookings**. Possibility to print all bookings / selected bookings / specific single booking.' ) . '</li>'
613
 
614
- . '</ul>' ;
615
  ?>
616
  </div>
617
  <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
618
 
619
- <img src="<?php echo $this->asset_path; ?>9.2/booking_listing_printing.png"
620
  style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
621
  class="wpbc-section-image" />
622
  </div>
@@ -627,28 +690,23 @@ class WPBC_Welcome {
627
 
628
 
629
  ?><div class="feature-section two-col">
630
- <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
631
  <?php echo
632
  '<h4>' .wpbc_recheck_strong_symbols( 'Other new features' ) . '</h4>' .
633
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
634
- . '<li>' . wpbc_recheck_strong_symbols( 'Added 2 new filter options **Check in today** and **Check out today** to display bookings on the booking list page' ) . '</li>'
635
- . '<li>' . wpbc_recheck_strong_symbols( 'Ability to define and **save the locale for each specific booking**. This locale is saved and will exist when the following pages are loaded.' ) . '</li>'
636
- . '<li>' . wpbc_recheck_strong_symbols( '**Show action** buttons when such actions **can be applied to specific bookings**. You need to select bookings to display additional action buttons like "Confirm" or "Reject", etc...' ) . '</li>'
637
 
638
  . '</ul>' ;
639
  ?>
640
  </div>
641
  <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
642
- <?php echo
643
- '<h4>' .wpbc_recheck_strong_symbols( 'CSV Export (paid versions)' ) . '</h4>' .
644
- '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
645
- . '<li>' . wpbc_recheck_strong_symbols( '**New**. Ability to enter **field names to skip** from the export.' ) . '</li>'
646
- . '<li>' . wpbc_recheck_strong_symbols( 'Selection **export of single or all pages** and CSV column separator in pop-up window.' ) . '</li>'
647
- . '</ul>'; ?>
648
  <?php echo
649
  '<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
650
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
651
- . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Smarter structure of request parameters escaping.' ) . '</li>'
 
652
  . '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
653
  . '</ul>'; ?>
654
  </div>
@@ -661,65 +719,89 @@ class WPBC_Welcome {
661
  $this->expand_section_end( $section_param_arr );
662
  }
663
 
 
664
 
665
- function section_9_3(){
666
-
667
- $section_param_arr = array( 'version_num' => '9.3', 'show_expand' => !true );
668
 
669
  $this->expand_section_start( $section_param_arr );
670
 
671
- ?><div class="feature-section two-col">
672
- <div class="col col-1" style="flex: 1 1 75%;width: 100%;">
673
- <img src="<?php echo $this->asset_path; ?>9.3/edit-booking-free.png"
 
 
674
  style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
675
  class="wpbc-section-image" />
676
  </div>
677
- <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 80%;">
678
  <?php echo
679
- '<h4>' .wpbc_recheck_strong_symbols( 'Edit bookings in the Free version' ) . '</h4>' .
680
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
681
- . '<li style="margin-bottom:2em;">' . wpbc_recheck_strong_symbols( '**Edit bookings** in the Booking Calendar Free version. <p>You can easily **change booking details** for an existing booking or **re-select booking date(s)** for such booking in a few seconds.</p>' ) . '</li>'
682
- . '<li>' . wpbc_recheck_strong_symbols( '**Under Hood**. A **hash** field has been added to the booking table in all versions of the Booking Calendar.' ) . '</li>'
683
- . '<li>' . wpbc_recheck_strong_symbols( '**Under Hood**. Added **creation_date** field to booking table.' ) . '</li>'
684
- . '<li>' . wpbc_recheck_strong_symbols( '**Under Hood**. An **is_trash** field has been added to the booking table, to indicate the date of the booking was trashed.' ) . '</li>'
685
- . '</ul>';
686
  ?>
687
  </div>
688
  </div><?php
689
 
690
  $this->show_separator();
691
 
692
- if(1){
693
- ?><div class="feature-section one-col">
694
- <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
695
- <?php //echo '<h4>' .wpbc_recheck_strong_symbols( 'New Booking Listing - modern looking & instant working' ) . '</h4>' ;?>
696
- <?php if(1) echo
697
- '<h4>' .wpbc_recheck_strong_symbols( 'Simulate login in MultiUser version' ) . '</h4>' .
698
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
699
- . '<li>' . wpbc_recheck_strong_symbols( 'You can now easily **change** booking **form, email** templates or **payment** details **for Regular user**, while you have **logged in as Super Admin**. <p>You can drill down to regular user admin panel on the Booking > Settings > Users page.</p>' ) . '</li>'
700
- . '</ul>';
 
 
701
  ?>
702
- <img src="<?php echo $this->asset_path; ?>9.3/simulate_login2.png"
703
- style="margin:1px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
 
 
 
 
 
 
 
 
 
 
 
 
 
704
  class="wpbc-section-image" />
705
  </div>
 
 
 
 
 
 
 
 
 
 
706
  </div><?php
707
- }
 
708
 
709
  ?><div class="feature-section two-col">
710
  <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
711
  <?php echo
712
- //'<h4>' .wpbc_recheck_strong_symbols( 'Simulate login in MultiUser version' ) . '</h4>' .
713
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
714
- . '<li>' . wpbc_recheck_strong_symbols( '**Simulate the login of a regular user** (user with restricted access only to own resources) from a "super booking administrator" account for ability to change the settings of such a regular activated user in the Booking Calendar MultiUser version.' ) . '</li>'
715
- . '<li>' . wpbc_recheck_strong_symbols( 'Receive payments for "Regular User" bookings to the "Super Booking Admin" payment account. Activate this option at the Booking > Settings General page in the "MultiUser" section.' ) . '</li>'
716
- . '</ul>' ;
717
 
 
718
  ?>
719
  </div>
720
  <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
721
 
722
- <img src="<?php echo $this->asset_path; ?>9.3/simulate_log_out.png"
723
  style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
724
  class="wpbc-section-image" />
725
  </div>
@@ -730,23 +812,28 @@ if(1){
730
 
731
 
732
  ?><div class="feature-section two-col">
733
- <div class="col col-1" style="flex: 1 1 60%;width: 100%;">
734
  <?php echo
735
  '<h4>' .wpbc_recheck_strong_symbols( 'Other new features' ) . '</h4>' .
736
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
737
- . '<li>' . wpbc_recheck_strong_symbols( '**New**. Shortcode in emails **[cost_digits_only]** - to show booking cost without currency.' ) . '</li>'
738
- . '<li>' . wpbc_recheck_strong_symbols( 'Ability to define **title of "Search availability" button** in search form at the Booking > Settings > Search page. Use shortcodes like this: **[search_button "Search availability"]**' ) . '</li>'
739
- . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Replaced Stripe php library to newest 9.0.0 version.' ) . '</li>'
740
 
741
  . '</ul>' ;
742
  ?>
743
  </div>
744
  <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
 
 
 
 
 
 
745
  <?php echo
746
  '<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
747
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
748
- . '<li>' . wpbc_recheck_strong_symbols( '**Fix**. Error message in Stripe payment form: "Caught exception: You cannot use line_items.amount, line_items.currency, line_items.name, line_items.description, or line_items.images in this API version."' ) . '</li>'
749
- . '<li>' . wpbc_recheck_strong_symbols( '**Fix**. Notice: Undefined index: select_booking_form in class-admin-settings-api.php' ) . '</li>'
750
  . '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
751
  . '</ul>'; ?>
752
  </div>
439
 
440
  $this->maintence_section();
441
 
442
+ $this->section_9_4();
443
+
444
  $this->section_9_3();
445
 
446
  $this->section_9_2();
535
  $this->expand_section_end( $section_param_arr );
536
  }
537
 
538
+ function section_9_4(){
539
 
540
+ $section_param_arr = array( 'version_num' => '9.4', 'show_expand' => !true );
 
 
541
 
542
  $this->expand_section_start( $section_param_arr );
543
 
 
544
  ?><div class="feature-section one-col">
545
  <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
546
+
547
+ <?php echo '<h4>' .wpbc_recheck_strong_symbols( 'Update of calendar skins' ) . '</h4>' ;?>
548
+
549
+ <img src="<?php echo $this->asset_path; ?>9.4/skins-03.png"
550
+ style="margin:20px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
551
+ class="wpbc-section-image" />
552
+ </div>
553
+ </div><?php
554
+
555
+
556
+ ?><div class="feature-section two-col" style="margin-bottom:-30px">
557
+ <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
558
+ <?php echo
559
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
560
+ . '<li>' . wpbc_recheck_strong_symbols( 'Update styles of all calendar skins. More **modern and crisp look**.' ) . '</li>'
561
+ . '<li>' . wpbc_recheck_strong_symbols( '**Padding between months** in multiple month view modes.' ) . '</li>'
562
+ . '<li>' . wpbc_recheck_strong_symbols( 'Calendars have a **minimum width** for correct view at small sections.' ) . '</li>'
563
+ . '<li>' . wpbc_recheck_strong_symbols( 'Added **two new calendar skins** without outer borders.' ) . '</li>'
564
+ . '</ul>';
565
+ ?>
566
  </div>
567
  <div class="col col-2 last-feature" style="flex: 1 1 100%;width: 100%;">
568
  <?php echo
569
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
570
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement** showing calendars **at mobile devices**, while defined size of calendar in shortcode parameter.' ) . '</li>'
571
+ . '<li>' . wpbc_recheck_strong_symbols( 'New parameter **strong_width** for definition of calendar width in shortcode for option parameter. Please check more at <a href="https://wpbookingcalendar.com/faq/shortcode-booking-form/#booking-options">FAQ</a>' ) . '</li>'
572
+ . '</ul>';
 
573
  ?>
574
  </div>
575
  </div><?php
576
 
577
+
578
+ ?><div class="feature-section one-col">
579
+ <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
580
+
581
+ <img src="<?php echo $this->asset_path; ?>9.4/booking_calendar_skin_05.png"
582
+ style="margin:2px 5px 25px;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
583
+ class="wpbc-section-image" />
584
+ </div>
585
+ </div><?php
586
+
587
  $this->show_separator();
588
 
589
  ?><div class="feature-section two-col">
590
  <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
591
  <?php echo
592
+ '<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
593
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
594
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Removed meta tags from the email templates to **prevent marked bookings emails as spam** on some servers.' ) . '</li>'
595
+ . '<li>' . wpbc_recheck_strong_symbols( '**Under Hood**. New WPBC_AJX__REQUEST class for sanitizing, saving and helping working with user requests.' ) . '</li>'
596
+ . '<li>' . wpbc_recheck_strong_symbols( '**Fix**. Fix dashboard/agenda links of showing "New | Pending | Today " bookings, in a new ajax Booking Listing page.' ) . '</li>'
597
  . '</ul>' ;
598
  ?>
599
  </div>
600
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
601
+ <?php /*
602
+ echo
603
+ '<h4>' .wpbc_recheck_strong_symbols( 'Improvements in paid versions' ) . '</h4>' .
604
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
605
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Disable booked time slots, for predefined selected date in the booking form (it is shortcode for booking form, without the calendar)' ) . '</li>'
606
+ . '<li>' . wpbc_recheck_strong_symbols( '**Fix**. Update text in settings.' ) . '</li>'
607
+ . '</ul>';
608
+ */ ?>
609
+ <?php echo
610
+ '<h4>' .wpbc_recheck_strong_symbols( 'Other changes' ) . '</h4>' .
611
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
612
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Disable booked time slots, for predefined selected date in the booking form (in shortcode for booking form, without the calendar). In Booking Calendar Business Large or higher version.' ) . '</li>'
613
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. During validation when submitting the booking form, focus on the first field that requires action. This will help complete the booking form.' ) . '</li>'
614
+ . '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
615
+ . '</ul>'; ?>
616
  </div>
617
  </div><?php
618
 
619
+
620
+ $this->show_separator();
621
+
622
+ $this->expand_section_end( $section_param_arr );
623
+ }
624
+
625
+ function section_9_3(){
626
+
627
+ $section_param_arr = array( 'version_num' => '9.3', 'show_expand' => true );
628
+
629
+ $this->expand_section_start( $section_param_arr );
630
 
631
  ?><div class="feature-section two-col">
632
  <div class="col col-1" style="flex: 1 1 75%;width: 100%;">
633
+ <img src="<?php echo $this->asset_path; ?>9.3/edit-booking-free.png"
634
  style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
635
  class="wpbc-section-image" />
636
  </div>
637
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 80%;">
638
  <?php echo
639
+ '<h4>' .wpbc_recheck_strong_symbols( 'Edit bookings in the Free version' ) . '</h4>' .
640
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
641
+ . '<li style="margin-bottom:2em;">' . wpbc_recheck_strong_symbols( '**Edit bookings** in the Booking Calendar Free version. <p>You can easily **change booking details** for an existing booking or **re-select booking date(s)** for such booking in a few seconds.</p>' ) . '</li>'
642
+ . '<li>' . wpbc_recheck_strong_symbols( '**Under Hood**. A **hash** field has been added to the booking table in all versions of the Booking Calendar.' ) . '</li>'
643
+ . '<li>' . wpbc_recheck_strong_symbols( '**Under Hood**. Added **creation_date** field to booking table.' ) . '</li>'
644
+ . '<li>' . wpbc_recheck_strong_symbols( '**Under Hood**. An **is_trash** field has been added to the booking table, to indicate the date of the booking was trashed.' ) . '</li>'
645
  . '</ul>';
646
  ?>
647
  </div>
649
 
650
  $this->show_separator();
651
 
652
+ if(1){
653
+ ?><div class="feature-section one-col">
654
+ <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
655
+ <?php //echo '<h4>' .wpbc_recheck_strong_symbols( 'New Booking Listing - modern looking & instant working' ) . '</h4>' ;?>
656
+ <?php if(1) echo
657
+ '<h4>' .wpbc_recheck_strong_symbols( 'Simulate login in MultiUser version' ) . '</h4>' .
658
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
659
+ . '<li>' . wpbc_recheck_strong_symbols( 'You can now easily **change** booking **form, email** templates or **payment** details **for Regular user**, while you have **logged in as Super Admin**. <p>You can drill down to regular user admin panel on the Booking > Settings > Users page.</p>' ) . '</li>'
660
+ . '</ul>';
661
+ ?>
662
+ <img src="<?php echo $this->asset_path; ?>9.3/simulate_login2.png"
663
+ style="margin:1px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
664
+ class="wpbc-section-image" />
665
+ </div>
666
+ </div><?php
667
+ }
668
+
669
  ?><div class="feature-section two-col">
670
  <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
671
  <?php echo
672
+ //'<h4>' .wpbc_recheck_strong_symbols( 'Simulate login in MultiUser version' ) . '</h4>' .
673
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
674
+ . '<li>' . wpbc_recheck_strong_symbols( '**Simulate the login of a regular user** (user with restricted access only to own resources) from a "super booking administrator" account for ability to change the settings of such a regular activated user in the Booking Calendar MultiUser version.' ) . '</li>'
675
+ . '<li>' . wpbc_recheck_strong_symbols( 'Receive payments for "Regular User" bookings to the "Super Booking Admin" payment account. Activate this option at the Booking > Settings General page in the "MultiUser" section.' ) . '</li>'
676
+ . '</ul>' ;
677
 
 
678
  ?>
679
  </div>
680
  <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
681
 
682
+ <img src="<?php echo $this->asset_path; ?>9.3/simulate_log_out.png"
683
  style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
684
  class="wpbc-section-image" />
685
  </div>
690
 
691
 
692
  ?><div class="feature-section two-col">
693
+ <div class="col col-1" style="flex: 1 1 60%;width: 100%;">
694
  <?php echo
695
  '<h4>' .wpbc_recheck_strong_symbols( 'Other new features' ) . '</h4>' .
696
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
697
+ . '<li>' . wpbc_recheck_strong_symbols( '**New**. Shortcode in emails **[cost_digits_only]** - to show booking cost without currency.' ) . '</li>'
698
+ . '<li>' . wpbc_recheck_strong_symbols( 'Ability to define **title of "Search availability" button** in search form at the Booking > Settings > Search page. Use shortcodes like this: **[search_button "Search availability"]**' ) . '</li>'
699
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Replaced Stripe php library to newest 9.0.0 version.' ) . '</li>'
700
 
701
  . '</ul>' ;
702
  ?>
703
  </div>
704
  <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
 
 
 
 
 
 
705
  <?php echo
706
  '<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
707
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
708
+ . '<li>' . wpbc_recheck_strong_symbols( '**Fix**. Error message in Stripe payment form: "Caught exception: You cannot use line_items.amount, line_items.currency, line_items.name, line_items.description, or line_items.images in this API version."' ) . '</li>'
709
+ . '<li>' . wpbc_recheck_strong_symbols( '**Fix**. Notice: Undefined index: select_booking_form in class-admin-settings-api.php' ) . '</li>'
710
  . '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
711
  . '</ul>'; ?>
712
  </div>
719
  $this->expand_section_end( $section_param_arr );
720
  }
721
 
722
+ function section_9_2(){
723
 
724
+ $section_param_arr = array( 'version_num' => '9.2', 'show_expand' => true );
 
 
725
 
726
  $this->expand_section_start( $section_param_arr );
727
 
728
+
729
+ ?><div class="feature-section one-col">
730
+ <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
731
+ <?php echo '<h4>' .wpbc_recheck_strong_symbols( 'New Booking Listing - modern looking & instant working' ) . '</h4>' ;?>
732
+ <img src="<?php echo $this->asset_path; ?>9.2/booking_listing_text_searching_long.png"
733
  style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
734
  class="wpbc-section-image" />
735
  </div>
736
+ <div class="col col-2 last-feature" style="flex: 1 1 100%;width: 100%;">
737
  <?php echo
 
738
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
739
+ . '<li>' . wpbc_recheck_strong_symbols( '**New modern toolbar** with handy buttons, dropdown lists and other elements that have been redesigned and rearranged in a new smarter way.' ) . '</li>'
740
+ . '<li>' . wpbc_recheck_strong_symbols( '**Refreshed colors** of labels, icons, buttons and other UI elements for modern and clear look.' ) . '</li>'
741
+ . '<li>' . wpbc_recheck_strong_symbols( 'Rearranged content of booking details in unified way for all Booking Calendar versions.' ) . '</li>'
742
+ . '</ul>';
 
743
  ?>
744
  </div>
745
  </div><?php
746
 
747
  $this->show_separator();
748
 
749
+ ?><div class="feature-section two-col">
750
+ <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
751
+ <?php echo
752
+ '<h4>' .wpbc_recheck_strong_symbols( 'Instant working without page reloading' ) . '</h4>' .
 
 
753
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
754
+ . '<li>' . wpbc_recheck_strong_symbols( '**Instant showing booking listing**, using ajax without page reloading when filtering search results. Single page app design.' ) . '</li>'
755
+ . '<li>' . wpbc_recheck_strong_symbols( 'Immediate **searching** of bookings for a **specific keyword**. Reservations are displayed just after entering a specific keyword without other user actions.' ) . '</li>'
756
+ . '<li>' . wpbc_recheck_strong_symbols( '**Highlighting** certain **keywords** in booking details to make it easier to find specific data when entering keywords.' ) . '</li>'
757
+ . '</ul>' ;
758
  ?>
759
+ </div>
760
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
761
+
762
+ <img src="<?php echo $this->asset_path; ?>9.2/screenshot-01_high_res.gif"
763
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
764
+ class="wpbc-section-image" />
765
+ </div>
766
+ </div><?php
767
+
768
+ $this->show_separator();
769
+
770
+ ?><div class="feature-section two-col">
771
+ <div class="col col-1" style="flex: 1 1 75%;width: 100%;">
772
+ <img src="<?php echo $this->asset_path; ?>9.2/booking_listing_dates_filtering.png"
773
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
774
  class="wpbc-section-image" />
775
  </div>
776
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
777
+ <?php echo
778
+ '<h4>' .wpbc_recheck_strong_symbols( 'User Saved Options' ) . '</h4>' .
779
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
780
+ . '<li>' . wpbc_recheck_strong_symbols( '**Saving** any choice of **filter options** (select-boxes and other UI toolbar elements), toolbar selection or user options **personally for each user**. User will see last configured search filter parameters each time, when open admin panel.' ) . '</li>'
781
+ . '<li>' . wpbc_recheck_strong_symbols( '**Keeping** last selected **filter or actions toolbar**, during each time, when user open booking admin panel. No need to define default state of toolbars in the settings.' ) . '</li>'
782
+ . '<li>' . wpbc_recheck_strong_symbols( '**New user options toolbar**, where possible to select "Emails sending" on specific actions or "Show notes" by default (in paid versions).' ) . '</li>'
783
+ . '</ul>';
784
+ ?>
785
+ </div>
786
  </div><?php
787
+
788
+ $this->show_separator();
789
 
790
  ?><div class="feature-section two-col">
791
  <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
792
  <?php echo
793
+ '<h4>' .wpbc_recheck_strong_symbols( 'Print functionality' ) . '</h4>' .
794
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
795
+ . '<li>' . wpbc_recheck_strong_symbols( 'The new **print feature** is available in the **Free version**.' ) . '</li>'
796
+ . '<li>' . wpbc_recheck_strong_symbols( 'New **print layout** displaying the exact content of the booking listing page.' ) . '</li>'
797
+ . '<li>' . wpbc_recheck_strong_symbols( '**Print any selected bookings**. Possibility to print all bookings / selected bookings / specific single booking.' ) . '</li>'
798
 
799
+ . '</ul>' ;
800
  ?>
801
  </div>
802
  <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
803
 
804
+ <img src="<?php echo $this->asset_path; ?>9.2/booking_listing_printing.png"
805
  style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
806
  class="wpbc-section-image" />
807
  </div>
812
 
813
 
814
  ?><div class="feature-section two-col">
815
+ <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
816
  <?php echo
817
  '<h4>' .wpbc_recheck_strong_symbols( 'Other new features' ) . '</h4>' .
818
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
819
+ . '<li>' . wpbc_recheck_strong_symbols( 'Added 2 new filter options **Check in today** and **Check out today** to display bookings on the booking list page' ) . '</li>'
820
+ . '<li>' . wpbc_recheck_strong_symbols( 'Ability to define and **save the locale for each specific booking**. This locale is saved and will exist when the following pages are loaded.' ) . '</li>'
821
+ . '<li>' . wpbc_recheck_strong_symbols( '**Show action** buttons when such actions **can be applied to specific bookings**. You need to select bookings to display additional action buttons like "Confirm" or "Reject", etc...' ) . '</li>'
822
 
823
  . '</ul>' ;
824
  ?>
825
  </div>
826
  <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
827
+ <?php echo
828
+ '<h4>' .wpbc_recheck_strong_symbols( 'CSV Export (paid versions)' ) . '</h4>' .
829
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
830
+ . '<li>' . wpbc_recheck_strong_symbols( '**New**. Ability to enter **field names to skip** from the export.' ) . '</li>'
831
+ . '<li>' . wpbc_recheck_strong_symbols( 'Selection **export of single or all pages** and CSV column separator in pop-up window.' ) . '</li>'
832
+ . '</ul>'; ?>
833
  <?php echo
834
  '<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
835
  '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
836
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Smarter structure of request parameters escaping.' ) . '</li>'
 
837
  . '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
838
  . '</ul>'; ?>
839
  </div>
core/lib/wpdev-booking-class.php CHANGED
@@ -481,7 +481,7 @@ class wpdev_booking {
481
 
482
  $my_partially = '<div class="wpdev_hint_with_text '.$booking_timeslot_day_bg_as_available.'">';
483
 
484
- $my_partially .= '<div class="datepick-inline" style="width:30px !important;border: 0;box-shadow: none;float: left;">';
485
  $my_partially .= '<table class="datepick" style=""><tbody><tr>';
486
  if ( wpbc_is_booking_used_check_in_out_time() ) { //FixIn: 8.9.4.10
487
  $my_partially .= '<td class="datepick-days-cell date_available date_approved timespartly check_in_time check_in_time_date_approved" style="height: 30px !important;">';
@@ -525,28 +525,36 @@ class wpdev_booking {
525
  $bk_otions = parse_calendar_options($bk_otions);
526
  /* options:
527
  [months_num_in_row] => 2
528
- [width] => 284px
 
529
  [cell_height] => 40px
530
  */
531
  $width = $months_num_in_row = $cell_height = '';
532
 
533
  if (!empty($bk_otions)){
534
-
535
- if (isset($bk_otions['months_num_in_row']))
536
- $months_num_in_row = $bk_otions['months_num_in_row'];
537
-
538
- if (isset($bk_otions['width']))
539
- $width = 'width:'.$bk_otions['width'].';';
540
-
541
- if (isset($bk_otions['cell_height']))
542
- $cell_height = $bk_otions['cell_height'];
 
 
 
 
 
 
543
  }
544
 
545
  if (empty($width)){
546
- if (!empty($months_num_in_row))
547
- $width = 'width:'.($months_num_in_row*284).'px;';
548
- else
549
- $width = 'width:'.($cal_count*284).'px;';
 
550
  }
551
 
552
  if (!empty($cell_height))
@@ -678,6 +686,14 @@ class wpdev_booking {
678
  , $cal_count
679
  , $start_month_calendar
680
  );
 
 
 
 
 
 
 
 
681
  // Apply script for the condition days selection, like:
682
  // {select-day condition="season" for="Low season" value="2-5"},{select-day condition="weekday" ...
683
  $start_script_code = apply_bk_filter('wpdev_bk_define_additional_js_options_for_bk_shortcode', $start_script_code, $resource_id, $bk_otions);
481
 
482
  $my_partially = '<div class="wpdev_hint_with_text '.$booking_timeslot_day_bg_as_available.'">';
483
 
484
+ $my_partially .= '<div class="datepick-inline" style="width:30px !important;border: 0;box-shadow: none;float: left;min-width: 30px;padding: 0;">'; //FixIn: 9.3.1.4
485
  $my_partially .= '<table class="datepick" style=""><tbody><tr>';
486
  if ( wpbc_is_booking_used_check_in_out_time() ) { //FixIn: 8.9.4.10
487
  $my_partially .= '<td class="datepick-days-cell date_available date_approved timespartly check_in_time check_in_time_date_approved" style="height: 30px !important;">';
525
  $bk_otions = parse_calendar_options($bk_otions);
526
  /* options:
527
  [months_num_in_row] => 2
528
+ [width] => 284px define: width: 100%; max-width:284px;
529
+ [strong_width] => 284px define: width:284px;
530
  [cell_height] => 40px
531
  */
532
  $width = $months_num_in_row = $cell_height = '';
533
 
534
  if (!empty($bk_otions)){
535
+
536
+ if ( isset( $bk_otions['months_num_in_row'] ) ) {
537
+ $months_num_in_row = $bk_otions['months_num_in_row'];
538
+ }
539
+
540
+ if ( isset( $bk_otions['width'] ) ) {
541
+ $width = 'width:100%;max-width:' . $bk_otions['width'] . ';'; //FixIn: 9.3.1.5
542
+ }
543
+ if ( isset( $bk_otions['strong_width'] ) ) {
544
+ $width .= 'width:' . $bk_otions['strong_width'] . ';'; //FixIn: 9.3.1.6
545
+ }
546
+
547
+ if ( isset( $bk_otions['cell_height'] ) ) {
548
+ $cell_height = $bk_otions['cell_height'];
549
+ }
550
  }
551
 
552
  if (empty($width)){
553
+ if ( ! empty( $months_num_in_row ) ) {
554
+ $width = 'width:100%;max-width:' . ( $months_num_in_row * 284 ) . 'px;'; //FixIn: 9.3.1.5
555
+ } else {
556
+ $width = 'width:100%;max-width:' . ( $cal_count * 284 ) . 'px;'; //FixIn: 9.3.1.5
557
+ }
558
  }
559
 
560
  if (!empty($cell_height))
686
  , $cal_count
687
  , $start_month_calendar
688
  );
689
+
690
+ if ( $my_selected_dates_without_calendar !== '' ) { //FixIn: 9.3.1.1
691
+ // Disable booked time slots, for predefined selected date in the booking form (it's shortcode for booking form, without the calendar)
692
+ $start_script_code .= "<script type='text/javascript'> jQuery(document).ready( function(){ ";
693
+ $start_script_code .= " bkDisableBookedTimeSlots( jQuery( '#date_booking{$resource_id}' ).val(), {$resource_id} ); ";
694
+ $start_script_code .= " }); </script>";
695
+ }
696
+
697
  // Apply script for the condition days selection, like:
698
  // {select-day condition="season" for="Low season" value="2-5"},{select-day condition="weekday" ...
699
  $start_script_code = apply_bk_filter('wpdev_bk_define_additional_js_options_for_bk_shortcode', $start_script_code, $resource_id, $bk_otions);
core/wpbc-activation.php CHANGED
@@ -776,7 +776,7 @@ function wpbc_booking_activate() {
776
  }
777
 
778
  }
779
-
780
 
781
  ////////////////////////////////////////////////////////////////////////////
782
  // Other versions Activation
@@ -962,9 +962,9 @@ $mu_option4delete[]= 'booking_timeslot_picker';
962
  $mu_option4delete[]= 'booking_timeslot_picker_skin';
963
 
964
  $default_options['booking_timeslot_day_bg_as_available'] = ( ( class_exists( 'wpdev_bk_personal' ) ) ? 'Off' : 'On' ); //FixIn: 8.2.1.27
965
- if ( ( $is_demo ) && ( class_exists( 'wpdev_bk_biz_s' ) ) && ( ! class_exists( 'wpdev_bk_biz_m' ) ) ) { //FixIn: 8.3.3.15
966
- $default_options['booking_timeslot_day_bg_as_available'] = 'On'; // Set background as available for timeslots only in Business Small demo
967
- }
968
  $mu_option4delete[]='booking_timeslot_day_bg_as_available';
969
 
970
  $default_options['booking_form_is_using_bs_css'] = 'On';
776
  }
777
 
778
  }
779
+ make_bk_action( 'wpbc_activation_after_db_actions' ); //FixIn: 9.3.1.2
780
 
781
  ////////////////////////////////////////////////////////////////////////////
782
  // Other versions Activation
962
  $mu_option4delete[]= 'booking_timeslot_picker_skin';
963
 
964
  $default_options['booking_timeslot_day_bg_as_available'] = ( ( class_exists( 'wpdev_bk_personal' ) ) ? 'Off' : 'On' ); //FixIn: 8.2.1.27
965
+ //if ( ( $is_demo ) && ( class_exists( 'wpdev_bk_biz_s' ) ) && ( ! class_exists( 'wpdev_bk_biz_m' ) ) ) { //FixIn: 8.3.3.15
966
+ // $default_options['booking_timeslot_day_bg_as_available'] = 'On'; // Set background as available for timeslots only in Business Small demo
967
+ //}
968
  $mu_option4delete[]='booking_timeslot_day_bg_as_available';
969
 
970
  $default_options['booking_form_is_using_bs_css'] = 'On';
core/wpbc-constants.php CHANGED
@@ -26,7 +26,6 @@ if ( ! defined( 'WP_BK_CHECK_OUT_MINUS_DAY_SEARCH' ) ) { define( 'WP_BK_C
26
  ////////////////////////////////////////////////////////////
27
  // SYSTEM CONSTANTS //////////////
28
  ////////////////////////////////////////////////////////////
29
- if ( ! defined( 'WP_BK_MINOR_UPDATE' ) ) { define( 'WP_BK_MINOR_UPDATE', !true ); }
30
  if ( ! defined( 'WP_BK_RESPONSE' ) ) { define( 'WP_BK_RESPONSE', false ); }
31
  if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL', 0 ); } // Set 0 for no filling or 2 for 241 bookings or more for more
32
 
26
  ////////////////////////////////////////////////////////////
27
  // SYSTEM CONSTANTS //////////////
28
  ////////////////////////////////////////////////////////////
 
29
  if ( ! defined( 'WP_BK_RESPONSE' ) ) { define( 'WP_BK_RESPONSE', false ); }
30
  if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL', 0 ); } // Set 0 for no filling or 2 for 241 bookings or more for more
31
 
core/wpbc-include.php CHANGED
@@ -79,9 +79,12 @@ require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-dashboard.php' );
79
 
80
  if ( WPBC_EXIST_NEW_BOOKING_LISTING ) {
81
 
 
82
  require_once( WPBC_PLUGIN_DIR . '/includes/_booking_hash/booking_hash.php' ); //FixIn: 9.2.3.3
83
 
84
  require_once( WPBC_PLUGIN_DIR . '/includes/_feedback/feedback_01.php'); //FixIn: 9.2.3.6
 
 
85
  require_once( WPBC_PLUGIN_DIR . '/includes/_toolbar_ui/toolbar_ui.php' );
86
  require_once( WPBC_PLUGIN_DIR . '/includes/_listing_css_js/listing_ui.php' );
87
  require_once( WPBC_PLUGIN_DIR . '/includes/_pagination/pagination.php' );
@@ -92,7 +95,9 @@ if ( WPBC_EXIST_NEW_BOOKING_LISTING ) {
92
  require_once( WPBC_PLUGIN_DIR . '/includes/page-bookings/bookings__listing.php' );
93
  require_once( WPBC_PLUGIN_DIR . '/includes/page-bookings/bookings__page.php' );
94
 
 
95
  if ( WPBC_EXIST_NEW_AVAILABILITY ) {
 
96
  require_once( WPBC_PLUGIN_DIR . '/includes/page-availability/availability__page.php' );
97
  }
98
  }
79
 
80
  if ( WPBC_EXIST_NEW_BOOKING_LISTING ) {
81
 
82
+ require_once( WPBC_PLUGIN_DIR . '/includes/_request/wpbc_request.php' ); //FixIn: 9.3.1.2 // Class for sanitizing $_REQUEST parameters and saving or getting it from DB
83
  require_once( WPBC_PLUGIN_DIR . '/includes/_booking_hash/booking_hash.php' ); //FixIn: 9.2.3.3
84
 
85
  require_once( WPBC_PLUGIN_DIR . '/includes/_feedback/feedback_01.php'); //FixIn: 9.2.3.6
86
+
87
+ // Booking Listing
88
  require_once( WPBC_PLUGIN_DIR . '/includes/_toolbar_ui/toolbar_ui.php' );
89
  require_once( WPBC_PLUGIN_DIR . '/includes/_listing_css_js/listing_ui.php' );
90
  require_once( WPBC_PLUGIN_DIR . '/includes/_pagination/pagination.php' );
95
  require_once( WPBC_PLUGIN_DIR . '/includes/page-bookings/bookings__listing.php' );
96
  require_once( WPBC_PLUGIN_DIR . '/includes/page-bookings/bookings__page.php' );
97
 
98
+
99
  if ( WPBC_EXIST_NEW_AVAILABILITY ) {
100
+ require_once( WPBC_PLUGIN_DIR . '/includes/page-availability/availability__class.php' );
101
  require_once( WPBC_PLUGIN_DIR . '/includes/page-availability/availability__page.php' );
102
  }
103
  }
css/calendar.css CHANGED
@@ -6,10 +6,30 @@
6
  /* C O N F I G */
7
  /*******************************************************************************/
8
  /* WIDTH: of CALENDARs - its FULL width of Month(s) ROW (its NOT only one month) */
9
- .datepick-inline {
10
- width:100% !important; /* Overrride the width of the calendar, which is set datepicker JS */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  z-index: 10000;
12
  }
 
 
 
13
  /* HEIGHT: of C E L L S */
14
  .datepick-inline .datepick-title-row th,
15
  .datepick-inline .datepick-days-cell{
@@ -71,114 +91,235 @@ div.date-content-bottom{
71
  width:100%;
72
  }
73
  /* SIZE: Set width of calendar with several months */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  .datepick-one-month {
75
- width:100%;
76
- float:left;
77
  }
78
  .cal_month_num_2 .datepick-one-month {
79
- width:50%;
80
- float:left;
81
  }
82
  .cal_month_num_3 .datepick-one-month {
83
- width:33.333333333333333%;
84
- float:left;
85
  }
86
  .cal_month_num_4 .datepick-one-month {
87
- width:25%;
88
- float:left;
89
  }
90
  .cal_month_num_5 .datepick-one-month {
91
- width:20%;
92
- float:left;
93
  }
94
  .cal_month_num_6 .datepick-one-month {
95
- width:16.6666666666666%;
96
- float:left;
97
  }
98
  .cal_month_num_7 .datepick-one-month {
99
- width:14.28571429%;
100
- float:left;
101
  }
102
  .cal_month_num_8 .datepick-one-month {
103
- width:12.5%;
104
- float:left;
105
  }
106
  .cal_month_num_9 .datepick-one-month {
107
- width:11.11111111%;
108
- float:left;
109
  }
110
  .cal_month_num_10 .datepick-one-month {
111
- width:10%;
112
- float:left;
113
  }
114
  .cal_month_num_11 .datepick-one-month {
115
- width:9.0909090909090909%;
116
- float:left;
117
  }
118
  .cal_month_num_12 .datepick-one-month {
119
- width:8.333333333333333%;
120
- float:left;
121
  }
122
 
123
  /* CLASS: for setting specific number of months in a row. Please check more in FAQ.*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  .months_num_in_row_1 .datepick-one-month {
125
- width:100%;
126
- float:left;
127
  }
128
  .months_num_in_row_2 .datepick-one-month {
129
- width:50%;
130
- float:left;
131
  }
132
  .months_num_in_row_3 .datepick-one-month {
133
- width:33.333333333333333%;
134
- float:left;
135
  }
136
  .months_num_in_row_4 .datepick-one-month {
137
- width:25%;
138
- float:left;
139
  }
140
  .months_num_in_row_5 .datepick-one-month {
141
- width:20%;
142
- float:left;
143
  }
144
  .months_num_in_row_6 .datepick-one-month {
145
- width:16.6666666666666%;
146
- float:left;
147
  }
148
 
149
  /* STRUCTURE: Previous & Next month links */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  .datepick-inline .calendar-links{
151
- float: left;
152
- width: 100%;
153
- height: auto;
154
- margin-bottom: -2.4em;
155
- padding: 0.4em 0;
156
- position: relative;
157
- text-decoration: none;
 
 
158
  }
159
- .datepick-inline .calendar-links .datepick-prev{
160
- float: left;
161
- width: 49%;
162
- text-align: left;
163
- padding-left:1%;
164
- z-index:99;
165
- position: relative;
166
- line-height: 1.5em;
 
 
 
167
  }
168
  .datepick-inline .calendar-links .datepick-next{
169
- float: right;
170
  text-align: right;
171
- width: 49%;
172
- padding-right:1%;
173
- z-index:99;
174
- position: relative;
175
- line-height: 1.5em;
176
  }
177
  .datepick-inline .calendar-links .datepick-prev a,
178
  .datepick-inline .calendar-links .datepick-next a{
179
- font-size: 2em;
 
 
 
180
  }
181
 
 
 
 
 
 
 
 
 
182
  /* Week Titles height */
183
  div.datepick-inline .datepick-title-row th{
184
  height: auto !important;
@@ -201,6 +342,8 @@ div.datepick-inline .datepick-title-row th{
201
  text-decoration: none;
202
  cursor: pointer;
203
  box-shadow: none; /* FixIn: 5.4.5.9 */
 
 
204
  }
205
  .datepick-inline .datepick-days-cell.datepick-unselectable, /* Default cursor for the unvailbale dates */
206
  .datepick-inline .datepick-days-cell.datepick-unselectable a,
@@ -213,8 +356,10 @@ div.datepick-inline .datepick-title-row th{
213
  .datepick-inline .datepick-header{
214
  text-align: center;
215
  position: relative;
216
- line-height: 1.71429em;
217
- padding: 0.3em 0;
 
 
218
  }
219
  /* ALIGN: Cells and set standard width */
220
  .datepick-inline .datepick-title-row th,
@@ -643,26 +788,16 @@ div#datepick-div textarea {
643
  .check-in-div, .check-out-div {
644
  display: none !important;
645
  }
646
- /********************************************************************************************/
647
- /* Deprecated !!!! Fix for using OLD check in/out dates style. We do not recommend use it */
648
- /********************************************************************************************
649
- .check-in-div, .check-out-div {
650
- display: block !important;
651
- }
652
- .datepick-days-cell .wpbc-diagonal-el {
653
- display: none !important;
654
- }
655
- .wpbc_change_over_triangle .block_hints .block_check_in_out.check_out_time div.check-out-div, .wpbc_change_over_triangle td.timespartly.check_out_time div.check-out-div {
656
- transform: rotate(-135deg) translate(-6px,10%);
657
- }
658
- .wpbc_change_over_triangle .block_hints .block_check_in_out.check_in_time div.check-in-div, .wpbc_change_over_triangle td.timespartly.check_in_time div.check-in-div {
659
- transform: rotate(45deg) translate(-85%,-10%);
660
- }
661
- /* In calendar skin CSS file, comment this lines:
662
- .datepick-inline td.datepick-days-cell.check_in_time,
663
- .datepick-inline td.datepick-days-cell.check_out_time {
664
- ...
665
- }
666
  */
667
- /* End Deprecated !!!! Fix for using OLD check in/out dates style */
668
- /********************************************************************************************/
 
 
 
 
 
 
 
6
  /* C O N F I G */
7
  /*******************************************************************************/
8
  /* WIDTH: of CALENDARs - its FULL width of Month(s) ROW (its NOT only one month) */
9
+ /*
10
+ .datepick-inline {
11
+ width:100% !important;
12
+ z-index: 10000;
13
+ }
14
+ */
15
+ /* FixIn: 9.3.1.4 */
16
+ .bk_calendar_frame {
17
+ position: relative;
18
+ }
19
+ .datepick-inline {
20
+ display: flex;
21
+ flex-flow: row wrap;
22
+ justify-content: center;
23
+ align-items: center;
24
+ min-width: 221px;
25
+
26
+ width:100% !important; /* Override the width of the calendar, which is set datepicker JS */
27
+ padding: 1px; /* Outer padding in calendar. */
28
  z-index: 10000;
29
  }
30
+ .datepick-inline .datepick-one-month {
31
+ padding: 2px; /* Padding between months. */
32
+ }
33
  /* HEIGHT: of C E L L S */
34
  .datepick-inline .datepick-title-row th,
35
  .datepick-inline .datepick-days-cell{
91
  width:100%;
92
  }
93
  /* SIZE: Set width of calendar with several months */
94
+ /*
95
+ .datepick-one-month {
96
+ width:100%;
97
+ float:left;
98
+ }
99
+ .cal_month_num_2 .datepick-one-month {
100
+ width:50%;
101
+ float:left;
102
+ }
103
+ .cal_month_num_3 .datepick-one-month {
104
+ width:33.333333333333333%;
105
+ float:left;
106
+ }
107
+ .cal_month_num_4 .datepick-one-month {
108
+ width:25%;
109
+ float:left;
110
+ }
111
+ .cal_month_num_5 .datepick-one-month {
112
+ width:20%;
113
+ float:left;
114
+ }
115
+ .cal_month_num_6 .datepick-one-month {
116
+ width:16.6666666666666%;
117
+ float:left;
118
+ }
119
+ .cal_month_num_7 .datepick-one-month {
120
+ width:14.28571429%;
121
+ float:left;
122
+ }
123
+ .cal_month_num_8 .datepick-one-month {
124
+ width:12.5%;
125
+ float:left;
126
+ }
127
+ .cal_month_num_9 .datepick-one-month {
128
+ width:11.11111111%;
129
+ float:left;
130
+ }
131
+ .cal_month_num_10 .datepick-one-month {
132
+ width:10%;
133
+ float:left;
134
+ }
135
+ .cal_month_num_11 .datepick-one-month {
136
+ width:9.0909090909090909%;
137
+ float:left;
138
+ }
139
+ .cal_month_num_12 .datepick-one-month {
140
+ width:8.333333333333333%;
141
+ float:left;
142
+ }
143
+ */
144
  .datepick-one-month {
145
+ flex: 1 1 100%;
146
+ min-width:217px;
147
  }
148
  .cal_month_num_2 .datepick-one-month {
149
+ flex: 1 1 50%;
150
+ min-width:217px;
151
  }
152
  .cal_month_num_3 .datepick-one-month {
153
+ flex: 1 1 33.333333333333333%;
154
+ min-width:217px;
155
  }
156
  .cal_month_num_4 .datepick-one-month {
157
+ flex: 1 1 25%;
158
+ min-width:217px;
159
  }
160
  .cal_month_num_5 .datepick-one-month {
161
+ flex: 1 1 20%;
162
+ min-width:217px;
163
  }
164
  .cal_month_num_6 .datepick-one-month {
165
+ flex: 1 1 16.6666666666666%;
166
+ min-width:217px;
167
  }
168
  .cal_month_num_7 .datepick-one-month {
169
+ flex: 1 1 14.28571429%;
170
+ min-width:217px;
171
  }
172
  .cal_month_num_8 .datepick-one-month {
173
+ flex: 1 1 12.5%;
174
+ min-width:217px;
175
  }
176
  .cal_month_num_9 .datepick-one-month {
177
+ flex: 1 1 11.11111111%;
178
+ min-width:217px;
179
  }
180
  .cal_month_num_10 .datepick-one-month {
181
+ flex: 1 1 10%;
182
+ min-width:217px;
183
  }
184
  .cal_month_num_11 .datepick-one-month {
185
+ flex: 1 1 9.0909090909090909%;
186
+ min-width:217px;
187
  }
188
  .cal_month_num_12 .datepick-one-month {
189
+ flex: 1 1 8.333333333333333%;
190
+ min-width:217px;
191
  }
192
 
193
  /* CLASS: for setting specific number of months in a row. Please check more in FAQ.*/
194
+ /*
195
+ .months_num_in_row_1 .datepick-one-month {
196
+ width:100%;
197
+ float:left;
198
+ }
199
+ .months_num_in_row_2 .datepick-one-month {
200
+ width:50%;
201
+ float:left;
202
+ }
203
+ .months_num_in_row_3 .datepick-one-month {
204
+ width:33.333333333333333%;
205
+ float:left;
206
+ }
207
+ .months_num_in_row_4 .datepick-one-month {
208
+ width:25%;
209
+ float:left;
210
+ }
211
+ .months_num_in_row_5 .datepick-one-month {
212
+ width:20%;
213
+ float:left;
214
+ }
215
+ .months_num_in_row_6 .datepick-one-month {
216
+ width:16.6666666666666%;
217
+ float:left;
218
+ }
219
+ */
220
  .months_num_in_row_1 .datepick-one-month {
221
+ flex: 1 1 100%;
222
+ min-width:217px;
223
  }
224
  .months_num_in_row_2 .datepick-one-month {
225
+ flex: 1 1 50%;
226
+ min-width:217px;
227
  }
228
  .months_num_in_row_3 .datepick-one-month {
229
+ flex: 1 1 33.333333333333333%;
230
+ min-width:217px;
231
  }
232
  .months_num_in_row_4 .datepick-one-month {
233
+ flex: 1 1 25%;
234
+ min-width:217px;
235
  }
236
  .months_num_in_row_5 .datepick-one-month {
237
+ flex: 1 1 20%;
238
+ min-width:217px;
239
  }
240
  .months_num_in_row_6 .datepick-one-month {
241
+ flex: 1 1 16.6666666666666%;
242
+ min-width:217px;
243
  }
244
 
245
  /* STRUCTURE: Previous & Next month links */
246
+ /*
247
+ .datepick-inline .calendar-links{
248
+ float: left;
249
+ width: 100%;
250
+ height: auto;
251
+ margin-bottom: -2.4em;
252
+ padding: 0.4em 0;
253
+ position: relative;
254
+ text-decoration: none;
255
+ }
256
+ .datepick-inline .calendar-links .datepick-prev{
257
+ float: left;
258
+ width: 49%;
259
+ text-align: left;
260
+ padding-left:1%;
261
+ z-index:99;
262
+ position: relative;
263
+ line-height: 1.5em;
264
+ }
265
+ .datepick-inline .calendar-links .datepick-next{
266
+ float: right;
267
+ text-align: right;
268
+ width: 49%;
269
+ padding-right:1%;
270
+ z-index:99;
271
+ position: relative;
272
+ line-height: 1.5em;
273
+ }
274
+ .datepick-inline .calendar-links .datepick-prev a,
275
+ .datepick-inline .calendar-links .datepick-next a{
276
+ font-size: 2em;
277
+ }
278
+ */
279
+ /* FixIn: 9.3.1.4 */
280
  .datepick-inline .calendar-links{
281
+ display:flex;
282
+ flex-flow: row nowrap;
283
+ justify-content: flex-start;
284
+ align-items: center;
285
+
286
+ width:100%;
287
+ height:40px;
288
+
289
+ margin-bottom: -40px;
290
  }
291
+ .datepick-inline .calendar-links .datepick-prev,
292
+ .datepick-inline .calendar-links .datepick-next {
293
+ line-height: 2.8em;
294
+ flex: 1 1 100%;
295
+ margin: 0 4px;
296
+
297
+ line-height: 2em;
298
+ display: flex;
299
+ flex-flow: column nowrap;
300
+ justify-content: flex-end;
301
+ align-items: flex-start;
302
  }
303
  .datepick-inline .calendar-links .datepick-next{
 
304
  text-align: right;
305
+ align-items: flex-end
 
 
 
 
306
  }
307
  .datepick-inline .calendar-links .datepick-prev a,
308
  .datepick-inline .calendar-links .datepick-next a{
309
+ font-size: 2em;
310
+ line-height: 2px;
311
+ position:absolute;
312
+ z-index:9999;
313
  }
314
 
315
+ .datepick-inline .datepick-header {
316
+ line-height: 40px;
317
+ padding: 0;
318
+ }
319
+ .datepick-inline .datepick-header span{
320
+ font-size: 1.15em;
321
+ line-height: 1.2em;
322
+ }
323
  /* Week Titles height */
324
  div.datepick-inline .datepick-title-row th{
325
  height: auto !important;
342
  text-decoration: none;
343
  cursor: pointer;
344
  box-shadow: none; /* FixIn: 5.4.5.9 */
345
+ outline: none; /* FixIn: 9.3.1.4 */
346
+ text-shadow: none; /* FixIn: 9.3.1.4 */
347
  }
348
  .datepick-inline .datepick-days-cell.datepick-unselectable, /* Default cursor for the unvailbale dates */
349
  .datepick-inline .datepick-days-cell.datepick-unselectable a,
356
  .datepick-inline .datepick-header{
357
  text-align: center;
358
  position: relative;
359
+ /* FixIn: 9.3.1.4
360
+ line-height: 1.71429em;
361
+ padding: 0.3em 0;
362
+ */
363
  }
364
  /* ALIGN: Cells and set standard width */
365
  .datepick-inline .datepick-title-row th,
788
  .check-in-div, .check-out-div {
789
  display: none !important;
790
  }
791
+ /** // FixIn:9.3.1.8
792
+ * Fix border width issue in Chrome browser
793
+ * https://stackoverflow.com/questions/71674803/html-tables-has-a-weird-bold-horizontal-line-due-to-border-collapse-property/71703247#71703247
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
794
  */
795
+ div.datepick-inline table.datepick,
796
+ div.datepick-inline table.datepick th,
797
+ div.datepick-inline table.datepick td {
798
+ border-width: 0.01px;
799
+ }
800
+ div.datepick-inline table.datepick {
801
+ border-collapse: collapse;
802
+ border-spacing: 0;
803
+ }
css/client.css CHANGED
@@ -268,10 +268,10 @@ form.booking_form {
268
  /* Error Message FixIn: 8.7.11.10 */
269
  .wpdevelop .alert-danger{
270
  background-image: none;
271
- background-color: #fcfaf4;
272
  border-radius: 0 2px 2px 0;
273
  border-width:1px;
274
- border-left:4px solid #a55;
275
  }
276
  /* Warning Messages */
277
  .wpdev-help-message.alert.alert-warning,
@@ -591,12 +591,12 @@ form.booking_form {
591
  }
592
  @media (max-width: 782px) {
593
  .wpbc_change_over_triangle {
594
- width:90%;
595
  }
596
  .wpbc_form_columns_general .wpbc_form_field_general:nth-child(1),
597
  .wpbc_form_columns_general .wpbc_form_field_general:nth-child(2){
598
  min-width: 100%;
599
- flex: 1 0 auto;
600
  margin-bottom: 2em;
601
  }
602
  }
268
  /* Error Message FixIn: 8.7.11.10 */
269
  .wpdevelop .alert-danger{
270
  background-image: none;
271
+ background-color: #fff;
272
  border-radius: 0 2px 2px 0;
273
  border-width:1px;
274
+ border-left:4px solid #c23b3b;
275
  }
276
  /* Warning Messages */
277
  .wpdev-help-message.alert.alert-warning,
591
  }
592
  @media (max-width: 782px) {
593
  .wpbc_change_over_triangle {
594
+ width:99%;
595
  }
596
  .wpbc_form_columns_general .wpbc_form_field_general:nth-child(1),
597
  .wpbc_form_columns_general .wpbc_form_field_general:nth-child(2){
598
  min-width: 100%;
599
+ flex: 1 1 auto;
600
  margin-bottom: 2em;
601
  }
602
  }
css/skins/black-2.css CHANGED
@@ -16,55 +16,46 @@
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
- color:#ffffff;
20
- background-color:#191919;
21
- text-transform:uppercase;
22
- background:none;
23
- border:none;
24
- box-shadow:none;
25
- -moz-box-shadow:none;
26
- -webkit-box-shadow:none;
27
- border-radius:0;
28
- -moz-border-radius:0;
29
- -webkit-border-radius:0;
30
  }
31
  /* Background of one calendar month */
32
  .datepick-inline .datepick{
33
- background:none repeat scroll 0 0 #191919;
34
- box-shadow:none;
35
  }
36
- .datepick-inline .datepick thead {
37
- background:#191919;
38
- }
39
-
40
  /* Previous & Next links and TITLE BACKGROUND */
41
  .datepick-inline .calendar-links {
42
- border-bottom: 1px solid #aaa;
43
- border-bottom:none;
44
- /*padding:6px 10px 0 20px;*/
45
  }
46
  /* Prev - Next Text */
47
  .datepick-inline .calendar-links .datepick-prev a,
48
  .datepick-inline .calendar-links .datepick-next a,
49
  .datepick-inline .calendar-links .datepick-prev a:hover,
50
  .datepick-inline .calendar-links .datepick-next a:hover{
51
- color: #fff;
52
- font-weight: 600;
53
- text-shadow: none;
54
- /*margin-top:10px*/
55
  }
56
  /* Month Titles */
57
  .datepick-inline .datepick-header {
58
- font-weight: 600;
59
- text-shadow: none;
 
60
 
61
- color:#ffffff;
62
- background-color:#191919;
63
- /*padding-top:10px ;*/
64
- /*padding-bottom:10px;*/
65
- text-transform:uppercase;
66
- border:1px solid #000000;
67
  }
 
 
68
  /* Week Titles */
69
  div.datepick-inline .datepick-title-row th{
70
  font-weight: 600;
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
+ background: #1f1f1f; /* FixIn: 9.3.1.4 */
20
+ border: 1px solid #555;
21
+ box-shadow: 0 0 3px #444;
22
+ -moz-box-shadow: 0 0 3px #444;
23
+ -webkit-box-shadow: 0 0 3px #444;
24
+ border-radius: 0;
25
+ -moz-border-radius: 0;
26
+ -webkit-border-radius: 0;
27
+
28
+ text-transform:uppercase;
 
29
  }
30
  /* Background of one calendar month */
31
  .datepick-inline .datepick{
32
+ background: #191919;
 
33
  }
 
 
 
 
34
  /* Previous & Next links and TITLE BACKGROUND */
35
  .datepick-inline .calendar-links {
36
+ border-bottom:none; /* FixIn: 9.3.1.4 */
37
+ background: transparent;
 
38
  }
39
  /* Prev - Next Text */
40
  .datepick-inline .calendar-links .datepick-prev a,
41
  .datepick-inline .calendar-links .datepick-next a,
42
  .datepick-inline .calendar-links .datepick-prev a:hover,
43
  .datepick-inline .calendar-links .datepick-next a:hover{
44
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
45
+ text-shadow: none;
46
+ font-weight: 600;
 
47
  }
48
  /* Month Titles */
49
  .datepick-inline .datepick-header {
50
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
51
+ font-weight: 600;
52
+ text-shadow: none;
53
 
54
+ background-color:#1f1f1f;
55
+ text-transform:uppercase;
 
 
 
 
56
  }
57
+
58
+
59
  /* Week Titles */
60
  div.datepick-inline .datepick-title-row th{
61
  font-weight: 600;
css/skins/black.css CHANGED
@@ -16,46 +16,38 @@
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
- background: none repeat scroll 0 0 transparent;
20
- border: 0px solid #999999;
21
- box-shadow: 0 0 0px #AAAAAA;
22
- -moz-box-shadow: 0 0 0px #AAAAAA;
23
- -webkit-box-shadow: 0 0 0px #AAAAAA;
24
- border-radius: 2px;
25
- -moz-border-radius: 2px;
26
- -webkit-border-radius: 2px;
27
  }
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
30
- background: none repeat scroll 0 0 #595959;
31
- box-shadow: 0 1px 2px #999999;
32
  }
33
  /* Previous & Next links and TITLE BACKGROUND */
34
  .datepick-inline .calendar-links {
35
- background-color: transparent;
36
- /*background-repeat: repeat-x;
37
- /*background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ddd), to(#aaa)); /* Safari 4-5, Chrome 1-9 */
38
- /*background: -webkit-linear-gradient(top, #aaa, #ddd); /* Safari 5.1, Chrome 10+ */
39
- /*background: -moz-linear-gradient(top, #aaa, #ddd); /* Firefox 3.6+ */
40
- /*background: -ms-linear-gradient(top, #aaa, #ddd); /* IE 10 */
41
- /*background: -o-linear-gradient(top, #aaa, #ddd); /* Opera 11.10+ */
42
-
43
- border-bottom: 1px solid #aaa;
44
  }
45
  /* Prev - Next Text */
46
  .datepick-inline .calendar-links .datepick-prev a,
47
  .datepick-inline .calendar-links .datepick-next a,
48
  .datepick-inline .calendar-links .datepick-prev a:hover,
49
  .datepick-inline .calendar-links .datepick-next a:hover{
50
- color: #595959;
51
- font-weight: 600;
52
- text-shadow: 0 0px 0 #ddd;
53
  }
54
  /* Month Titles */
55
  .datepick-inline .datepick-header {
56
- color: #595959;
57
- font-weight: 600;
58
- text-shadow: 0 0px 0 #DDDDDD;
59
  }
60
  /* Week Titles */
61
  div.datepick-inline .datepick-title-row th{
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
+ background: #f1f0f0; /* FixIn: 9.3.1.4 */
20
+ border: 1px solid #f3f3f3;
21
+ box-shadow: 0 0 1px #101010;
22
+ -moz-box-shadow: 0 0 1px #101010;
23
+ -webkit-box-shadow: 0 0 1px #101010;
24
+ border-radius: 0;
25
+ -moz-border-radius: 0;
26
+ -webkit-border-radius: 0;
27
  }
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
30
+ background: #686868;
 
31
  }
32
  /* Previous & Next links and TITLE BACKGROUND */
33
  .datepick-inline .calendar-links {
34
+ border-bottom:none; /* FixIn: 9.3.1.4 */
35
+ background: transparent;
 
 
 
 
 
 
 
36
  }
37
  /* Prev - Next Text */
38
  .datepick-inline .calendar-links .datepick-prev a,
39
  .datepick-inline .calendar-links .datepick-next a,
40
  .datepick-inline .calendar-links .datepick-prev a:hover,
41
  .datepick-inline .calendar-links .datepick-next a:hover{
42
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
43
+ text-shadow: none;
44
+ font-weight: 600;
45
  }
46
  /* Month Titles */
47
  .datepick-inline .datepick-header {
48
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
49
+ font-weight: 600;
50
+ text-shadow: none;
51
  }
52
  /* Week Titles */
53
  div.datepick-inline .datepick-title-row th{
css/skins/multidays.css CHANGED
@@ -16,45 +16,38 @@
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
- background: none repeat scroll 0 0 #FFFFFF;
20
- border: 0px solid #999999;
21
- box-shadow: 0 0 0px #AAAAAA;
22
- -moz-box-shadow: 0 0 0px #AAAAAA;
23
- -webkit-box-shadow: 0 0 0px #AAAAAA;
24
- border-radius: 0px;
25
- -moz-border-radius: 0px;
26
- -webkit-border-radius: 0px;
27
  }
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
30
- background: none repeat scroll 0 0 #FFFFFF;
31
  }
32
  /* Previous & Next links and TITLE BACKGROUND */
33
  .datepick-inline .calendar-links {
34
- background-color: transparent;
35
- /*background-repeat: repeat-x;
36
- /*background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDDDDD), to(#EEEEFF)); /* Safari 4-5, Chrome 1-9 */
37
- /*background: -webkit-linear-gradient(top, #EEEEFF, #DDDDDD); /* Safari 5.1, Chrome 10+ */
38
- /*background: -moz-linear-gradient(top, #EEEEFF, #DDDDDD); /* Firefox 3.6+ */
39
- /*background: -ms-linear-gradient(top, #EEEEFF, #DDDDDD); /* IE 10 */
40
- /*background: -o-linear-gradient(top, #EEEEFF, #DDDDDD); /* Opera 11.10+ */
41
-
42
- border-bottom: 0px solid #aaa;
43
  }
44
  /* Prev - Next Text */
45
  .datepick-inline .calendar-links .datepick-prev a,
46
  .datepick-inline .calendar-links .datepick-next a,
47
  .datepick-inline .calendar-links .datepick-prev a:hover,
48
  .datepick-inline .calendar-links .datepick-next a:hover{
49
- color: #aaa;
50
- font-weight: 600;
51
- text-shadow: 0 0px 0 #ddd;
52
  }
53
  /* Month Titles */
54
  .datepick-inline .datepick-header {
55
- color: #777;
56
- font-weight: 600;
57
- text-shadow: 0 0px 0 #eee;
58
  }
59
  /* Week Titles */
60
  div.datepick-inline .datepick-title-row th{
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
+ background: #fff; /* FixIn: 9.3.1.4 */
20
+ border: 1px solid #fefefe;
21
+ box-shadow: 0 0 1px #7a7a7a;
22
+ -moz-box-shadow: 0 0 1px #7a7a7a;
23
+ -webkit-box-shadow: 0 0 1px #7a7a7a;
24
+ border-radius: 0;
25
+ -moz-border-radius: 0;
26
+ -webkit-border-radius: 0;
27
  }
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
30
+ background: transparent;
31
  }
32
  /* Previous & Next links and TITLE BACKGROUND */
33
  .datepick-inline .calendar-links {
34
+ border-bottom:none; /* FixIn: 9.3.1.4 */
35
+ background: transparent;
 
 
 
 
 
 
 
36
  }
37
  /* Prev - Next Text */
38
  .datepick-inline .calendar-links .datepick-prev a,
39
  .datepick-inline .calendar-links .datepick-next a,
40
  .datepick-inline .calendar-links .datepick-prev a:hover,
41
  .datepick-inline .calendar-links .datepick-next a:hover{
42
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
43
+ text-shadow: none;
44
+ font-weight: 600;
45
  }
46
  /* Month Titles */
47
  .datepick-inline .datepick-header {
48
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
49
+ font-weight: 600;
50
+ text-shadow: none;
51
  }
52
  /* Week Titles */
53
  div.datepick-inline .datepick-title-row th{
css/skins/premium-black.css CHANGED
@@ -16,53 +16,52 @@
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
- background: none repeat scroll 0 0 #eee;
20
- border: 1px solid #999999;
21
- box-shadow: 0 0 2px #AAAAAA;
22
- -moz-box-shadow: 0 0 2px #AAAAAA;
23
- -webkit-box-shadow: 0 0 2px #AAAAAA;
24
- border-radius: 3px;
25
- -moz-border-radius: 3px;
26
- -webkit-border-radius: 3px;
27
- }
 
 
 
 
 
 
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
30
- background: none repeat scroll 0 0 #595959;
31
  }
32
  /* Previous & Next links and TITLE BACKGROUND */
33
  .datepick-inline .calendar-links {
34
- background-color: #aaa;
35
- background-repeat: repeat-x;
36
- background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ddd), to(#aaa)); /* Safari 4-5, Chrome 1-9 */
37
- background: -webkit-linear-gradient(top, #aaa, #ddd); /* Safari 5.1, Chrome 10+ */
38
- background: -moz-linear-gradient(top, #aaa, #ddd); /* Firefox 3.6+ */
39
- background: -ms-linear-gradient(top, #aaa, #ddd); /* IE 10 */
40
- background: -o-linear-gradient(top, #aaa, #ddd); /* Opera 11.10+ */
41
-
42
- border-bottom: 1px solid #aaa;
43
  }
44
  /* Prev - Next Text */
45
  .datepick-inline .calendar-links .datepick-prev a,
46
  .datepick-inline .calendar-links .datepick-next a,
47
  .datepick-inline .calendar-links .datepick-prev a:hover,
48
  .datepick-inline .calendar-links .datepick-next a:hover{
49
- color: #888;
50
- font-weight: 600;
51
- text-shadow: 0 1px 0 #ddd;
52
  }
53
  /* Month Titles */
54
  .datepick-inline .datepick-header {
55
- color: #555;
56
- font-weight: 600;
57
- text-shadow: 0 1px 0 #DDDDDD;
58
  }
59
  /* Week Titles */
60
  div.datepick-inline .datepick-title-row th{
61
  border: 1px solid #ccc;
62
  font-weight: 600;
63
  text-transform: uppercase;
64
- color: #888888;
65
- text-shadow: 0 -1px 0 #333333;
66
  }
67
  /* Cell border*/
68
  .block_hints .block_free, .block_hints .block_time, .block_hints .block_booked, .block_hints .block_pending, .block_hints .block_check_in_out,
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
+ background: #f8f8f8; /* FixIn: 9.3.1.4 */
20
+ border: 1px solid #fff;
21
+ box-shadow: 0 0 1px #5d5d5d;
22
+ -moz-box-shadow: 0 0 1px #5d5d5d;
23
+ -webkit-box-shadow: 0 0 1px #5d5d5d;
24
+ border-radius: 0;
25
+ -moz-border-radius: 0;
26
+ -webkit-border-radius: 0;
27
+ }
28
+ .datepick-inline {
29
+ padding: 1px;
30
+ }
31
+ .datepick-inline .datepick-one-month {
32
+ padding: 2px;
33
+ }
34
  /* Background of one calendar month */
35
  .datepick-inline .datepick{
36
+ background: #686868;
37
  }
38
  /* Previous & Next links and TITLE BACKGROUND */
39
  .datepick-inline .calendar-links {
40
+ border-bottom:none; /* FixIn: 9.3.1.4 */
41
+ background: transparent;
 
 
 
 
 
 
 
42
  }
43
  /* Prev - Next Text */
44
  .datepick-inline .calendar-links .datepick-prev a,
45
  .datepick-inline .calendar-links .datepick-next a,
46
  .datepick-inline .calendar-links .datepick-prev a:hover,
47
  .datepick-inline .calendar-links .datepick-next a:hover{
48
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
49
+ text-shadow: none;
50
+ font-weight: 600;
51
  }
52
  /* Month Titles */
53
  .datepick-inline .datepick-header {
54
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
55
+ font-weight: 600;
56
+ text-shadow: none;
57
  }
58
  /* Week Titles */
59
  div.datepick-inline .datepick-title-row th{
60
  border: 1px solid #ccc;
61
  font-weight: 600;
62
  text-transform: uppercase;
63
+ color: #b3b3b3;
64
+ text-shadow: none;
65
  }
66
  /* Cell border*/
67
  .block_hints .block_free, .block_hints .block_time, .block_hints .block_booked, .block_hints .block_pending, .block_hints .block_check_in_out,
css/skins/premium-light-noborder.css ADDED
@@ -0,0 +1,258 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*******************************************************************************/
2
+ /* Traditionsl - C O L O R S K I N ****************************/
3
+ /*******************************************************************************/
4
+ /* For better compatibility, please change here only folowing properties: */
5
+ /*
6
+ * background , background-color, background-repeat, background-image, background-repeat, background-position
7
+ * border
8
+ * box-shadow, -moz-box-shadow, -webkit-box-shadow
9
+ * border-radius, -moz-border-radius, -webkit-border-radius
10
+ * color
11
+ * font-weight
12
+ * text-shadow
13
+ * text-transform
14
+ *
15
+ */
16
+ /**********************************************************************************************************************************************************/
17
+
18
+ /* Full Calendar Frame */
19
+ .datepick-inline {
20
+ background: transparent; /* FixIn: 9.3.1.4 */
21
+ border: 0px solid #e4e4e4;
22
+ box-shadow: 0 0 0px #cacaca;
23
+ -moz-box-shadow: 0 0 0px #cacaca;
24
+ -webkit-box-shadow: 0 0 0px #cacaca;
25
+ border-radius: 0;
26
+ -moz-border-radius: 0;
27
+ -webkit-border-radius: 0;
28
+ }
29
+ /* Background of one calendar month */
30
+ .datepick-inline .datepick{
31
+ background: #fff;
32
+ }
33
+ /* Previous & Next links and TITLE BACKGROUND */
34
+ .datepick-inline .calendar-links {
35
+ border-bottom:none; /* FixIn: 9.3.1.4 */
36
+ background: transparent;
37
+ }
38
+ /* Prev - Next Text */
39
+ .datepick-inline .calendar-links .datepick-prev a,
40
+ .datepick-inline .calendar-links .datepick-next a,
41
+ .datepick-inline .calendar-links .datepick-prev a:hover,
42
+ .datepick-inline .calendar-links .datepick-next a:hover{
43
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
44
+ text-shadow: none;
45
+ font-weight: 600;
46
+ }
47
+ /* Month Titles */
48
+ .datepick-inline .datepick-header {
49
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
50
+ font-weight: 600;
51
+ text-shadow: none;
52
+ }
53
+ /* Week Titles */
54
+ div.datepick-inline .datepick-title-row th{
55
+ border: 1px solid #ccc;
56
+ color: #555;
57
+ font-weight: 600;
58
+ text-transform: uppercase;
59
+ }
60
+ /* Cell border*/
61
+ .block_hints .block_free, .block_hints .block_time, .block_hints .block_booked, .block_hints .block_pending, .block_hints .block_check_in_out,
62
+ .datepick-inline .datepick-days-cell{
63
+ border: 1px solid #ccc;
64
+ color:#aaa;
65
+ }
66
+
67
+ /* Dates Cells **********************************************************/
68
+ /*******************************************************************************/
69
+
70
+ /* A V A I L A B L E - BACKGROUND */
71
+ .block_hints .block_free,
72
+ .block_hints .block_time,
73
+ .block_hints .block_check_in_out div.check-in-div, /* Item for the LEGEND */
74
+ .block_hints .block_check_in_out div.check-out-div, /* Item for the LEGEND */
75
+ .datepick-inline .date_available,
76
+ .datepick-inline .timespartly.check_in_time div.check-in-div, /* Define the COLOR fot the check in / out times the same as available*/
77
+ .datepick-inline .timespartly.check_out_time div.check-out-div {
78
+ background: none repeat scroll 0 0 #eee;
79
+ }
80
+ /* A V A I L A B L E and UNSELECTABLE - Text */
81
+ .block_hints .block_free,
82
+ .datepick-inline .date_available,
83
+ .datepick-inline .date_available.datepick-unselectable{
84
+ color: #CCCCCC; /* This style for the uvailbale date, when we are select the dates */
85
+ text-shadow: 0 1px 0 #ddd; /* This style for the uvailbale date, when we are select the dates */
86
+ }
87
+ /* A V A I L A B L E - Text A */
88
+ .block_hints .block_free a,
89
+ .block_hints .block_time,
90
+ .datepick-inline .date_available a {
91
+ color:#707070;
92
+ font-weight: 600;
93
+ text-shadow: 0 1px 0 #eee;
94
+ }
95
+ .datepick-inline .date_available.datepick-unselectable span{ /* //FixIn: 8.9.4.13 */
96
+ text-shadow: none;
97
+ }
98
+ /*******************************************************************************/
99
+
100
+ /* T I M E S L O T S */
101
+ .block_hints .block_time,
102
+ .datepick-inline .timespartly{
103
+ /*background-image: url("../../assets/img/clock_fill.png");*/ /* //FixIn: 8.9.4.13 */
104
+ background-repeat: no-repeat;
105
+ background-position:100% 100%;
106
+ }
107
+ /*******************************************************************************/
108
+
109
+ /* A P P R O V E D - BACKGROUND */
110
+ .block_hints .date_approved.block_check_in_out,
111
+ .block_hints .block_booked,
112
+ .datepick-inline .date_approved,
113
+ /* A P P R O V E D - BACKGROUND for Check In Pending & Check Out Approved || Check Out Pending & Check In Approved Dates //FixIn: 6.0.1.2 */
114
+ td.timespartly.check_in_time.check_out_time.check_in_time_date2approve.check_out_time_date_approved div.check-in-div,
115
+ td.timespartly.check_in_time.check_out_time.check_out_time_date2approve.check_in_time_date_approved div.check-out-div {
116
+ background-color: #D2AA8B;
117
+ }
118
+ /* A P P R O V E D - T E X T /including partially booked - timeslots/ */
119
+ .block_hints .date_approved.block_check_in_out,
120
+ .block_hints .block_booked,
121
+ .datepick-inline .date_approved,
122
+ .block_hints .block_booked a,
123
+ .datepick-inline .date_approved a{
124
+ color: #AA7D77;
125
+ font-weight: 600;
126
+ text-shadow: 0 1px 0 #BBBE87;
127
+ }
128
+ /* CHECK IN and CHECK OUT Borders for the approved cells - the COLOR have to be the SAME as BACKGROUND of this cell*/
129
+ .block_hints .date_approved.block_check_in_out div.check-in-div, /* Item for the LEGEND */
130
+ .datepick-inline .date_approved.timespartly.check_in_time div.check-in-div{
131
+ border-right: 1px dotted #D2AA8B;
132
+ }
133
+ .block_hints .date_approved.block_check_in_out div.check-out-div, /* Item for the LEGEND */
134
+ .datepick-inline .date_approved.timespartly.check_out_time div.check-out-div{
135
+ border-left: 1px dotted #D2AA8B;
136
+ }
137
+ /*******************************************************************************/
138
+
139
+ /* P E N D I N G - BACKGROUND */
140
+ .block_hints .date2approve.block_check_in_out,
141
+ .block_hints .block_pending,
142
+ .datepick-inline .date2approve,
143
+ /* P E N D I N G - BACKGROUND for Check In Approved & Check Out Pending || Check Out Approved & Check In Pending Dates //FixIn: 6.0.1.2 */
144
+ td.timespartly.check_in_time.check_out_time.check_in_time_date_approved.check_out_time_date2approve div.check-in-div,
145
+ td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_in_time_date2approve div.check-out-div {
146
+ background-color: #F5E5BF;
147
+ }
148
+ /* P E N D I N G - T E X T /including partially booked - timeslots/ */
149
+ .block_hints .date2approve.block_check_in_out,
150
+ .block_hints .block_pending,
151
+ .datepick-inline .date2approve,
152
+ .block_hints .block_pending a,
153
+ .datepick-inline .date2approve a {
154
+ color: #DABF8F;
155
+ font-weight: 600;
156
+ text-shadow: 0 1px 0 #EEEEEE;
157
+ }
158
+ /* CHECK IN and CHECK OUT Borders for the approved cells - the COLOR have to be the SAME as BACKGROUND of this cell*/
159
+ .block_hints .date2approve.block_check_in_out div.check-in-div, /* Item for the LEGEND */
160
+ .datepick-inline .date2approve.timespartly.check_in_time div.check-in-div{
161
+ border-right: 1px dotted #F5E5BF;
162
+ }
163
+ .block_hints .date2approve.block_check_in_out div.check-out-div, /* Item for the LEGEND */
164
+ .datepick-inline .date2approve.timespartly.check_out_time div.check-out-div{
165
+ border-left: 1px dotted #F5E5BF;
166
+ }
167
+ /*******************************************************************************/
168
+
169
+ /* S E L E C T E D Dates - Background */
170
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day {
171
+ background-color: #889;
172
+ }
173
+ /* S E L E C T E D Dates - Text color */
174
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day .wpbc_time_dots, /* //FixIn: 8.9.4.13 */
175
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day a{
176
+ color: #EEEEEE;
177
+ text-shadow: 0 -1px 0 #7777AA;
178
+ }
179
+ /*******************************************************************************/
180
+
181
+ /* C e l l O V E R Dates - Background */
182
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock.datepick-days-cell-over,
183
+ .datepick-inline .datepick .datepick-days-cell-over{
184
+ background:#bbc;
185
+ }
186
+ /* C e l l O V E R Dates - Text color */
187
+ .datepick-inline .datepick-one-month .datepick .datepick-days-cell-over .wpbc_time_dots, /* //FixIn: 8.9.4.13 */
188
+ .datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a:hover,
189
+ .datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a{
190
+ color: #eee;
191
+ text-shadow: 0 -1px 0 #888;
192
+ }
193
+ /*******************************************************************************/
194
+ /* FixIn: 6.0.1.2 */
195
+ /* Text style for Check In Approved & Check Out Pending || Check Out Approved & Check In Pending || Check In Pending & Check Out Approved || Check Out Pending & Check In Approved */
196
+ td.timespartly.check_in_time.check_out_time.check_in_time_date_approved.check_out_time_date2approve span,
197
+ td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_in_time_date2approve span,
198
+ td.timespartly.check_in_time.check_out_time.check_in_time_date2approve.check_out_time_date_approved span,
199
+ td.timespartly.check_in_time.check_out_time.check_out_time_date2approve.check_in_time_date_approved span {
200
+ font-weight: 600;
201
+ text-shadow: none;
202
+ }
203
+
204
+ /* Show partially (time-slots) booked days with Background color as for available days ********************************/
205
+ /** //FixIn: 8.2.1.27 Updated 2018-07-04 ****/
206
+ /* Color as in this section A V A I L A B L E - BACKGROUND */
207
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock {
208
+ background-color: #eee;
209
+ }
210
+ /* Same as in this Section above --- A V A I L A B L E - Text A */
211
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock.date_available a {
212
+ color:#707070;
213
+ font-weight: 600;
214
+ text-shadow: 0 1px 0 #eee;
215
+ }
216
+ /* Same as in this Section above --- S E L E C T E D Dates - Text color */
217
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .datepick-one-month .datepick .times_clock.date_available.datepick-current-day a{
218
+ color: #EEEEEE;
219
+ text-shadow: 0 -1px 0 #7777AA;
220
+ }
221
+ /* Same as in this Section above --- A V A I L A B L E and UNSELECTABLE - Text */
222
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .date_available {
223
+ color: #CCCCCC; /* This style for the uvailbale date, when we are select the dates */
224
+ text-shadow: none; /* This style for the unavailable date, when we are select the dates */
225
+ }
226
+ .datepick-inline .date_available span {
227
+ text-shadow: none;
228
+ }
229
+
230
+ /*******************************************************************************/
231
+ /* CHECK IN / OUT as P.O.L.Y.G.O.N.S //FixIn: 8.9.4.13 */
232
+ /*******************************************************************************/
233
+ /* Fill diagonal check in/out items with AVAILABLE background color */
234
+ .wpbc-cell-box .wpbc-diagonal-el svg polygon{
235
+ fill: #eee;
236
+ }
237
+ /* Firstly we define background of the day cells background as available */
238
+ .datepick-inline td.datepick-days-cell.check_in_time,
239
+ .datepick-inline td.datepick-days-cell.check_out_time {
240
+ background-color: #eee;
241
+ }
242
+ /* Pending */
243
+ .datepick-inline td.datepick-days-cell.check_in_time.check_in_time_date2approve .wpbc-cell-box .wpbc-co-in svg polygon, /* Check In */
244
+ .datepick-inline td.datepick-days-cell.check_out_time.check_out_time_date2approve .wpbc-cell-box .wpbc-co-out svg polygon /* Check Out */
245
+ {
246
+ fill: #F5E5BF;
247
+ }
248
+ /* Approved */
249
+ .datepick-inline td.datepick-days-cell.check_in_time.check_in_time_date_approved .wpbc-cell-box .wpbc-co-in svg polygon, /* Check In */
250
+ .datepick-inline td.datepick-days-cell.check_out_time.check_out_time_date_approved .wpbc-cell-box .wpbc-co-out svg polygon /* Check Out */
251
+ {
252
+ fill: #D2AA8B;
253
+ }
254
+ /* C e l l O V E R Dates */
255
+ .datepick-inline td.datepick-days-cell.check_in_time.datepick-days-cell-over,
256
+ .datepick-inline td.datepick-days-cell.check_out_time.datepick-days-cell-over {
257
+ background-color: #bbc;
258
+ }
css/skins/premium-light.css CHANGED
@@ -17,45 +17,38 @@
17
 
18
  /* Full Calendar Frame */
19
  .datepick-inline {
20
- background: transparent;
21
- border: 0px solid #999999;
22
- box-shadow: 0 0 0px #AAAAAA;
23
- -moz-box-shadow: 0 0 0px #AAAAAA;
24
- -webkit-box-shadow: 0 0 0px #AAAAAA;
25
- border-radius: 3px;
26
- -moz-border-radius: 3px;
27
- -webkit-border-radius: 3px;
28
  }
29
  /* Background of one calendar month */
30
  .datepick-inline .datepick{
31
- background: #F9F8F8;
32
  }
33
  /* Previous & Next links and TITLE BACKGROUND */
34
  .datepick-inline .calendar-links {
35
- background-color: transparent;
36
- /*background-repeat: repeat-x;
37
- /*background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ddd), to(#eee)); /* Safari 4-5, Chrome 1-9 */
38
- /*background: -webkit-linear-gradient(top, #ddd, #eee); /* Safari 5.1, Chrome 10+ */
39
- /*background: -moz-linear-gradient(top, #ddd, #eee); /* Firefox 3.6+ */
40
- /*background: -ms-linear-gradient(top, #ddd, #eee); /* IE 10 */
41
- /*background: -o-linear-gradient(top, #ddd, #eee); /* Opera 11.10+ */
42
-
43
- border-bottom: 1px solid #aaa;
44
  }
45
  /* Prev - Next Text */
46
  .datepick-inline .calendar-links .datepick-prev a,
47
  .datepick-inline .calendar-links .datepick-next a,
48
  .datepick-inline .calendar-links .datepick-prev a:hover,
49
  .datepick-inline .calendar-links .datepick-next a:hover{
50
- color: #999;
51
- font-weight: 600;
52
- text-shadow: 0 1px 0 #eee;
53
  }
54
  /* Month Titles */
55
  .datepick-inline .datepick-header {
56
- color: #888;
57
- font-weight: 600;
58
- text-shadow: 0 1px 0 #fff;
59
  }
60
  /* Week Titles */
61
  div.datepick-inline .datepick-title-row th{
17
 
18
  /* Full Calendar Frame */
19
  .datepick-inline {
20
+ background: #fff; /* FixIn: 9.3.1.4 */
21
+ border: 1px solid #e4e4e4;
22
+ box-shadow: 0 0 1px #cacaca;
23
+ -moz-box-shadow: 0 0 1px #cacaca;
24
+ -webkit-box-shadow: 0 0 1px #cacaca;
25
+ border-radius: 0;
26
+ -moz-border-radius: 0;
27
+ -webkit-border-radius: 0;
28
  }
29
  /* Background of one calendar month */
30
  .datepick-inline .datepick{
31
+ background: transparent;
32
  }
33
  /* Previous & Next links and TITLE BACKGROUND */
34
  .datepick-inline .calendar-links {
35
+ border-bottom:none; /* FixIn: 9.3.1.4 */
36
+ background: transparent;
 
 
 
 
 
 
 
37
  }
38
  /* Prev - Next Text */
39
  .datepick-inline .calendar-links .datepick-prev a,
40
  .datepick-inline .calendar-links .datepick-next a,
41
  .datepick-inline .calendar-links .datepick-prev a:hover,
42
  .datepick-inline .calendar-links .datepick-next a:hover{
43
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
44
+ text-shadow: none;
45
+ font-weight: 600;
46
  }
47
  /* Month Titles */
48
  .datepick-inline .datepick-header {
49
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
50
+ font-weight: 600;
51
+ text-shadow: none;
52
  }
53
  /* Week Titles */
54
  div.datepick-inline .datepick-title-row th{
css/skins/premium-marine.css CHANGED
@@ -14,17 +14,16 @@
14
  *
15
  */
16
 
17
-
18
  /* Full Calendar Frame */
19
  .datepick-inline {
20
- background: none repeat scroll 0 0 #FFFFFF;
21
- border: 1px solid #999999;
22
- box-shadow: 0 0 2px #AAAAAA;
23
- -moz-box-shadow: 0 0 2px #AAAAAA;
24
- -webkit-box-shadow: 0 0 2px #AAAAAA;
25
- border-radius: 3px;
26
- -moz-border-radius: 3px;
27
- -webkit-border-radius: 3px;
28
  }
29
  /* Background of one calendar month */
30
  .datepick-inline .datepick{
@@ -32,30 +31,23 @@
32
  }
33
  /* Previous & Next links and TITLE BACKGROUND */
34
  .datepick-inline .calendar-links {
35
- background-color: #CCCCCE;
36
- background-repeat: repeat-x;
37
- background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ccccce), to(#EFEFEF)); /* Safari 4-5, Chrome 1-9 */
38
- background: -webkit-linear-gradient(top, #CCCCCE, #EFEFEF); /* Safari 5.1, Chrome 10+ */
39
- background: -moz-linear-gradient(top, #CCCCCE, #EFEFEF); /* Firefox 3.6+ */
40
- background: -ms-linear-gradient(top, #CCCCCE, #EFEFEF); /* IE 10 */
41
- background: -o-linear-gradient(top, #CCCCCE, #EFEFEF); /* Opera 11.10+ */
42
-
43
- border-bottom: 1px solid #aaa;
44
  }
45
  /* Prev - Next Text */
46
  .datepick-inline .calendar-links .datepick-prev a,
47
  .datepick-inline .calendar-links .datepick-next a,
48
  .datepick-inline .calendar-links .datepick-prev a:hover,
49
  .datepick-inline .calendar-links .datepick-next a:hover{
50
- color: #999;
51
- font-weight: 600;
52
- text-shadow: 0 1px 0 #eee;
53
  }
54
  /* Month Titles */
55
  .datepick-inline .datepick-header {
56
- color: #777;
57
- font-weight: 600;
58
- text-shadow: 0 1px 0 #EEEEEE;
59
  }
60
  /* Week Titles */
61
  div.datepick-inline .datepick-title-row th{
14
  *
15
  */
16
 
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
+ background: #fff; /* FixIn: 9.3.1.4 */
20
+ border: 1px solid #e4e4e4;
21
+ box-shadow: 0 0 1px #cacaca;
22
+ -moz-box-shadow: 0 0 1px #cacaca;
23
+ -webkit-box-shadow: 0 0 1px #cacaca;
24
+ border-radius: 0;
25
+ -moz-border-radius: 0;
26
+ -webkit-border-radius: 0;
27
  }
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
31
  }
32
  /* Previous & Next links and TITLE BACKGROUND */
33
  .datepick-inline .calendar-links {
34
+ border-bottom:none; /* FixIn: 9.3.1.4 */
35
+ background: transparent;
 
 
 
 
 
 
 
36
  }
37
  /* Prev - Next Text */
38
  .datepick-inline .calendar-links .datepick-prev a,
39
  .datepick-inline .calendar-links .datepick-next a,
40
  .datepick-inline .calendar-links .datepick-prev a:hover,
41
  .datepick-inline .calendar-links .datepick-next a:hover{
42
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
43
+ text-shadow: none;
44
+ font-weight: 600;
45
  }
46
  /* Month Titles */
47
  .datepick-inline .datepick-header {
48
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
49
+ font-weight: 600;
50
+ text-shadow: none;
51
  }
52
  /* Week Titles */
53
  div.datepick-inline .datepick-title-row th{
css/skins/premium-steel-noborder.css ADDED
@@ -0,0 +1,258 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*******************************************************************************/
2
+ /* Traditionsl - C O L O R S K I N ****************************/
3
+ /*******************************************************************************/
4
+ /* For better compatibility, please change here only folowing properties: */
5
+ /*
6
+ * background , background-color, background-repeat, background-image, background-repeat, background-position
7
+ * border
8
+ * box-shadow, -moz-box-shadow, -webkit-box-shadow
9
+ * border-radius, -moz-border-radius, -webkit-border-radius
10
+ * color
11
+ * font-weight
12
+ * text-shadow
13
+ * text-transform
14
+ *
15
+ */
16
+ /**********************************************************************************************************************************************************/
17
+
18
+ /* Full Calendar Frame */
19
+ .datepick-inline {
20
+ background: transparent; /* FixIn: 9.3.1.4 */
21
+ border: 0px solid #e4e4e4;
22
+ box-shadow: 0 0 0px #cacaca;
23
+ -moz-box-shadow: 0 0 0px #cacaca;
24
+ -webkit-box-shadow: 0 0 0px #cacaca;
25
+ border-radius: 0;
26
+ -moz-border-radius: 0;
27
+ -webkit-border-radius: 0;
28
+ }
29
+ /* Background of one calendar month */
30
+ .datepick-inline .datepick{
31
+ background: #fff;
32
+ }
33
+ /* Previous & Next links and TITLE BACKGROUND */
34
+ .datepick-inline .calendar-links {
35
+ border-bottom:none; /* FixIn: 9.3.1.4 */
36
+ background: transparent;
37
+ }
38
+ /* Prev - Next Text */
39
+ .datepick-inline .calendar-links .datepick-prev a,
40
+ .datepick-inline .calendar-links .datepick-next a,
41
+ .datepick-inline .calendar-links .datepick-prev a:hover,
42
+ .datepick-inline .calendar-links .datepick-next a:hover{
43
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
44
+ text-shadow: none;
45
+ font-weight: 600;
46
+ }
47
+ /* Month Titles */
48
+ .datepick-inline .datepick-header {
49
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
50
+ font-weight: 600;
51
+ text-shadow: none;
52
+ }
53
+ /* Week Titles */
54
+ div.datepick-inline .datepick-title-row th{
55
+ border: 1px solid #ccc;
56
+ color: #555;
57
+ font-weight: 600;
58
+ text-transform: uppercase;
59
+ }
60
+ /* Cell border*/
61
+ .block_hints .block_free, .block_hints .block_time, .block_hints .block_booked, .block_hints .block_pending, .block_hints .block_check_in_out,
62
+ .datepick-inline .datepick-days-cell{
63
+ border: 1px solid #ccc;
64
+ color:#aaa;
65
+ }
66
+
67
+ /* Dates Cells **********************************************************/
68
+ /*******************************************************************************/
69
+
70
+ /* A V A I L A B L E - BACKGROUND */
71
+ .block_hints .block_free,
72
+ .block_hints .block_time,
73
+ .block_hints .block_check_in_out div.check-in-div, /* Item for the LEGEND */
74
+ .block_hints .block_check_in_out div.check-out-div, /* Item for the LEGEND */
75
+ .datepick-inline .date_available,
76
+ .datepick-inline .timespartly.check_in_time div.check-in-div, /* Define the COLOR fot the check in / out times the same as available*/
77
+ .datepick-inline .timespartly.check_out_time div.check-out-div {
78
+ background: none repeat scroll 0 0 #eee;
79
+ }
80
+ /* A V A I L A B L E and UNSELECTABLE - Text */
81
+ .block_hints .block_free,
82
+ .datepick-inline .date_available,
83
+ .datepick-inline .date_available.datepick-unselectable{
84
+ color: #CCCCCC; /* This style for the uvailbale date, when we are select the dates */
85
+ text-shadow: 0 1px 0 #ddd; /* This style for the uvailbale date, when we are select the dates */
86
+ }
87
+ /* A V A I L A B L E - Text A */
88
+ .block_hints .block_free a,
89
+ .block_hints .block_time,
90
+ .datepick-inline .date_available a {
91
+ color:#707070;
92
+ font-weight: 600;
93
+ text-shadow: 0 1px 0 #eee;
94
+ }
95
+ .datepick-inline .date_available.datepick-unselectable span{ /* //FixIn: 8.9.4.13 */
96
+ text-shadow: none;
97
+ }
98
+ /*******************************************************************************/
99
+
100
+ /* T I M E S L O T S */
101
+ .block_hints .block_time,
102
+ .datepick-inline .timespartly{
103
+ /*background-image: url("../../assets/img/clock_fill.png");*/ /* //FixIn: 8.9.4.13 */
104
+ background-repeat: no-repeat;
105
+ background-position:100% 100%;
106
+ }
107
+ /*******************************************************************************/
108
+
109
+ /* A P P R O V E D - BACKGROUND */
110
+ .block_hints .date_approved.block_check_in_out,
111
+ .block_hints .block_booked,
112
+ .datepick-inline .date_approved,
113
+ /* A P P R O V E D - BACKGROUND for Check In Pending & Check Out Approved || Check Out Pending & Check In Approved Dates //FixIn: 6.0.1.2 */
114
+ td.timespartly.check_in_time.check_out_time.check_in_time_date2approve.check_out_time_date_approved div.check-in-div,
115
+ td.timespartly.check_in_time.check_out_time.check_out_time_date2approve.check_in_time_date_approved div.check-out-div {
116
+ background-color: #9999A0;
117
+ }
118
+ /* A P P R O V E D - T E X T /including partially booked - timeslots/ */
119
+ .block_hints .date_approved.block_check_in_out,
120
+ .block_hints .block_booked,
121
+ .datepick-inline .date_approved,
122
+ .block_hints .block_booked a,
123
+ .datepick-inline .date_approved a{
124
+ color: #777;
125
+ font-weight: 600;
126
+ text-shadow: 0 1px 0 #aaa;
127
+ }
128
+ /* CHECK IN and CHECK OUT Borders for the approved cells - the COLOR have to be the SAME as BACKGROUND of this cell*/
129
+ .block_hints .date_approved.block_check_in_out div.check-in-div, /* Item for the LEGEND */
130
+ .datepick-inline .date_approved.timespartly.check_in_time div.check-in-div{
131
+ border-right: 1px dotted #9999A0;
132
+ }
133
+ .block_hints .date_approved.block_check_in_out div.check-out-div, /* Item for the LEGEND */
134
+ .datepick-inline .date_approved.timespartly.check_out_time div.check-out-div{
135
+ border-left: 1px dotted #9999A0;
136
+ }
137
+ /*******************************************************************************/
138
+
139
+ /* P E N D I N G - BACKGROUND */
140
+ .block_hints .date2approve.block_check_in_out,
141
+ .block_hints .block_pending,
142
+ .datepick-inline .date2approve,
143
+ /* P E N D I N G - BACKGROUND for Check In Approved & Check Out Pending || Check Out Approved & Check In Pending Dates //FixIn: 6.0.1.2 */
144
+ td.timespartly.check_in_time.check_out_time.check_in_time_date_approved.check_out_time_date2approve div.check-in-div,
145
+ td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_in_time_date2approve div.check-out-div {
146
+ background-color: #DDDDE0;
147
+ }
148
+ /* P E N D I N G - T E X T /including partially booked - timeslots/ */
149
+ .block_hints .date2approve.block_check_in_out,
150
+ .block_hints .block_pending,
151
+ .datepick-inline .date2approve,
152
+ .block_hints .block_pending a,
153
+ .datepick-inline .date2approve a {
154
+ color: #999;
155
+ font-weight: 600;
156
+ text-shadow: 0 1px 0 #ddd;
157
+ }
158
+ /* CHECK IN and CHECK OUT Borders for the approved cells - the COLOR have to be the SAME as BACKGROUND of this cell*/
159
+ .block_hints .date2approve.block_check_in_out div.check-in-div, /* Item for the LEGEND */
160
+ .datepick-inline .date2approve.timespartly.check_in_time div.check-in-div{
161
+ border-right: 1px dotted #DDDDE0;
162
+ }
163
+ .block_hints .date2approve.block_check_in_out div.check-out-div, /* Item for the LEGEND */
164
+ .datepick-inline .date2approve.timespartly.check_out_time div.check-out-div{
165
+ border-left: 1px dotted #DDDDE0;
166
+ }
167
+ /*******************************************************************************/
168
+
169
+ /* S E L E C T E D Dates - Background */
170
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day {
171
+ background-color: #88b;
172
+ }
173
+ /* S E L E C T E D Dates - Text color */
174
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day .wpbc_time_dots, /* //FixIn: 8.9.4.13 */
175
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day a{
176
+ color: #EEEEEE;
177
+ text-shadow: 0 -1px 0 #7777AA;
178
+ }
179
+ /*******************************************************************************/
180
+
181
+ /* C e l l O V E R Dates - Background */
182
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock.datepick-days-cell-over,
183
+ .datepick-inline .datepick .datepick-days-cell-over{
184
+ background:#aae;
185
+ }
186
+ /* C e l l O V E R Dates - Text color */
187
+ .datepick-inline .datepick-one-month .datepick .datepick-days-cell-over .wpbc_time_dots, /* //FixIn: 8.9.4.13 */
188
+ .datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a:hover,
189
+ .datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a{
190
+ color: #eee;
191
+ text-shadow: 0 -1px 0 #888;
192
+ }
193
+ /*******************************************************************************/
194
+ /* FixIn: 6.0.1.2 */
195
+ /* Text style for Check In Approved & Check Out Pending || Check Out Approved & Check In Pending || Check In Pending & Check Out Approved || Check Out Pending & Check In Approved */
196
+ td.timespartly.check_in_time.check_out_time.check_in_time_date_approved.check_out_time_date2approve span,
197
+ td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_in_time_date2approve span,
198
+ td.timespartly.check_in_time.check_out_time.check_in_time_date2approve.check_out_time_date_approved span,
199
+ td.timespartly.check_in_time.check_out_time.check_out_time_date2approve.check_in_time_date_approved span {
200
+ font-weight: 600;
201
+ text-shadow: none;
202
+ }
203
+
204
+ /* Show partially (time-slots) booked days with Background color as for available days ********************************/
205
+ /** //FixIn: 8.2.1.27 Updated 2018-07-04 ****/
206
+ /* Color as in this section A V A I L A B L E - BACKGROUND */
207
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock {
208
+ background-color: #eee;
209
+ }
210
+ /* Same as in this Section above --- A V A I L A B L E - Text A */
211
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock.date_available a {
212
+ color:#707070;
213
+ font-weight: 600;
214
+ text-shadow: 0 1px 0 #eee;
215
+ }
216
+ /* Same as in this Section above --- S E L E C T E D Dates - Text color */
217
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .datepick-one-month .datepick .times_clock.date_available.datepick-current-day a{
218
+ color: #EEEEEE;
219
+ text-shadow: 0 -1px 0 #7777AA;
220
+ }
221
+ /* Same as in this Section above --- A V A I L A B L E and UNSELECTABLE - Text */
222
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .date_available {
223
+ color: #CCCCCC; /* This style for the uvailbale date, when we are select the dates */
224
+ text-shadow: none; /* This style for the unavailable date, when we are select the dates */
225
+ }
226
+ .datepick-inline .date_available span {
227
+ text-shadow: none;
228
+ }
229
+
230
+ /*******************************************************************************/
231
+ /* CHECK IN / OUT as P.O.L.Y.G.O.N.S //FixIn: 8.9.4.13 */
232
+ /*******************************************************************************/
233
+ /* Fill diagonal check in/out items with AVAILABLE background color */
234
+ .wpbc-cell-box .wpbc-diagonal-el svg polygon{
235
+ fill: #eee;
236
+ }
237
+ /* Firstly we define background of the day cells background as available */
238
+ .datepick-inline td.datepick-days-cell.check_in_time,
239
+ .datepick-inline td.datepick-days-cell.check_out_time {
240
+ background-color: #eee;
241
+ }
242
+ /* Pending */
243
+ .datepick-inline td.datepick-days-cell.check_in_time.check_in_time_date2approve .wpbc-cell-box .wpbc-co-in svg polygon, /* Check In */
244
+ .datepick-inline td.datepick-days-cell.check_out_time.check_out_time_date2approve .wpbc-cell-box .wpbc-co-out svg polygon /* Check Out */
245
+ {
246
+ fill: #DDDDE0;
247
+ }
248
+ /* Approved */
249
+ .datepick-inline td.datepick-days-cell.check_in_time.check_in_time_date_approved .wpbc-cell-box .wpbc-co-in svg polygon, /* Check In */
250
+ .datepick-inline td.datepick-days-cell.check_out_time.check_out_time_date_approved .wpbc-cell-box .wpbc-co-out svg polygon /* Check Out */
251
+ {
252
+ fill: #9999A0;
253
+ }
254
+ /* C e l l O V E R Dates */
255
+ .datepick-inline td.datepick-days-cell.check_in_time.datepick-days-cell-over,
256
+ .datepick-inline td.datepick-days-cell.check_out_time.datepick-days-cell-over {
257
+ background-color: #aae;
258
+ }
css/skins/premium-steel.css CHANGED
@@ -17,14 +17,14 @@
17
 
18
  /* Full Calendar Frame */
19
  .datepick-inline {
20
- background: none repeat scroll 0 0 #F9F8F8;
21
- border: 1px solid #999999;
22
- box-shadow: 0 0 2px #AAAAAA;
23
- -moz-box-shadow: 0 0 2px #AAAAAA;
24
- -webkit-box-shadow: 0 0 2px #AAAAAA;
25
- border-radius: 3px;
26
- -moz-border-radius: 3px;
27
- -webkit-border-radius: 3px;
28
  }
29
  /* Background of one calendar month */
30
  .datepick-inline .datepick{
@@ -32,30 +32,23 @@
32
  }
33
  /* Previous & Next links and TITLE BACKGROUND */
34
  .datepick-inline .calendar-links {
35
- background-color: #eee;
36
- background-repeat: repeat-x;
37
- background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ddd), to(#eee)); /* Safari 4-5, Chrome 1-9 */
38
- background: -webkit-linear-gradient(top, #ddd, #eee); /* Safari 5.1, Chrome 10+ */
39
- background: -moz-linear-gradient(top, #ddd, #eee); /* Firefox 3.6+ */
40
- background: -ms-linear-gradient(top, #ddd, #eee); /* IE 10 */
41
- background: -o-linear-gradient(top, #ddd, #eee); /* Opera 11.10+ */
42
-
43
- border-bottom: 1px solid #aaa;
44
  }
45
  /* Prev - Next Text */
46
  .datepick-inline .calendar-links .datepick-prev a,
47
  .datepick-inline .calendar-links .datepick-next a,
48
  .datepick-inline .calendar-links .datepick-prev a:hover,
49
  .datepick-inline .calendar-links .datepick-next a:hover{
50
- color: #999;
51
- font-weight: 600;
52
- text-shadow: 0 1px 0 #eee;
53
  }
54
  /* Month Titles */
55
  .datepick-inline .datepick-header {
56
- color: #888;
57
- font-weight: 600;
58
- text-shadow: 0 1px 0 #fff;
59
  }
60
  /* Week Titles */
61
  div.datepick-inline .datepick-title-row th{
17
 
18
  /* Full Calendar Frame */
19
  .datepick-inline {
20
+ background: #fff; /* FixIn: 9.3.1.4 */
21
+ border: 1px solid #e4e4e4;
22
+ box-shadow: 0 0 1px #cacaca;
23
+ -moz-box-shadow: 0 0 1px #cacaca;
24
+ -webkit-box-shadow: 0 0 1px #cacaca;
25
+ border-radius: 0;
26
+ -moz-border-radius: 0;
27
+ -webkit-border-radius: 0;
28
  }
29
  /* Background of one calendar month */
30
  .datepick-inline .datepick{
32
  }
33
  /* Previous & Next links and TITLE BACKGROUND */
34
  .datepick-inline .calendar-links {
35
+ border-bottom:none; /* FixIn: 9.3.1.4 */
36
+ background: transparent;
 
 
 
 
 
 
 
37
  }
38
  /* Prev - Next Text */
39
  .datepick-inline .calendar-links .datepick-prev a,
40
  .datepick-inline .calendar-links .datepick-next a,
41
  .datepick-inline .calendar-links .datepick-prev a:hover,
42
  .datepick-inline .calendar-links .datepick-next a:hover{
43
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
44
+ text-shadow: none;
45
+ font-weight: 600;
46
  }
47
  /* Month Titles */
48
  .datepick-inline .datepick-header {
49
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
50
+ font-weight: 600;
51
+ text-shadow: none;
52
  }
53
  /* Week Titles */
54
  div.datepick-inline .datepick-title-row th{
css/skins/standard.css CHANGED
@@ -16,14 +16,14 @@
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
- background: none repeat scroll 0 0 #FFFFFF;
20
- border: 1px solid #999999;
21
- box-shadow: 0 0 2px #AAAAAA;
22
- -moz-box-shadow: 0 0 2px #AAAAAA;
23
- -webkit-box-shadow: 0 0 2px #AAAAAA;
24
- border-radius: 3px;
25
- -moz-border-radius: 3px;
26
- -webkit-border-radius: 3px;
27
  }
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
@@ -31,30 +31,23 @@
31
  }
32
  /* Previous & Next links and TITLE BACKGROUND */
33
  .datepick-inline .calendar-links {
34
- background-color: #DDDDDD;
35
- background-repeat: repeat-x;
36
- background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDDDDD), to(#EEEEFF)); /* Safari 4-5, Chrome 1-9 */
37
- background: -webkit-linear-gradient(top, #EEEEFF, #DDDDDD); /* Safari 5.1, Chrome 10+ */
38
- background: -moz-linear-gradient(top, #EEEEFF, #DDDDDD); /* Firefox 3.6+ */
39
- background: -ms-linear-gradient(top, #EEEEFF, #DDDDDD); /* IE 10 */
40
- background: -o-linear-gradient(top, #EEEEFF, #DDDDDD); /* Opera 11.10+ */
41
-
42
- border-bottom: 1px solid #aaa;
43
  }
44
  /* Prev - Next Text */
45
  .datepick-inline .calendar-links .datepick-prev a,
46
  .datepick-inline .calendar-links .datepick-next a,
47
  .datepick-inline .calendar-links .datepick-prev a:hover,
48
  .datepick-inline .calendar-links .datepick-next a:hover{
49
- color: #888;
50
- font-weight: 600;
51
- text-shadow: 0 1px 0 #ddd;
52
  }
53
  /* Month Titles */
54
  .datepick-inline .datepick-header {
55
- color: #777;
56
- font-weight: 600;
57
- text-shadow: 0 1px 0 #eee;
58
  }
59
  /* Week Titles */
60
  div.datepick-inline .datepick-title-row th{
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
+ background: #fff; /* FixIn: 9.3.1.4 */
20
+ border: 1px solid #e4e4e4;
21
+ box-shadow: 0 0 1px #cacaca;
22
+ -moz-box-shadow: 0 0 1px #cacaca;
23
+ -webkit-box-shadow: 0 0 1px #cacaca;
24
+ border-radius: 0;
25
+ -moz-border-radius: 0;
26
+ -webkit-border-radius: 0;
27
  }
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
31
  }
32
  /* Previous & Next links and TITLE BACKGROUND */
33
  .datepick-inline .calendar-links {
34
+ border-bottom:none; /* FixIn: 9.3.1.4 */
35
+ background: transparent;
 
 
 
 
 
 
 
36
  }
37
  /* Prev - Next Text */
38
  .datepick-inline .calendar-links .datepick-prev a,
39
  .datepick-inline .calendar-links .datepick-next a,
40
  .datepick-inline .calendar-links .datepick-prev a:hover,
41
  .datepick-inline .calendar-links .datepick-next a:hover{
42
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
43
+ text-shadow: none;
44
+ font-weight: 600;
45
  }
46
  /* Month Titles */
47
  .datepick-inline .datepick-header {
48
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
49
+ font-weight: 600;
50
+ text-shadow: none;
51
  }
52
  /* Week Titles */
53
  div.datepick-inline .datepick-title-row th{
css/skins/traditional-light.css CHANGED
@@ -15,14 +15,14 @@
15
  */
16
  /* Full Calendar Frame */
17
  .datepick-inline {
18
- background: none repeat scroll 0 0 #FFFFFF;
19
- border: 1px solid #fff;
20
- box-shadow: 0 0 2px #444;
21
- -moz-box-shadow: 0 0 2px #444;
22
- -webkit-box-shadow: 0 0 2px #444;
23
- border-radius: 2px;
24
- -moz-border-radius: 2px;
25
- -webkit-border-radius: 2px;
26
  }
27
  /* Background of one calendar month */
28
  .datepick-inline .datepick{
@@ -30,30 +30,23 @@
30
  }
31
  /* Previous & Next links and TITLE BACKGROUND */
32
  .datepick-inline .calendar-links {
33
- background-color: #F5F5F5;
34
- background-repeat: repeat-x;
35
- background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#F5F5F5), to(#FCFCFC)); /* Safari 4-5, Chrome 1-9 */
36
- background: -webkit-linear-gradient(top, #F5F5F5, #FCFCFC); /* Safari 5.1, Chrome 10+ */
37
- background: -moz-linear-gradient(top, #F5F5F5, #FCFCFC); /* Firefox 3.6+ */
38
- background: -ms-linear-gradient(top, #F5F5F5, #FCFCFC); /* IE 10 */
39
- background: -o-linear-gradient(top, #F5F5F5, #FCFCFC); /* Opera 11.10+ */
40
-
41
- border-bottom: 1px solid #aaa;
42
  }
43
  /* Prev - Next Text */
44
  .datepick-inline .calendar-links .datepick-prev a,
45
  .datepick-inline .calendar-links .datepick-next a,
46
  .datepick-inline .calendar-links .datepick-prev a:hover,
47
  .datepick-inline .calendar-links .datepick-next a:hover{
48
- color: #888;
49
- font-weight: 600;
50
- text-shadow: 0 1px 0 #ddd;
51
  }
52
  /* Month Titles */
53
  .datepick-inline .datepick-header {
54
- color: #888;
55
- font-weight: 600;
56
- text-shadow: 0 1px 0 #DDDDDD;
57
  }
58
  /* Week Titles */
59
  div.datepick-inline .datepick-title-row th{
@@ -93,9 +86,9 @@ div.datepick-inline .datepick-title-row th{
93
  .block_hints .block_free a,
94
  .block_hints .block_time,
95
  .datepick-inline .date_available a{
96
- color:#fff;
97
- font-weight: 600;
98
- text-shadow: 0 -1px 0 #555555;
99
  }
100
  .datepick-inline .date_available.datepick-unselectable span{ /* //FixIn: 8.9.4.13 */
101
  text-shadow: none;
@@ -193,7 +186,7 @@ td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_i
193
  .datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a:hover,
194
  .datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a{
195
  color: #eee;
196
- text-shadow: 0 -1px 0 #888;
197
  }
198
  /*******************************************************************************/
199
  /* FixIn: 6.0.1.2 */
15
  */
16
  /* Full Calendar Frame */
17
  .datepick-inline {
18
+ background: #fff; /* FixIn: 9.3.1.4 */
19
+ border: 1px solid #e4e4e4;
20
+ box-shadow: 0 0 1px #cacaca;
21
+ -moz-box-shadow: 0 0 1px #cacaca;
22
+ -webkit-box-shadow: 0 0 1px #cacaca;
23
+ border-radius: 0;
24
+ -moz-border-radius: 0;
25
+ -webkit-border-radius: 0;
26
  }
27
  /* Background of one calendar month */
28
  .datepick-inline .datepick{
30
  }
31
  /* Previous & Next links and TITLE BACKGROUND */
32
  .datepick-inline .calendar-links {
33
+ border-bottom:none; /* FixIn: 9.3.1.4 */
34
+ background: transparent;
 
 
 
 
 
 
 
35
  }
36
  /* Prev - Next Text */
37
  .datepick-inline .calendar-links .datepick-prev a,
38
  .datepick-inline .calendar-links .datepick-next a,
39
  .datepick-inline .calendar-links .datepick-prev a:hover,
40
  .datepick-inline .calendar-links .datepick-next a:hover{
41
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
42
+ text-shadow: none;
43
+ font-weight: 600;
44
  }
45
  /* Month Titles */
46
  .datepick-inline .datepick-header {
47
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
48
+ font-weight: 600;
49
+ text-shadow: none;
50
  }
51
  /* Week Titles */
52
  div.datepick-inline .datepick-title-row th{
86
  .block_hints .block_free a,
87
  .block_hints .block_time,
88
  .datepick-inline .date_available a{
89
+ color: #fff;
90
+ font-weight: 600;
91
+ text-shadow: 0px 0px 1px #43843f;
92
  }
93
  .datepick-inline .date_available.datepick-unselectable span{ /* //FixIn: 8.9.4.13 */
94
  text-shadow: none;
186
  .datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a:hover,
187
  .datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a{
188
  color: #eee;
189
+ /*text-shadow: 0 -1px 0 #888;*/
190
  }
191
  /*******************************************************************************/
192
  /* FixIn: 6.0.1.2 */
css/skins/traditional-times.css ADDED
@@ -0,0 +1,274 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*******************************************************************************/
2
+ /* Traditionsl - C O L O R S K I N ****************************/
3
+ /*******************************************************************************/
4
+ /* For better compatibility, please change here only folowing properties: */
5
+ /*
6
+ * background , background-color, background-repeat, background-image, background-repeat, background-position
7
+ * border
8
+ * box-shadow, -moz-box-shadow, -webkit-box-shadow
9
+ * border-radius, -moz-border-radius, -webkit-border-radius
10
+ * color
11
+ * font-weight
12
+ * text-shadow
13
+ * text-transform
14
+ *
15
+ */
16
+
17
+ /* Full Calendar Frame */
18
+ .datepick-inline {
19
+ background: transparent; /* FixIn: 9.3.1.4 */
20
+ border: 0px solid #e4e4e4;
21
+ box-shadow: 0 0 0px #cacaca;
22
+ -moz-box-shadow: 0 0 0px #cacaca;
23
+ -webkit-box-shadow: 0 0 0px #cacaca;
24
+ border-radius: 0;
25
+ -moz-border-radius: 0;
26
+ -webkit-border-radius: 0;
27
+ }
28
+ /* Background of one calendar month */
29
+ .datepick-inline .datepick{
30
+ background: #fff;
31
+ }
32
+ /* Previous & Next links and TITLE BACKGROUND */
33
+ .datepick-inline .calendar-links {
34
+ border-bottom:none; /* FixIn: 9.3.1.4 */
35
+ background: transparent;
36
+ }
37
+ /* Prev - Next Text */
38
+ .datepick-inline .calendar-links .datepick-prev a,
39
+ .datepick-inline .calendar-links .datepick-next a,
40
+ .datepick-inline .calendar-links .datepick-prev a:hover,
41
+ .datepick-inline .calendar-links .datepick-next a:hover{
42
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
43
+ text-shadow: none;
44
+ font-weight: 600;
45
+ }
46
+ /* Month Titles */
47
+ .datepick-inline .datepick-header {
48
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
49
+ font-weight: 600;
50
+ text-shadow: none;
51
+ }
52
+ /* Week Titles */
53
+ div.datepick-inline .datepick-title-row th{
54
+ border: 1px solid #ccc;
55
+ color: #555;
56
+ font-weight: 600;
57
+ text-transform: uppercase;
58
+ }
59
+ /* Cell border*/
60
+ .block_hints .block_free, .block_hints .block_time, .block_hints .block_booked, .block_hints .block_pending, .block_hints .block_check_in_out,
61
+ .datepick-inline .datepick-days-cell{
62
+ border: 1px solid #ccc;
63
+ color:#757575;
64
+ }
65
+
66
+ /* Dates Cells **********************************************************/
67
+ /*******************************************************************************/
68
+
69
+ /* A V A I L A B L E - BACKGROUND */
70
+ .block_hints .block_free,
71
+ .block_hints .block_time,
72
+ .block_hints .block_check_in_out div.check-in-div, /* Item for the LEGEND */
73
+ .block_hints .block_check_in_out div.check-out-div, /* Item for the LEGEND */
74
+ .datepick-inline .date_available,
75
+ .datepick-inline .timespartly.check_in_time div.check-in-div, /* Define the COLOR fot the check in / out times the same as available*/
76
+ .datepick-inline .timespartly.check_out_time div.check-out-div {
77
+ background: none repeat scroll 0 0 #f5f5f5;
78
+ }
79
+ /* A V A I L A B L E and UNSELECTABLE - Text */
80
+ .block_hints .block_free,
81
+ .datepick-inline .date_available,
82
+ .datepick-inline .date_available.datepick-unselectable{
83
+ color: #CCCCCC; /* This style for the uvailbale date, when we are select the dates */
84
+ text-shadow: 0 1px 0 #FFFFFF; /* This style for the uvailbale date, when we are select the dates */
85
+ }
86
+ /* A V A I L A B L E - Text A */
87
+ .block_hints .block_free a,
88
+ .block_hints .block_time,
89
+ .datepick-inline .date_available a{
90
+ color:#89a;
91
+ font-weight: 600;
92
+ text-shadow: 0 1px 0 #fff;
93
+ }
94
+ .datepick-inline .date_available.datepick-unselectable span{ /* //FixIn: 8.9.4.13 */
95
+ text-shadow: none;
96
+ }
97
+ /*******************************************************************************/
98
+
99
+ /* T I M E S L O T S */
100
+ .block_hints .block_time,
101
+ .datepick-inline .timespartly{
102
+ /*background-image: url("../../assets/img/clock_fill.png");*/ /* //FixIn: 8.9.4.13 */
103
+ background-repeat: no-repeat;
104
+ background-position:100% 100%;
105
+ }
106
+ /*******************************************************************************/
107
+
108
+ /* A P P R O V E D - BACKGROUND */
109
+ .block_hints .date_approved.block_check_in_out,
110
+ .block_hints .block_booked,
111
+ .datepick-inline .date_approved,
112
+ /* A P P R O V E D - BACKGROUND for Check In Pending & Check Out Approved || Check Out Pending & Check In Approved Dates //FixIn: 6.0.1.2 */
113
+ td.timespartly.check_in_time.check_out_time.check_in_time_date2approve.check_out_time_date_approved div.check-in-div,
114
+ td.timespartly.check_in_time.check_out_time.check_out_time_date2approve.check_in_time_date_approved div.check-out-div {
115
+ background-color: #C60B0B;
116
+ }
117
+ /* A P P R O V E D - T E X T /including partially booked - timeslots/ */
118
+ .block_hints .date_approved.block_check_in_out,
119
+ .block_hints .block_booked,
120
+ .datepick-inline .date_approved,
121
+ .block_hints .block_booked a,
122
+ .datepick-inline .date_approved a{
123
+ color: #5F0000;
124
+ font-weight: 600;
125
+ text-shadow: 0 1px 0 #DD0000;
126
+ }
127
+ /* CHECK IN and CHECK OUT Borders for the approved cells - the COLOR have to be the SAME as BACKGROUND of this cell*/
128
+ .block_hints .date_approved.block_check_in_out div.check-in-div, /* Item for the LEGEND */
129
+ .datepick-inline .date_approved.timespartly.check_in_time div.check-in-div{
130
+ border-right: 1px dotted #C60B0B;
131
+ }
132
+ .block_hints .date_approved.block_check_in_out div.check-out-div, /* Item for the LEGEND */
133
+ .datepick-inline .date_approved.timespartly.check_out_time div.check-out-div{
134
+ border-left: 1px dotted #C60B0B;
135
+ }
136
+ /*******************************************************************************/
137
+
138
+ /* P E N D I N G - BACKGROUND */
139
+ .block_hints .date2approve.block_check_in_out,
140
+ .block_hints .block_pending,
141
+ .datepick-inline .date2approve,
142
+ /* P E N D I N G - BACKGROUND for Check In Approved & Check Out Pending || Check Out Approved & Check In Pending Dates //FixIn: 6.0.1.2 */
143
+ td.timespartly.check_in_time.check_out_time.check_in_time_date_approved.check_out_time_date2approve div.check-in-div,
144
+ td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_in_time_date2approve div.check-out-div {
145
+ background-color: #DF9A00;
146
+ }
147
+ /* P E N D I N G - T E X T /including partially booked - timeslots/ */
148
+ .block_hints .date2approve.block_check_in_out,
149
+ .block_hints .block_pending,
150
+ .datepick-inline .date2approve,
151
+ .block_hints .block_pending a,
152
+ .datepick-inline .date2approve a {
153
+ color: #885500;
154
+ font-weight: 600;
155
+ text-shadow: 0 1px 0 #FFAA00;
156
+ }
157
+ /* TIME SLOTs (partially booked) - BACKGROUND */
158
+ .datepick-inline .date2approve.timespartly,
159
+ .datepick-inline .date_approved.timespartly {
160
+ background-color: #C0C60B;
161
+ }
162
+ /* TIME SLOTs (partially booked) - TEXT */
163
+ .datepick-inline .date2approve.timespartly,
164
+ .datepick-inline .date_approved.timespartly,
165
+ .datepick-inline .date2approve.timespartly a,
166
+ .datepick-inline .date_approved.timespartly a{
167
+ color: #93980c;
168
+ font-weight: 600;
169
+ text-shadow: 0 1px 0px #C3C808;
170
+ }
171
+ /* CHECK IN and CHECK OUT Borders for the approved cells - the COLOR have to be the SAME as BACKGROUND of this cell*/
172
+ .block_hints .date2approve.block_check_in_out div.check-in-div, /* Item for the LEGEND */
173
+ .datepick-inline .date2approve.timespartly.check_in_time div.check-in-div{
174
+ border-right: 1px dotted #DF9A00;
175
+ }
176
+ .block_hints .date2approve.block_check_in_out div.check-out-div, /* Item for the LEGEND */
177
+ .datepick-inline .date2approve.timespartly.check_out_time div.check-out-div{
178
+ border-left: 1px dotted #DF9A00;
179
+ }
180
+ /*******************************************************************************/
181
+
182
+ /* S E L E C T E D Dates - Background */
183
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day {
184
+ background-color: #555;
185
+ }
186
+ /* S E L E C T E D Dates - Text color */
187
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day .wpbc_time_dots, /* //FixIn: 8.9.4.13 */
188
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day a{
189
+ color: #EEEEEE;
190
+ text-shadow: 0 -1px 0 #000000;
191
+ }
192
+ /*******************************************************************************/
193
+
194
+ /* C e l l O V E R Dates - Background */
195
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock.datepick-days-cell-over,
196
+ .datepick-inline .datepick .datepick-days-cell-over{
197
+ background:#aaa;
198
+ }
199
+ /* C e l l O V E R Dates - Text color */
200
+ .datepick-inline .datepick-one-month .datepick .datepick-days-cell-over .wpbc_time_dots, /* //FixIn: 8.9.4.13 */
201
+ /*.datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a:hover,*/
202
+ .datepick-inline .datepick-one-month .datepick td.datepick-days-cell-over a {
203
+ color: #eee;
204
+ text-shadow: 0 -1px 0 #888;
205
+ }
206
+ .datepick-inline td.datepick-days-cell-over.date_available a {
207
+ text-shadow: none;
208
+ }
209
+ /*******************************************************************************/
210
+ /* FixIn: 6.0.1.2 */
211
+ /* Text style for Check In Approved & Check Out Pending || Check Out Approved & Check In Pending || Check In Pending & Check Out Approved || Check Out Pending & Check In Approved */
212
+ td.timespartly.check_in_time.check_out_time.check_in_time_date_approved.check_out_time_date2approve span,
213
+ td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_in_time_date2approve span,
214
+ td.timespartly.check_in_time.check_out_time.check_in_time_date2approve.check_out_time_date_approved span,
215
+ td.timespartly.check_in_time.check_out_time.check_out_time_date2approve.check_in_time_date_approved span {
216
+ font-weight: 600;
217
+ text-shadow: none;
218
+ }
219
+
220
+ /* Show partially (time-slots) booked days with Background color as for available days ********************************/
221
+ /** //FixIn: 8.2.1.27 Updated 2018-07-04 ****/
222
+ /* Color as in this section A V A I L A B L E - BACKGROUND */
223
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock {
224
+ background-color: #f5f5f5;
225
+ }
226
+ /* Same as in this Section above --- A V A I L A B L E - Text A */
227
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock.date_available a {
228
+ color:#89a;
229
+ font-weight: 600;
230
+ text-shadow: 0 1px 0 #fff;
231
+ }
232
+ /* Same as in this Section above --- S E L E C T E D Dates - Text color */
233
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .datepick-one-month .datepick .times_clock.date_available.datepick-current-day a{
234
+ color: #EEEEEE;
235
+ text-shadow: 0 -1px 0 #000000;
236
+ }
237
+ /* Same as in this Section above --- A V A I L A B L E and UNSELECTABLE - Text */
238
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .date_available {
239
+ color: #CCCCCC; /* This style for the unavailable date, when we are select the dates */
240
+ text-shadow: none; /* This style for the unavailable date, when we are select the dates */
241
+ }
242
+ .datepick-inline .date_available span {
243
+ text-shadow: none;
244
+ }
245
+
246
+ /*******************************************************************************/
247
+ /* CHECK IN / OUT as P.O.L.Y.G.O.N.S //FixIn: 8.9.4.13 */
248
+ /*******************************************************************************/
249
+ /* Fill diagonal check in/out items with AVAILABLE background color */
250
+ .wpbc-cell-box .wpbc-diagonal-el svg polygon{
251
+ fill: #f5f5f5;
252
+ }
253
+ /* Firstly we define background of the day cells background as available */
254
+ .datepick-inline td.datepick-days-cell.check_in_time,
255
+ .datepick-inline td.datepick-days-cell.check_out_time {
256
+ background-color: #F5F5F5;
257
+ }
258
+ /* Pending */
259
+ .datepick-inline td.datepick-days-cell.check_in_time.check_in_time_date2approve .wpbc-cell-box .wpbc-co-in svg polygon, /* Check In */
260
+ .datepick-inline td.datepick-days-cell.check_out_time.check_out_time_date2approve .wpbc-cell-box .wpbc-co-out svg polygon /* Check Out */
261
+ {
262
+ fill: #DF9A00;
263
+ }
264
+ /* Approved */
265
+ .datepick-inline td.datepick-days-cell.check_in_time.check_in_time_date_approved .wpbc-cell-box .wpbc-co-in svg polygon, /* Check In */
266
+ .datepick-inline td.datepick-days-cell.check_out_time.check_out_time_date_approved .wpbc-cell-box .wpbc-co-out svg polygon /* Check Out */
267
+ {
268
+ fill: #C60B0B;
269
+ }
270
+ /* C e l l O V E R Dates */
271
+ .datepick-inline td.datepick-days-cell.check_in_time.datepick-days-cell-over,
272
+ .datepick-inline td.datepick-days-cell.check_out_time.datepick-days-cell-over {
273
+ background-color: #aaa;
274
+ }
css/skins/traditional.css CHANGED
@@ -16,14 +16,14 @@
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
- background: none repeat scroll 0 0 #FFFFFF;
20
- border: 1px solid #999999;
21
- box-shadow: 0 0 2px #AAAAAA;
22
- -moz-box-shadow: 0 0 2px #AAAAAA;
23
- -webkit-box-shadow: 0 0 2px #AAAAAA;
24
- border-radius: 3px;
25
- -moz-border-radius: 3px;
26
- -webkit-border-radius: 3px;
27
  }
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
@@ -31,30 +31,23 @@
31
  }
32
  /* Previous & Next links and TITLE BACKGROUND */
33
  .datepick-inline .calendar-links {
34
- background-color: #ccc;
35
- background-repeat: repeat-x;
36
- background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ccc), to(#ddd)); /* Safari 4-5, Chrome 1-9 */
37
- background: -webkit-linear-gradient(top, #ddd, #ccc); /* Safari 5.1, Chrome 10+ */
38
- background: -moz-linear-gradient(top, #ddd, #ccc); /* Firefox 3.6+ */
39
- background: -ms-linear-gradient(top, #ddd, #ccc); /* IE 10 */
40
- background: -o-linear-gradient(top, #ddd, #ccc); /* Opera 11.10+ */
41
-
42
- border-bottom: 1px solid #aaa;
43
  }
44
  /* Prev - Next Text */
45
  .datepick-inline .calendar-links .datepick-prev a,
46
  .datepick-inline .calendar-links .datepick-next a,
47
  .datepick-inline .calendar-links .datepick-prev a:hover,
48
  .datepick-inline .calendar-links .datepick-next a:hover{
49
- color: #888;
50
- font-weight: 600;
51
- text-shadow: 0 1px 0 #ddd;
52
  }
53
  /* Month Titles */
54
  .datepick-inline .datepick-header {
55
- color: #555;
56
- font-weight: 600;
57
- text-shadow: 0 1px 0 #DDDDDD;
58
  }
59
  /* Week Titles */
60
  div.datepick-inline .datepick-title-row th{
16
 
17
  /* Full Calendar Frame */
18
  .datepick-inline {
19
+ background: #fff; /* FixIn: 9.3.1.4 */
20
+ border: 1px solid #fff;
21
+ box-shadow: 0 0 1px #707070;
22
+ -moz-box-shadow: 0 0 1px #707070;
23
+ -webkit-box-shadow: 0 0 1px #707070;
24
+ border-radius: 0;
25
+ -moz-border-radius: 0;
26
+ -webkit-border-radius: 0;
27
  }
28
  /* Background of one calendar month */
29
  .datepick-inline .datepick{
31
  }
32
  /* Previous & Next links and TITLE BACKGROUND */
33
  .datepick-inline .calendar-links {
34
+ border-bottom:none; /* FixIn: 9.3.1.4 */
35
+ background: transparent;
 
 
 
 
 
 
 
36
  }
37
  /* Prev - Next Text */
38
  .datepick-inline .calendar-links .datepick-prev a,
39
  .datepick-inline .calendar-links .datepick-next a,
40
  .datepick-inline .calendar-links .datepick-prev a:hover,
41
  .datepick-inline .calendar-links .datepick-next a:hover{
42
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
43
+ text-shadow: none;
44
+ font-weight: 600;
45
  }
46
  /* Month Titles */
47
  .datepick-inline .datepick-header {
48
+ color: #5f5f5f; /* FixIn: 9.3.1.4 */
49
+ font-weight: 600;
50
+ text-shadow: none;
51
  }
52
  /* Week Titles */
53
  div.datepick-inline .datepick-title-row th{
includes/_feedback/feedback_01.php CHANGED
@@ -264,7 +264,7 @@ class WPBC_Feedback_01 {
264
  $js_css_loading = new WPBC_Feedback_01;
265
  $js_css_loading->init_load_css_js();
266
  }
267
-
268
 
269
 
270
  /**
264
  $js_css_loading = new WPBC_Feedback_01;
265
  $js_css_loading->init_load_css_js();
266
  }
267
+ //delete_option( 'booking_feedback_01' );
268
 
269
 
270
  /**
includes/_request/wpbc_request.php ADDED
@@ -0,0 +1,744 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /**
2
+ * @version 1.0
3
+ * @description Universal class for REQUEST params cleaning (sanitizing) and saving such data, relative to current WP user.
4
+ * @category WPBC_AJX__REQUEST Class
5
+ * @author wpdevelop
6
+ *
7
+ * @web-site http://oplugins.com/
8
+ * @email info@oplugins.com
9
+ *
10
+ * @modified 2022-10-29
11
+ */
12
+
13
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly //FixIn: 9.3.1.2
14
+
15
+
16
+ /**
17
+ * Class for sanitizing $_REQUEST parameters and saving or getting it in/from DB
18
+ *
19
+ *
20
+ * Example 1:
21
+ *
22
+ $user_request = new WPBC_AJX__REQUEST( array(
23
+ 'db_option_name' => 'booking_availability_request_params',
24
+ 'user_id' => wpbc_get_current_user_id(),
25
+ 'request_rules_structure' => WPBC_AJX__Availability::request_rules_structure()
26
+ )
27
+ );
28
+ $escaped_request_params_arr = $user_request->get_sanitized__saved__user_request_params(); // Get Saved
29
+
30
+ if ( false === $escaped_request_params_arr ) { // This request was not saved before, then get sanitized direct parameters, like: $_REQUEST['resource_id']
31
+
32
+ $request_prefix = false;
33
+ $escaped_request_params_arr = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // Direct: $_REQUEST['resource_id']
34
+ }
35
+ *
36
+ *
37
+ * Example 2:
38
+ *
39
+ $user_request = new WPBC_AJX__REQUEST( array(
40
+ 'db_option_name' => 'booking_availability_request_params',
41
+ 'user_id' => wpbc_get_current_user_id(),
42
+ 'request_rules_structure' => array(
43
+ 'resource_id' => array( 'validate' => 'digit_or_csd', 'default' => 1 )
44
+ , 'ui_wh_booking_date_checkout' => array( 'validate' => 'digit_or_date', 'default' => '' ) // number | date 2016-07-20
45
+ , 'wh_modification_date' => array( 'validate' => 'array', 'default' => array( '3' ) ) // number | date 2016-07-20
46
+ , 'ui_wh_modification_date_radio' => array( 'validate' => 'd', 'default' => 0 ) // '1' | '2' ....
47
+ , 'keyword' => array( 'validate' => 's', 'default' => '' ) //string
48
+ , 'wh_cost' => array( 'validate' => 'float_or_empty', 'default' => '' ) // '1' | ''
49
+ , 'ui_usr__send_emails' => array( 'validate' => array( 'send', 'not_send' ), 'default' => 'send' )
50
+ )
51
+ ) );
52
+ *
53
+ *
54
+ * OR ******************************************************************************************************************
55
+ * $user_request = new WPBC_AJX__REQUEST();
56
+ *
57
+ * $user_request->set_db_option_name__for_saved_request( 'booking_availability_request_params' );
58
+ *
59
+ * $user_request->set_user_id( wpbc_get_current_user_id() );
60
+ *
61
+ * $user_request->set_default_request_structure( array(
62
+ * 'resource_id' => array( 'validate' => 'digit_or_csd', 'default' => array( '1' ) )
63
+ * ) );
64
+ * OR:
65
+ * $user_request->set_default_request_structure( WPBC_AJX__Availability::get__request_params__names_default() );
66
+ *
67
+ ***********************************************************************************************************************
68
+ *
69
+ * $params_arr = $user_request->get_sanitized__saved__user_request_params(); // Initial Load - get params SAVED in DB - user open page with same view as before
70
+ * OR
71
+ * $params_arr = $user_request->get_sanitized__in_request__value_or_default( false ); // Direct - $_REQUEST['resource_id']
72
+ * OR
73
+ * $params_arr = $user_request->get_sanitized__in_request__value_or_default( 'search_params' ); // In Ajax request - $_REQUEST['search_params']['resource_id']
74
+ *
75
+ *
76
+ ***********************************************************************************************************************
77
+ * Request Rules Structure
78
+ ***********************************************************************************************************************
79
+ *
80
+ array(
81
+ , 'page_num' => array( 'validate' => 'd', 'default' => 1 ) // 1 | 0
82
+ , 'cost' => array( 'validate' => 'f', 'default' => 1.5 ) // 1.5 | 0
83
+ , 'wh_cost' => array( 'validate' => 'float_or_empty', 'default' => '' ) // 1.5 | ''
84
+ , 'wh_num' => array( 'validate' => 'digit_or_empty', 'default' => '' ) // 1 | ''
85
+ , 'keyword' => array( 'validate' => 's', 'default' => '' ) // string
86
+
87
+ , 'wh_booking_date' => array( 'validate' => 'array', 'default' => array( "3" ) ) // Elements of array checked as string
88
+ , 'ui_wh_booking_date' => array( 'validate' => 'date', 'default' => '' ) // Date e.g.: '2022-05-31' or ''
89
+
90
+ // 'digit_or_csd' can check about 'digit_or_csd' in arrays, as well
91
+ , 'wh_booking_type' => array( 'validate' => 'digit_or_csd', 'default' => array( '0' ) ) // Digit or comma separated digit ( e.g.: '12,a,45,9' => '12,0,45,9' ) // if ['0'] - All booking resources, ['-1'] - lost bookings in deleted resources
92
+ , 'ui_wh_booking_date_checkout' => array( 'validate' => 'digit_or_date', 'default' => '' ) // digit or Date e.g.: '2022-05-31' or 5 or ''
93
+
94
+ , 'ui_wh_start' => array( 'validate' => 'checked_skip_it', 'default' => '' ) // Skip from checking
95
+
96
+ , 'ui_usr__is_expand_remarks' => array( 'validate' => array( 'On', 'Off' ), 'default' => 'Off' )
97
+ );
98
+ *
99
+ *
100
+ *
101
+ ***********************************************************************************************************************
102
+ * Otherwise possible to use ' Direct Clean Params '
103
+ ***********************************************************************************************************************
104
+ *
105
+ $request_params_ajx_booking = array(
106
+ 'page_num' => array( 'validate' => 'd', 'default' => 1 )
107
+ , 'page_items_count' => array( 'validate' => 'd', 'default' => 10 )
108
+ , 'sort' => array( 'validate' => array( 'ajx_booking_id' ), 'default' => 'ajx_booking_id' )
109
+ , 'sort_type' => array( 'validate' => array( 'ASC', 'DESC'),'default' => 'DESC' )
110
+ , 'status' => array( 'validate' => 's', 'default' => '' )
111
+ , 'keyword' => array( 'validate' => 's', 'default' => '' )
112
+ , 'ru_create_date' => array( 'validate' => 'date', 'default' => '' )
113
+ );
114
+ $request_params_values = array( // Usually $request_params_values is $_REQUEST
115
+ 'page_num' => 1,
116
+ 'page_items_count' => 3,
117
+ 'sort' => 'ajx_booking_id',
118
+ 'sort_type' => 'DESC',
119
+ 'status' => '',
120
+ 'keyword' => '',
121
+ 'ru_create_date' => ''
122
+ );
123
+ $request_params = wpbc_sanitize_params_in_arr( $request_params_values, $request_params_ajx_booking );
124
+
125
+ */
126
+ class WPBC_AJX__REQUEST {
127
+
128
+ private $db_option_name__for_saved_request;
129
+ private $request_rules_structure;
130
+ private $user_id;
131
+
132
+ public function __construct( $params ) {
133
+ $defaults = array(
134
+ 'db_option_name' => 'general_booking_request_params',
135
+ 'user_id' => wpbc_get_current_user_id(),
136
+ 'request_rules_structure' => array()
137
+ );
138
+ $params = wp_parse_args( $params, $defaults );
139
+
140
+
141
+ if ( ! empty( $params['db_option_name'] ) ) {
142
+ $this->set_db_option_name__for_saved_request( $params['db_option_name'] );
143
+ }
144
+
145
+ if ( ! empty( $params['user_id'] ) ) {
146
+ $this->set_user_id( $params['user_id'] );
147
+ }
148
+
149
+ if ( ! empty( $params['request_rules_structure'] ) ) {
150
+ $this->set_request_rules_structure( $params['request_rules_structure'] );
151
+ }
152
+ }
153
+
154
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
155
+ // Setters
156
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
157
+
158
+ /**
159
+ * Set name of option for saving request parameters into DB
160
+ *
161
+ * @param string $db_option_name
162
+ *
163
+ * @return void
164
+ */
165
+ public function set_db_option_name__for_saved_request( $db_option_name ){
166
+ $this->db_option_name__for_saved_request = $db_option_name;
167
+ }
168
+
169
+ /**
170
+ * Set current active user ID
171
+ *
172
+ * @param int $user_id
173
+ *
174
+ * @return void
175
+ */
176
+ public function set_user_id( $user_id ){
177
+ $this->user_id = $user_id;
178
+ }
179
+
180
+ /**
181
+ * Set request structure for validation and default values
182
+ *
183
+ * @param array $request_rules_structure array(
184
+ * 'resource_id' => array( 'validate' => 'digit_or_csd', 'default' => array( '1' ) )
185
+ * , ...
186
+ * )
187
+ *
188
+ * @return void
189
+ */
190
+ public function set_request_rules_structure( $request_rules_structure ){
191
+ $this->request_rules_structure = $request_rules_structure;
192
+ }
193
+
194
+
195
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
196
+ /// Request Structure
197
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
198
+
199
+ /**
200
+ * Get params names for escaping and/or default value of such params
201
+ *
202
+ * @param string $structure_type 'validate_and_default' (default) | 'validate' | 'default'
203
+ *
204
+ * @return array
205
+ * if $structure_type == '' array ( 'keyword' => array( 'validate' => 's', 'default' => '' )
206
+ * , 'wh_booking_date' => array( 'validate' => 'digit_or_date', 'default' => '3' ), ...
207
+ * if $structure_type == 'validate' array ( 'keyword' => 's'
208
+ * , 'wh_booking_date' => 'digit_or_date'), ...
209
+ * if $structure_type == 'default' array ( 'keyword' => '' )
210
+ * , 'wh_booking_date' => '3' ), ...
211
+ */
212
+ public function get_request_rules_structure( $structure_type = 'validate_and_default' ){
213
+
214
+ $params_for_cleaning = $this->request_rules_structure;
215
+
216
+ if ( 'validate_and_default' == $structure_type ) {
217
+ return $params_for_cleaning;
218
+ }
219
+
220
+ $return_simple_arr = array();
221
+
222
+ foreach ( $params_for_cleaning as $key => $value ) {
223
+ $return_simple_arr[ $key ] = $value[ $structure_type ];
224
+ }
225
+ return $return_simple_arr;
226
+
227
+ }
228
+
229
+
230
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
231
+ // Get user Saved params
232
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
233
+
234
+ /**
235
+ * Get $_REQUEST saved before in DB from user - Sanitized Array
236
+ *
237
+ * @return
238
+ * false - if not saved before
239
+ * OR
240
+ * array(
241
+ * 'page_num' => 1
242
+ * , 'page_items_count' => 100
243
+ * , 'sort' => 'ajx_booking_id'
244
+ * , 'sort_type' => 'DESC'
245
+ * , 'keyword' => ''
246
+ * , 'status' => ''
247
+ * )
248
+ */
249
+ public function get_sanitized__saved__user_request_params() {
250
+
251
+ $request_params_values_arr = $this->user_request_params__db_get(); // - $request_params_values_arr - un-serialized here automatically
252
+
253
+ if ( false !== $request_params_values_arr ) {
254
+
255
+ $request_params_structure = $this->get_request_rules_structure(); /**
256
+ * array( 'page_num' => array( 'validate' => 'd', 'default' => 1 )
257
+ * , 'page_items_count' => array( 'validate' => 'd', 'default' => 10 )
258
+ * , 'sort' => array( 'validate' => array( 'booking_id' ), 'default' => 'booking_id' )
259
+ * , 'sort_type' => array( 'validate' => array( 'ASC', 'DESC'),'default' => 'DESC' )
260
+ * , 'keyword' => array( 'validate' => 's', 'default' => '' )
261
+ * , 'create_date' => array( 'validate' => 'date', 'default' => '' )
262
+ * )
263
+ */
264
+
265
+ $escaped_request_params = wpbc_sanitize_params_in_arr( $request_params_values_arr, $request_params_structure ); // Escaping params here
266
+
267
+ return $escaped_request_params;
268
+
269
+ } else {
270
+ return false;
271
+ }
272
+ }
273
+
274
+
275
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
276
+ // Get sanitized $_REQUEST params | default values
277
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
278
+
279
+ /**
280
+ * Get "sanitized values" from $_REQUEST or "default values", based on rules structure
281
+ *
282
+ * @param string | false $prefix_in_request
283
+ *
284
+ * default FALSE
285
+ *
286
+ * string parameter useful, if request like this (usually in Ajax):
287
+ *
288
+ * $_REQUEST (
289
+ * ['listing_page']['page_num'] => 3
290
+ * ['listing_page']['page_items_count'] => 20
291
+ * ['listing_page']['sort'] => 'booking_id'
292
+ * )
293
+ *
294
+ * then we use this: $this->get_sanitized__in_request__value_or_default( 'listing_page' )
295
+ *
296
+ *
297
+ * @return array
298
+ * Example: array(
299
+ * ['page_num'] => 3
300
+ * ['page_items_count'] => 20
301
+ * ['sort'] => 'booking_id'
302
+ * )
303
+ */
304
+ public function get_sanitized__in_request__value_or_default( $prefix_in_request = false ){
305
+
306
+ $request_rules_structure = $this->get_request_rules_structure();
307
+
308
+ $request_params_values_arr = array();
309
+
310
+ foreach ( $request_rules_structure as $request_key => $clean_type ) {
311
+
312
+ $exist_request_param_value = wpbc_get_direct_value_in_request( $request_key, $prefix_in_request ); // Get direct request values: $_REQUEST['page_num'] => 3
313
+ // if ( $prefix_in_request == 'listing_page' ): $_REQUEST['listing_page']['page_num'] => 3
314
+ if ( false !== $exist_request_param_value ) {
315
+ $request_params_values_arr[ $request_key ] = $exist_request_param_value;
316
+ }
317
+ }
318
+
319
+ $escaped_request_params = wpbc_sanitize_params_in_arr( $request_params_values_arr, $request_rules_structure );
320
+
321
+ return $escaped_request_params;
322
+ }
323
+
324
+
325
+ // <editor-fold defaultstate="collapsed" desc=" D B S A V E / G E T U S E R R E Q U E S T " >
326
+
327
+ /**
328
+ * Save user filter request - saving user filters in toolbar
329
+ *
330
+ * @param array $params_arr
331
+ *
332
+ * @return bool|int
333
+ */
334
+ function user_request_params__db_save( $params_arr ) {
335
+
336
+ return update_user_option( $this->user_id, $this->db_option_name__for_saved_request , $params_arr );
337
+ }
338
+
339
+ /**
340
+ * Delete saved user request - used for resetting user filters in toolbar
341
+ *
342
+ * @return bool
343
+ */
344
+ function user_request_params__db_delete() {
345
+
346
+ return delete_user_option( $this->user_id, $this->db_option_name__for_saved_request );
347
+ }
348
+
349
+ /**
350
+ * Get saved user filter request - params for user filters in toolbar
351
+ *
352
+ * @return false|mixed
353
+ */
354
+ function user_request_params__db_get() {
355
+
356
+ return get_user_option( $this->db_option_name__for_saved_request, $this->user_id );
357
+ }
358
+
359
+ // </editor-fold>
360
+
361
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
362
+ // Get user option - single parameter
363
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
364
+
365
+ /**
366
+ * Get user saved option from Request in Booking Listing
367
+ *
368
+ * @param $user_id int 1
369
+ * @param $option_name string 'ui_usr__send_emails'
370
+ *
371
+ * @return false|mixed
372
+ */
373
+ function user_request_params__get_option( $option_name ){
374
+
375
+ // Get User saved option from request
376
+ $escaped_request_params = $this->get_sanitized__saved__user_request_params();
377
+ if ( ( ! empty( $escaped_request_params ) ) && ( ! empty( $escaped_request_params[ $option_name ] ) ) ) {
378
+ return $escaped_request_params[ $option_name ];
379
+ }
380
+
381
+ // Get default option
382
+ $default_param_values = $this->get_request_rules_structure( 'default' );
383
+ if ( ! empty( $default_param_values[ $option_name ] ) ) {
384
+ return $default_param_values[ $option_name ];
385
+ }
386
+
387
+ // There is no such option
388
+ return false;
389
+ }
390
+
391
+ // Helpers:
392
+ /**
393
+ * Is send emails ? Check DB SAVED user defined option from Options toolbar.
394
+ * @param $user_id int ID of user
395
+ *
396
+ * @return int 1 | 0
397
+ */
398
+ function user_request_option__is_send_emails(){
399
+
400
+ $is_send_emeils = $this->user_request_params__get_option( 'ui_usr__send_emails' );
401
+
402
+ $is_send_emeils = ( 'send' == $is_send_emeils ) ? 1 : 0;
403
+
404
+ return $is_send_emeils;
405
+ }
406
+ }
407
+
408
+
409
+
410
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
411
+ // Request
412
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
413
+
414
+
415
+ /**
416
+ * Get indexed or direct request from REQUEST
417
+ *
418
+ * @param $request_key
419
+ * @param false $prefix_in_request
420
+ *
421
+ * @return false|mixed
422
+ */
423
+ function wpbc_get_direct_value_in_request( $request_key, $prefix_in_request = false ) {
424
+
425
+ /**
426
+ * Get value from 'direct request' - "$_REQUEST['page_num'] => 3"
427
+ * or
428
+ * from 'prefix request' - "$_REQUEST['request_params']['page_num'] => 3"
429
+ */
430
+
431
+ if (
432
+ ( empty( $prefix_in_request ) )
433
+ && ( isset( $_REQUEST[ $request_key ] ) )
434
+ ) {
435
+ return $_REQUEST[ $request_key ];
436
+ }
437
+
438
+ if (
439
+ ( ! empty( $prefix_in_request ) )
440
+ && ( isset( $_REQUEST[ $prefix_in_request ] ) )
441
+ && ( isset( $_REQUEST[ $prefix_in_request ][ $request_key ] ) )
442
+ ) {
443
+ return $_REQUEST[ $prefix_in_request ][ $request_key ];
444
+ }
445
+
446
+ return false;
447
+ }
448
+
449
+
450
+ /**
451
+ * Check specific parameters in ARRAY and return cleaned params or default values
452
+ *
453
+ * @param array $request_params_values_arr = / think like in $_REQUEST parameter /
454
+ * array(
455
+ * 'page_num' => 1,
456
+ * 'page_items_count' => 10,
457
+ * 'sort' => 'rule_id',
458
+ * 'sort_type' => 'DESC',
459
+ * 'status' => '',
460
+ * 'keyword' => '',
461
+ * 'create_date' => ''
462
+ * )
463
+ * @param array $params_rules = array(
464
+ * 'page_num' => array( 'validate' => 'd', 'default' => 1 )
465
+ * , 'page_items_count' => array( 'validate' => 'd', 'default' => 10 )
466
+ * , 'sort' => array( 'validate' => array( 'rule_id' ), 'default' => 'rule_id' )
467
+ * , 'sort_type' => array( 'validate' => array( 'ASC', 'DESC'),'default' => 'DESC' )
468
+ * , 'status' => array( 'validate' => 's', 'default' => '' )
469
+ * , 'keyword' => array( 'validate' => 's', 'default' => '' )
470
+ * , 'create_date' => array( 'validate' => 'date', 'default' => '' )
471
+ * )
472
+ *
473
+ *
474
+ * 'd'; // '1' | ''
475
+ * 's'; // string !!! Clean 'LIKE' string for DB !!!
476
+ * 'digit_or_csd'; // '0' | '1,2,3' | ''
477
+ * 'digit_or_date'; // number | date 2016-07-20
478
+ *
479
+ * 'checked_skip_it' // Skip checking
480
+ * array( '0', 'trash', 'any'); // Elements only listed in array
481
+ *
482
+ *@return array $clean_params = Array (
483
+ * [page_num] => 3
484
+ * [page_items_count] => 20
485
+ * [sort] => booking_id
486
+ * [sort_type] => DESC
487
+ * [keyword] =>
488
+ * [source] =>
489
+ * [create_date] =>
490
+ * )
491
+ *
492
+ *
493
+ Example of Direct Clean Params:
494
+
495
+ $request_params_ajx_booking = array(
496
+ 'page_num' => array( 'validate' => 'd', 'default' => 1 )
497
+ , 'page_items_count' => array( 'validate' => 'd', 'default' => 10 )
498
+ , 'sort' => array( 'validate' => array( 'ajx_booking_id' ), 'default' => 'ajx_booking_id' )
499
+ , 'sort_type' => array( 'validate' => array( 'ASC', 'DESC'),'default' => 'DESC' )
500
+ , 'status' => array( 'validate' => 's', 'default' => '' )
501
+ , 'keyword' => array( 'validate' => 's', 'default' => '' )
502
+ , 'ru_create_date' => array( 'validate' => 'date', 'default' => '' )
503
+ );
504
+ $request_params_values = array( // Usually $request_params_values is $_REQUEST
505
+ 'page_num' => 1,
506
+ 'page_items_count' => 3,
507
+ 'sort' => 'ajx_booking_id',
508
+ 'sort_type' => 'DESC',
509
+ 'status' => '',
510
+ 'keyword' => '',
511
+ 'ru_create_date' => ''
512
+ );
513
+ $request_params = wpbc_sanitize_params_in_arr( $request_params_values, $request_params_ajx_booking );
514
+ */
515
+ function wpbc_sanitize_params_in_arr( $request_params_values_arr, $params_rules ){
516
+
517
+ $clean_params = array();
518
+
519
+ foreach ( $params_rules as $request_key_name => $clean_type ) {
520
+
521
+ if ( isset( $request_params_values_arr[ $request_key_name ] ) ) {
522
+ $request_value_check = $request_params_values_arr[ $request_key_name ];
523
+ } else {
524
+ $request_value_check = false;
525
+ }
526
+
527
+ // If not defined in VALUES (think like in $_REQUEST parameter), then get default value
528
+ if ( false === $request_value_check ) {
529
+
530
+ // D E F A U L T
531
+ $clean_params[ $request_key_name ] = $params_rules[ $request_key_name ]['default'];
532
+
533
+ } else {
534
+
535
+ // C L E A N I N G
536
+ $clean_type = $params_rules[ $request_key_name ]['validate'];
537
+
538
+ // Check only values from this Array
539
+ if ( is_array( $clean_type ) ) {
540
+
541
+ $clean_type = array_map( 'strtolower', $clean_type );
542
+
543
+ if ( ( isset( $request_value_check ) ) && ( ! in_array( strtolower( $request_value_check ), $clean_type ) ) ) {
544
+ $clean_type = 'checked_skip_it';
545
+ $request_value_check = $params_rules[ $request_key_name ]['default']; // Reset it, if value not in array And get default value
546
+ } else {
547
+ $clean_type = 'checked_skip_it';
548
+ }
549
+ }
550
+
551
+ switch ( $clean_type ) {
552
+
553
+ case 'checked_skip_it':
554
+ $clean_params[ $request_key_name ] = $request_value_check;
555
+ break;
556
+
557
+ case 'date': // Date
558
+ $clean_params[ $request_key_name ] = wpbc_sanitize_date( $request_value_check );
559
+ break;
560
+
561
+ case 'digit_or_date': // digit or Date
562
+ $clean_params[ $request_key_name ] = wpbc_sanitize_digit_or_date( $request_value_check );
563
+ break;
564
+
565
+ case 'digit_or_csd': // digit or comma separated digit
566
+ $clean_params[ $request_key_name ] = wpbc_sanitize_digit_or_csd( $request_value_check );
567
+ break;
568
+
569
+ case 's': // string
570
+ $clean_params[ $request_key_name ] = wpbc_sanitize_text( $request_value_check );
571
+ break;
572
+
573
+ case 'array':
574
+ if ( is_array( $request_value_check ) ) {
575
+ foreach ( $request_value_check as $check_arr_index => $check_arr_value ) {
576
+ $request_value_check[ $check_arr_index ] = wpbc_sanitize_text( $check_arr_value ); // Check each option as string
577
+ }
578
+ $clean_params[ $request_key_name ] = $request_value_check;
579
+
580
+ } else {
581
+ $clean_params[ $request_key_name ] = $params_rules[ $request_key_name ]['default'];
582
+ }
583
+ break;
584
+
585
+ case 'digit_or_empty': // digit or ''
586
+ if ( '' === $request_value_check) {
587
+ $clean_params[ $request_key_name ] = '';
588
+ } else {
589
+ $clean_params[ $request_key_name ] = intval( $request_value_check );
590
+ }
591
+ break;
592
+
593
+ case 'float_or_empty': // digit or ''
594
+ if ( '' === $request_value_check) {
595
+ $clean_params[ $request_key_name ] = '';
596
+ } else {
597
+
598
+ // In case if was entered 10,99 instead of 10.99
599
+ $request_value_check = str_replace( ',', '.', $request_value_check );
600
+
601
+ $clean_params[ $request_key_name ] = floatval( $request_value_check );
602
+ }
603
+ break;
604
+
605
+ case 'f': // float
606
+ $clean_params[ $request_key_name ] = floatval( $request_value_check );
607
+ break;
608
+
609
+ case 'd': // digit
610
+ $clean_params[ $request_key_name ] = intval( $request_value_check );
611
+ break;
612
+
613
+ default:
614
+ $clean_params[ $request_key_name ] = intval( $request_value_check );
615
+ break;
616
+ }
617
+ }
618
+ }
619
+ return $clean_params;
620
+ }
621
+
622
+
623
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
624
+ // Sanitize functions
625
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
626
+
627
+ /**
628
+ * Check parameter if it number or comma separated list of numbers
629
+ *
630
+ * @param string | array $value
631
+ *
632
+ * @return string
633
+ *
634
+ * Example:
635
+ * wpbc_esc_clean_digit_or_csd( '12,a,45,9' ) => '12,0,45,9'
636
+ * or
637
+ * wpbc_esc_clean_digit_or_csd( '10a' ) => '10
638
+ * or
639
+ * wpbc_esc_clean_digit_or_csd( array( '12,a,45,9', '10a' ) ) => array ( '12,0,45,9', '10' )
640
+ *@global type $wpdb
641
+ */
642
+ function wpbc_sanitize_digit_or_csd( $value ) { //FixIn:6.2.1.4
643
+
644
+ if ( $value === '' ) {
645
+ return $value;
646
+ }
647
+
648
+ if ( is_array( $value ) ) {
649
+ foreach ( $value as $key => $check_value ) {
650
+ $value[ $key ] = wpbc_sanitize_digit_or_csd( $check_value );
651
+ }
652
+
653
+ return $value;
654
+ }
655
+
656
+ $value = str_replace( ';', ',', $value );
657
+ $array_of_nums = explode( ',', $value );
658
+
659
+
660
+ $result = array();
661
+ foreach ( $array_of_nums as $check_element ) {
662
+ $result[] = intval( $check_element );
663
+ }
664
+ $result = implode( ',', $result );
665
+
666
+ return $result;
667
+ }
668
+
669
+
670
+ /**
671
+ * Check about Valid date or number, like 2016-07-20 and return this date or number
672
+ *
673
+ * @param string $value
674
+ *
675
+ * @return string|digit '2022-05-31' or 5 or ''
676
+ */
677
+ function wpbc_sanitize_digit_or_date( $value ) { //FixIn:6.2.1.4
678
+
679
+ if ( $value === '' ) return $value;
680
+
681
+ if ( preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $value ) ) {
682
+
683
+ return $value; // Date is valid in format: 2016-07-20
684
+ } else {
685
+ return intval( $value );
686
+ }
687
+
688
+ }
689
+
690
+
691
+ /**
692
+ * Check about Valid date, like 2016-07-20 and return this date or ''
693
+ *
694
+ * @param string $value
695
+ *
696
+ * @return string '2022-05-31' or ''
697
+ */
698
+ function wpbc_sanitize_date( $value ) { //FixIn:6.2.1.4
699
+
700
+ if ( $value === '' ) return $value;
701
+
702
+ if ( preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $value ) ) {
703
+
704
+ return $value; // Date is valid in format: 2016-07-20
705
+ } else {
706
+ return '';
707
+ }
708
+
709
+ }
710
+
711
+
712
+ /**
713
+ * Escape string from SQL for the HTML form field
714
+ *
715
+ * @param string $value
716
+ *
717
+ * @return string
718
+ *
719
+ * Used: esc_sql function.
720
+ *
721
+ * https://codex.wordpress.org/Function_Reference/esc_sql
722
+ * Note: Be careful to use this function correctly. It will only escape values to be used in strings in the query.
723
+ * That is, it only provides escaping for values that will be within quotes in the SQL (as in field = '{$escaped_value}').
724
+ * If your value is not going to be within quotes, your code will still be vulnerable to SQL injection.
725
+ * For example, this is vulnerable, because the escaped value is not surrounded by quotes in the SQL query:
726
+ * ORDER BY {$escaped_value}. As such, this function does not escape unquoted numeric values, field names, or SQL keywords.
727
+ *
728
+ */
729
+ function wpbc_sanitize_text( $value ){
730
+
731
+ $value_trimmed = trim( stripslashes( $value ) ); // \' becomes ' and so on
732
+
733
+ $esc_sql_value = sanitize_textarea_field( $value_trimmed ); // preserves new lines (\n) and other whitespace
734
+ //$esc_sql_value = sanitize_text_field( $value_trimmed ); // remove new lines (\n) and other whitespace
735
+
736
+
737
+ //global $wpdb;
738
+ //$value = trim( $wpdb->prepare( "'%s'", $esc_sql_value ) , "'" );
739
+ //$esc_sql_value = trim( stripslashes( $esc_sql_value ) );
740
+
741
+ return $esc_sql_value;
742
+
743
+ }
744
+
includes/page-availability/_out/availability_calendar.css ADDED
File without changes
includes/page-availability/_out/availability_calendar.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ "use strict";
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXSwiZmlsZSI6ImluY2x1ZGVzL3BhZ2UtYXZhaWxhYmlsaXR5L19vdXQvYXZhaWxhYmlsaXR5X2NhbGVuZGFyLmpzIn0=
includes/page-availability/_out/availability_calendar.min.css ADDED
@@ -0,0 +1,2 @@
 
 
1
+
2
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbmNsdWRlcy9wYWdlLWF2YWlsYWJpbGl0eS9fb3V0L2F2YWlsYWJpbGl0eV9jYWxlbmRhci5taW4uY3NzIiwic291cmNlc0NvbnRlbnQiOltdfQ== */
includes/page-availability/_src/availability_calendar.css ADDED
File without changes
includes/page-availability/_src/availability_calendar.js ADDED
File without changes
includes/page-availability/availability__class.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /**
2
+ * @version 1.0
3
+ * @description WPBC_AJX__Availability
4
+ * @category WPBC_AJX__Availability Class
5
+ * @author wpdevelop
6
+ *
7
+ * @web-site http://oplugins.com/
8
+ * @email info@oplugins.com
9
+ *
10
+ * @modified 2022-10-24
11
+ */
12
+
13
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
14
+
15
+
16
+ class WPBC_AJX__Availability {
17
+
18
+ // <editor-fold defaultstate="collapsed" desc=" /// JS | CSS files | Tpl loading /// " >
19
+
20
+ /**
21
+ * Define HOOKs for loading CSS and JavaScript files
22
+ */
23
+ public function init_load_css_js_tpl() {
24
+
25
+ // Load only at specific Page
26
+ if ( strpos( $_SERVER['REQUEST_URI'], 'page=wpbc-availability' ) !== false ) {
27
+
28
+ add_action( 'wpbc_enqueue_js_files', array( $this, 'js_load_files' ), 50 );
29
+ add_action( 'wpbc_enqueue_css_files', array( $this, 'enqueue_css_files' ), 50 );
30
+
31
+ //add_action( 'wpbc_hook_settings_page_footer', array( $this, 'hook__page_footer_tmpl' ) );
32
+ }
33
+ }
34
+
35
+
36
+ /** JS */
37
+ public function js_load_files( $where_to_load ) {
38
+
39
+ $in_footer = true;
40
+
41
+ if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
42
+
43
+ wp_enqueue_script( 'wpbc-ajx_availability_calendar'
44
+ , trailingslashit( plugins_url( '', __FILE__ ) ) . '_out/availability_calendar.js' /* wpbc_plugin_url( '/_out/js/codemirror.js' ) */
45
+ , array( 'wpbc-global-vars' ), '1.0', $in_footer );
46
+ /**
47
+ *
48
+ * wp_localize_script( 'wpbc-global-vars', 'wpbc_live_request_obj'
49
+ * , array(
50
+ * 'ajx_booking' => '',
51
+ * 'reminders' => ''
52
+ * )
53
+ * );
54
+ */
55
+ }
56
+ }
57
+
58
+
59
+ /** CSS */
60
+ public function enqueue_css_files( $where_to_load ) {
61
+
62
+ if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
63
+
64
+ wp_enqueue_style( 'wpbc-ajx_availability_calendar'
65
+ , trailingslashit( plugins_url( '', __FILE__ ) ) . '_out/availability_calendar.css' //, wpbc_plugin_url( '/includes/listing_ajx_booking/o-ajx_booking-listing.css' )
66
+ , array(), WP_BK_VERSION_NUM );
67
+ }
68
+ }
69
+
70
+ // </editor-fold>
71
+
72
+
73
+ // <editor-fold defaultstate="collapsed" desc=" /// R e q u e s t /// " >
74
+
75
+ /**
76
+ * Get params names for escaping and/or default value of such params
77
+ *
78
+ * @return array array ( 'resource_id' => array( 'validate' => 'digit_or_csd', 'default' => array( '1' ) )
79
+ * , ... )
80
+ */
81
+ static public function request_rules_structure(){
82
+
83
+ return array(
84
+ // 'digit_or_csd' can check about 'digit_or_csd' in arrays, as well
85
+ 'resource_id' => array( 'validate' => 'digit_or_csd', 'default' => 1 ) // if ['0'] - All booking resources
86
+ // , 'ui_wh_booking_date_checkout' => array( 'validate' => 'digit_or_date', 'default' => '' ) // number | date 2016-07-20
87
+ // , 'wh_modification_date' => array( 'validate' => 'array', 'default' => array( "3" ) ) // number | date 2016-07-20
88
+ // , 'ui_wh_modification_date_radio' => array( 'validate' => 'd', 'default' => 0 ) // '1' | '2' ....
89
+ // , 'keyword' => array( 'validate' => 's', 'default' => '' ) //string
90
+ // , 'wh_cost' => array( 'validate' => 'float_or_empty', 'default' => '' ) // '1' | ''
91
+ // , 'ui_usr__send_emails' => array( 'validate' => array( 'send', 'not_send' ), 'default' => 'send' )
92
+ );
93
+
94
+ }
95
+
96
+ // </editor-fold>
97
+
98
+
99
+
100
+ }
101
+
102
+ /**
103
+ * Just for loading CSS and JavaScript files
104
+ */
105
+ if ( true ) {
106
+ $ajx_availability_loading = new WPBC_AJX__Availability;
107
+ $ajx_availability_loading->init_load_css_js_tpl();
108
+ //$ajx_availability_loading->define_ajax_hook();
109
+ }
110
+
111
+
112
+ /**
113
+ * A c t i v a t e - Create new DB Table, for booking dates properties
114
+ *
115
+ * booking date property can be relative to: prop_name = 'unavailable', 'available', 'rate', 'allow_start_day_selection', 'allow_days_number_to_select', 'availability_count', ...
116
+ *
117
+ * @return void
118
+ */
119
+ function wpbc_activation__dates_availability() { //FixIn: 9.3.1.2
120
+
121
+ global $wpdb;
122
+ $charset_collate = ( ! empty( $wpdb->charset ) ) ? "DEFAULT CHARACTER SET $wpdb->charset" : '';
123
+ $charset_collate .= ( ! empty( $wpdb->collate ) ) ? " COLLATE $wpdb->collate" : '';
124
+
125
+ if ( ! wpbc_is_table_exists( 'booking_dates_prop' ) ) {
126
+ $simple_sql = "CREATE TABLE {$wpdb->prefix}booking_dates_props (
127
+ booking_dates_prop_id bigint(20) unsigned NOT NULL auto_increment,
128
+ resource_id bigint(10) NOT NULL default 1,
129
+ calendar_date datetime NOT NULL default '0000-00-00 00:00:00',
130
+ prop_name varchar(200) NOT NULL default '',
131
+ prop_value text,
132
+ PRIMARY KEY (booking_dates_prop_id)
133
+ ) {$charset_collate}";
134
+ $wpdb->query( $simple_sql );
135
+ }
136
+ }
137
+ add_bk_action( 'wpbc_activation_after_db_actions', 'wpbc_activation__dates_availability' );
138
+
139
+
140
+ /**
141
+ * D e a c t i v a t e
142
+ */
143
+ function wpbc_deactivation__dates_availability() {
144
+
145
+ global $wpdb;
146
+ $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}booking_dates_props" );
147
+ }
148
+ add_bk_action( 'wpbc_other_versions_deactivation', 'wpbc_deactivation__dates_availability' );
includes/page-availability/availability__page.php CHANGED
@@ -57,66 +57,32 @@ class WPBC_Page_AJX_Availability extends WPBC_Page_Structure {
57
 
58
  public function content() {
59
 
60
- do_action( 'wpbc_hook_settings_page_header', 'page_booking_listing'); // Define Notices Section and show some static messages, if needed.
61
 
62
- if ( ! wpbc_is_mu_user_can_be_here( 'activated_user' ) ) { return false; } // Check if MU user activated, otherwise show Warning message.
63
 
64
- //?? if ( ! wpbc_set_default_resource_to__get() ) return false; // Define default booking resources for $_GET and check if booking resource belong to user.
65
 
66
 
67
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
68
  // Get and escape request parameters
69
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
70
- $my_ajx_booking_listing = new WPBC_AJX_Bookings;
71
-
72
- /**
73
- * Such Empty getting ->clean_request_parameters() , firstly load data array from saved user metadata
74
- *
75
- * and if it was not saved then get parameters from $_GET['page_num']=2, ....
76
- */
77
-
78
- $escaped_search_request_params = $my_ajx_booking_listing->clean_request_parameters();
79
-
80
- /**
81
- * $escaped_request_params = $my_ajx_booking_listing->clean_request_parameters( array( 'request_prefix' => 'search_params' ) );
82
- // -> $_REQUEST[ 'search_params' ][ 'page_num' ]=2
83
- // if $_REQUEST[ 'search_params' ] not set, then
84
- // get "default" from WPBC_AJX_Bookings::clean_request_parameters(
85
- return :
86
- array( 'page_num' => 1
87
- , 'page_items_count' => 100
88
- , 'sort' => 'ajx_booking_id'
89
- , 'sort_type' => 'DESC'
90
- , 'keyword' => ''
91
- , 'status' => ''
92
- , 'ru_create_date' => ''
93
- )
94
- */
95
-
96
- /**
97
- // 1. Direct Clean Params
98
-
99
- $request_params_ajx_booking = array(
100
- 'page_num' => array( 'validate' => 'd', 'default' => 1 )
101
- , 'page_items_count' => array( 'validate' => 'd', 'default' => 10 )
102
- , 'sort' => array( 'validate' => array( 'ajx_booking_id' ), 'default' => 'ajx_booking_id' )
103
- , 'sort_type' => array( 'validate' => array( 'ASC', 'DESC'),'default' => 'DESC' )
104
- , 'status' => array( 'validate' => 's', 'default' => '' )
105
- , 'keyword' => array( 'validate' => 's', 'default' => '' )
106
- , 'ru_create_date' => array( 'validate' => 'date', 'default' => '' )
107
- );
108
- $request_params_values = array( // Usually $request_params_values is $_REQUEST
109
- 'page_num' => 1,
110
- 'page_items_count' => 3,
111
- 'sort' => 'ajx_booking_id',
112
- 'sort_type' => 'DESC',
113
- 'status' => '',
114
- 'keyword' => '',
115
- 'ru_create_date' => ''
116
- );
117
- $request_params = wpbc_sanitize_params_in_arr( $request_params_values, $request_params_ajx_booking );
118
- */
119
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
120
 
121
 
122
  // Submit /////////////////////////////////////////////////////////////
@@ -128,15 +94,10 @@ class WPBC_Page_AJX_Availability extends WPBC_Page_Structure {
128
 
129
  wpbc_js_for_bookings_page(); // JavaScript functions
130
 
131
- wpbc_welcome_panel(); // Welcome Panel (links)
132
-
133
- wpbc_ajx_bookings_toolbar( $escaped_search_request_params );
134
 
135
- // wpbc_bookings_toolbar();
136
 
137
- ?></span><?php // BS UI CSS Class
138
-
139
- //$this->show_help_section();
140
 
141
  ?><div id="wpbc_log_screen" class="wpbc_log_screen"></div><?php
142
 
@@ -152,7 +113,7 @@ class WPBC_Page_AJX_Availability extends WPBC_Page_Structure {
152
 
153
  ///wpbc_ajx_booking_modify_container_show(); // Container for showing Edit ajx_booking and define Edit and Delete ajx_booking JavaScript vars.
154
 
155
- wpbc_ajx__ui__booking_sorting( $escaped_search_request_params , wpbc_ajx_get__request_params__names_default( 'default' ) );
156
 
157
  ?><div class="wpbc_ajx_booking_pagination"></div><?php // Pagination container at head
158
  wpbc_clear_div();
@@ -160,7 +121,7 @@ class WPBC_Page_AJX_Availability extends WPBC_Page_Structure {
160
  $is_test_sql_directly = false;
161
  if ( ! $is_test_sql_directly ) {
162
 
163
- $this->show_ajx_booking_listing_container_ajax( $escaped_search_request_params );
164
 
165
  $this->show_pagination_container();
166
 
@@ -182,100 +143,6 @@ class WPBC_Page_AJX_Availability extends WPBC_Page_Structure {
182
 
183
 
184
 
185
-
186
- // TODO: create some help text here
187
- private function show_help_section(){
188
-
189
- if ( ! wpbc_section_is_dismissed( 'wpbc-panel-help-wizard' ) ) {
190
- return;
191
- }
192
-
193
- $notice_id = 'wpbc_ajx_booking_help_section';
194
- if ( ! wpbc_section_is_dismissed( $notice_id ) ) {
195
-
196
- ?><div id="<?php echo $notice_id; ?>"
197
- class="wpbc_system_notice wpbc_is_dismissible wpbc_is_hideable notice-info wpbc_internal_notice"
198
- data-nonce="<?php echo wp_create_nonce( $nonce_name = $notice_id . '_wpbcnonce' ); ?>"
199
- data-user-id="<?php echo wpbc_get_current_user_id(); ?>"
200
- ><?php
201
-
202
- wpbc_x_dismiss_button();
203
-
204
- $field_options = array();
205
- $field_options[] = '<div class="wpbc-help-container">';
206
-
207
- $field_options[] = '<h3 style="margin:0;">' . __( 'How to create the booking?', 'booking' ) . '</h3>';
208
- $field_options[] = '1. ' . sprintf( __( 'Click on %s"Add New Booking"%s button.', 'booking' ), '<strong>', '</strong>' );
209
- $field_options[] = '2. ' . sprintf( __( 'Select email template, that you want to use for sending as reminder. You can create and configure email template(s) at %semails settings%s page.', 'booking' )
210
- , '<strong><a href="' . esc_url( wpbc_get_settings_url() ) . '&tab=email">', '</a></strong>'
211
- , '<strong>', '</strong>'
212
- );
213
- $field_options[] = '3. ' . sprintf( __( 'Configure one or several conditions. %sNote%s. If your condition for the date field, then you can use configuration that possible to use in %sstrtotime%s function. For example: %sTODAY - 6 MONTHS - 1 DAY%s ', 'booking' )
214
- , '<strong>', '</strong>'
215
- , '<strong><a href="https://www.php.net/manual/en/datetime.formats.relative.php" target="_blank">', '</a></strong>'
216
- , '<code>', '</code>'
217
- );
218
- $field_options[] = '4. ' . sprintf( __( 'Click on Create Booking button.', 'booking' ) );
219
-
220
- $field_options[] = '<h3 style="margin:0;">' . __( 'How to run booking manually?', 'booking' ) . '</h3>';
221
- $field_options[] = '1. ' . sprintf( __( 'Click on %s"Run"%s button to execute specific booking.', 'booking' ), '<strong>', '</strong>' );
222
- $field_options[] = '2. ' . sprintf( __( 'System will run booking and create %semail reminders%s from %sajx_booking%s based on conditions of current booking.', 'booking' )
223
- , '<strong><a href="' . esc_url( wpbc_get_reminders_url() ) . '">', '</a></strong>'
224
- , '<strong><a href="' . esc_url( wpbc_get_ajx_booking_url() ) . '">', '</a></strong>'
225
- , '<strong>', '</strong>'
226
- );
227
-
228
- $field_options[] = '<div class="wpbc-help-columns">';
229
- $field_options[] = ' <div class="wpbc-help-col">';
230
- $field_options[] = ' <h3 class="wpbc-header-h"">' . __( 'How to set up automatic creation of reminders?', 'booking' ) . '</h3>';
231
- $field_options[] = ' 1. ' . sprintf( __( 'Insert into the page %sshortcode%s for creation of reminders for specific booking.', 'booking' )
232
- , '<strong><a href="https://oplugins.com/faq/email-reminders-how-to-set-up-run-rule-automatically-to-create-reminders/">', '</a></strong>' );
233
- $field_options[] = ' 2. ' . sprintf( __( 'When someone visit this page, shortcode will run Booking and Reminder(s) will be created.', 'booking' )
234
- , '<strong>', '</strong>' );
235
- $field_options[] = ' </div>';
236
- $field_options[] = ' <div class="wpbc-help-col">';
237
- $field_options[] = ' <h3 class="wpbc-header-h wpbc-header-h-premium">' . __( 'Advanced automatic creation of reminders in premium versions.', 'booking' ) . '</h3>';
238
- $field_options[] = ' 1. ' . sprintf( __( 'Configure %sCRON script%s at your server for creation of reminders periodically in automatic mode. ', 'booking' )
239
- , '<strong><a href="https://oplugins.com/plugins/email-reminders-automate/">', '</a></strong>' );
240
- $field_options[] = ' 2. ' . sprintf( __( 'Its can be useful, for every day automatic creation of email reminders, that different from today date on X days, relative to specific field. For example, its can be friendly notification of upcoming in 1 day booking, or follow-up email after event.', 'booking' )
241
- , '<strong><a href="https://oplugins.com/plugins/email-reminders-automate/">', '</a></strong>' );
242
- $field_options[] = ' </div>';
243
- $field_options[] = '</div>';
244
-
245
- $field_options[] = '</div>';
246
- WPBC_Settings_API::field_help_row_static(
247
- 'help_translation_section_after_legend_items'
248
- , array(
249
- 'type' => 'help'
250
- , 'value' => $field_options
251
- , 'class' => ''
252
- , 'css' => 'margin:0;padding:0;border:0;'
253
- , 'description' => ''
254
- , 'cols' => 2
255
- , 'group' => 'help'
256
- , 'tr_class' => ''
257
- , 'description_tag' => 'p'
258
- )
259
- );
260
- ?></div>
261
- <?php
262
- if ( wpbc_section_is_dismissed( 'wpbc-panel-help-wizard' ) ) {
263
-
264
- // Move help section to the top of the page, after Title before toolbar ?>
265
- <script type="text/javascript">
266
- jQuery(document).ready(function(){
267
- jQuery(document).ready(function(){
268
- jQuery( '.wpbc_admin_message' ).after( jQuery( '#<?php echo $notice_id; ?>' ) );
269
- });
270
- });
271
- </script>
272
- <?php
273
- }
274
- }
275
-
276
- }
277
-
278
-
279
  private function show_pagination_container(){
280
  ?>
281
  <div class="wpbc_ajx_booking_pagination"></div>
@@ -379,4 +246,4 @@ debuge($items_arr);
379
  }
380
 
381
  }
382
- add_action('wpbc_menu_created', array( new WPBC_Page_AJX_Availability() , '__construct') ); // Executed after creation of Menu
57
 
58
  public function content() {
59
 
60
+ do_action( 'wpbc_hook_settings_page_header', 'page_booking_availability'); // Define Notices Section and show some static messages, if needed.
61
 
62
+ if ( ! wpbc_is_mu_user_can_be_here( 'activated_user' ) ) { return false; } // Check if MU user activated, otherwise show Warning message.
63
 
64
+ // if ( ! wpbc_set_default_resource_to__get() ) return false; // Define default booking resources for $_GET and check if booking resource belong to user.
65
 
66
 
67
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
68
  // Get and escape request parameters
69
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
70
+
71
+ $user_request = new WPBC_AJX__REQUEST( array(
72
+ 'db_option_name' => 'booking_availability_request_params',
73
+ 'user_id' => wpbc_get_current_user_id(),
74
+ 'request_rules_structure' => WPBC_AJX__Availability::request_rules_structure()
75
+ )
76
+ );
77
+ $escaped_request_params_arr = $user_request->get_sanitized__saved__user_request_params(); // Get Saved
78
+
79
+ if ( false === $escaped_request_params_arr ) { // This request was not saved before, then get sanitized direct parameters, like: $_REQUEST['resource_id']
80
+
81
+ $request_prefix = false;
82
+ $escaped_request_params_arr = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // Direct: $_REQUEST['resource_id']
83
+ }
84
+
85
+ //debuge( $escaped_request_params_arr );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
 
88
  // Submit /////////////////////////////////////////////////////////////
94
 
95
  wpbc_js_for_bookings_page(); // JavaScript functions
96
 
97
+ wpbc_ajx_bookings_toolbar( $escaped_request_params_arr );
 
 
98
 
99
+ ?></span><?php
100
 
 
 
 
101
 
102
  ?><div id="wpbc_log_screen" class="wpbc_log_screen"></div><?php
103
 
113
 
114
  ///wpbc_ajx_booking_modify_container_show(); // Container for showing Edit ajx_booking and define Edit and Delete ajx_booking JavaScript vars.
115
 
116
+ wpbc_ajx__ui__booking_sorting( $escaped_request_params_arr , wpbc_ajx_get__request_params__names_default( 'default' ) );
117
 
118
  ?><div class="wpbc_ajx_booking_pagination"></div><?php // Pagination container at head
119
  wpbc_clear_div();
121
  $is_test_sql_directly = false;
122
  if ( ! $is_test_sql_directly ) {
123
 
124
+ //$this->show_ajx_booking_listing_container_ajax( $escaped_request_params_arr );
125
 
126
  $this->show_pagination_container();
127
 
143
 
144
 
145
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  private function show_pagination_container(){
147
  ?>
148
  <div class="wpbc_ajx_booking_pagination"></div>
246
  }
247
 
248
  }
249
+ add_action('wpbc_menu_created', array( new WPBC_Page_AJX_Availability() , '__construct') ); // Executed after creation of Menu
includes/page-bookings/bookings__actions.php CHANGED
@@ -35,10 +35,7 @@ function wpbc_ajax_WPBC_AJX_BOOKING_ACTIONS() {
35
  $user_id = ( isset( $_REQUEST['wpbc_ajx_user_id'] ) ) ? intval( $_REQUEST['wpbc_ajx_user_id'] ) : wpbc_get_current_user_id();
36
 
37
  // Get clean Parameters for SQL ---------------------------------------------------------------------------
38
- $request_prefix = 'action_params';
39
-
40
- $request_params = wpbc_esc_get__value_or_default__in_request(
41
- array(
42
  'booking_action' => array( 'validate' => array(
43
  'set_booking_locale',
44
  'set_booking_pending' ,
@@ -84,8 +81,20 @@ function wpbc_ajax_WPBC_AJX_BOOKING_ACTIONS() {
84
 
85
  'feedback__note' => array( 'validate' => 's', 'default' => '' ),
86
  'feedback_stars' => array( 'validate' => 'd', 'default' => 0 )
87
- ), $request_prefix
88
- );
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
  $action_result = array();
91
 
@@ -2067,8 +2076,17 @@ function wpbc_ajax_WPBC_AJX_BOOKING_ACTIONS() {
2067
 
2068
  } else {
2069
 
2070
- $ajx_booking_loading = new WPBC_AJX_Bookings;
2071
- $request_params_for_listing = $ajx_booking_loading->clean_request_parameters( array( 'request_prefix' => 'search_params' ) );
 
 
 
 
 
 
 
 
 
2072
 
2073
  // $data_arr = wpbc_ajx_get_booking_data_arr( $request_params_for_listing );
2074
 
35
  $user_id = ( isset( $_REQUEST['wpbc_ajx_user_id'] ) ) ? intval( $_REQUEST['wpbc_ajx_user_id'] ) : wpbc_get_current_user_id();
36
 
37
  // Get clean Parameters for SQL ---------------------------------------------------------------------------
38
+ $request_rules_structure = array(
 
 
 
39
  'booking_action' => array( 'validate' => array(
40
  'set_booking_locale',
41
  'set_booking_pending' ,
81
 
82
  'feedback__note' => array( 'validate' => 's', 'default' => '' ),
83
  'feedback_stars' => array( 'validate' => 'd', 'default' => 0 )
84
+ );
85
+
86
+ $user_request = new WPBC_AJX__REQUEST( array(
87
+ 'db_option_name' => 'booking_listing_request_params',
88
+ 'user_id' => wpbc_get_current_user_id(),
89
+ 'request_rules_structure' => $request_rules_structure
90
+ )
91
+ );
92
+ $request_prefix = 'action_params';
93
+ $request_params = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // NOT Direct: $_REQUEST['action_params']['resource_id']
94
+
95
+
96
+
97
+
98
 
99
  $action_result = array();
100
 
2076
 
2077
  } else {
2078
 
2079
+
2080
+ $user_request = new WPBC_AJX__REQUEST( array(
2081
+ 'db_option_name' => 'booking_listing_request_params',
2082
+ 'user_id' => wpbc_get_current_user_id(),
2083
+ 'request_rules_structure' => wpbc_ajx_get__request_params__names_default()
2084
+ )
2085
+ );
2086
+ $request_prefix = 'search_params';
2087
+ $request_params_for_listing = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // NOT Direct: $_REQUEST['search_params']['resource_id']
2088
+
2089
+
2090
 
2091
  // $data_arr = wpbc_ajx_get_booking_data_arr( $request_params_for_listing );
2092
 
includes/page-bookings/bookings__listing.php CHANGED
@@ -488,7 +488,15 @@ console.log( 'row listing', data ); // LISTING_ROWS
488
  * $_REQUEST['search_params']['page_num'], $_REQUEST['search_params']['page_items_count'],..
489
  */
490
 
491
- $request_params = $this->clean_request_parameters( array( 'request_prefix' => 'search_params' ) );
 
 
 
 
 
 
 
 
492
 
493
  $data_arr = wpbc_ajx_get_booking_data_arr( $request_params );
494
 
@@ -519,80 +527,6 @@ console.log( 'row listing', data ); // LISTING_ROWS
519
  // </editor-fold>
520
 
521
 
522
- // <editor-fold defaultstate="collapsed" desc=" /// C l e a n R E Q U E S T /// " >
523
-
524
- /**
525
- * Get clean specific $_REQUEST params, if param is NOT set then return "default"
526
- *
527
- * @param array() - Prefix for request - array( 'request_prefix' => 'search_params' )
528
- *
529
- * If Ajax, sending search request, like: $_REQUEST[ 'search_params' ]['page_num'] , $_REQUEST['search_params']['page_items_count'], ....
530
- * then we need to use prefix - 'search_params'
531
- * $this->clean_request_parameters( array( 'request_prefix' => 'search_params' ) );
532
- *
533
- * Note, if $_REQUEST[ 'search_params' ] not set, then get DEFAULT value
534
- *
535
- * Otherwise for usual request $this->clean_request_parameters( ); --> get values, like $_REQUEST['page_num'] and if not set, get DEFAULT value
536
- *
537
- * @return array(
538
- * 'page_num' => 1
539
- * , 'page_items_count' => 100
540
- * , 'sort' => 'ajx_booking_id'
541
- * , 'sort_type' => 'DESC'
542
- * , 'keyword' => ''
543
- * , 'status' => ''
544
- * , 'ru_create_date' => ''
545
- * )
546
- */
547
- public function clean_request_parameters( $params = array() ){
548
-
549
- // $user_escaped_request_params = array();
550
-
551
- /**
552
- * Get saved parameters from user metadata and then escape them:
553
- * If params empty, it's means that we request them first time after page loading, and we can get saved data (if it exist)
554
- */
555
- if ( empty( $params ) ) {
556
-
557
- $user_id = wpbc_get_current_user_id();
558
-
559
- $escaped_request_params = wpbc_ajx__user_request_params__get_sanitized( $user_id );
560
-
561
- if ( ! empty( $escaped_request_params ) ) {
562
- return $escaped_request_params;
563
- }
564
- }
565
-
566
- $defaults = array( 'request_prefix' => false );
567
- $params = wp_parse_args( $params, $defaults );
568
-
569
-
570
- $request_params_structure = wpbc_ajx_get__request_params__names_default(); /**
571
- * array( 'page_num' => array( 'validate' => 'd', 'default' => 1 )
572
- , 'page_items_count' => array( 'validate' => 'd', 'default' => 10 )
573
- , 'sort' => array( 'validate' => array( 'booking_id' ), 'default' => 'booking_id' )
574
- , 'sort_type' => array( 'validate' => array( 'ASC', 'DESC'),'default' => 'DESC' )
575
- , 'keyword' => array( 'validate' => 's', 'default' => '' )
576
- , 'create_date' => array( 'validate' => 'date', 'default' => '' )
577
- )
578
- */
579
-
580
- $escaped_request_params = wpbc_esc_get__value_or_default__in_request(
581
- $request_params_structure
582
- , $params[ 'request_prefix' ]
583
- );
584
-
585
- // // Overwrite user saved last request parameters by some parameters from browser URL -- $_REQUEST
586
- // if ( ! empty( $user_escaped_request_params ) ) {
587
- // $escaped_request_params = wp_parse_args( $escaped_request_params, $user_escaped_request_params );
588
- // }
589
-
590
- return $escaped_request_params;
591
- }
592
-
593
- // </editor-fold>
594
-
595
-
596
  }
597
 
598
 
488
  * $_REQUEST['search_params']['page_num'], $_REQUEST['search_params']['page_items_count'],..
489
  */
490
 
491
+ $user_request = new WPBC_AJX__REQUEST( array(
492
+ 'db_option_name' => 'booking_listing_request_params',
493
+ 'user_id' => wpbc_get_current_user_id(),
494
+ 'request_rules_structure' => wpbc_ajx_get__request_params__names_default()
495
+ )
496
+ );
497
+ $request_prefix = 'search_params';
498
+ $request_params = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // NOT Direct: $_REQUEST['search_params']['resource_id']
499
+
500
 
501
  $data_arr = wpbc_ajx_get_booking_data_arr( $request_params );
502
 
527
  // </editor-fold>
528
 
529
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
530
  }
531
 
532
 
includes/page-bookings/bookings__page.php CHANGED
@@ -67,55 +67,27 @@ class WPBC_Page_AJX_Bookings extends WPBC_Page_Structure {
67
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
68
  // Get and escape request parameters
69
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
70
- $my_ajx_booking_listing = new WPBC_AJX_Bookings;
71
-
72
- /**
73
- * Such Empty getting ->clean_request_parameters() , firstly load data array from saved user metadata
74
- *
75
- * and if it was not saved then get parameters from $_GET['page_num']=2, ....
76
- */
77
-
78
- $escaped_search_request_params = $my_ajx_booking_listing->clean_request_parameters();
79
-
80
- /**
81
- * $escaped_request_params = $my_ajx_booking_listing->clean_request_parameters( array( 'request_prefix' => 'search_params' ) );
82
- // -> $_REQUEST[ 'search_params' ][ 'page_num' ]=2
83
- // if $_REQUEST[ 'search_params' ] not set, then
84
- // get "default" from WPBC_AJX_Bookings::clean_request_parameters(
85
- return :
86
- array( 'page_num' => 1
87
- , 'page_items_count' => 100
88
- , 'sort' => 'ajx_booking_id'
89
- , 'sort_type' => 'DESC'
90
- , 'keyword' => ''
91
- , 'status' => ''
92
- , 'ru_create_date' => ''
93
- )
94
- */
95
-
96
- /**
97
- // 1. Direct Clean Params
98
-
99
- $request_params_ajx_booking = array(
100
- 'page_num' => array( 'validate' => 'd', 'default' => 1 )
101
- , 'page_items_count' => array( 'validate' => 'd', 'default' => 10 )
102
- , 'sort' => array( 'validate' => array( 'ajx_booking_id' ), 'default' => 'ajx_booking_id' )
103
- , 'sort_type' => array( 'validate' => array( 'ASC', 'DESC'),'default' => 'DESC' )
104
- , 'status' => array( 'validate' => 's', 'default' => '' )
105
- , 'keyword' => array( 'validate' => 's', 'default' => '' )
106
- , 'ru_create_date' => array( 'validate' => 'date', 'default' => '' )
107
- );
108
- $request_params_values = array( // Usually $request_params_values is $_REQUEST
109
- 'page_num' => 1,
110
- 'page_items_count' => 3,
111
- 'sort' => 'ajx_booking_id',
112
- 'sort_type' => 'DESC',
113
- 'status' => '',
114
- 'keyword' => '',
115
- 'ru_create_date' => ''
116
- );
117
- $request_params = wpbc_sanitize_params_in_arr( $request_params_values, $request_params_ajx_booking );
118
- */
119
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
120
 
121
 
@@ -132,12 +104,8 @@ class WPBC_Page_AJX_Bookings extends WPBC_Page_Structure {
132
 
133
  wpbc_ajx_bookings_toolbar( $escaped_search_request_params );
134
 
135
- // wpbc_bookings_toolbar();
136
-
137
  ?></span><?php // BS UI CSS Class
138
 
139
- //$this->show_help_section();
140
-
141
  ?><div id="wpbc_log_screen" class="wpbc_log_screen"></div><?php
142
 
143
  // Content ////////////////////////////////////////////////////////////
@@ -175,108 +143,11 @@ class WPBC_Page_AJX_Bookings extends WPBC_Page_Structure {
175
  </span>
176
  <?php
177
 
178
- //wpbc_show_wpbc_footer(); // Rating
179
-
180
  do_action( 'wpbc_hook_settings_page_footer', 'wpbc-ajx_booking' );
 
181
  wpbc_show_booking_footer(); // Show rating line
182
  }
183
 
184
-
185
-
186
-
187
- // TODO: create some help text here
188
- private function show_help_section(){
189
-
190
- if ( ! wpbc_section_is_dismissed( 'wpbc-panel-help-wizard' ) ) {
191
- return;
192
- }
193
-
194
- $notice_id = 'wpbc_ajx_booking_help_section';
195
- if ( ! wpbc_section_is_dismissed( $notice_id ) ) {
196
-
197
- ?><div id="<?php echo $notice_id; ?>"
198
- class="wpbc_system_notice wpbc_is_dismissible wpbc_is_hideable notice-info wpbc_internal_notice"
199
- data-nonce="<?php echo wp_create_nonce( $nonce_name = $notice_id . '_wpbcnonce' ); ?>"
200
- data-user-id="<?php echo wpbc_get_current_user_id(); ?>"
201
- ><?php
202
-
203
- wpbc_x_dismiss_button();
204
-
205
- $field_options = array();
206
- $field_options[] = '<div class="wpbc-help-container">';
207
-
208
- $field_options[] = '<h3 style="margin:0;">' . __( 'How to create the booking?', 'booking' ) . '</h3>';
209
- $field_options[] = '1. ' . sprintf( __( 'Click on %s"Add New Booking"%s button.', 'booking' ), '<strong>', '</strong>' );
210
- $field_options[] = '2. ' . sprintf( __( 'Select email template, that you want to use for sending as reminder. You can create and configure email template(s) at %semails settings%s page.', 'booking' )
211
- , '<strong><a href="' . esc_url( wpbc_get_settings_url() ) . '&tab=email">', '</a></strong>'
212
- , '<strong>', '</strong>'
213
- );
214
- $field_options[] = '3. ' . sprintf( __( 'Configure one or several conditions. %sNote%s. If your condition for the date field, then you can use configuration that possible to use in %sstrtotime%s function. For example: %sTODAY - 6 MONTHS - 1 DAY%s ', 'booking' )
215
- , '<strong>', '</strong>'
216
- , '<strong><a href="https://www.php.net/manual/en/datetime.formats.relative.php" target="_blank">', '</a></strong>'
217
- , '<code>', '</code>'
218
- );
219
- $field_options[] = '4. ' . sprintf( __( 'Click on Create Booking button.', 'booking' ) );
220
-
221
- $field_options[] = '<h3 style="margin:0;">' . __( 'How to run booking manually?', 'booking' ) . '</h3>';
222
- $field_options[] = '1. ' . sprintf( __( 'Click on %s"Run"%s button to execute specific booking.', 'booking' ), '<strong>', '</strong>' );
223
- $field_options[] = '2. ' . sprintf( __( 'System will run booking and create %semail reminders%s from %sajx_booking%s based on conditions of current booking.', 'booking' )
224
- , '<strong><a href="' . esc_url( wpbc_get_reminders_url() ) . '">', '</a></strong>'
225
- , '<strong><a href="' . esc_url( wpbc_get_ajx_booking_url() ) . '">', '</a></strong>'
226
- , '<strong>', '</strong>'
227
- );
228
-
229
- $field_options[] = '<div class="wpbc-help-columns">';
230
- $field_options[] = ' <div class="wpbc-help-col">';
231
- $field_options[] = ' <h3 class="wpbc-header-h"">' . __( 'How to set up automatic creation of reminders?', 'booking' ) . '</h3>';
232
- $field_options[] = ' 1. ' . sprintf( __( 'Insert into the page %sshortcode%s for creation of reminders for specific booking.', 'booking' )
233
- , '<strong><a href="https://oplugins.com/faq/email-reminders-how-to-set-up-run-rule-automatically-to-create-reminders/">', '</a></strong>' );
234
- $field_options[] = ' 2. ' . sprintf( __( 'When someone visit this page, shortcode will run Booking and Reminder(s) will be created.', 'booking' )
235
- , '<strong>', '</strong>' );
236
- $field_options[] = ' </div>';
237
- $field_options[] = ' <div class="wpbc-help-col">';
238
- $field_options[] = ' <h3 class="wpbc-header-h wpbc-header-h-premium">' . __( 'Advanced automatic creation of reminders in premium versions.', 'booking' ) . '</h3>';
239
- $field_options[] = ' 1. ' . sprintf( __( 'Configure %sCRON script%s at your server for creation of reminders periodically in automatic mode. ', 'booking' )
240
- , '<strong><a href="https://oplugins.com/plugins/email-reminders-automate/">', '</a></strong>' );
241
- $field_options[] = ' 2. ' . sprintf( __( 'Its can be useful, for every day automatic creation of email reminders, that different from today date on X days, relative to specific field. For example, its can be friendly notification of upcoming in 1 day booking, or follow-up email after event.', 'booking' )
242
- , '<strong><a href="https://oplugins.com/plugins/email-reminders-automate/">', '</a></strong>' );
243
- $field_options[] = ' </div>';
244
- $field_options[] = '</div>';
245
-
246
- $field_options[] = '</div>';
247
- WPBC_Settings_API::field_help_row_static(
248
- 'help_translation_section_after_legend_items'
249
- , array(
250
- 'type' => 'help'
251
- , 'value' => $field_options
252
- , 'class' => ''
253
- , 'css' => 'margin:0;padding:0;border:0;'
254
- , 'description' => ''
255
- , 'cols' => 2
256
- , 'group' => 'help'
257
- , 'tr_class' => ''
258
- , 'description_tag' => 'p'
259
- )
260
- );
261
- ?></div>
262
- <?php
263
- if ( wpbc_section_is_dismissed( 'wpbc-panel-help-wizard' ) ) {
264
-
265
- // Move help section to the top of the page, after Title before toolbar ?>
266
- <script type="text/javascript">
267
- jQuery(document).ready(function(){
268
- jQuery(document).ready(function(){
269
- jQuery( '.wpbc_admin_message' ).after( jQuery( '#<?php echo $notice_id; ?>' ) );
270
- });
271
- });
272
- </script>
273
- <?php
274
- }
275
- }
276
-
277
- }
278
-
279
-
280
  private function show_pagination_container(){
281
  ?>
282
  <div class="wpbc_ajx_booking_pagination"></div>
67
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
68
  // Get and escape request parameters
69
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
70
+ $user_request = new WPBC_AJX__REQUEST( array(
71
+ 'db_option_name' => 'booking_listing_request_params',
72
+ 'user_id' => wpbc_get_current_user_id(),
73
+ 'request_rules_structure' => wpbc_ajx_get__request_params__names_default()
74
+ )
75
+ );
76
+
77
+ $escaped_search_request_params = false;
78
+ if ( empty( $_REQUEST['overwrite'] ) ) {
79
+ $escaped_search_request_params = $user_request->get_sanitized__saved__user_request_params(); // Get Saved
80
+ }
81
+
82
+ if (
83
+ ( false === $escaped_search_request_params )
84
+ || ( ! empty( $_REQUEST['overwrite'] ) )
85
+ ){ // This request was not saved before, then get sanitized direct parameters, like: $_REQUEST['resource_id']
86
+
87
+ $request_prefix = false;
88
+ $escaped_search_request_params = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // Direct: $_REQUEST['resource_id']
89
+ }
90
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
92
 
93
 
104
 
105
  wpbc_ajx_bookings_toolbar( $escaped_search_request_params );
106
 
 
 
107
  ?></span><?php // BS UI CSS Class
108
 
 
 
109
  ?><div id="wpbc_log_screen" class="wpbc_log_screen"></div><?php
110
 
111
  // Content ////////////////////////////////////////////////////////////
143
  </span>
144
  <?php
145
 
 
 
146
  do_action( 'wpbc_hook_settings_page_footer', 'wpbc-ajx_booking' );
147
+
148
  wpbc_show_booking_footer(); // Show rating line
149
  }
150
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  private function show_pagination_container(){
152
  ?>
153
  <div class="wpbc_ajx_booking_pagination"></div>
includes/page-bookings/bookings__sql.php CHANGED
@@ -2220,14 +2220,10 @@ function wpbc_ajx__user_request_params__get_option( $user_id, $option_name ){
2220
 
2221
 
2222
  // <editor-fold defaultstate="collapsed" desc=" F u n c t i o n s f o r C l e a n i ng s " >
2223
- ////////////////////////////////////////////////////////////////////////////
2224
- // G e n e r a l C l e a n i n g
2225
- ////////////////////////////////////////////////////////////////////////////
2226
 
2227
-
2228
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2229
- // Escaping
2230
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2231
 
2232
  /**
2233
  * Escaping for inline JavaScript.
@@ -2262,516 +2258,135 @@ function wpbc_ajx__user_request_params__get_option( $user_id, $option_name ){
2262
  }
2263
 
2264
 
2265
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2266
- // DB
2267
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2268
-
2269
- /**
2270
- * Check $value for injections. Basically can be used in Requests params checking.
2271
- *
2272
- * @param type $value
2273
- *
2274
- * @return type
2275
- */
2276
- function wpbc_esc_clean_parameter( $value ) {
2277
-
2278
- $value = preg_replace( '/<[^>]*>/', '', $value ); // clean any tags
2279
- $value = str_replace( '<', ' ', $value );
2280
- $value = str_replace( '>', ' ', $value );
2281
- $value = strip_tags( $value ); // Strip HTML and PHP tags from a string
2282
-
2283
- // Clean SQL injection
2284
- $value = esc_sql( $value );
2285
- $value = esc_textarea( $value ); //FixIn: 7.1.1.2
2286
-
2287
- return $value;
2288
- }
2289
-
2290
-
2291
- function wpbc_esc_sql_like( $value_trimmed ) {
2292
-
2293
- // check here https://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress--wp-25536
2294
-
2295
- global $wpdb;
2296
- if ( method_exists( $wpdb ,'esc_like' ) )
2297
- return $wpdb->esc_like( $value_trimmed ); // Its require minimum WP 4.0.0
2298
- else
2299
- return addcslashes( $value_trimmed, '_%\\' ); // Direct implementation from $wpdb->esc_like(
2300
- }
2301
-
2302
-
2303
- /**
2304
- * Clean user string for using in SQL LIKE statement - append to LIKE sql
2305
- *
2306
- * @param string $value - to clean
2307
- *
2308
- * @return string - escaped
2309
- * Exmaple:
2310
- * $search_escaped_like_title = wpbc_esc_clean_like_string_for_append_in_sql_for_db( $input_var );
2311
- *
2312
- * $where_sql = " WHERE title LIKE ". $search_escaped_like_title ." ";
2313
- */
2314
- function wpbc_esc_clean_like_string_for_append_in_sql_for_db( $value ) {
2315
-
2316
- // check here https://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress--wp-25536
2317
-
2318
- global $wpdb;
2319
-
2320
- $value_trimmed = trim( stripslashes( $value ) );
2321
-
2322
- $wild = '%';
2323
- $like = $wild . wpbc_esc_sql_like( $value_trimmed ) . $wild;
2324
- $sql = $wpdb->prepare( "'%s'", $like );
2325
-
2326
- return $sql;
2327
-
2328
-
2329
- /* Help:
2330
- * First half of escaping for LIKE special characters % and _ before preparing for MySQL.
2331
- * Use this only before wpdb::prepare() or esc_sql(). Reversing the order is very bad for security.
2332
- *
2333
- * Example Prepared Statement:
2334
- *
2335
- * $wild = '%';
2336
- * $find = 'only 43% of planets';
2337
- * $like = $wild . wpbc_esc_sql_like( $find ) . $wild;
2338
- * $sql = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_content LIKE '%s'", $like );
2339
- *
2340
- * Example Escape Chain:
2341
- *
2342
- * $sql = esc_sql( wpbc_esc_sql_like( $input ) );
2343
- */
2344
-
2345
- }
2346
-
2347
-
2348
- /**
2349
- * Clean string for using in SQL LIKE requests inside single quotes: WHERE title LIKE '%". $escaped_search_title ."%'
2350
- * Replaced _ to \_ % to \% \ to \\
2351
- *
2352
- * @param string $value - to clean
2353
- *
2354
- * @return string - escaped
2355
- * Exmaple:
2356
- * $search_escaped_like_title = wpbc_esc_clean_like_string_for_db( $input_var );
2357
- *
2358
- * $where_sql = " WHERE title LIKE '%". $search_escaped_like_title ."%' ";
2359
- *
2360
- * Important! Use SINGLE quotes after in SQL query: LIKE '%".$data."%'
2361
- */
2362
- function wpbc_esc_clean_like_string_for_db( $value ){
2363
-
2364
- // check here https://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress--wp-25536
2365
-
2366
- global $wpdb;
2367
-
2368
- $value_trimmed = trim( stripslashes( $value ) );
2369
-
2370
- $value_trimmed = wpbc_esc_sql_like( $value_trimmed );
2371
-
2372
- $value = trim( $wpdb->prepare( "'%s'", $value_trimmed ) , "'" );
2373
-
2374
- return $value;
2375
-
2376
- /* Help:
2377
- * First half of escaping for LIKE special characters % and _ before preparing for MySQL.
2378
- * Use this only before wpdb::prepare() or esc_sql(). Reversing the order is very bad for security.
2379
- *
2380
- * Example Prepared Statement:
2381
- *
2382
- * $wild = '%';
2383
- * $find = 'only 43% of planets';
2384
- * $like = $wild . wpbc_esc_sql_like( $find ) . $wild;
2385
- * $sql = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_content LIKE '%s'", $like );
2386
- *
2387
- * Example Escape Chain:
2388
- *
2389
- * $sql = esc_sql( wpbc_esc_sql_like( $input ) );
2390
- */
2391
- }
2392
-
2393
-
2394
-
2395
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2396
- // Request
2397
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2398
-
2399
- /**
2400
- * Check specific parameters in $_REQUEST and return cleaned params or default values
2401
- *
2402
- * @param array $request_params_rules = array(
2403
- * 'page_num' => array( 'validate' => 'd', 'default' => 1 )
2404
- * , 'page_items_count' => array( 'validate' => 'd', 'default' => 100 )
2405
- * , 'sort' => array( 'validate' => 's', 'default' => 'booking_id' )
2406
- * , 'sort_type' => array( 'validate' => array('ASC', 'DESC'), 'default' => 'DESC' )
2407
- * , 'keyword' => array( 'validate' => 's', 'default' => '' )
2408
- * , 'source' => array( 'validate' => 's', 'default' => '' )
2409
- * , 'create_date' => array( 'validate' => 'date', 'default' => '' )
2410
- * )
2411
- *
2412
- * @param string $prefix_in_request default FALSE
2413
- * parameter is useful, if request like this:
2414
- * $_REQUEST (
2415
- * ['request_params'][page_num] => 3
2416
- * ['request_params'][page_items_count] => 20
2417
- * ['request_params'][sort] => booking_id
2418
- * ['request_params'][sort_type] => DESC
2419
- * ['request_params'][keyword] =>
2420
- * ['request_params'][source] =>
2421
- * )
2422
- *
2423
- *
2424
- *
2425
- * 'd'; // '1' | ''
2426
- * 's'; // string !!! Clean 'LIKE' string for DB !!!
2427
- * 'digit_or_csd'; // '0' | '1,2,3' | ''
2428
- * 'digit_or_date'; // number | date 2016-07-20
2429
- *
2430
- * 'checked_skip_it' // Skip checking
2431
- * array( '0', 'trash', 'any'); // Elements only listed in array
2432
- *
2433
-
2434
- *@return array $clean_params = Array (
2435
- * [page_num] => 3
2436
- * [page_items_count] => 20
2437
- * [sort] => booking_id
2438
- * [sort_type] => DESC
2439
- * [keyword] =>
2440
- * [source] =>
2441
- * [create_date] =>
2442
- * )
2443
- */
2444
- function wpbc_esc_get__value_or_default__in_request( $request_params_rules, $prefix_in_request = false ){
2445
-
2446
- $request_params_values_arr = array();
2447
 
2448
- foreach ( $request_params_rules as $request_key => $clean_type ) {
 
 
 
 
 
 
 
2449
 
2450
- /**
2451
- * Get value from 'direct request' - "$_REQUEST['page_num'] => 3"
2452
- * or
2453
- * from 'prefix request' - "$_REQUEST['request_params']['page_num'] => 3"
2454
- */
2455
 
2456
- $exist_request_param_value = wpbc_get_direct_value_in_request( $request_key, $prefix_in_request );
 
 
2457
 
2458
- if ( false !== $exist_request_param_value ) {
2459
- $request_params_values_arr[ $request_key ] = $exist_request_param_value;
2460
- }
2461
  }
2462
 
2463
- return wpbc_sanitize_params_in_arr( $request_params_values_arr, $request_params_rules );
2464
- }
2465
-
2466
- /**
2467
- * Get indexed or direct request from REQUEST
2468
- *
2469
- * @param $request_key
2470
- * @param false $prefix_in_request
2471
- *
2472
- * @return false|mixed
2473
- */
2474
- function wpbc_get_direct_value_in_request( $request_key, $prefix_in_request = false ) {
2475
 
2476
- /**
2477
- * Get value from 'direct request' - "$_REQUEST['page_num'] => 3"
2478
- * or
2479
- * from 'prefix request' - "$_REQUEST['request_params']['page_num'] => 3"
2480
- */
2481
-
2482
- if (
2483
- ( empty( $prefix_in_request ) )
2484
- && ( isset( $_REQUEST[ $request_key ] ) )
2485
- ) {
2486
- return $_REQUEST[ $request_key ];
2487
- }
2488
-
2489
- if (
2490
- ( ! empty( $prefix_in_request ) )
2491
- && ( isset( $_REQUEST[ $prefix_in_request ] ) )
2492
- && ( isset( $_REQUEST[ $prefix_in_request ][ $request_key ] ) )
2493
- ) {
2494
- return $_REQUEST[ $prefix_in_request ][ $request_key ];
2495
- }
2496
-
2497
- return false;
2498
- }
2499
 
 
2500
 
2501
-
2502
-
2503
-
2504
- /**
2505
- * Check specific parameters in ARRAY and return cleaned params or default values
2506
- *
2507
- * @param array $request_params_values_arr = / think like in $_REQUEST parameter /
2508
- * array(
2509
- * 'page_num' => 1,
2510
- * 'page_items_count' => 10,
2511
- * 'sort' => 'rule_id',
2512
- * 'sort_type' => 'DESC',
2513
- * 'status' => '',
2514
- * 'keyword' => '',
2515
- * 'create_date' => ''
2516
- * )
2517
- * @param array $params_rules = array(
2518
- * 'page_num' => array( 'validate' => 'd', 'default' => 1 )
2519
- * , 'page_items_count' => array( 'validate' => 'd', 'default' => 10 )
2520
- * , 'sort' => array( 'validate' => array( 'rule_id' ), 'default' => 'rule_id' )
2521
- * , 'sort_type' => array( 'validate' => array( 'ASC', 'DESC'),'default' => 'DESC' )
2522
- * , 'status' => array( 'validate' => 's', 'default' => '' )
2523
- * , 'keyword' => array( 'validate' => 's', 'default' => '' )
2524
- * , 'create_date' => array( 'validate' => 'date', 'default' => '' )
2525
- * )
2526
- *
2527
- *
2528
- * 'd'; // '1' | ''
2529
- * 's'; // string !!! Clean 'LIKE' string for DB !!!
2530
- * 'digit_or_csd'; // '0' | '1,2,3' | ''
2531
- * 'digit_or_date'; // number | date 2016-07-20
2532
- *
2533
- * 'checked_skip_it' // Skip checking
2534
- * array( '0', 'trash', 'any'); // Elements only listed in array
2535
- *
2536
- *@return array $clean_params = Array (
2537
- * [page_num] => 3
2538
- * [page_items_count] => 20
2539
- * [sort] => booking_id
2540
- * [sort_type] => DESC
2541
- * [keyword] =>
2542
- * [source] =>
2543
- * [create_date] =>
2544
- * )
2545
- */
2546
- function wpbc_sanitize_params_in_arr( $request_params_values_arr, $params_rules ){
2547
-
2548
- $clean_params = array();
2549
-
2550
- foreach ( $params_rules as $request_key_name => $clean_type ) {
2551
-
2552
- if ( isset( $request_params_values_arr[ $request_key_name ] ) ) {
2553
- $request_value_check = $request_params_values_arr[ $request_key_name ];
2554
- } else {
2555
- $request_value_check = false;
2556
- }
2557
-
2558
- // If not defined in VALUES (think like in $_REQUEST parameter), then get default value
2559
- if ( false === $request_value_check ) {
2560
-
2561
- // D E F A U L T
2562
- $clean_params[ $request_key_name ] = $params_rules[ $request_key_name ]['default'];
2563
-
2564
- } else {
2565
-
2566
- // C L E A N I N G
2567
- $clean_type = $params_rules[ $request_key_name ]['validate'];
2568
-
2569
- // Check only values from this Array
2570
- if ( is_array( $clean_type ) ) {
2571
-
2572
- $clean_type = array_map( 'strtolower', $clean_type );
2573
-
2574
- if ( ( isset( $request_value_check ) ) && ( ! in_array( strtolower( $request_value_check ), $clean_type ) ) ) {
2575
- $clean_type = 'checked_skip_it';
2576
- $request_value_check = $params_rules[ $request_key_name ]['default']; // Reset it, if value not in array And get default value
2577
- } else {
2578
- $clean_type = 'checked_skip_it';
2579
- }
2580
- }
2581
-
2582
- switch ( $clean_type ) {
2583
-
2584
- case 'checked_skip_it':
2585
- $clean_params[ $request_key_name ] = $request_value_check;
2586
- break;
2587
-
2588
- case 'date': // Date
2589
- $clean_params[ $request_key_name ] = wpbc_sanitize_date( $request_value_check );
2590
- break;
2591
-
2592
- case 'digit_or_date': // digit or Date
2593
- $clean_params[ $request_key_name ] = wpbc_sanitize_digit_or_date( $request_value_check );
2594
- break;
2595
-
2596
- case 'digit_or_csd': // digit or comma separated digit
2597
- $clean_params[ $request_key_name ] = wpbc_sanitize_digit_or_csd( $request_value_check );
2598
- break;
2599
-
2600
- case 's': // string
2601
- $clean_params[ $request_key_name ] = wpbc_sanitize_text( $request_value_check );
2602
- break;
2603
-
2604
- case 'array':
2605
- if ( is_array( $request_value_check ) ) {
2606
- foreach ( $request_value_check as $check_arr_index => $check_arr_value ) {
2607
- $request_value_check[ $check_arr_index ] = wpbc_sanitize_text( $check_arr_value ); // Check each option as string
2608
- }
2609
- $clean_params[ $request_key_name ] = $request_value_check;
2610
-
2611
- } else {
2612
- $clean_params[ $request_key_name ] = $params_rules[ $request_key_name ]['default'];
2613
- }
2614
- break;
2615
-
2616
- case 'digit_or_empty': // digit or ''
2617
- if ( '' === $request_value_check) {
2618
- $clean_params[ $request_key_name ] = '';
2619
- } else {
2620
- $clean_params[ $request_key_name ] = intval( $request_value_check );
2621
- }
2622
- break;
2623
-
2624
- case 'float_or_empty': // digit or ''
2625
- if ( '' === $request_value_check) {
2626
- $clean_params[ $request_key_name ] = '';
2627
- } else {
2628
-
2629
- // In case if was entered 10,99 instead of 10.99
2630
- $request_value_check = str_replace( ',', '.', $request_value_check );
2631
-
2632
- $clean_params[ $request_key_name ] = floatval( $request_value_check );
2633
- }
2634
- break;
2635
-
2636
- case 'f': // float
2637
- $clean_params[ $request_key_name ] = floatval( $request_value_check );
2638
- break;
2639
-
2640
- case 'd': // digit
2641
- $clean_params[ $request_key_name ] = intval( $request_value_check );
2642
- break;
2643
-
2644
- default:
2645
- $clean_params[ $request_key_name ] = intval( $request_value_check );
2646
- break;
2647
- }
2648
- }
2649
  }
2650
- return $clean_params;
2651
- }
2652
-
2653
 
2654
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2655
- // Sanitize functions
2656
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2657
 
2658
  /**
2659
- * Check parameter if it number or comma separated list of numbers
2660
  *
2661
- * @param string | array $value
2662
  *
2663
- * @return string
 
 
2664
  *
2665
- * Example:
2666
- * wpbc_esc_clean_digit_or_csd( '12,a,45,9' ) => '12,0,45,9'
2667
- * or
2668
- * wpbc_esc_clean_digit_or_csd( '10a' ) => '10
2669
- * or
2670
- * wpbc_esc_clean_digit_or_csd( array( '12,a,45,9', '10a' ) ) => array ( '12,0,45,9', '10' )
2671
- *@global type $wpdb
2672
  */
2673
- function wpbc_sanitize_digit_or_csd( $value ) { //FixIn:6.2.1.4
2674
-
2675
- if ( $value === '' ) {
2676
- return $value;
2677
- }
2678
-
2679
- if ( is_array( $value ) ) {
2680
- foreach ( $value as $key => $check_value ) {
2681
- $value[ $key ] = wpbc_sanitize_digit_or_csd( $check_value );
2682
- }
2683
 
2684
- return $value;
2685
- }
2686
 
2687
- $value = str_replace( ';', ',', $value );
2688
- $array_of_nums = explode( ',', $value );
2689
 
 
2690
 
2691
- $result = array();
2692
- foreach ( $array_of_nums as $check_element ) {
2693
- $result[] = intval( $check_element );
2694
- }
2695
- $result = implode( ',', $result );
2696
 
2697
- return $result;
2698
- }
2699
 
2700
 
2701
- /**
2702
- * Check about Valid date or number, like 2016-07-20 and return this date or number
 
 
 
 
 
 
 
 
2703
  *
2704
- * @param string $value
2705
  *
2706
- * @return string|digit '2022-05-31' or 5 or ''
2707
  */
2708
- function wpbc_sanitize_digit_or_date( $value ) { //FixIn:6.2.1.4
2709
-
2710
- if ( $value === '' ) return $value;
2711
-
2712
- if ( preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $value ) ) {
2713
-
2714
- return $value; // Date is valid in format: 2016-07-20
2715
- } else {
2716
- return intval( $value );
2717
- }
2718
 
2719
  }
2720
 
2721
 
2722
  /**
2723
- * Check about Valid date, like 2016-07-20 and return this date or ''
 
 
 
2724
  *
2725
- * @param string $value
 
 
2726
  *
2727
- * @return string '2022-05-31' or ''
 
 
2728
  */
2729
- function wpbc_sanitize_date( $value ) { //FixIn:6.2.1.4
2730
 
2731
- if ( $value === '' ) return $value;
2732
 
2733
- if ( preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $value ) ) {
2734
 
2735
- return $value; // Date is valid in format: 2016-07-20
2736
- } else {
2737
- return '';
2738
- }
2739
 
2740
- }
2741
 
 
2742
 
2743
- /**
2744
- * Escape string from SQL for the HTML form field
2745
- *
2746
- * @param string $value
 
2747
  *
2748
- * @return string
2749
  *
2750
- * Used: esc_sql function.
 
 
 
2751
  *
2752
- * https://codex.wordpress.org/Function_Reference/esc_sql
2753
- * Note: Be careful to use this function correctly. It will only escape values to be used in strings in the query.
2754
- * That is, it only provides escaping for values that will be within quotes in the SQL (as in field = '{$escaped_value}').
2755
- * If your value is not going to be within quotes, your code will still be vulnerable to SQL injection.
2756
- * For example, this is vulnerable, because the escaped value is not surrounded by quotes in the SQL query:
2757
- * ORDER BY {$escaped_value}. As such, this function does not escape unquoted numeric values, field names, or SQL keywords.
2758
  *
 
2759
  */
2760
- function wpbc_sanitize_text( $value ){
2761
-
2762
- $value_trimmed = trim( stripslashes( $value ) ); // \' becomes ' and so on
2763
-
2764
- $esc_sql_value = sanitize_textarea_field( $value_trimmed ); // preserves new lines (\n) and other whitespace
2765
- //$esc_sql_value = sanitize_text_field( $value_trimmed ); // remove new lines (\n) and other whitespace
2766
-
2767
-
2768
- //global $wpdb;
2769
- //$value = trim( $wpdb->prepare( "'%s'", $esc_sql_value ) , "'" );
2770
- //$esc_sql_value = trim( stripslashes( $esc_sql_value ) );
2771
 
2772
- return $esc_sql_value;
2773
 
2774
- }
2775
  // </editor-fold>
2776
 
2777
 
2220
 
2221
 
2222
  // <editor-fold defaultstate="collapsed" desc=" F u n c t i o n s f o r C l e a n i ng s " >
 
 
 
2223
 
2224
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2225
+ // Escaping
2226
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
2227
 
2228
  /**
2229
  * Escaping for inline JavaScript.
2258
  }
2259
 
2260
 
2261
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2262
+ // DB
2263
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2264
 
2265
+ /**
2266
+ * Check $value for injections. Basically can be used in Requests params checking.
2267
+ *
2268
+ * @param type $value
2269
+ *
2270
+ * @return type
2271
+ */
2272
+ function wpbc_esc_clean_parameter( $value ) {
2273
 
2274
+ $value = preg_replace( '/<[^>]*>/', '', $value ); // clean any tags
2275
+ $value = str_replace( '<', ' ', $value );
2276
+ $value = str_replace( '>', ' ', $value );
2277
+ $value = strip_tags( $value ); // Strip HTML and PHP tags from a string
 
2278
 
2279
+ // Clean SQL injection
2280
+ $value = esc_sql( $value );
2281
+ $value = esc_textarea( $value ); //FixIn: 7.1.1.2
2282
 
2283
+ return $value;
 
 
2284
  }
2285
 
 
 
 
 
 
 
 
 
 
 
 
 
2286
 
2287
+ function wpbc_esc_sql_like( $value_trimmed ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2288
 
2289
+ // check here https://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress--wp-25536
2290
 
2291
+ global $wpdb;
2292
+ if ( method_exists( $wpdb ,'esc_like' ) )
2293
+ return $wpdb->esc_like( $value_trimmed ); // Its require minimum WP 4.0.0
2294
+ else
2295
+ return addcslashes( $value_trimmed, '_%\\' ); // Direct implementation from $wpdb->esc_like(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2296
  }
 
 
 
2297
 
 
 
 
2298
 
2299
  /**
2300
+ * Clean user string for using in SQL LIKE statement - append to LIKE sql
2301
  *
2302
+ * @param string $value - to clean
2303
  *
2304
+ * @return string - escaped
2305
+ * Exmaple:
2306
+ * $search_escaped_like_title = wpbc_esc_clean_like_string_for_append_in_sql_for_db( $input_var );
2307
  *
2308
+ * $where_sql = " WHERE title LIKE ". $search_escaped_like_title ." ";
 
 
 
 
 
 
2309
  */
2310
+ function wpbc_esc_clean_like_string_for_append_in_sql_for_db( $value ) {
 
 
 
 
 
 
 
 
 
2311
 
2312
+ // check here https://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress--wp-25536
 
2313
 
2314
+ global $wpdb;
 
2315
 
2316
+ $value_trimmed = trim( stripslashes( $value ) );
2317
 
2318
+ $wild = '%';
2319
+ $like = $wild . wpbc_esc_sql_like( $value_trimmed ) . $wild;
2320
+ $sql = $wpdb->prepare( "'%s'", $like );
 
 
2321
 
2322
+ return $sql;
 
2323
 
2324
 
2325
+ /* Help:
2326
+ * First half of escaping for LIKE special characters % and _ before preparing for MySQL.
2327
+ * Use this only before wpdb::prepare() or esc_sql(). Reversing the order is very bad for security.
2328
+ *
2329
+ * Example Prepared Statement:
2330
+ *
2331
+ * $wild = '%';
2332
+ * $find = 'only 43% of planets';
2333
+ * $like = $wild . wpbc_esc_sql_like( $find ) . $wild;
2334
+ * $sql = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_content LIKE '%s'", $like );
2335
  *
2336
+ * Example Escape Chain:
2337
  *
2338
+ * $sql = esc_sql( wpbc_esc_sql_like( $input ) );
2339
  */
 
 
 
 
 
 
 
 
 
 
2340
 
2341
  }
2342
 
2343
 
2344
  /**
2345
+ * Clean string for using in SQL LIKE requests inside single quotes: WHERE title LIKE '%". $escaped_search_title ."%'
2346
+ * Replaced _ to \_ % to \% \ to \\
2347
+ *
2348
+ * @param string $value - to clean
2349
  *
2350
+ * @return string - escaped
2351
+ * Exmaple:
2352
+ * $search_escaped_like_title = wpbc_esc_clean_like_string_for_db( $input_var );
2353
  *
2354
+ * $where_sql = " WHERE title LIKE '%". $search_escaped_like_title ."%' ";
2355
+ *
2356
+ * Important! Use SINGLE quotes after in SQL query: LIKE '%".$data."%'
2357
  */
2358
+ function wpbc_esc_clean_like_string_for_db( $value ){
2359
 
2360
+ // check here https://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress--wp-25536
2361
 
2362
+ global $wpdb;
2363
 
2364
+ $value_trimmed = trim( stripslashes( $value ) );
 
 
 
2365
 
2366
+ $value_trimmed = wpbc_esc_sql_like( $value_trimmed );
2367
 
2368
+ $value = trim( $wpdb->prepare( "'%s'", $value_trimmed ) , "'" );
2369
 
2370
+ return $value;
2371
+
2372
+ /* Help:
2373
+ * First half of escaping for LIKE special characters % and _ before preparing for MySQL.
2374
+ * Use this only before wpdb::prepare() or esc_sql(). Reversing the order is very bad for security.
2375
  *
2376
+ * Example Prepared Statement:
2377
  *
2378
+ * $wild = '%';
2379
+ * $find = 'only 43% of planets';
2380
+ * $like = $wild . wpbc_esc_sql_like( $find ) . $wild;
2381
+ * $sql = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_content LIKE '%s'", $like );
2382
  *
2383
+ * Example Escape Chain:
 
 
 
 
 
2384
  *
2385
+ * $sql = esc_sql( wpbc_esc_sql_like( $input ) );
2386
  */
2387
+ }
 
 
 
 
 
 
 
 
 
 
2388
 
 
2389
 
 
2390
  // </editor-fold>
2391
 
2392
 
js/client.js CHANGED
@@ -697,8 +697,8 @@ function mybooking_submit( submit_form , bk_type, wpdev_active_locale){
697
  if (element.checked) {
698
  inp_value = element.value;
699
  } else {
700
- // Cehck if this radio required, and if its do not checked, then show warning, otherwise if it not required or some other option checked skip this loop
701
- // We need to check it here, because radio have the several otions with same name and type and otherwsie we will save several options with selcted and empty values.
702
  if ( //FixIn: 7.0.1.62
703
  ( element.className.indexOf('wpdev-validates-as-required') !== -1 )
704
  && ( jQuery( element ).is( ':visible' ) ) //FixIn: 7.2.1.12.2 // Its prevent of saving hints, and some other hidden element
@@ -1083,9 +1083,20 @@ function showErrorMessage( element , errorMessage , isScrollStop ) { //FixIn:
1083
  .after( '<span class="wpdev-help-message alert alert-warning">' + errorMessage + '</span>' ); // Show message
1084
  }
1085
  }
1086
- jQuery(".wpdev-help-message")
1087
- .css( {'padding' : '5px 5px 4px', 'margin' : '2px 2px 2px 10px', 'vertical-align': 'top', 'line-height': '32px' } );
1088
-
 
 
 
 
 
 
 
 
 
 
 
1089
  if ( element.type == 'checkbox' )
1090
  jQuery(".wpdev-help-message").css( { 'vertical-align': 'middle'} );
1091
 
@@ -1099,8 +1110,7 @@ function showErrorMessage( element , errorMessage , isScrollStop ) { //FixIn:
1099
  makeScroll( jQuery(".wpdev-help-message") );
1100
  }
1101
  jQuery( element ).trigger( 'focus' ); //FixIn: 8.7.11.12
1102
- return;
1103
-
1104
  }
1105
 
1106
  /**
@@ -1335,6 +1345,8 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1335
 
1336
  if ( my_form.length ) {
1337
 
 
 
1338
  // Pseudo-selector that get form elements <input , <textarea , <select, <button...
1339
  my_form.find( ':input' ).each( function( index, el ) {
1340
 
@@ -1372,6 +1384,7 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1372
  && ( ! jQuery( ':checkbox[name="' + el.name + '"]', my_form ).is( ":checked" ) ) //FixIn: 8.5.2.12
1373
  ){
1374
  showErrorMessage( el, message_verif_requred_for_check_box, is_error_in_field );
 
1375
  is_error_in_field = true; // Error
1376
  }
1377
 
@@ -1380,6 +1393,7 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1380
 
1381
  if ( !jQuery( ':radio[name="' + jQuery( el ).attr( 'name' ) + '"]', my_form ).is( ':checked' ) ){
1382
  showErrorMessage( el, message_verif_requred_for_radio_box, is_error_in_field );
 
1383
  is_error_in_field = true; // Error
1384
  }
1385
 
@@ -1390,6 +1404,7 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1390
 
1391
  if ( '' === wpbc_trim( inp_value ) ){ //FixIn: 8.8.1.3 //FixIn: 8.7.11.12
1392
  showErrorMessage( el, message_verif_requred, is_error_in_field );
 
1393
  is_error_in_field = true; // Error
1394
  }
1395
  }
@@ -1402,6 +1417,7 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1402
  var reg = /^([A-Za-z0-9_\-\.\+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,})$/;
1403
  if ( (inp_value != '') && (reg.test( inp_value ) == false) ){
1404
  showErrorMessage( el, message_verif_emeil, is_error_in_field );
 
1405
  is_error_in_field = true; // Error
1406
  }
1407
  }
@@ -1430,6 +1446,7 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1430
 
1431
  if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
1432
  showErrorMessage( el, message_verif_phone, is_error_in_field );
 
1433
  is_error_in_field = true; // Error
1434
  }
1435
  }
@@ -1445,6 +1462,7 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1445
 
1446
  if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
1447
  showErrorMessage( el, message_verif_phone, is_error_in_field );
 
1448
  is_error_in_field = true; // Error
1449
  }
1450
  }
@@ -1469,6 +1487,7 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1469
 
1470
  if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
1471
  showErrorMessage( el, message_verif_phone, is_error_in_field );
 
1472
  is_error_in_field = true; // Error
1473
  }
1474
  }
@@ -1482,7 +1501,11 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1482
  }
1483
  } );
1484
 
 
 
 
1485
  }
 
1486
  return is_error_in_field;
1487
  }
1488
 
697
  if (element.checked) {
698
  inp_value = element.value;
699
  } else {
700
+ // Check if this radio required, and if it does not check, then show warning, otherwise if it is not required or some other option checked skip this loop
701
+ // We need to check it here, because radio have the several options with same name and type, and otherwise we will save several options with selected and empty values.
702
  if ( //FixIn: 7.0.1.62
703
  ( element.className.indexOf('wpdev-validates-as-required') !== -1 )
704
  && ( jQuery( element ).is( ':visible' ) ) //FixIn: 7.2.1.12.2 // Its prevent of saving hints, and some other hidden element
1083
  .after( '<span class="wpdev-help-message alert alert-warning">' + errorMessage + '</span>' ); // Show message
1084
  }
1085
  }
1086
+
1087
+ jQuery( '.wpdev-help-message' ).css( {
1088
+ 'padding' : '5px 5px 4px',
1089
+ 'margin' : '2px 2px 2px 10px',
1090
+ 'vertical-align': 'top',
1091
+ 'line-height' : '32px'
1092
+ } );
1093
+ // Calendar error message: //FixIn: 9.3.1.9
1094
+ jQuery( '.wpdev-element-message' ).css( {
1095
+ 'margin' : '10px 5px 10px 0px',
1096
+ 'line-height' : '32px'
1097
+ } );
1098
+
1099
+
1100
  if ( element.type == 'checkbox' )
1101
  jQuery(".wpdev-help-message").css( { 'vertical-align': 'middle'} );
1102
 
1110
  makeScroll( jQuery(".wpdev-help-message") );
1111
  }
1112
  jQuery( element ).trigger( 'focus' ); //FixIn: 8.7.11.12
1113
+ return element; //FixIn: 9.3.1.9
 
1114
  }
1115
 
1116
  /**
1345
 
1346
  if ( my_form.length ) {
1347
 
1348
+ var fields_with_errors_arr = [];
1349
+
1350
  // Pseudo-selector that get form elements <input , <textarea , <select, <button...
1351
  my_form.find( ':input' ).each( function( index, el ) {
1352
 
1384
  && ( ! jQuery( ':checkbox[name="' + el.name + '"]', my_form ).is( ":checked" ) ) //FixIn: 8.5.2.12
1385
  ){
1386
  showErrorMessage( el, message_verif_requred_for_check_box, is_error_in_field );
1387
+ fields_with_errors_arr.push( el );
1388
  is_error_in_field = true; // Error
1389
  }
1390
 
1393
 
1394
  if ( !jQuery( ':radio[name="' + jQuery( el ).attr( 'name' ) + '"]', my_form ).is( ':checked' ) ){
1395
  showErrorMessage( el, message_verif_requred_for_radio_box, is_error_in_field );
1396
+ fields_with_errors_arr.push( el );
1397
  is_error_in_field = true; // Error
1398
  }
1399
 
1404
 
1405
  if ( '' === wpbc_trim( inp_value ) ){ //FixIn: 8.8.1.3 //FixIn: 8.7.11.12
1406
  showErrorMessage( el, message_verif_requred, is_error_in_field );
1407
+ fields_with_errors_arr.push( el );
1408
  is_error_in_field = true; // Error
1409
  }
1410
  }
1417
  var reg = /^([A-Za-z0-9_\-\.\+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,})$/;
1418
  if ( (inp_value != '') && (reg.test( inp_value ) == false) ){
1419
  showErrorMessage( el, message_verif_emeil, is_error_in_field );
1420
+ fields_with_errors_arr.push( el );
1421
  is_error_in_field = true; // Error
1422
  }
1423
  }
1446
 
1447
  if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
1448
  showErrorMessage( el, message_verif_phone, is_error_in_field );
1449
+ fields_with_errors_arr.push( el );
1450
  is_error_in_field = true; // Error
1451
  }
1452
  }
1462
 
1463
  if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
1464
  showErrorMessage( el, message_verif_phone, is_error_in_field );
1465
+ fields_with_errors_arr.push( el );
1466
  is_error_in_field = true; // Error
1467
  }
1468
  }
1487
 
1488
  if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
1489
  showErrorMessage( el, message_verif_phone, is_error_in_field );
1490
+ fields_with_errors_arr.push( el );
1491
  is_error_in_field = true; // Error
1492
  }
1493
  }
1501
  }
1502
  } );
1503
 
1504
+ if ( fields_with_errors_arr.length > 0 ){
1505
+ jQuery( fields_with_errors_arr[ 0 ] ).trigger( 'focus' ); //FixIn: 9.3.1.9
1506
+ }
1507
  }
1508
+
1509
  return is_error_in_field;
1510
  }
1511
 
js/wpbc_times.js CHANGED
@@ -871,7 +871,6 @@ function wpbc_is_time_field_in_booking_form( resource_id, form_elements ){
871
  // Disable Booked Time Slots in selectbox
872
  function bkDisableBookedTimeSlots( all_dates, bk_type ){
873
  var i, h,m,s,j;
874
- var inst = jQuery.datepick._getInst( document.getElementById( 'calendar_booking' + bk_type ) );
875
  var td_class;
876
 
877
  var time_slot_field_name = 'select[name="rangetime' + bk_type + '"]';
@@ -886,10 +885,11 @@ function wpbc_is_time_field_in_booking_form( resource_id, form_elements ){
886
 
887
  // HERE WE WILL DISABLE ALL OPTIONS IN RANGE TIME INTERVALS FOR SINGLE DAYS SELECTIONS FOR THAT DAYS WHERE HOURS ALREADY BOOKED
888
  //here is not range selections
889
- all_dates = get_first_day_of_selection( all_dates );
890
 
891
  //FixIn: 8.9.3.4
892
- if ( ( (bk_days_selection_mode == 'single') /*&& (wpbcg.time_disable_modes.indexOf( 'single' ) >= 0)*/ )
 
893
  || ( (bk_days_selection_mode == 'multiple') && (wpbcg.time_disable_modes.indexOf( 'multiple' ) >= 0) )
894
  || ( (bk_days_selection_mode == 'dynamic') && (wpbcg.time_disable_modes.indexOf( 'dynamic' ) >= 0) )
895
  || ( (bk_days_selection_mode == 'fixed') && (wpbcg.time_disable_modes.indexOf( 'fixed' ) >= 0) )
@@ -897,7 +897,7 @@ function wpbc_is_time_field_in_booking_form( resource_id, form_elements ){
897
 
898
  // if ( ( bk_days_selection_mode == 'single') ){ // Only single day selections here //FixIn: 8.7.11.6
899
  // if ( ( bk_days_selection_mode == 'single' ) || ( bk_days_selection_mode == 'multiple' ) ) {
900
- var current_single_day_selections = all_dates.split( '.' );
901
  td_class = (current_single_day_selections[ 1 ] * 1) + '-' + (current_single_day_selections[ 0 ] * 1) + '-' + (current_single_day_selections[ 2 ] * 1);
902
  var times_array = [];
903
 
@@ -1024,7 +1024,7 @@ function wpbc_is_time_field_in_booking_form( resource_id, form_elements ){
1024
  }
1025
 
1026
  //FixIn: 8.7.11.9
1027
- jQuery( ".booking_form_div" ).trigger( 'wpbc_hook_timeslots_disabled', [bk_type, all_dates] ); // Trigger hook on disabling timeslots. Usage: jQuery( ".booking_form_div" ).on( 'wpbc_hook_timeslots_disabled', function ( event, bk_type, all_dates ){ ... } );
1028
 
1029
  }
1030
 
871
  // Disable Booked Time Slots in selectbox
872
  function bkDisableBookedTimeSlots( all_dates, bk_type ){
873
  var i, h,m,s,j;
 
874
  var td_class;
875
 
876
  var time_slot_field_name = 'select[name="rangetime' + bk_type + '"]';
885
 
886
  // HERE WE WILL DISABLE ALL OPTIONS IN RANGE TIME INTERVALS FOR SINGLE DAYS SELECTIONS FOR THAT DAYS WHERE HOURS ALREADY BOOKED
887
  //here is not range selections
888
+ var check_in_date = get_first_day_of_selection( all_dates );
889
 
890
  //FixIn: 8.9.3.4
891
+ if ( ( check_in_date === all_dates ) /* Is selected only one date ? //FixIn: 9.3.1.1 */
892
+ || ( (bk_days_selection_mode == 'single') /*&& (wpbcg.time_disable_modes.indexOf( 'single' ) >= 0)*/ )
893
  || ( (bk_days_selection_mode == 'multiple') && (wpbcg.time_disable_modes.indexOf( 'multiple' ) >= 0) )
894
  || ( (bk_days_selection_mode == 'dynamic') && (wpbcg.time_disable_modes.indexOf( 'dynamic' ) >= 0) )
895
  || ( (bk_days_selection_mode == 'fixed') && (wpbcg.time_disable_modes.indexOf( 'fixed' ) >= 0) )
897
 
898
  // if ( ( bk_days_selection_mode == 'single') ){ // Only single day selections here //FixIn: 8.7.11.6
899
  // if ( ( bk_days_selection_mode == 'single' ) || ( bk_days_selection_mode == 'multiple' ) ) {
900
+ var current_single_day_selections = check_in_date.split( '.' );
901
  td_class = (current_single_day_selections[ 1 ] * 1) + '-' + (current_single_day_selections[ 0 ] * 1) + '-' + (current_single_day_selections[ 2 ] * 1);
902
  var times_array = [];
903
 
1024
  }
1025
 
1026
  //FixIn: 8.7.11.9
1027
+ jQuery( ".booking_form_div" ).trigger( 'wpbc_hook_timeslots_disabled', [bk_type, check_in_date] ); // Trigger hook on disabling timeslots. Usage: jQuery( ".booking_form_div" ).on( 'wpbc_hook_timeslots_disabled', function ( event, bk_type, all_dates ){ ... } );
1028
 
1029
  }
1030
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: booking calendar, booking system, availability calendar, events calendar,
5
  Requires at least: 4.0
6
  Requires PHP: 5.6
7
  Tested up to: 6.1
8
- Stable tag: 9.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -169,38 +169,38 @@ Please see [FAQ](https://wpbookingcalendar.com/faq/).
169
  = Support Languages (local) =
170
 
171
  - English
172
- - Greek 95.93% [ 1931 / 2013 ], fuzzy 74, not translated 8
173
- - German 94.68% [ 1906 / 2013 ], fuzzy 84, not translated 23
174
- - French (France) 94.68% [ 1906 / 2013 ], fuzzy 84, not translated 23
175
- - Romanian 92.9% [ 1870 / 2013 ], fuzzy 104, not translated 39
176
- - Arabic 92.55% [ 1863 / 2013 ], fuzzy 110, not translated 40
177
- - Finnish 92.35% [ 1859 / 2013 ], fuzzy 114, not translated 40
178
- - Portuguese (Brazil) 92.3% [ 1858 / 2013 ], fuzzy 115, not translated 40
179
- - Spanish (Mexico) 92.25% [ 1857 / 2013 ], fuzzy 116, not translated 40
180
- - Dutch 92.2% [ 1856 / 2013 ], fuzzy 119, not translated 38
181
- - Swedish 91.7% [ 1846 / 2013 ], fuzzy 119, not translated 48
182
- - Spanish (Spain) 91.31% [ 1838 / 2013 ], fuzzy 125, not translated 50
183
- - Norwegian (Bokmål) 91.26% [ 1837 / 2013 ], fuzzy 126, not translated 50
184
- - Polish 91.01% [ 1832 / 2013 ], fuzzy 128, not translated 53
185
- - Slovenian 90.01% [ 1812 / 2013 ], fuzzy 139, not translated 62
186
- - Hungarian 89.97% [ 1811 / 2013 ], fuzzy 139, not translated 63
187
- - Italian 87.43% [ 1760 / 2013 ], fuzzy 170, not translated 83
188
- - Danish 85.39% [ 1719 / 2013 ], fuzzy 197, not translated 97
189
- - Bulgarian 85.35% [ 1718 / 2013 ], fuzzy 196, not translated 99
190
- - Turkish 85.35% [ 1718 / 2013 ], fuzzy 196, not translated 99
191
- - Chinese (Taiwan) 83.46% [ 1680 / 2013 ], fuzzy 256, not translated 77
192
- - Russian 81.82% [ 1647 / 2013 ], fuzzy 243, not translated 123
193
- - Portuguese (Portugal) 81.07% [ 1632 / 2013 ], fuzzy 256, not translated 125
194
- - Galician 80.97% [ 1630 / 2013 ], fuzzy 261, not translated 122
195
- - Thai 80.92% [ 1629 / 2013 ], fuzzy 255, not translated 129
196
- - Hebrew 78.39% [ 1578 / 2013 ], fuzzy 267, not translated 168
197
- - Ukrainian 77.74% [ 1565 / 2013 ], fuzzy 275, not translated 173
198
- - Chinese (China) 77.69% [ 1564 / 2013 ], fuzzy 272, not translated 177
199
- - Croatian 66.57% [ 1340 / 2013 ], fuzzy 261, not translated 412
200
- - Slovak 66.52% [ 1339 / 2013 ], fuzzy 263, not translated 411
201
- - Czech 66.47% [ 1338 / 2013 ], fuzzy 262, not translated 413
202
- - Catalan 66.12% [ 1331 / 2013 ], fuzzy 264, not translated 418
203
- - Belarusian 8.45% [ 170 / 2013 ], fuzzy 877, not translated 966
204
 
205
  Please recheck the status of each translation, before using plugin.
206
  We open for your help in new translations or correcting existing ones. You can translate to new language or update exist one, using this [tutorial of translation](https://wpbookingcalendar.com/faq/make-translation-of-wp-plugin/)
@@ -232,6 +232,21 @@ Please see [Video Guides](https://wpbookingcalendar.com/help/).
232
 
233
 
234
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  = 9.3 =
236
  - Changes in **all** versions:
237
  * **New**. **Edit bookings** in Booking Calendar Free version. Ability to update booking details or reselect booking dates for existing bookings. (9.2.3.4)
@@ -1072,5 +1087,9 @@ Please see [Video Guides](https://wpbookingcalendar.com/help/).
1072
  For more information, see the [full release notes](https://wpbookingcalendar.com/changelog/).
1073
 
1074
  == Upgrade Notice ==
 
 
1075
  = 9.3 =
1076
- Ability to Edit bookings in the Booking Calendar Free version. Simulate login of a regular user from a "super booking administrator" account in MultiUser version.
 
 
5
  Requires at least: 4.0
6
  Requires PHP: 5.6
7
  Tested up to: 6.1
8
+ Stable tag: 9.4
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
169
  = Support Languages (local) =
170
 
171
  - English
172
+ - Greek 93.97% [ 1931 / 2055 ], fuzzy 86, not translated 38
173
+ - German 92.75% [ 1906 / 2055 ], fuzzy 96, not translated 53
174
+ - French (France) 92.75% [ 1906 / 2055 ], fuzzy 96, not translated 53
175
+ - Romanian 91% [ 1870 / 2055 ], fuzzy 116, not translated 69
176
+ - Arabic 90.66% [ 1863 / 2055 ], fuzzy 122, not translated 70
177
+ - Finnish 90.46% [ 1859 / 2055 ], fuzzy 126, not translated 70
178
+ - Portuguese (Brazil) 90.41% [ 1858 / 2055 ], fuzzy 128, not translated 69
179
+ - Spanish (Mexico) 90.36% [ 1857 / 2055 ], fuzzy 128, not translated 70
180
+ - Dutch 90.32% [ 1856 / 2055 ], fuzzy 132, not translated 67
181
+ - Swedish 89.83% [ 1846 / 2055 ], fuzzy 131, not translated 78
182
+ - Spanish (Spain) 89.44% [ 1838 / 2055 ], fuzzy 137, not translated 80
183
+ - Norwegian (Bokmål) 89.39% [ 1837 / 2055 ], fuzzy 139, not translated 79
184
+ - Polish 89.15% [ 1832 / 2055 ], fuzzy 140, not translated 83
185
+ - Slovenian 88.18% [ 1812 / 2055 ], fuzzy 151, not translated 92
186
+ - Hungarian 88.13% [ 1811 / 2055 ], fuzzy 151, not translated 93
187
+ - Italian 85.64% [ 1760 / 2055 ], fuzzy 182, not translated 113
188
+ - Danish 83.65% [ 1719 / 2055 ], fuzzy 210, not translated 126
189
+ - Bulgarian 83.6% [ 1718 / 2055 ], fuzzy 208, not translated 129
190
+ - Turkish 83.6% [ 1718 / 2055 ], fuzzy 208, not translated 129
191
+ - Chinese (Taiwan) 81.75% [ 1680 / 2055 ], fuzzy 268, not translated 107
192
+ - Russian 80.15% [ 1647 / 2055 ], fuzzy 255, not translated 153
193
+ - Portuguese (Portugal) 79.42% [ 1632 / 2055 ], fuzzy 268, not translated 155
194
+ - Galician 79.32% [ 1630 / 2055 ], fuzzy 273, not translated 152
195
+ - Thai 79.27% [ 1629 / 2055 ], fuzzy 267, not translated 159
196
+ - Hebrew 76.79% [ 1578 / 2055 ], fuzzy 279, not translated 198
197
+ - Ukrainian 76.16% [ 1565 / 2055 ], fuzzy 287, not translated 203
198
+ - Chinese (China) 76.11% [ 1564 / 2055 ], fuzzy 284, not translated 207
199
+ - Croatian 65.21% [ 1340 / 2055 ], fuzzy 273, not translated 442
200
+ - Slovak 65.16% [ 1339 / 2055 ], fuzzy 275, not translated 441
201
+ - Czech 65.11% [ 1338 / 2055 ], fuzzy 274, not translated 443
202
+ - Catalan 64.77% [ 1331 / 2055 ], fuzzy 276, not translated 448
203
+ - Belarusian 8.27% [ 170 / 2055 ], fuzzy 886, not translated 999
204
 
205
  Please recheck the status of each translation, before using plugin.
206
  We open for your help in new translations or correcting existing ones. You can translate to new language or update exist one, using this [tutorial of translation](https://wpbookingcalendar.com/faq/make-translation-of-wp-plugin/)
232
 
233
 
234
  == Changelog ==
235
+ = 9.4 =
236
+ - Changes in **all** versions:
237
+ * **New**. Update styles of calendar skins. More clear and modern look. Defined minimum width for calendars. Adding padding between months in multi months view modes. (9.3.1.4)
238
+ * **New**. 2 new calendar skins without outer border. (9.3.1.4)
239
+ * **Improvement**. Showing calendars at mobile devices, while defined size of calendar in shortcode parameter. (9.3.1.5)
240
+ * **New**. Parameter strong_width for definition of calendar width in shortcode for option parameter. Please check more here https://wpbookingcalendar.com/faq/shortcode-booking-form/#booking-options (9.3.1.6)
241
+ * **Improvement**. Removed meta tags from the email templates to prevent marked bookings emails as spam in some servers. (9.3.1.3)
242
+ * **Improvement**. During validation when submitting the booking form, focus on the first field that requires action. This will help complete the booking form. (9.3.1.9)
243
+ * **Under Hood**. New WPBC_AJX__REQUEST class for sanitizing, saving and helping working with user requests. (9.3.1.2)
244
+ * **Fix**. Fix dashboard/agenda links of showing "New | Pending | Today " bookings, in a new ajax Booking Listing page. (9.3.1.7)
245
+ * **Fix**. Fix border width issue in Chrome browser in calendars. (9.3.1.8)
246
+ - Changes in **Personal / Business Small / Business Medium / Business Large / MultiUser** versions:
247
+ * **Improvement**. Disable booked time slots, for predefined selected date in the booking form (it's shortcode for booking form, without the calendar) (9.3.1.1)
248
+ * **Fix**. Update text in settings. (9.3.1.8)
249
+
250
  = 9.3 =
251
  - Changes in **all** versions:
252
  * **New**. **Edit bookings** in Booking Calendar Free version. Ability to update booking details or reselect booking dates for existing bookings. (9.2.3.4)
1087
  For more information, see the [full release notes](https://wpbookingcalendar.com/changelog/).
1088
 
1089
  == Upgrade Notice ==
1090
+ = 9.4 =
1091
+ Update styles of all calendar skins and add 2 new calendar skins. More modern and crisp look. Padding between months in multiple month view modes. Prevent marked bookings emails as spam on some servers...
1092
  = 9.3 =
1093
+ Ability to Edit bookings in the Booking Calendar Free version. Simulate login of a regular user from a "super booking administrator" account in MultiUser version.
1094
+ = 9.2 =
1095
+ New Booking Listing - modern looking & instant working. Single page app design for Booking Listing page with fully new modern design.
wpdev-booking.php CHANGED
@@ -7,7 +7,7 @@ Author: wpdevelop, oplugins
7
  Author URI: https://wpbookingcalendar.com/
8
  Text Domain: booking
9
  Domain Path: /languages/
10
- Version: 9.3
11
  */
12
 
13
  /* Copyright 2009 - 2022 www.wpbookingcalendar.com (email: info@wpbookingcalendar.com),
@@ -29,11 +29,13 @@ Version: 9.3
29
  if ( ! defined( 'ABSPATH' ) ) die( '<h3>Direct access to this file do not allow!</h3>' ); // Exit if accessed directly
30
 
31
 
32
- if ( ! defined( 'WP_BK_VERSION_NUM' ) ) { define( 'WP_BK_VERSION_NUM', '9.3' ); }
 
33
 
34
  if ( ! defined( 'WPBC_EXIST_NEW_BOOKING_LISTING' ) ) { define( 'WPBC_EXIST_NEW_BOOKING_LISTING', true ); } //FixIn: 9.2.1
35
- if ( ! defined( 'WPBC_EXIST_NEW_AVAILABILITY' ) ) { define( 'WPBC_EXIST_NEW_AVAILABILITY', !true ); } //FixIn: 9.3.0.1
36
 
 
37
  if (
38
  ( WP_DEBUG )
39
  && ( version_compare( PHP_VERSION, '8.1', '>=' ) ) // If PHP >= 8.1
@@ -55,6 +57,7 @@ if (
55
  add_filter( 'deprecated_argument_trigger_error', '__return_false' );
56
  add_filter( 'deprecated_hook_trigger_error', '__return_false' );
57
  }
 
58
 
59
  ////////////////////////////////////////////////////////////////////////////////
60
  // PRIMARY URL CONSTANTS
7
  Author URI: https://wpbookingcalendar.com/
8
  Text Domain: booking
9
  Domain Path: /languages/
10
+ Version: 9.4
11
  */
12
 
13
  /* Copyright 2009 - 2022 www.wpbookingcalendar.com (email: info@wpbookingcalendar.com),
29
  if ( ! defined( 'ABSPATH' ) ) die( '<h3>Direct access to this file do not allow!</h3>' ); // Exit if accessed directly
30
 
31
 
32
+ if ( ! defined( 'WP_BK_VERSION_NUM' ) ) { define( 'WP_BK_VERSION_NUM', '9.4' ); }
33
+ if ( ! defined( 'WP_BK_MINOR_UPDATE' ) ) { define( 'WP_BK_MINOR_UPDATE', ! true ); }
34
 
35
  if ( ! defined( 'WPBC_EXIST_NEW_BOOKING_LISTING' ) ) { define( 'WPBC_EXIST_NEW_BOOKING_LISTING', true ); } //FixIn: 9.2.1
36
+ if ( ! defined( 'WPBC_EXIST_NEW_AVAILABILITY' ) ) { define( 'WPBC_EXIST_NEW_AVAILABILITY', ! true ); } //FixIn: 9.3.0.1
37
 
38
+ /*
39
  if (
40
  ( WP_DEBUG )
41
  && ( version_compare( PHP_VERSION, '8.1', '>=' ) ) // If PHP >= 8.1
57
  add_filter( 'deprecated_argument_trigger_error', '__return_false' );
58
  add_filter( 'deprecated_hook_trigger_error', '__return_false' );
59
  }
60
+ */
61
 
62
  ////////////////////////////////////////////////////////////////////////////////
63
  // PRIMARY URL CONSTANTS