Booking Calendar - Version 8.7

Version Description

  • Changes in all versions:
    • New. calendar skin with dark colors: "Black 2"
    • New. Ability to define using Pending days as Selectable days - its means that such days have the colors the same as Pending days, but visitor still can select and submit new booking, until you do not approve some booking. Its useful in case, if you need to show that at some days already exist bookings, but visitors still can submit the booking. Please note, such feature will not work correctly if you will make bookings for specific time-slots (its will show warning). How to Use ? In the page, where you are having Booking Calendar shortcode, you need to define the js, like this: <script type="text/javascript"> wpbc_settings.set_option( 'pending_days_selectable', true ); </script> booking type=4 nummonths=2
    • Compatibility. Support WordPress 5.3 - update of admin panel styles.
    • Translation German translation [99% completed] by Markus Neumann.
    • Translation Slovenian translation [99% completed] by Klemen Gaber.
    • Improvement. Ability to auto fill "nickname" of user, when user logged in, and checked this option "Auto-fill fields". In booking form have to be field with name "nickname". (8.6.1.2)
    • Deprecated. Removing deprecated Timeline v.1. Currently available only new Flex Timeline (Calendar Overview) (8.6.1.13)
    • Fix. Issue Undefined index: name in ../core/admin/wpbc-class-timeline.php on line 2137
    • Fix. Issue of not ability to enter new value of CAPTCHA without page reloading, if previous entered value was incorrect. (8.6.1.8)
    • Fix. Order of week days in Arabic translation for calendar
  • Changes in Personal / Business Small / Business Medium / Business Large / MultiUser versions:
    • New. Ability to define dates format for search availability form at the Booking > Settings > Search page. (8.6.1.21) (Business Large, MultiUser)
    • New. updated iPay88 - Payment Gateway integration v1.6.4 (For Malaysia Only) (8.6.1.3) (Business Small/Medium/Large, MultiUser)
    • New. Added log of approving or set as pending bookings to notes section. You can activate this option "Logging of booking approving or rejection" at the Booking > Settings General page in "Booking Admin panel" section. (8.6.1.10) (Personal, Business Small/Medium/Large, MultiUser)
    • Improvement. Usage of new Wizard style booking form, where possible to configure several steps in booking form - more than 2 steps (8.6.1.15) (Personal, Business Small/Medium/Large, MultiUser)
    • Improvement. Ability to use option "Use check in/out time", for adding check in/out times to use change over days, when importing events via Google Calendar API (using Google API Key) (8.6.1.1) (Business Small/Medium/Large, MultiUser)
    • Improvement. Ability to use option "Append check out day", for adding check out day, when importing events via Google Calendar API (using Google API Key) (8.6.1.4) (Business Small/Medium/Large, MultiUser)
    • Improvement. Disable the edit / cancel / payment request links in the "Booking Customer Listing" view for "Approved bookings", in case, if you have activated this option " Change hash after the booking is approved " at the Booking > Settings General page in Advanced section. (8.6.1.6) (Personal, Business Small/Medium/Large, MultiUser)
    • Improvement. Replace non standard symbols (like: . or , or ' ) in options for ability correct saving Advanced cost. Otherwise sometimes was not possible to save "Advanced cost" at Booking > Resources > Advanced cost page. (8.6.1.7) (Business Medium/Large, MultiUser)
    • Improvement. Added filter hook 'wpbc_booking_resources_selection_class' for controlling CSS class in dropdown element of booking resource selections (8.6.1.9) (Personal, Business Small/Medium/Large, MultiUser)
    • Improvement. Update booking hash during moving booking to trash or restore bookings, for do not ability to edit or cancel such bookings by visitor (8.6.1.11) (Personal, Business Small/Medium/Large, MultiUser)
    • Improvement. Add ability to use only labels in shortcode for showing one payment method (its works only with these exact options): select payment-method "All payment methods@@" "Stripe" "PayPal" "Authorize.Net" "Sage Pay" "Bank Transfer" "Pay in Cash" "iPay88" "iDEAL" (Business Small/Medium/Large, MultiUser)
    • Improvement. Ability to activate updating booking cost after editing booking in admin panel, based on new booking data. You can activate this option at the Booking > Settings > Payment page (8.6.1.24) (Business Small/Medium/Large, MultiUser)
    • Deprecated. Removing deprecated Stripe v.1 integration. Now available only Stripe v.3 integration that support SCA (8.6.1.12) (Business Small/Medium/Large, MultiUser)
    • Fix. Show payment description about the booking in Stripe dashboard in Metadata section for Stripe v.3 integration (8.6.1.20) (Business Small/Medium/Large, MultiUser)
    • Fix. Issue of showing negative balance hint, during using deposit feature with zero cost (8.6.1.5) (Business Medium/Large, MultiUser)
    • Fix. Issue of incorrectly showing available results in "Advanced search results" (while using the shortcode like this [additional_search "3"] at the Booking > Settings > Search page), and if dates in some resources was marked as unavailable via season filters. (8.6.1.14) (Business Large, MultiUser)
    • Fix. Issue of incorrectly showing available results, when searching only for 1 specific day (check in/out dates the same in availability form), and we have booked (as full day), this day in specific booking resource. (8.6.1.19) (Business Large, MultiUser)
    • Fix. Issue of incorrectly disabling end time options in select-box (8.6.1.17) (Business Small/Medium/Large, MultiUser)
    • Fix. Issue of slow loading calendar (executing too many sql requests), when season filter was deleted at the Booking > Resources > Filters page, but reference relative (Rates) still exist at Booking > Resources > Cost and rates page. Its means that the Rates was not updated (re-saved) relative specific booking resource at the Booking > Resources > Cost and rates page. (8.6.1.22) (Business Medium/Large, MultiUser)
    • Fix. Issue of possible showing status of Stripe v.3 payment as successful at the Booking Listing page, even when its was not completed yet. (8.6.1.23) (Business Small/Medium/Large, MultiUser)
Download this release

Release Info

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

Code changes from version 8.6 to 8.7

core/admin/api-settings.php CHANGED
@@ -607,18 +607,7 @@ class WPBC_Settings_API_General extends WPBC_Settings_API {
607
  // Divider ///////////////////////////////////////////////////////////
608
  $this->fields['hr_booking_listing_before_view_days_num'] = array( 'type' => 'hr', 'group' => 'booking_listing' );
609
 
610
-
611
- $this->fields['booking_timeline_load'] = array(
612
- 'type' => 'select'
613
- , 'default' => $default_options_values['booking_view_days_num'] //'30'
614
- , 'title' => __('Timeline type', 'booking')
615
- , 'description' => __('Select type of timeline to load' ,'booking')
616
- , 'options' => array(
617
- 'timeline_v2_flex' => __( 'Flex Timeline', 'booking' )
618
- , 'timeline_v1' => __( 'Old Timeline', 'booking' )
619
- )
620
- , 'group' => 'booking_timeline' //FixIn: 8.5.2.20
621
- );
622
 
623
  // Calendar Default View mode
624
  if ( class_exists( 'wpdev_bk_personal' ) )
607
  // Divider ///////////////////////////////////////////////////////////
608
  $this->fields['hr_booking_listing_before_view_days_num'] = array( 'type' => 'hr', 'group' => 'booking_listing' );
609
 
610
+ //FixIn: 8.6.1.13
 
 
 
 
 
 
 
 
 
 
 
611
 
612
  // Calendar Default View mode
613
  if ( class_exists( 'wpdev_bk_personal' ) )
core/admin/page-form-free.php CHANGED
@@ -505,7 +505,7 @@ class WPBC_Page_SettingsFormFieldsFree extends WPBC_Page_Structure {
505
 
506
  if ( $form_field['type'] == 'email' )
507
  $my_form.=' <input type="text" name="'. $form_field['name'] . $my_boook_type.'" id="'. $form_field['name'] . $my_boook_type.'" class="input-xlarge wpdev-validates-as-email'
508
- . ( ( $form_field['required'] == 'On' ) ? ' wpdev-validates-as-required' : '' )
509
  . ' wpdev-validates-as-required' //FixIn: 7.0.1.22
510
  .'" />';
511
 
505
 
506
  if ( $form_field['type'] == 'email' )
507
  $my_form.=' <input type="text" name="'. $form_field['name'] . $my_boook_type.'" id="'. $form_field['name'] . $my_boook_type.'" class="input-xlarge wpdev-validates-as-email'
508
+ . ( ( $form_field['required'] == 'On' ) ? ' wpdev-validates-as-required' : '' )
509
  . ' wpdev-validates-as-required' //FixIn: 7.0.1.22
510
  .'" />';
511
 
core/admin/page-form-timeslots.php CHANGED
@@ -243,7 +243,7 @@ add_action( 'wpbc_settings_form_page_after_values', 'wpbc_settings_form_page_aft
243
  padding: 0;
244
  }
245
  .wpbc_table_form_free_timeslots.sortable select {
246
- padding: 0 10px;
247
  }
248
  .wpbc_time_divider {
249
  padding: 0 10px 6px;
243
  padding: 0;
244
  }
245
  .wpbc_table_form_free_timeslots.sortable select {
246
+ /*padding: 0 10px;*/
247
  }
248
  .wpbc_time_divider {
249
  padding: 0 10px 6px;
core/admin/page-ics-import.php CHANGED
@@ -253,9 +253,10 @@ class WPBC_Page_SettingsImportFeeds extends WPBC_Page_Structure {
253
  .wpbc_import_ics_bar .wpbc_import_url {
254
  float:left;
255
  width:28%;
256
- height: 2em;
 
257
  padding: 2px;
258
- border-radius: 0;
259
  margin:10px 5px 10px 1px;
260
  }
261
  .wpbc_import_ics_bar .wpbc_import_url {
@@ -297,7 +298,11 @@ class WPBC_Page_SettingsImportFeeds extends WPBC_Page_Structure {
297
  width: 360px;
298
  display:none;
299
  }
300
- @media (max-width: 782px) {
 
 
 
 
301
  .wpbc_import_ics_bar .wpbc_import_br_selection,
302
  .wpbc_import_ics_bar .wpbc_import_div {
303
  float:none;
253
  .wpbc_import_ics_bar .wpbc_import_url {
254
  float:left;
255
  width:28%;
256
+ /*height: 2em;*/
257
+ line-height: 1.4;
258
  padding: 2px;
259
+ /*border-radius: 0;*/
260
  margin:10px 5px 10px 1px;
261
  }
262
  .wpbc_import_ics_bar .wpbc_import_url {
298
  width: 360px;
299
  display:none;
300
  }
301
+ @media (max-width: 782px) {
302
+ .wpbc_import_ics_bar .wpbc_import_br_selection,
303
+ .wpbc_import_ics_bar .wpbc_import_url {
304
+ line-height: 1.74;
305
+ }
306
  .wpbc_import_ics_bar .wpbc_import_br_selection,
307
  .wpbc_import_ics_bar .wpbc_import_div {
308
  float:none;
core/admin/page-timeline.php CHANGED
@@ -103,25 +103,13 @@ class WPBC_Page_CalendarOverview extends WPBC_Page_Structure {
103
 
104
  // Show T i m e L i n e ///////////////////////////////////////
105
 
106
- //FixIn: 8.5.2.20
107
- $booking_timeline_load = get_bk_option( 'booking_timeline_load' );
108
 
109
- if ( 'timeline_v1' == $booking_timeline_load ){
110
 
111
- $this->timeline = new WPBC_Timeline();
112
 
113
- $this->timeline->admin_init(); // Define all REQUEST parameters and get bookings
114
-
115
- $this->timeline->show_timeline();
116
-
117
- } else {
118
-
119
- $this->timeline = new WPBC_TimelineFlex();
120
-
121
- $this->timeline->admin_init(); // Define all REQUEST parameters and get bookings
122
-
123
- $this->timeline->show_timeline();
124
- }
125
 
126
  ////////////////////////////////////////////////////////////////////
127
 
103
 
104
  // Show T i m e L i n e ///////////////////////////////////////
105
 
106
+ //FixIn: 8.6.1.13
107
+ $this->timeline = new WPBC_TimelineFlex();
108
 
109
+ $this->timeline->admin_init(); // Define all REQUEST parameters and get bookings
110
 
111
+ $this->timeline->show_timeline();
112
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
  ////////////////////////////////////////////////////////////////////
115
 
core/admin/wpbc-class-listing.php CHANGED
@@ -387,7 +387,7 @@ class WPBC_Booking_Listing_Table {
387
  // Change Locale
388
  make_bk_action( 'wpbc_booking_listing_button_locale', $row_data );
389
 
390
- wpbc_btn_add_booking_to_google_calendar( $row_data ); //FixIn: 7.1.2.5
391
 
392
  ?><span class="wpbc-buttons-separator"></span><?php
393
 
387
  // Change Locale
388
  make_bk_action( 'wpbc_booking_listing_button_locale', $row_data );
389
 
390
+ wpbc_btn_add_booking_to_google_calendar( $row_data ); //FixIn: 7.1.2.5
391
 
392
  ?><span class="wpbc-buttons-separator"></span><?php
393
 
core/admin/wpbc-class-timeline.php DELETED
@@ -1,2459 +0,0 @@
1
- <?php /**
2
- * @version 1.1
3
- * @package Booking Calendar
4
- * @category Timeline for Admin Panel
5
- * @author wpdevelop
6
- *
7
- * @web-site https://wpbookingcalendar.com/
8
- * @email info@wpbookingcalendar.com
9
- *
10
- * @modified 2016-01-18
11
- */
12
-
13
- if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
14
-
15
-
16
- class WPBC_Timeline {
17
-
18
-
19
- public $bookings; // Booking objects from external function
20
- public $booking_types; // Resources objects from external function
21
-
22
- public $dates_array; // Dates for Timeline format
23
- public $time_array_new; // Times for Timeline format
24
-
25
- public $request_args; // Parsed paramaters
26
-
27
- private $is_frontend; // Client ot Admin sides.
28
-
29
- public $timeline_titles;
30
-
31
- private $week_days_titles;
32
- private $current_user_id;
33
-
34
- private $html_client_id; // ID of border element at client side.
35
- public $options; //FixIn:7.0.1.50
36
-
37
- public function __construct(){// $bookings, $booking_types ) {
38
-
39
- $this->options = array(); //FixIn:7.0.1.50
40
-
41
- $this->html_client_id = false;
42
-
43
- $this->current_user_id = 0;
44
-
45
- $this->is_frontend = false;
46
-
47
- //FixIn: 8.1.3.31
48
- $calendar_overview_start_time = get_bk_option( 'booking_calendar_overview_start_time' );
49
- $calendar_overview_end_time = get_bk_option( 'booking_calendar_overview_end_time' );
50
- $hours_limit = ( empty( $calendar_overview_start_time ) ? '0' : $calendar_overview_start_time )
51
- . ','
52
- . ( empty( $calendar_overview_end_time ) ? '24' : $calendar_overview_end_time );
53
- $this->request_args = array(
54
- 'wh_booking_type' => '1'
55
- , 'is_matrix' => false
56
- , 'view_days_num' => '90'
57
- , 'scroll_start_date' => ''
58
- , 'scroll_day' => 0
59
- , 'scroll_month' => 0
60
- , 'wh_trash' => ''
61
- , 'limit_hours' => $hours_limit // '0,24' //FixIn: 7.0.1.14 if ( ! ( ( $tt >= $start_hour_for_1day_view ) && ( $tt <= $end_hour_for_1day_view ) ) ) continue;
62
- , 'only_booked_resources' => ( isset( $_REQUEST['only_booked_resources'] ) ) ? 1 : 0 //FixIn: 7.0.1.51
63
- , 'booking_hash' => ( isset( $_REQUEST['booking_hash'] ) ) ? $_REQUEST['booking_hash'] : '' //FixIn: 8.1.3.5
64
-
65
- );
66
-
67
- $this->timeline_titles = array(
68
- 'header_column1' => __('Resources', 'booking')
69
- , 'header_column2' => __('Dates', 'booking')
70
- , 'header_title' => __('Bookings', 'booking')
71
- );
72
-
73
-
74
- $this->week_days_titles = array(
75
- 'full' => array(
76
- 1 => __( 'Monday', 'booking' )
77
- , 2 => __( 'Tuesday', 'booking' )
78
- , 3 => __( 'Wednesday', 'booking' )
79
- , 4 => __( 'Thursday', 'booking' )
80
- , 5 => __( 'Friday', 'booking' )
81
- , 6 => __( 'Saturday', 'booking' )
82
- , 7 => __( 'Sunday', 'booking' )
83
- )
84
- , '3' => array( //FixIn: 7.0.1.11
85
- 1 => __( 'Mon', 'booking' )
86
- , 2 => __( 'Tue', 'booking' )
87
- , 3 => __( 'Wed', 'booking' )
88
- , 4 => __( 'Thu', 'booking' )
89
- , 5 => __( 'Fri', 'booking' )
90
- , 6 => __( 'Sat', 'booking' )
91
- , 7 => __( 'Sun', 'booking' )
92
- )
93
- , '1' => array( //FixIn: 7.0.1.11
94
- 1 => substr( __( 'Mon', 'booking' ), 0, -1 )
95
- , 2 => substr( __( 'Tue', 'booking' ), 0, -1 )
96
- , 3 => substr( __( 'Wed', 'booking' ), 0, -1 )
97
- , 4 => substr( __( 'Thu', 'booking' ), 0, -1 )
98
- , 5 => substr( __( 'Fri', 'booking' ), 0, -1 )
99
- , 6 => substr( __( 'Sat', 'booking' ), 0, -1 )
100
- , 7 => substr( __( 'Sun', 'booking' ), 0, -1 )
101
- )
102
- );
103
-
104
-
105
- }
106
-
107
- ////////////////////////////////////////////////////////////////////////////
108
-
109
- /**
110
- * Init Timeline From page shortcode
111
- *
112
- * @param array $attr = array(
113
- 'wh_booking_type' => ''
114
- , 'is_matrix' => false
115
- , 'view_days_num' => '30'
116
- , 'scroll_start_date' => ''
117
- , 'scroll_day' => 0
118
- , 'scroll_month' => 0
119
- );
120
- */
121
- public function client_init( $attr ) {
122
-
123
- $this->is_frontend = true;
124
-
125
- //FixIn:7.0.1.50
126
- if ( isset( $attr['options'] ) ) {
127
-
128
- $bk_otions = $attr['options'];
129
- $custom_params = array();
130
- if (! empty($bk_otions)) {
131
- $param ='\s*([^\s]+)=[\'"]{1}([^\'"]+)[\'"]{1}\s*'; // Find all possible options
132
- $pattern_to_search='%\s*{([^\s]+)' . $param .'}\s*[,]?\s*%';
133
- preg_match_all($pattern_to_search, $bk_otions, $matches, PREG_SET_ORDER);
134
- //debuge($matches);
135
- /**
136
- * [bookingtimeline ... options='{resource_link 3="http://beta/resource-apartment3-id3/"},{resource_link 4="http://beta/resource-3-id4/"}' ... ]
137
- [0] => {resource_link 3="http://beta/resource-apartment3-id3/"},
138
- [1] => resource_link // Name
139
- [2] => 3 // ID
140
- [3] => http://beta/resource-apartment3-id3/ // Value
141
- */
142
- foreach ( $matches as $matche_value ) {
143
-
144
- if ( ! isset( $this->options[ $matche_value[1] ] ) ) {
145
- $this->options[ $matche_value[1] ] = array();
146
- }
147
- $this->options[ $matche_value[1] ][ $matche_value[2] ] = $matche_value[3];
148
- }
149
- }
150
-
151
- //debuge($this->options);
152
- }
153
- //FixIn:7.0.1.50
154
-
155
-
156
- //Ovverride some parameters
157
- if ( isset( $attr['type'] ) ) {
158
- $attr['wh_booking_type'] = $attr['type']; //Instead of 'wh_booking_type' paramter in shortcode is used 'type' parameter
159
- }
160
-
161
- // Get paramaters from shortcode paramaters
162
- $this->define_request_view_params_from_params( $attr );
163
-
164
- if ( ! $this->request_args['is_matrix'] )
165
- $this->timeline_titles['header_column1'] = '';
166
-
167
- //Override any possible titles from shortcode paramaters
168
- $this->timeline_titles = wp_parse_args( $attr, $this->timeline_titles );
169
-
170
- // Get clean parameters to request booking data
171
- $args = $this->wpbc_get_clean_paramas_from_request_for_timeline();
172
-
173
-
174
- //FixIn: 8.1.3.5
175
- /** Client - Page first load
176
- *
177
- * If provided valid request_args['booking_hash']
178
- * - Firstly defined in constructor in $_REQUEST['booking_hash']
179
- * - or overwrited in define_request_view_params_from_params from parameters in shortcode 'booking_hash'
180
- * then check, if exist booking for this hash.
181
- * If exist, get Email of this booking, and
182
- * filter getting all other bookings by email keyword.
183
- * Addtionly set param ['only_booked_resources'] for showing only booking resources with exist bookings.
184
- */
185
- if ( isset( $this->request_args['booking_hash'] ) ) {
186
-
187
- // Get booking details by HASH, and then return Email (or other data of booking, or false if error
188
- $booking_details_email = wpbc_check_hash_get_booking_details( $this->request_args['booking_hash'] , 'email' );
189
-
190
- if ( ! empty( $booking_details_email ) ) {
191
-
192
- // Do not show booking resources with no bookings
193
- $this->request_args['only_booked_resources'] = 1;
194
-
195
- //Set keyword for showing bookings ony relative to this email
196
- $args['wh_keyword'] = $booking_details_email; // 'jo@wpbookingcalendar.com';
197
- }
198
- }
199
- //FixIn: 8.1.3.5 - End
200
-
201
-
202
- // Get booking data
203
- $bk_listing = wpbc_get_bookings_objects( $args );
204
- $this->bookings = $bk_listing['bookings'];
205
- $this->booking_types = $bk_listing['resources'];
206
-
207
- //Get Dates and Times for Timeline format
208
- //debuge($this->bookings[84]);
209
- $bookings_date_time = $this->wpbc_get_dates_and_times_for_timeline( $this->bookings );
210
- $this->dates_array = $bookings_date_time[0];
211
- $this->time_array_new = $bookings_date_time[1];
212
- //debuge($this->time_array_new['2017-01-13']);
213
-
214
-
215
- //$milliseconds = round(microtime(true) * 1000); //FixIn: 7.0.Beta.18
216
- $milliseconds = rand( 10000, 99999 );
217
-
218
- $this->html_client_id = 'wpbc_timeline_' . $milliseconds;
219
-
220
- return $this->html_client_id;
221
- }
222
-
223
-
224
-
225
- /**
226
- * Init parameters after Ajax Navigation actions
227
- *
228
- * @param array $attr
229
- * @return string html_client_id - exist from input parameters
230
- */
231
- public function ajax_init( $attr ) {
232
-
233
- if ( ! defined( 'WPBC_TIMELINE_AJAX' ) ) { define( 'WPBC_TIMELINE_AJAX', true ); } //FixIn: 8.4.7.13
234
-
235
- $this->is_frontend = (bool) $attr['is_frontend'];;
236
-
237
- //Ovverride some parameters
238
- if ( isset( $attr['type'] ) ) {
239
- $attr['wh_booking_type'] = $attr['type']; //Instead of 'wh_booking_type' paramter in shortcode is used 'type' parameter
240
- }
241
- //debuge($this->request_args, $attr);
242
- // Get paramaters from shortcode paramaters
243
- $this->define_request_view_params_from_params( $attr );
244
-
245
- //debuge($this->request_args);
246
- if ( ! $this->request_args['is_matrix'] ) {
247
-
248
- switch ( $this->request_args['view_days_num'] ) {
249
- case '90':
250
- case '30':
251
- if ( isset( $this->request_args['scroll_day'] ) ) $scroll_day = intval( $this->request_args['scroll_day'] );
252
- else $scroll_day = 0;
253
-
254
- if ( $attr['nav_step'] == '-1' ) $this->request_args['scroll_day'] = intval( $scroll_day - 7 );
255
- if ( $attr['nav_step'] == '1' ) $this->request_args['scroll_day'] = intval( $scroll_day + 7 );
256
-
257
- /*
258
- $scroll_params = array( '&scroll_day='.intval($scroll_day-4*7),
259
- '&scroll_day='.intval($scroll_day-7),
260
- '&scroll_day=0',
261
- '&scroll_day='.intval($scroll_day+7 ),
262
- '&scroll_day='.intval($scroll_day+4*7) );
263
- $scroll_titles = array( __('Previous 4 weeks' ,'booking'),
264
- __('Previous week' ,'booking'),
265
- __('Current week' ,'booking'),
266
- __('Next week' ,'booking'),
267
- __('Next 4 weeks' ,'booking') ); */
268
- break;
269
- default: // 365
270
- if ( !isset( $this->request_args['scroll_month'] ) ) $this->request_args['scroll_month'] = 0;
271
- $scroll_month = intval( $this->request_args['scroll_month'] );
272
-
273
- if ( $attr['nav_step'] == '-1' ) $this->request_args['scroll_month'] = intval( $scroll_month - 1 );
274
- if ( $attr['nav_step'] == '1' ) $this->request_args['scroll_month'] = intval( $scroll_month + 1 );
275
- /*
276
- $scroll_params = array( '&scroll_month='.intval($scroll_month-3),
277
- '&scroll_month='.intval($scroll_month-1),
278
- '&scroll_month=0',
279
- '&scroll_month='.intval($scroll_month+1 ),
280
- '&scroll_month='.intval($scroll_month+3) );
281
- $scroll_titles = array( __('Previous 3 months' ,'booking'),
282
- __('Previous month' ,'booking'),
283
- __('Current month' ,'booking'),
284
- __('Next month' ,'booking'),
285
- __('Next 3 months' ,'booking') );*/
286
- break;
287
- }
288
- } else { // Matrix
289
-
290
- switch ( $this->request_args['view_days_num'] ) {
291
- case '1': //Day
292
- if ( isset( $this->request_args['scroll_day'] ) ) $scroll_day = intval( $this->request_args['scroll_day'] );
293
- else $scroll_day = 0;
294
-
295
- if ( $attr['nav_step'] == '-1' ) $this->request_args['scroll_day'] = intval( $scroll_day - 1 );
296
- if ( $attr['nav_step'] == '1' ) $this->request_args['scroll_day'] = intval( $scroll_day + 1 );
297
- /*
298
- $scroll_params = array( '&scroll_day='.intval($scroll_day-7),
299
- '&scroll_day='.intval($scroll_day-1),
300
- '&scroll_day=0',
301
- '&scroll_day='.intval($scroll_day+1 ),
302
- '&scroll_day='.intval($scroll_day+7) );
303
- $scroll_titles = array( __('Previous 7 days' ,'booking'),
304
- __('Previous day' ,'booking'),
305
- __('Current day' ,'booking'),
306
- __('Next day' ,'booking'),
307
- __('Next 7 days' ,'booking') );*/
308
- break;
309
-
310
- case '7': //Week
311
-
312
- if ( isset( $this->request_args['scroll_day'] ) ) $scroll_day = intval( $this->request_args['scroll_day'] );
313
- else $scroll_day = 0;
314
-
315
- if ( $attr['nav_step'] == '-1' ) $this->request_args['scroll_day'] = intval( $scroll_day - 7 );
316
- if ( $attr['nav_step'] == '1' ) $this->request_args['scroll_day'] = intval( $scroll_day + 7 );
317
- /*
318
- $scroll_params = array( '&scroll_day='.intval($scroll_day-4*7),
319
- '&scroll_day='.intval($scroll_day-7),
320
- '&scroll_day=0',
321
- '&scroll_day='.intval($scroll_day+7 ),
322
- '&scroll_day='.intval($scroll_day+4*7) );
323
- $scroll_titles = array( __('Previous 4 weeks' ,'booking'),
324
- __('Previous week' ,'booking'),
325
- __('Current week' ,'booking'),
326
- __('Next week' ,'booking'),
327
- __('Next 4 weeks' ,'booking') );*/
328
- break;
329
-
330
- case '30':
331
- case '60':
332
- case '90': //3 months
333
-
334
- if ( !isset( $this->request_args['scroll_month'] ) ) $this->request_args['scroll_month'] = 0;
335
- $scroll_month = intval( $this->request_args['scroll_month'] );
336
-
337
- if ( $attr['nav_step'] == '-1' ) $this->request_args['scroll_month'] = intval( $scroll_month - 1 );
338
- if ( $attr['nav_step'] == '1' ) $this->request_args['scroll_month'] = intval( $scroll_month + 1 );
339
- /*
340
- $scroll_params = array( '&scroll_month='.intval($scroll_month-3),
341
- '&scroll_month='.intval($scroll_month-1),
342
- '&scroll_month=0',
343
- '&scroll_month='.intval($scroll_month+1 ),
344
- '&scroll_month='.intval($scroll_month+3) );
345
- $scroll_titles = array( __('Previous 3 months' ,'booking'),
346
- __('Previous month' ,'booking'),
347
- __('Current month' ,'booking'),
348
- __('Next month' ,'booking'),
349
- __('Next 3 months' ,'booking') );*/
350
- break;
351
-
352
- default: // 30, 60, 90...
353
- if ( !isset( $this->request_args['scroll_month'] ) ) $this->request_args['scroll_month'] = 0;
354
- $scroll_month = intval( $this->request_args['scroll_month'] );
355
-
356
- if ( $attr['nav_step'] == '-1' ) $this->request_args['scroll_month'] = intval( $scroll_month - 1 );
357
- if ( $attr['nav_step'] == '1' ) $this->request_args['scroll_month'] = intval( $scroll_month + 1 );
358
- /*
359
- $scroll_params = array( '&scroll_month='.intval($scroll_month-3),
360
- '&scroll_month='.intval($scroll_month-1),
361
- '&scroll_month=0',
362
- '&scroll_month='.intval($scroll_month+1 ),
363
- '&scroll_month='.intval($scroll_month+3) );
364
- $scroll_titles = array( __('Previous 3 months' ,'booking'),
365
- __('Previous month' ,'booking'),
366
- __('Current month' ,'booking'),
367
- __('Next month' ,'booking'),
368
- __('Next 3 months' ,'booking') );
369
- */
370
- break;
371
- }
372
- }
373
-
374
- // Titles
375
- if ( ! $this->request_args['is_matrix'] )
376
- $this->timeline_titles['header_column1'] = '';
377
-
378
- //Override any possible titles from shortcode paramaters
379
- $this->timeline_titles = wp_parse_args( $attr, $this->timeline_titles );
380
-
381
-
382
- // Get clean parameters to request booking data
383
- $args = $this->wpbc_get_clean_paramas_from_request_for_timeline();
384
-
385
-
386
- //FixIn: 8.1.3.5
387
- /**
388
- * If provided valid ['booking_hash'] in timeline_obj in JavaScript param during Ajax request,
389
- * then check, if exist booking for this hash. If exist, get Email of this booking, and
390
- * filter getting all other bookings by email keyword.
391
- * Addtionly set param ['only_booked_resources'] for showing only booking resources with exist bookings
392
- */
393
- if ( isset( $attr['booking_hash'] ) ) {
394
-
395
- // Get booking details by HASH, and then return Email (or other data of booking, or false if error
396
- $booking_details_email = wpbc_check_hash_get_booking_details( $attr['booking_hash'] , 'email' );
397
- //debuge($attr, $booking_details_email);
398
- if ( ! empty( $booking_details_email ) ) {
399
-
400
- // Do not show booking resources with no bookings
401
- $this->request_args['only_booked_resources'] = 1;
402
-
403
- //Set keyword for showing bookings ony relative to this email
404
- $args['wh_keyword'] = $booking_details_email; // 'jo@wpbookingcalendar.com';
405
- }
406
- if ( ( empty( $booking_details_email ) ) && ( ! empty( $attr['booking_hash'] ) ) ) { //FixIn: 8.4.6.1
407
- //FixIn: 8.4.5.13
408
- $this->request_args['only_booked_resources'] = 1;
409
- $args['wh_keyword'] = '``^`````^^````^`````````';
410
- }
411
- }
412
- //FixIn: 8.1.3.5 - End
413
-
414
-
415
- // Get booking data
416
- $bk_listing = wpbc_get_bookings_objects( $args );
417
-
418
- $this->bookings = $bk_listing['bookings'];
419
- $this->booking_types = $bk_listing['resources'];
420
-
421
- //Get Dates and Times for Timeline format
422
- $bookings_date_time = $this->wpbc_get_dates_and_times_for_timeline( $this->bookings );
423
- $this->dates_array = $bookings_date_time[0];
424
- $this->time_array_new = $bookings_date_time[1];
425
-
426
-
427
- $this->html_client_id = $attr['html_client_id'];
428
-
429
- return $this->html_client_id;
430
- }
431
-
432
-
433
- /** Define initial REQUEST parameters for Admin Panel and Get bookings and resources */
434
- public function admin_init() {
435
-
436
- // User ////////////////////////////////////////////////////////////////
437
- $user = wp_get_current_user();
438
- $this->current_user_id = $user->ID;
439
-
440
- $this->is_frontend = false;
441
-
442
- // Get paramaters from REQUEST
443
- $this->define_request_view_params();
444
-
445
- if ( ! $this->request_args['is_matrix'] )
446
- $this->timeline_titles['header_column1'] = '';
447
-
448
- // debuge($this->request_args);
449
-
450
- // Get clean parameters to request booking data
451
- $args = $this->wpbc_get_clean_paramas_from_request_for_timeline();
452
-
453
- // Get booking data
454
- $bk_listing = wpbc_get_bookings_objects( $args );
455
- $this->bookings = $bk_listing['bookings'];
456
- $this->booking_types = $bk_listing['resources'];
457
-
458
- //Get Dates and Times for Timeline format
459
- $bookings_date_time = $this->wpbc_get_dates_and_times_for_timeline( $this->bookings );
460
- $this->dates_array = $bookings_date_time[0];
461
- $this->time_array_new = $bookings_date_time[1];
462
- }
463
-
464
-
465
- public function client_navigation( $param ) {
466
- ?>
467
- <script type="text/javascript">
468
- wpbc_timeline_obj["<?php echo $this->html_client_id; ?>"] = {
469
- is_frontend: "<?php echo ( $this->is_frontend ? '1' : '0' ); ?>"
470
- , html_client_id: "<?php echo $this->html_client_id; ?>"
471
- , wh_booking_type: "<?php echo $this->request_args['wh_booking_type']; ?>"
472
- , is_matrix: "<?php echo ( $this->request_args['is_matrix'] ? '1' : '0' ); ?>"
473
- , view_days_num: "<?php echo $this->request_args['view_days_num']; ?>"
474
- , scroll_start_date: "<?php echo $this->request_args['scroll_start_date']; ?>"
475
- , scroll_day: "<?php echo $this->request_args['scroll_day']; ?>"
476
- , scroll_month: "<?php echo $this->request_args['scroll_month']; ?>"
477
- , 'header_column1': "<?php echo esc_js( $this->timeline_titles['header_column1'] ); ?>"
478
- , 'header_column2': "<?php echo esc_js( $this->timeline_titles['header_column2'] ); ?>"
479
- , 'header_title': "<?php echo esc_js( $this->timeline_titles['header_title'] ); ?>"
480
- , 'wh_trash': "<?php echo esc_js( $this->request_args['wh_trash'] ); ?>"
481
- , 'limit_hours': "<?php echo esc_js( $this->request_args['limit_hours'] ); ?>" //FixIn: 7.0.1.14
482
- , 'only_booked_resources': "<?php echo esc_js( $this->request_args['only_booked_resources'] ); ?>" //FixIn: 7.0.1.51
483
- , 'options': '<?php echo maybe_serialize( $this->options ) ; ?>' //FixIn: 7.2.1.14
484
- , 'booking_hash': "<?php echo esc_js( $this->request_args['booking_hash'] ); ?>" //FixIn: 8.1.3.5
485
- };
486
- </script>
487
- <div class="wpbc_tl_nav">
488
- <div class="wpbc_tl_prev" href="javascript:void(0)" onclick="javascript:wpbc_timeline_nav( wpbc_timeline_obj['<?php echo $this->html_client_id; ?>'], -1 );"><a>&laquo;</a></div>
489
- <div class="wpbc_tl_title"><?php echo $param['title'] ?></div>
490
- <div class="wpbc_tl_next" href="javascript:void(0)" onclick="javascript:wpbc_timeline_nav( wpbc_timeline_obj['<?php echo $this->html_client_id; ?>'], 1 );"><a>&raquo;</a></div>
491
- </div>
492
- <?php
493
- }
494
-
495
- ////////////////////////////////////////////////////////////////////////////
496
- // S u p p o r t
497
- ////////////////////////////////////////////////////////////////////////////
498
-
499
- /**
500
- * Get array of cleaned (limited number) paramas from request for getting bookings by "wpbc_get_bookings_objects"
501
- *
502
- * @return array
503
- */
504
- public function wpbc_get_clean_paramas_from_request_for_timeline() {
505
-
506
- //FixIn: 7.0.1.15 - replacing in this file from date( to date_i18n(
507
- $start_year = intval( date_i18n( "Y" ) );
508
- $start_month = intval( date_i18n( "m" ) );
509
- $start_day = 1;
510
- //debuge( '1.( $start_year, $start_month, $start_day , $this->request_args ', $start_year, $start_month, $start_day , $this->request_args );
511
- if ( ! empty( $this->request_args['scroll_start_date'] ) ) { // scroll_start_date=2013-07-01
512
-
513
- list( $start_year, $start_month, $start_day ) = explode( '-', $this->request_args['scroll_start_date'] );
514
- $start_year = intval( $start_year );
515
- $start_month = intval( $start_month );
516
- $start_day = intval( $start_day );
517
- }
518
- //debuge( '2.( $start_year, $start_month, $start_day )', $start_year, $start_month, $start_day );
519
- $scroll_day = 0;
520
- $scroll_month = 0;
521
-
522
- if ( ( isset( $this->request_args['view_days_num'] ) )
523
- //&& ($this->request_args['view_days_num'] != '30')
524
- )
525
- $view_days_num = $this->request_args['view_days_num'];
526
- else
527
- $view_days_num = get_bk_option( 'booking_view_days_num' );
528
-
529
- $view_days_num = intval( $view_days_num );
530
- //debuge( '2.1( $view_days_num )', $view_days_num );
531
- $is_matrix = (bool) $this->request_args['is_matrix'];
532
-
533
- if ( $is_matrix ) {
534
-
535
- switch ( $view_days_num ) {
536
-
537
- case '1':
538
- if ( empty( $this->request_args['scroll_start_date'] ) )
539
- $start_day = intval( date_i18n( "d" ) ); // Today date
540
-
541
- if ( isset( $this->request_args['scroll_day'] ) )
542
- $scroll_day = intval( $this->request_args['scroll_day'] );
543
-
544
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day + $scroll_day ), $start_year );
545
- $wh_booking_date = date_i18n( "Y-m-d", $real_date );
546
-
547
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day + 0 + $scroll_day ), $start_year );
548
- $wh_booking_date2 = date_i18n( "Y-m-d", $real_date );
549
- break;
550
-
551
- case '7':
552
- if ( empty( $this->request_args['scroll_start_date'] ) )
553
- $start_day = intval( date_i18n( "d" ) ); //Today date
554
- $start_week_day_num = intval( date_i18n( "w" ) );
555
- $start_day_weeek = intval( get_bk_option( 'booking_start_day_weeek' ) ); //[0]:Sun .. [6]:Sut
556
- if ( $start_week_day_num != $start_day_weeek ) {
557
- for ( $d_inc = 1; $d_inc < 8; $d_inc++ ) { // Just get week back
558
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day - $d_inc ), $start_year );
559
- $start_week_day_num = intval( date_i18n( "w", $real_date ) );
560
- if ( $start_week_day_num == $start_day_weeek ) {
561
- $start_day = intval( date_i18n( "d", $real_date ) );
562
- $start_year = intval( date_i18n( "Y", $real_date ) );
563
- $start_month = intval( date_i18n( "m", $real_date ) );
564
- $d_inc = 9;
565
- }
566
- }
567
- }
568
-
569
- if ( isset( $this->request_args['scroll_day'] ) )
570
- $scroll_day = intval( $this->request_args['scroll_day'] );
571
-
572
- $real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $scroll_day ), $start_year );
573
- $wh_booking_date = date_i18n( "Y-m-d", $real_date );
574
-
575
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day + 7 + $scroll_day ), $start_year );
576
- $wh_booking_date2 = date_i18n( "Y-m-d", $real_date );
577
- break;
578
-
579
- case '30':
580
- if ( isset( $this->request_args['scroll_month'] ) )
581
- $scroll_month = intval( $this->request_args['scroll_month'] );
582
-
583
- //debuge('3.$scroll_month, $start_month, $start_day, $start_year', $scroll_month, $start_month, $start_day, $start_year );
584
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month ), ( $start_day ), $start_year );
585
- //debuge('4.$real_date',$real_date);
586
- $wh_booking_date = date_i18n( "Y-m-d", $real_date );
587
- //debuge('5.$wh_booking_date',$wh_booking_date);
588
- $real_date = mktime( 0, 0, 0, ($start_month + 1 + $scroll_month ), ($start_day - 1 ), $start_year );
589
- //debuge('6.$real_date',$real_date);
590
- $wh_booking_date2 = date_i18n( "Y-m-d", $real_date );
591
- //debuge('7.$wh_booking_date2', $wh_booking_date2);
592
- break;
593
-
594
- case '60':
595
- if ( isset( $this->request_args['scroll_month'] ) )
596
- $scroll_month = intval( $this->request_args['scroll_month'] );
597
-
598
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month ), ( $start_day ), $start_year );
599
- $wh_booking_date = date_i18n( "Y-m-d", $real_date ); // '2012-12-01';
600
-
601
- $real_date = mktime( 0, 0, 0, ($start_month + 2 + $scroll_month ), ($start_day - 1 ), $start_year );
602
- $wh_booking_date2 = date_i18n( "Y-m-d", $real_date ); // '2013-02-31';
603
- break;
604
-
605
- ////////////////////////////////////////////////////////////////////////////////
606
- default: // 30 - default
607
- if ( isset( $this->request_args['scroll_month'] ) )
608
- $scroll_month = intval( $this->request_args['scroll_month'] );
609
-
610
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month ), ( $start_day ), $start_year );
611
- $wh_booking_date = date_i18n( "Y-m-d", $real_date ); // '2012-12-01';
612
-
613
- $real_date = mktime( 0, 0, 0, ($start_month + 1 + $scroll_month ), ($start_day - 1 ), $start_year );
614
- $wh_booking_date2 = date_i18n( "Y-m-d", $real_date ); // '2012-12-31';
615
- break;
616
- }
617
-
618
- } else { // Single resource
619
-
620
- switch ( $view_days_num ) {
621
-
622
- case '90':
623
-
624
- if ( empty( $this->request_args['scroll_start_date'] ) )
625
- $start_day = intval( date_i18n( "d" ) ); //Today Date
626
- $start_week_day_num = intval( date_i18n( "w" ) );
627
- $start_day_weeek = intval( get_bk_option( 'booking_start_day_weeek' ) ); //[0]:Sun .. [6]:Sut
628
-
629
- if ( $start_week_day_num != $start_day_weeek ) {
630
- for ( $d_inc = 1; $d_inc < 8; $d_inc++ ) { // Just get week back
631
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day - $d_inc ), $start_year );
632
- $start_week_day_num = intval( date_i18n( "w", $real_date ) );
633
- if ( $start_week_day_num == $start_day_weeek ) {
634
- $start_day = intval( date_i18n( "d", $real_date ) );
635
- $start_year = intval( date_i18n( "Y", $real_date ) );
636
- $start_month = intval( date_i18n( "m", $real_date ) );
637
- $d_inc = 9;
638
- }
639
- }
640
- }
641
-
642
- if ( isset( $this->request_args['scroll_day'] ) )
643
- $scroll_day = intval( $this->request_args['scroll_day'] );
644
-
645
- $real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $scroll_day ), $start_year );
646
- $wh_booking_date = date_i18n( "Y-m-d", $real_date ); // '2012-12-01';
647
-
648
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day + 7 * 12 + 7 + $scroll_day ), $start_year );
649
- $wh_booking_date2 = date_i18n( "Y-m-d", $real_date ); // '2013-12-31';
650
- break;
651
-
652
- case '30':
653
- if ( empty( $this->request_args['scroll_start_date'] ) )
654
- $start_day = intval( date_i18n( "d" ) ); //Today Date
655
-
656
- if ( isset( $this->request_args['scroll_day'] ) )
657
- $scroll_day = intval( $this->request_args['scroll_day'] );
658
-
659
- $real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $scroll_day ), $start_year );
660
- $wh_booking_date = date_i18n( "Y-m-d", $real_date ); // '2012-12-01';
661
-
662
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day + 31 + $scroll_day ), $start_year );
663
- $wh_booking_date2 = date_i18n( "Y-m-d", $real_date ); // '2013-12-31';
664
- break;
665
-
666
- default: // 365
667
-
668
- if ( isset( $this->request_args['scroll_month'] ) )
669
- $scroll_month = intval( $this->request_args['scroll_month'] );
670
- else
671
- $scroll_month = 0;
672
-
673
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month ), $start_day, $start_year );
674
- $wh_booking_date = date_i18n( "Y-m-d", $real_date ); // '2012-12-01';
675
-
676
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month + 13 ), ($start_day - 1 ), $start_year );
677
- $wh_booking_date2 = date_i18n( "Y-m-d", $real_date ); // '2013-12-31';
678
-
679
- break;
680
- }
681
- }
682
-
683
- $or_sort = get_bk_option( 'booking_sort_order' );
684
-
685
- $args = array(
686
- 'wh_booking_type' => $this->request_args['wh_booking_type'],
687
- 'wh_approved' => '',
688
- 'wh_booking_id' => '',
689
- 'wh_is_new' => '',
690
- 'wh_pay_status' => 'all',
691
- 'wh_keyword' => '',
692
- 'wh_booking_date' => $wh_booking_date,
693
- 'wh_booking_date2' => $wh_booking_date2,
694
- 'wh_modification_date' => '3',
695
- 'wh_modification_date2' => '',
696
- 'wh_cost' => '',
697
- 'wh_cost2' => '',
698
- 'or_sort' => $or_sort,
699
- 'page_num' => '1',
700
- 'wh_trash' => $this->request_args['wh_trash'],
701
- 'limit_hours' => $this->request_args['limit_hours'],
702
- 'only_booked_resources' => $this->request_args['only_booked_resources'], //FixIn: 7.0.1.51
703
- 'page_items_count' => '100000'
704
- );
705
- //debuge('8.',$args);
706
- return $args;
707
- }
708
-
709
-
710
- /** Define View Params from $_REQUEST */
711
- public function define_request_view_params() {
712
-
713
- if ( isset( $_REQUEST['wh_booking_type'] ) ) {
714
- $this->request_args['wh_booking_type'] = $_REQUEST['wh_booking_type']; // Used once for comma seperated resources only.
715
- } elseif ( isset( $_GET['booking_type'] ) ) { $this->request_args['wh_booking_type'] = $_GET['booking_type'];
716
- }
717
-
718
- if ( ( isset( $_REQUEST['wh_booking_type'] ) ) && ( strpos( $_REQUEST['wh_booking_type'], ',' ) !== false ) )
719
- $this->request_args['is_matrix'] = true;
720
- if ( isset( $_REQUEST['view_days_num'] ) ) $this->request_args['view_days_num'] = $_REQUEST['view_days_num'];
721
- if ( isset( $_REQUEST['scroll_start_date'] ) ) $this->request_args['scroll_start_date'] = $_REQUEST['scroll_start_date'];
722
- if ( isset( $_REQUEST['scroll_day'] ) ) $this->request_args['scroll_day'] = $_REQUEST['scroll_day'];
723
- if ( isset( $_REQUEST['scroll_month'] ) ) $this->request_args['scroll_month'] = $_REQUEST['scroll_month'];
724
- if ( isset( $_REQUEST['wh_trash'] ) ) $this->request_args['wh_trash'] = $_REQUEST['wh_trash'];
725
-
726
- if ( isset( $_REQUEST['limit_hours'] ) ) $this->request_args['limit_hours'] = $_REQUEST['limit_hours']; //FixIn: 7.0.1.14
727
- if ( isset( $_REQUEST['only_booked_resources'] ) ) $this->request_args['only_booked_resources'] = 1;//$_REQUEST['only_booked_resources']; //FixIn: 7.0.1.51
728
- }
729
-
730
-
731
- /**
732
- * Define Request View Params
733
- *
734
- * @param array $param = = array(
735
- 'wh_booking_type' => ''
736
- , 'is_matrix' => false
737
- , 'view_days_num' => '30'
738
- , 'scroll_start_date' => ''
739
- , 'scroll_day' => 0
740
- , 'scroll_month' => 0
741
- );
742
- */
743
- public function define_request_view_params_from_params( $param ) {
744
- //debuge( $param , $this->options , maybe_unserialize( wp_unslash( $param['options'] ) ) );die;
745
- if ( isset( $param['wh_booking_type'] ) ) $this->request_args['wh_booking_type'] = $param['wh_booking_type']; // Used once for comma seperated resources only.
746
-
747
- if ( ( isset( $param['wh_booking_type'] ) ) && ( strpos( $param['wh_booking_type'], ',' ) !== false ) )
748
- $this->request_args['is_matrix'] = true;
749
- if ( isset( $param['view_days_num'] ) ) $this->request_args['view_days_num'] = $param['view_days_num'];
750
- if ( isset( $param['scroll_start_date'] ) ) $this->request_args['scroll_start_date'] = $param['scroll_start_date'];
751
- if ( isset( $param['scroll_day'] ) ) $this->request_args['scroll_day'] = $param['scroll_day'];
752
- if ( isset( $param['scroll_month'] ) ) $this->request_args['scroll_month'] = $param['scroll_month'];
753
- if ( isset( $param['wh_trash'] ) ) $this->request_args['wh_trash'] = $param['wh_trash'];
754
- if ( isset( $param['limit_hours'] ) ) $this->request_args['limit_hours'] = $param['limit_hours']; //FixIn: 7.0.1.14
755
- if ( isset( $param['only_booked_resources'] ) ) $this->request_args['only_booked_resources'] = $param['only_booked_resources']; //FixIn: 7.0.1.14
756
- if ( isset( $param['booking_hash'] ) ) $this->request_args['booking_hash'] = $param['booking_hash']; //FixIn: 8.1.3.5
757
- if ( ( empty( $this->options ) ) && ( isset( $param['options'] ) ) ) {
758
- $this->options = maybe_unserialize( wp_unslash( $param['options'] ) ); //FixIn: 7.2.1.14
759
- }
760
-
761
- }
762
-
763
-
764
- /**
765
- * Get D A T E S and T I M E S from B o o k i n g s
766
- *
767
- * @param array $bookings - Booking input array
768
- * @return array - array( $dates_array, $time_array_new )
769
- */
770
- public function wpbc_get_dates_and_times_for_timeline( $bookings ) {
771
-
772
- // Generate: Array ( [0] => array(), [3600] => array(), [7200] => array(), ..... [43200] => array(),.... [82800] => array() )
773
- $fixed_time_hours_array = array();
774
- for ( $tt = 0; $tt < 24; $tt++ ) {
775
- $fixed_time_hours_array[$tt * 60 * 60] = array();
776
- }
777
-
778
- // Dates array: { '2012-12-24' => array( Booking ID 1, Booking ID 2, ....), ... }
779
- $dates_array = $time_array = array();
780
- foreach ( $bookings as $bk ) {
781
- foreach ( $bk->dates as $dt ) {
782
-
783
- // Transform from MySQL date to PHP date
784
- $dt->booking_date = trim( $dt->booking_date );
785
- $dta = explode( ' ', $dt->booking_date );
786
- $tms = $dta[1];
787
- //FixIn: 8.2.1.21
788
- //if ( substr( $dta[1], - 1 ) == '2' ) { continue; }
789
- $tms = explode( ':', $tms ); // array('13','30','40')
790
- $dta = $dta[0];
791
- $dta = explode( '-', $dta ); // array('2012','12','30')
792
- $php_dt = mktime( $tms[0], $tms[1], $tms[2], $dta[1], $dta[2], $dta[0] );
793
-
794
- if ( ( isset( $dt->type_id ) ) && (!empty( $dt->type_id )) )
795
- $date_bk_res_id = $dt->type_id;
796
- else
797
- $date_bk_res_id = $bk->booking_type;
798
-
799
-
800
- $my_date = date_i18n( "Y-m-d", $php_dt ); // '2012-12-01';
801
- if ( !isset( $dates_array[$my_date] ) ) {
802
- $dates_array[$my_date] = array( array( 'id' => $bk->booking_id, 'resource' => $date_bk_res_id ) );
803
- } else {
804
- $dates_array[$my_date][] = array( 'id' => $bk->booking_id, 'resource' => $date_bk_res_id );
805
- }
806
-
807
- $my_time = date_i18n( "H:i:s", $php_dt ); // '21:55:01';
808
-
809
- $my_time_index = explode( ':', $my_time );
810
- $my_time_index = (int) ($my_time_index[0] * 60 * 60 + $my_time_index[1] * 60 + $my_time_index[2]);
811
-
812
- $my_time = strtotime( $my_time ); //FixIn: 8.1.1.6
813
-
814
- if ( !isset( $time_array[$my_date] ) ) {
815
- $time_array[$my_date] = array( $my_time_index => array( $my_time => array( 'id' => $bk->booking_id, 'resource' => $date_bk_res_id ) ) );
816
- } else {
817
-
818
- if ( !isset( $time_array[$my_date][$my_time_index] ) )
819
- $time_array[$my_date][$my_time_index] = array( $my_time => array( 'id' => $bk->booking_id, 'resource' => $date_bk_res_id ) );
820
- else {
821
- if ( !isset( $time_array[$my_date][$my_time_index][$my_time] ) )
822
- $time_array[$my_date][$my_time_index][$my_time] = array( 'id' => $bk->booking_id, 'resource' => $date_bk_res_id );
823
- else {
824
- $my_time_inc = 3;
825
- while ( isset( $time_array[$my_date][$my_time_index][$my_time + $my_time_inc] ) ) {
826
- $my_time_inc++;
827
- }
828
- //Just in case if we are have the booking in the same time, so we are
829
- $time_array[$my_date][$my_time_index][($my_time + $my_time_inc)] = array( 'id' => $bk->booking_id, 'resource' => $date_bk_res_id );
830
- }
831
- }
832
- }
833
- }
834
- }
835
-
836
- //debuge($time_array);
837
- // Sorting ..........
838
- foreach ( $time_array as $key => $value_t ) { // Sort the times from lower to higher
839
- ksort( $value_t );
840
- $time_array[$key] = $value_t;
841
- }
842
- ksort( $time_array ); // Sort array by dates from lower to higher.
843
- //debuge($time_array);
844
- /* $time_array:
845
- $key_date $value_t
846
- [2012-12-13] => Array ( $tt_index $times_bk_id_array
847
- [44401] => Array ( [12:20:01] => 19)
848
- ),
849
- [2012-12-14] => Array (
850
- [10802] => Array([03:00:02] => 19),
851
- [43801] => Array([12:10:01] => 2)
852
- ),
853
- .... */
854
-
855
- $time_array_new = array();
856
- foreach ( $time_array as $key_date => $value_t ) { // fill the $time_array_new - by bookings of full dates....
857
- $new_times_array = $fixed_time_hours_array; // Array ( [0] => Array, [3600] => Array, [7200] => Array .....
858
-
859
- foreach ( $value_t as $tt_index => $times_bk_id_array ) { // [44401] => Array ( [12:20:01] => 19 ), .....
860
- $tt_index_round = floor( ($tt_index / 60) / 60 ) * 60 * 60; // 14400, 18000,
861
- $is_bk_for_full_date = $tt_index % 10; // 0, 1, 2
862
-
863
- switch ( $is_bk_for_full_date ) {
864
- case 0: // Full date - fill every time slot
865
- foreach ( $new_times_array as $round_time_slot => $bk_id_array ) {
866
- $new_times_array[$round_time_slot] = array_merge( $bk_id_array, array_values( $times_bk_id_array ) );
867
- }
868
- unset( $time_array[$key_date][$tt_index] );
869
- break;
870
-
871
- case 1: break;
872
- case 2: break;
873
- default: break;
874
- }
875
- }
876
- if ( count( $time_array[$key_date] ) == 0 )
877
- unset( $time_array[$key_date] );
878
-
879
- $time_array_new[$key_date] = $new_times_array;
880
- }
881
- //debuge($time_array_new);
882
- //debuge($time_array);
883
- foreach ( $time_array as $key_date => $value_t ) {
884
- $new_times_array_for_day_start = $new_times_array_for_day_end = array();
885
- foreach ( $value_t as $tt_index => $times_bk_id_array ) { // [44401] => Array ( [12:20:01] => 19 ), .....
886
- $tt_index_round = floor( ($tt_index / 60) / 60 ) * 60 * 60; // 14400, 18000,
887
- //debuge($tt_index, $tt_index_round);
888
- $is_bk_for_full_date = $tt_index % 10; // 0, 1, 2
889
-
890
- if ( $is_bk_for_full_date == 1 ) {
891
- if ( !isset( $new_times_array_for_day_start[$tt_index_round] ) )
892
- $new_times_array_for_day_start[$tt_index_round] = array();
893
- $new_times_array_for_day_start[$tt_index_round] = array_merge( $new_times_array_for_day_start[$tt_index_round], array_values( $times_bk_id_array ) );
894
- }
895
- if ( $is_bk_for_full_date == 2 ) {
896
-
897
- // Its mean that the booking is finished exactly at the beginig of this hour,
898
- // so we will not fill the end of booking in this hour, but in previous
899
- if ( ($tt_index_round - $tt_index) == -2 ) {
900
- $tt_index_round = $tt_index_round - 60 * 60;
901
- }
902
-
903
- if ( !isset( $new_times_array_for_day_end[$tt_index_round] ) )
904
- $new_times_array_for_day_end[$tt_index_round] = array();
905
- $new_times_array_for_day_end[$tt_index_round] = array_merge( $new_times_array_for_day_end[$tt_index_round], array_values( $times_bk_id_array ) );
906
- }
907
- }
908
- $time_array[$key_date] = array( 'start' => $new_times_array_for_day_start, 'end' => $new_times_array_for_day_end );
909
- }
910
- //debuge($time_array);
911
- /* $time_array
912
- [2012-12-24] => Array
913
- (
914
- [start] => Array (
915
- [68400] => Array ( [0] => 15 ) )
916
- [end] => Array (
917
- [64800] => Array ( [0] => 6 ) )
918
-
919
- ) */
920
- $fill_this_date = array();
921
- //debuge($time_array_new['2017-01-13']);
922
-
923
-
924
- // Fil specific times based on start and end times
925
- foreach ( $time_array_new as $ddate => $ttime_round_array ) {
926
- foreach ( $ttime_round_array as $ttime_round => $bk_id_array ) { // [3600] => Array( [0] => Array ( [id] => 214 [resource] => 9 ), [1] => Array ( [id] => 154 [resource] => 7
927
-
928
- if ( isset( $time_array[$ddate] ) ) {
929
-
930
- if ( isset( $time_array[$ddate]['start'][$ttime_round] ) ) // array
931
- $fill_this_date = array_merge( $fill_this_date, array_values( $time_array[$ddate]['start'][$ttime_round] ) );
932
- //debuge($fill_this_date);
933
- $time_array_new[$ddate][$ttime_round] = array_merge( $time_array_new[$ddate][$ttime_round], $fill_this_date );
934
-
935
- //debuge($ddate, $ttime_round, $time_array_new[$ddate][$ttime_round]);
936
-
937
- //FixIn: 7.0.1.16 - advanced checking about delettion of times in $time_array[$ddate]['end']
938
-
939
- // End array checking for deleting.
940
- if ( isset( $time_array[$ddate]['end'][$ttime_round] ) ) // array
941
- foreach ( $time_array[$ddate]['end'][$ttime_round] as $toDelete ) {
942
- //if ( $ddate == '2017-01-13' ) {
943
- // debuge('$toDelete, $fill_this_date',$toDelete, $fill_this_date);
944
- //}
945
- $fill_this_date_keys_to_delete = array();
946
- foreach ( $fill_this_date as $fill_this_date_key => $check_element_array ) { // [0] => Array ( [id] => 54 [resource] => 5 )
947
-
948
- if ( // Check if arrays equals - identical
949
- ( is_array( $toDelete ) && is_array( $check_element_array ) )
950
- && ( count( $toDelete ) == count( $check_element_array ) )
951
- && ( array_diff( $toDelete, $check_element_array ) === array_diff( $check_element_array, $toDelete ) )
952
- ) {
953
- $fill_this_date_keys_to_delete[] = $fill_this_date_key; // $toDelete element exist so save key in original array
954
- }
955
- }
956
-
957
- $fill_this_date_new = array();
958
- foreach ( $fill_this_date as $fill_this_date_key => $fill_this_date_value ) {
959
- if ( ! in_array( $fill_this_date_key, $fill_this_date_keys_to_delete ) ) {
960
- $fill_this_date_new[] = $fill_this_date_value;
961
- }
962
- }
963
- $fill_this_date = $fill_this_date_new; // Reassign cleared array (with deleted values)
964
-
965
-
966
- if ( !empty( $fill_this_date ) ) {
967
- // $fill_this_date = array_diff( $fill_this_date, array( $toDelete ) );
968
-
969
- //if ( $ddate == '2017-01-13' ) {
970
- // debuge('AFTER:: $toDelete, $fill_this_date',$toDelete, $fill_this_date);
971
- //}
972
- }
973
- }
974
- }
975
- }
976
- }
977
-
978
- return array( $dates_array, $time_array_new );
979
- }
980
-
981
-
982
- ////////////////////////////////////////////////////////////////////////////
983
- // C a l e n d a r T i m e l i n e ///////////////////////////////
984
- ////////////////////////////////////////////////////////////////////////////
985
-
986
- private function wpbc_dates_only_of_specific_resource( $booked_dates_array, $resource_id, $bookings ) {
987
-
988
- foreach ( $booked_dates_array as $key => $value ) {
989
-
990
- $new_array = array();
991
- foreach ( $value as $bk_id ) {
992
- if ( $bk_id['resource'] == $resource_id ) {
993
- $new_array[] = $bk_id['id'];
994
- }
995
- }
996
- if ( !empty( $new_array ) )
997
- $booked_dates_array[$key] = $new_array;
998
- else
999
- unset( $booked_dates_array[$key] );
1000
- }
1001
- return $booked_dates_array;
1002
- }
1003
-
1004
-
1005
- private function wpbc_times_only_of_specific_resource( $time_array_new, $resource_id, $bookings ) {
1006
-
1007
- foreach ( $time_array_new as $date_key => $times_array ) {
1008
-
1009
- foreach ( $times_array as $time_key => $value ) {
1010
-
1011
- $new_array = array();
1012
- foreach ( $value as $bk_id ) {
1013
-
1014
- if ( $bk_id['resource'] == $resource_id ) {
1015
- $new_array[] = $bk_id['id'];
1016
- }
1017
- }
1018
- $time_array_new[$date_key][$time_key] = $new_array;
1019
- }
1020
- }
1021
- return $time_array_new;
1022
- }
1023
-
1024
-
1025
- private function wpbc_write_bk_id_css_classes( $prefix, $previous_booking_id ) {
1026
-
1027
- if ( (!isset( $previous_booking_id )) || (empty( $previous_booking_id )) )
1028
- return '';
1029
-
1030
- if ( is_string( $previous_booking_id ) )
1031
- $bk_id_array = explode( ',', $previous_booking_id );
1032
- else if ( is_array( $previous_booking_id ) )
1033
- $bk_id_array = $previous_booking_id;
1034
- else // Some Unknown situation
1035
- return '';
1036
-
1037
- $bk_id_array = array_unique( $bk_id_array );
1038
-
1039
- // If we are have several bookings, so add this special class
1040
- if ( count( $bk_id_array ) > 1 )
1041
- $css_class = 'here_several_bk_id ';
1042
- else
1043
- $css_class = '';
1044
-
1045
- foreach ( $bk_id_array as $bk_id ) {
1046
- $css_class .= $prefix . $bk_id . ' ';
1047
- }
1048
-
1049
- return $css_class;
1050
- }
1051
-
1052
-
1053
- ////////////////////////////////////////////////////////////////////////////
1054
- // S h o w
1055
- ////////////////////////////////////////////////////////////////////////////
1056
-
1057
- /** Header */
1058
- public function wpbc_show_timeline_header_row( $start_date = false ) {
1059
-
1060
- $current_resource_id = '';
1061
-
1062
- $is_matrix = $this->request_args['is_matrix'];
1063
-
1064
- $view_days_num = $this->request_args['view_days_num'];
1065
-
1066
-
1067
- $start_hour_for_1day_view = 0; //FixIn: 7.0.1.14
1068
- $end_hour_for_1day_view = 24;
1069
- $limit_hours = 24;
1070
-
1071
- if ( $is_matrix ) {
1072
-
1073
- // MATRIX VIEW
1074
- switch ( $view_days_num ) {
1075
- case '1':
1076
- $days_num = 1;
1077
- $cell_width = '99%';
1078
- $dwa = $this->week_days_titles['full'];
1079
- $time_selles_num = 24;
1080
- if ( isset( $this->request_args[ 'limit_hours' ] ) ) { //FixIn: 7.0.1.14
1081
- $limit_hours = explode(',',$this->request_args[ 'limit_hours' ]);
1082
- $start_hour_for_1day_view = intval( $limit_hours[0] );
1083
- $end_hour_for_1day_view = intval( $limit_hours[1] );
1084
- $limit_hours = $limit_hours[1] - $limit_hours[0];
1085
- }
1086
- break;
1087
- case '7':
1088
- $days_num = 7;
1089
- $cell_width = '13.8%';
1090
- $dwa = $this->week_days_titles['3'];
1091
- $time_selles_num = 1;
1092
- break;
1093
- case '30':
1094
- $days_num = 31;
1095
- $days_num = intval( date_i18n('t',$start_date) ); // num of days in the specific month, wchih relative to $real_date from header //FixIn: 7.0.1.47
1096
- $cell_width = '3%';
1097
- $dwa = $this->week_days_titles['3'];
1098
- $time_selles_num = 1;
1099
- break;
1100
- case '60':
1101
- $days_num = 62;
1102
- $cell_width = '1.5%';
1103
- $dwa = $this->week_days_titles['1'];
1104
- $time_selles_num = 1;
1105
- break;
1106
- default: // 30
1107
- $days_num = 31;
1108
- $cell_width = '3%';
1109
- $dwa = $this->week_days_titles['3'];
1110
- $time_selles_num = 1;
1111
- break;
1112
- }
1113
-
1114
- } else {
1115
-
1116
- switch ( $view_days_num ) {
1117
- case '90':
1118
- $days_num = 7;
1119
- $cell_width = '13.8%';
1120
- $dwa = $this->week_days_titles['full'];
1121
- $time_selles_num = 1;
1122
- break;
1123
- case '365':
1124
- $days_num = 32;
1125
- $days_num = intval( date_i18n('t',$start_date) ); // num of days in the specific month, wchih relative to $real_date from header //FixIn: 7.0.1.47
1126
- $cell_width = '3%';
1127
- $dwa = $this->week_days_titles['3'];
1128
- $time_selles_num = 1;
1129
- break;
1130
- default: // 30
1131
- $days_num = 1;
1132
- $cell_width = '99%';
1133
- $dwa = $this->week_days_titles['3'];
1134
- $time_selles_num = 24;
1135
- if ( isset( $this->request_args[ 'limit_hours' ] ) ) { //FixIn: 7.0.1.14
1136
- $limit_hours = explode(',',$this->request_args[ 'limit_hours' ]);
1137
- $start_hour_for_1day_view = intval( $limit_hours[0] );
1138
- $end_hour_for_1day_view = intval( $limit_hours[1] );
1139
- $limit_hours = $limit_hours[1] - $limit_hours[0];
1140
- }
1141
- break;
1142
- }
1143
- }
1144
-
1145
- if ( $start_date === false ) {
1146
-
1147
- if ( ! empty( $this->request_args['scroll_start_date'] ) )
1148
- list( $start_year, $start_month, $start_day ) = explode( '-', $this->request_args['scroll_start_date'] ); // scroll_start_date=2013-07-01
1149
- else
1150
- list( $start_year, $start_month, $start_day ) = explode( '-', date_i18n( 'Y-n-j' ) );
1151
-
1152
- } else {
1153
- list( $start_year, $start_month, $start_day ) = explode( '-', date_i18n( 'Y-m-d', $start_date ) );
1154
- }
1155
-
1156
- ?>
1157
- <div class="container-fluid <?php if ($is_matrix) { echo ' wpbc_tl_matrix_resources '; } else { echo ' wpbc_tl_single_resource '; } ?> "><div class="row"><div class="col-md-12">
1158
- <div id="timeline_scroller<?php echo $current_resource_id; ?>" class="wpbc_tl_scroller">
1159
- <div class="wpbc_tl_frame_dates" ><?php
1160
-
1161
- $previous_month = '';
1162
-
1163
- $bk_admin_url_today = wpbc_get_params_in_url( wpbc_get_bookings_url( false, false ), array( 'scroll_month', 'scroll_day', 'scroll_start_date' ) );
1164
-
1165
- for ( $d_inc = 0; $d_inc < $days_num; $d_inc++ ) {
1166
-
1167
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day + $d_inc ), $start_year );
1168
-
1169
- if ( date_i18n( 'm.d.Y' ) == date_i18n( "m.d.Y", $real_date ) )
1170
- $is_today = ' today_date ';
1171
- else
1172
- $is_today = '';
1173
-
1174
- $yy = date_i18n( "Y", $real_date ); //2012
1175
- $mm = date_i18n( "m", $real_date ); //09
1176
- $dd = date_i18n( "d", $real_date ); //31
1177
- $ww = date_i18n( "N", $real_date ); //7
1178
- $day_week = $dwa[$ww]; //Su
1179
-
1180
- $day_title = $dd . ' ' . $day_week;
1181
- if ( $is_matrix ) {
1182
- if ( $view_days_num == 1 ) {
1183
- $day_title = wpbc_get_date_in_correct_format( $yy . '-' . $mm . '-' . $dd . ' 00:00:00' );
1184
- //$day_title = $day_week . '<br/>' . $day_title[0];
1185
- $day_title = '(' . $day_week . ') &nbsp; ' . $day_title[0]; //FixIn:6.0.1
1186
- }
1187
- if ( $view_days_num == 7 ) {
1188
- $day_title = wpbc_get_date_in_correct_format( $yy . '-' . $mm . '-' . $dd . ' 00:00:00' );
1189
- $day_title = $day_week . '<br/>' . $day_title[0];
1190
- }
1191
- if ( $view_days_num == 30 ) {
1192
- $day_title = $dd . '<br/>' . $day_week;
1193
- }
1194
-
1195
- if ( $view_days_num == 60 ) {
1196
- $day_title = $dd . '<br/>' . $day_week;
1197
- }
1198
- } else {
1199
- if ( $view_days_num == 1 ) {
1200
- $day_title = wpbc_get_date_in_correct_format( $yy . '-' . $mm . '-' . $dd . ' 00:00:00' );
1201
- $day_title = $day_week . '<br/>' . $day_title[0];
1202
- }
1203
- if ( $view_days_num == 7 ) {
1204
- $day_title = wpbc_get_date_in_correct_format( $yy . '-' . $mm . '-' . $dd . ' 00:00:00' );
1205
- $day_title = $day_week . '<br/>' . $dd;
1206
- }
1207
- if ( $view_days_num == 30 ) {
1208
- $day_title = __( 'Times', 'booking' );
1209
- }
1210
- if ( $view_days_num == 90 ) {
1211
- $day_title = $day_week;
1212
- }
1213
- if ( $view_days_num == 365 ) {
1214
- $day_title = $dd;
1215
- }
1216
- }
1217
- $day_filter_id = $yy . '-' . $mm . '-' . $dd;
1218
-
1219
- if ( $previous_month != $mm ) {
1220
- $previous_month = $mm;
1221
- $month_title = date_i18n( "F", $real_date ); //09
1222
- $month_class = ' new_month ';
1223
- } else {
1224
- $month_title = '';
1225
- $month_class = '';
1226
- }
1227
-
1228
- ?>
1229
- <div id="cell_<?php echo $current_resource_id . '_' . $day_filter_id ; ?>"
1230
- class="wpbc_tl_day_cell wpbc_tl_day_cell_header wpbc_time_in_days_num_<?php echo $view_days_num;
1231
- ?> wpbc_tl_weekday<?php echo $ww . ' ' . $day_filter_id . ' ' . $month_class; ?>"
1232
- style="<?php echo 'width:' . $cell_width . ';'; ?>" ><?php
1233
-
1234
- if ($month_title != '') {
1235
- ?><div class="month_year"><?php echo $month_title .', ' . $yy ;?></div><?php
1236
- }
1237
- if ( ( $view_days_num==30 ) || ( $view_days_num == 60) ) {
1238
-
1239
- if ( ! $this->is_frontend ) {
1240
- ?><a href='<?php echo $bk_admin_url_today . '&scroll_start_date=' . $yy . '-' . $mm . '-' . $dd; ?>'><?php
1241
- }
1242
- ?> <div class="day_num day_num<?php echo $d_inc ?>"><?php echo $day_title;?></div><?php
1243
- if ( ! $this->is_frontend ) {
1244
- ?></a><?php
1245
- }
1246
-
1247
- } else {
1248
- ?><div class="day_num day_num<?php echo $d_inc ?>"><?php echo $day_title;?></div><?php
1249
- }
1250
-
1251
- // T i m e c e l l s
1252
- $tm = floor( 24 / $time_selles_num );
1253
- for ( $tt = 0; $tt < $time_selles_num; $tt++ ) { ?>
1254
-
1255
- <?php if ( ( $tt < $start_hour_for_1day_view ) || ( $tt > $end_hour_for_1day_view ) ) { continue; } //FixIn: 7.0.1.14 ?>
1256
-
1257
- <div class="wpbc_time_section_in_day wpbc_time_section_in_day_header time_hour<?php echo ($tt*$tm);
1258
- ?> wpbc_time_in_days_num_<?php echo $view_days_num;?>" style="<?php
1259
-
1260
- if ( $limit_hours < 24 ) { //FixIn: 7.0.1.14
1261
- $style_width = 'width:' . floatval( floor( round( 100 / $limit_hours , 2 ) * 10 ) / 10 - 0.2 ) . '%;';
1262
- echo $style_width;
1263
- }
1264
- ?>" ><?php
1265
-
1266
- //FixIn: 8.1.3.34
1267
- $bc_time_format = get_bk_option( 'booking_time_format');
1268
- if( ! empty( $bc_time_format ) ){ //FixIn: 8.2.1.2
1269
- $time_show = date_i18n( str_replace( ':i', '', get_bk_option( 'booking_time_format' ) ), mktime( $tt * $tm , 0, 0 ) );
1270
- echo ( $view_days_num < 31 ) ? $time_show : '';
1271
- } else {
1272
- echo ( ( $view_days_num < 31 ) ? ( ( ($tt*$tm) < 10?'0':'') . ($tt*$tm) . '<sup>:00</sup>' ) : '' );
1273
- }
1274
- ?></div><?php
1275
- }
1276
-
1277
- ?></div><?php
1278
-
1279
- }
1280
- ?>
1281
- </div>
1282
- </div>
1283
- </div></div></div><?php
1284
-
1285
- return $real_date ;
1286
- }
1287
-
1288
-
1289
- /** Row */
1290
- public function wpbc_show_timeline_booking_row( $current_resource_id, $start_date, $booking_data = array() ) {
1291
-
1292
- $is_matrix = $this->request_args['is_matrix'];
1293
-
1294
- $start_hour_for_1day_view = 0; //FixIn: 7.0.1.14
1295
- $end_hour_for_1day_view = 24;
1296
- $limit_hours = 24;
1297
-
1298
- $booked_dates_array = $booking_data[0];
1299
- $bookings = $booking_data[1];
1300
- $booking_types = $booking_data[2];
1301
- $time_array_new = $booking_data[3];
1302
-
1303
- // Remove dates and Times from the arrays, which is not belong to the $current_resource_id
1304
- // We do not remove it only, when the $current_resource_id - is empty - OLD ALL Resources VIEW
1305
- if ( empty( $current_resource_id ) ) {
1306
- $current_resource_id = 1;
1307
- }
1308
-
1309
- $booked_dates_array = $this->wpbc_dates_only_of_specific_resource( $booked_dates_array, $current_resource_id, $bookings );
1310
- $time_array_new = $this->wpbc_times_only_of_specific_resource( $time_array_new, $current_resource_id, $bookings );
1311
- //debuge($time_array_new);
1312
- $current_date = $start_date;
1313
-
1314
- $bk_url_listing = wpbc_get_bookings_url( true, false );
1315
-
1316
- // Initial params
1317
- $view_days_num = $this->request_args['view_days_num'];
1318
-
1319
- //$max_rows_number =
1320
- //debuge( date_i18n('Y-m-d',$start_date)) ;
1321
- if ( ! $is_matrix ) { // Single booking resource
1322
-
1323
- switch ($view_days_num) {
1324
- case '90':
1325
- $days_num = 7;
1326
- $cell_width = '13.8%';
1327
- $dwa = $this->week_days_titles['full'];
1328
- $time_selles_num = 1;
1329
- break;
1330
- case '365':
1331
- $days_num = 32;
1332
- $days_num = intval( date_i18n('t',$start_date) ); // num of days in the specific month, wchih relative to $real_date from header //FixIn: 7.0.1.47
1333
- $cell_width = '3%';
1334
- $dwa = $this->week_days_titles['1'];
1335
- $time_selles_num = 1;
1336
- break;
1337
- default: // 30
1338
- $days_num = 1;
1339
- $cell_width = '99%';;
1340
- $dwa = $this->week_days_titles['3'];
1341
- $time_selles_num = 24;//25;
1342
-
1343
- if ( isset( $this->request_args[ 'limit_hours' ] ) ) { //FixIn: 7.0.1.14
1344
- $limit_hours = explode(',',$this->request_args[ 'limit_hours' ]);
1345
- $start_hour_for_1day_view = intval( $limit_hours[0] );
1346
- $end_hour_for_1day_view = intval( $limit_hours[1] );
1347
- $limit_hours = $limit_hours[1] - $limit_hours[0];
1348
- }
1349
-
1350
- //$view_days_num = 1;
1351
- break;
1352
- }
1353
-
1354
- } else { // Multiple booking resources
1355
- //$view_days_num = 365;
1356
- switch ($view_days_num) {
1357
- case '1':
1358
- $days_num = 1;
1359
- $cell_width = '99%';//(7*4.75*31) . 'px';
1360
- $dwa = $this->week_days_titles['full'];
1361
- $time_selles_num = 24;
1362
-
1363
- if ( isset( $this->request_args[ 'limit_hours' ] ) ) { //FixIn: 7.0.1.14
1364
- $limit_hours = explode(',',$this->request_args[ 'limit_hours' ]);
1365
- $start_hour_for_1day_view = intval( $limit_hours[0] );
1366
- $end_hour_for_1day_view = intval( $limit_hours[1] );
1367
- $limit_hours = $limit_hours[1] - $limit_hours[0];
1368
- }
1369
-
1370
- break;
1371
- case '7':
1372
- $days_num = 7;
1373
- $cell_width = '13.8%';//(4.75*31) . 'px';
1374
- $dwa = $this->week_days_titles['full'];
1375
- $time_selles_num = 4;
1376
- break;
1377
- case '60':
1378
- $days_num = 62;
1379
- $cell_width = '1.5%';//(12) . 'px';;
1380
- $dwa = $this->week_days_titles['1'];
1381
- $time_selles_num = 1;
1382
- break;
1383
- case 'old_365':
1384
- $days_num = 365;
1385
- $cell_width = '1%';//(2) . 'px';;
1386
- $time_selles_num = 1;
1387
- $dwa = $this->week_days_titles['1'];
1388
- break;
1389
-
1390
- default: // 30
1391
- $days_num = 32;
1392
- $days_num = intval( date_i18n('t',$start_date) ); // num of days in the specific month, wchih relative to $real_date from header //FixIn: 7.0.1.47
1393
- $cell_width = '3%';//(31) . 'px';;
1394
- $dwa = $this->week_days_titles['3'];
1395
- $time_selles_num = 1;//25;
1396
- break;
1397
- }
1398
- }
1399
-
1400
- if ( $start_date === false ) {
1401
-
1402
- if ( ! empty( $this->request_args['scroll_start_date'] ) )
1403
- list( $start_year, $start_month, $start_day ) = explode( '-', $this->request_args['scroll_start_date'] ); // scroll_start_date=2013-07-01
1404
- else
1405
- list( $start_year, $start_month, $start_day ) = explode( '-', date_i18n( 'Y-n-j' ) );
1406
-
1407
- } else {
1408
- list( $start_year, $start_month, $start_day ) = explode( '-', date_i18n( 'Y-m-d', $start_date ) );
1409
- }
1410
-
1411
- $previous_booking_id = false;
1412
-
1413
- ?>
1414
- <div class="container-fluid <?php if ($is_matrix) { echo ' wpbc_tl_matrix_resources '; } else { echo ' wpbc_tl_single_resource '; } ?>"><div class="row"><div class="col-md-12">
1415
-
1416
- <div id="timeline_scroller<?php echo $current_resource_id; ?>" class="wpbc_tl_scroller">
1417
-
1418
- <div class="wpbc_tl_frame_dates" >
1419
- <?php
1420
-
1421
- $is_approved = false;
1422
- $previous_month = '';
1423
- for ( $d_inc = 0; $d_inc < $days_num; $d_inc++ ) {
1424
-
1425
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day + $d_inc ), $start_year );
1426
-
1427
- if ( date_i18n( 'm.d.Y' ) == date_i18n( "m.d.Y", $real_date ) )
1428
- $is_today = ' today_date ';
1429
- else {
1430
- if ( date_i18n( 'Y.m.d' ) > date_i18n( "Y.m.d", $real_date ) )
1431
- $is_today = ' past_date ';
1432
- else
1433
- $is_today = '';
1434
- }
1435
-
1436
- $yy = date_i18n( "Y", $real_date ); //2012
1437
- $mm = date_i18n( "m", $real_date ); //09
1438
- $dd = date_i18n( "d", $real_date ); //31
1439
- $ww = date_i18n( "N", $real_date ); //7
1440
-
1441
- $day_week = $dwa[$ww]; //Su
1442
-
1443
- $day_title = $dd;
1444
- if ( $view_days_num == 1 ) {
1445
- $day_title = wpbc_get_date_in_correct_format( $yy . '-' . $mm . '-' . $dd . ' 00:00:00' );
1446
- $day_title = $day_week . ', ' . $day_title[0];
1447
- }
1448
- if ( $view_days_num == 7 ) {
1449
- $day_title = wpbc_get_date_in_correct_format( $yy . '-' . $mm . '-' . $dd . ' 00:00:00' );
1450
- $day_title = $day_week . ', ' . $dd;
1451
- }
1452
- if ( $view_days_num == 30 ) {
1453
- $day_title = __( 'Times', 'booking' );
1454
- }
1455
-
1456
- $day_filter_id = $yy . '-' . $mm . '-' . $dd;
1457
-
1458
- if ( $previous_month != $mm ) {
1459
- $previous_month = $mm;
1460
- $month_title = date_i18n( "F", $real_date ); //09
1461
- $month_class = ' new_month ';
1462
- } else {
1463
- $month_title = '';
1464
- $month_class = '';
1465
- }
1466
-
1467
-
1468
- ?><div id="cell_<?php echo $current_resource_id . '_' . $day_filter_id ; ?>"
1469
- class="wpbc_tl_day_cell wpbc_tl_weekday<?php echo $ww . ' '; echo $is_today; echo ' '.$day_filter_id.' '.$month_class ; ?>"
1470
- style="<?php echo 'width:' . $cell_width . ';'; ?>"
1471
- ><?php
1472
-
1473
- // Show date in timeline cell.
1474
-
1475
- // if ( in_array( $ww, array( 1, 3, 6 ) ) ) // Show number of days only for the specific week days - for speeder loading.
1476
- echo '<i class="wpbc_day_cell_number wpbc_time_in_days_num_' . $view_days_num . ' " >'
1477
- . $dd . ( ($view_days_num == '90') ? '/' . $mm : '')
1478
- // . ( ($view_days_num == '90') ? $mm . '/' : '') . $dd // Show: "month/day" instead of "day/month"
1479
- . '</i>';
1480
-
1481
-
1482
- $title_in_day = $title = $title_hint ='';
1483
- $is_bk = 0;
1484
-
1485
- if ( $time_selles_num != 24 ) { // Full D a t e s
1486
- if ( $booked_dates_array !== false ) {
1487
-
1488
- $link_id_parameter = array();
1489
- if ( isset( $booked_dates_array[$day_filter_id] ) ) { // This date is B O O K E D
1490
- $is_bk = 1;
1491
- $booked_dates_array[$day_filter_id] = array_unique( $booked_dates_array[$day_filter_id] );
1492
- foreach ( $booked_dates_array[$day_filter_id] as $bk_id ) {
1493
-
1494
- $booking_num_in_day = count( $booked_dates_array[$day_filter_id] );
1495
-
1496
- if ( ($previous_booking_id != $bk_id) || ($booking_num_in_day > 1) ) {
1497
-
1498
- // if the booking take for the several days, so then do not show title in the other days
1499
- $my_bk_info = $this->wpbc_get_booking_info_4_tooltip( $bk_id, $bookings, $booking_types, $title_in_day, $title, $title_hint );
1500
-
1501
- $title_in_day = htmlspecialchars_decode( $my_bk_info[0] ); //FixIn: 8.4.2.8
1502
- $title = $my_bk_info[1];
1503
- $title_hint = $my_bk_info[2];
1504
- $is_approved = $my_bk_info[3];
1505
- }
1506
-
1507
- if ( $booking_num_in_day > 1 ) {
1508
- $previous_booking_id .= ',' . $bk_id;
1509
- } else
1510
- $previous_booking_id = $bk_id;
1511
-
1512
- $link_id_parameter[] = $bk_id;
1513
- }
1514
- } else
1515
- $previous_booking_id = false;
1516
-
1517
-
1518
- // Just one day cell
1519
-
1520
- $title_hint = str_replace( '"', "", $title_hint );
1521
- $link_id_parameter = implode( ',', $link_id_parameter );
1522
- if ( strpos( $title_in_day, ',' ) !== false ) {
1523
- $title_in_day = explode( ',', $title_in_day );
1524
- $title_in_day = $title_in_day[0] . ' ... ' . $title_in_day[(count( $title_in_day ) - 1)];
1525
- $title_in_day = '<span style=\'font-size:7px;\'>' . $title_in_day . '</span>';
1526
- }
1527
-
1528
- // Show the circle with bk ID(s) in a day
1529
- if ( ! empty($title_in_day ) ) {
1530
-
1531
- $is_show_popover_in_timeline = wpbc_is_show_popover_in_timeline( $this->is_frontend, $this->request_args['booking_hash'] ); //FixIn: 8.1.3.5
1532
-
1533
- if ( $is_show_popover_in_timeline )
1534
- echo '<a
1535
- href="javascript:void(0)"
1536
- data-content="' . $title_hint . '"
1537
- data-original-title="' . $title . '"
1538
- class="' . $this->wpbc_write_bk_id_css_classes( 'a_bk_id_', $previous_booking_id )
1539
- . ' popover_bottom popover_click ' . ( ($title != '') ? 'first_day_in_bookin' : '' )
1540
- . '" >'
1541
- . $title_in_day . '</a>';
1542
- else
1543
- echo '<a href="javascript:void(0)"
1544
- class="' . $this->wpbc_write_bk_id_css_classes( 'a_bk_id_', $previous_booking_id )
1545
- . ( ($title != '') ? 'first_day_in_bookin' : '' )
1546
- . '" >' . $title_in_day . '</a>';
1547
- }
1548
- $tm = floor( 24 / $time_selles_num );
1549
- $tt = 0;
1550
- $my_bkid_title = '';
1551
-
1552
- if ( ( ! empty( $previous_booking_id ) )
1553
- && isset( $bookings[$previous_booking_id] )
1554
- && isset( $bookings[$previous_booking_id]->trash ) ) //FixIn:6.1.1.10
1555
- $is_trash = $bookings[$previous_booking_id]->trash;
1556
- else
1557
- $is_trash = false;
1558
-
1559
- $is_blank_bookings = false; //FixIn: 7.2.1.8
1560
- if ( ! empty( $previous_booking_id ) ) { //FixIn: 7.0.1.40
1561
- if ( ( isset($bookings[$previous_booking_id]->form_data['email']) )
1562
- && ( $bookings[$previous_booking_id]->form_data['email'] == 'admin@blank.com' )
1563
- ) $is_blank_bookings = true;
1564
- }
1565
-
1566
- $css_class_additional = apply_filters( 'wpbc_timeline_booking_header_css', '', $previous_booking_id, $bookings ); //FixIn: 7.0.1.41
1567
-
1568
- echo '<div class="' . $this->wpbc_write_bk_id_css_classes( 'cell_bk_id_', $previous_booking_id )
1569
- . ' wpbc_time_section_in_day timeslots_in_this_day' . $time_selles_num
1570
- . ' time_hour' . ($tt * $tm)
1571
- . ' wpbc_time_in_days_num_' . $view_days_num
1572
- . ' ' . ( $is_bk ? 'time_booked_in_day' : '' )
1573
- . ' ' . ( $is_trash ? ' booking_trash ': '') //FixIn:6.1.1.10
1574
- . ' ' . ( $is_blank_bookings ? ' booking_blank ': '') //FixIn: 7.2.1.8
1575
- . ' ' . ( $is_approved ? 'approved' : '' )
1576
- . ' ' . $css_class_additional
1577
- . '">'
1578
- . ( $is_bk ? $my_bkid_title : '' )
1579
- . '</div>';
1580
- }
1581
- }
1582
-
1583
-
1584
- if ($time_selles_num == 24 ) { // Time Slots in a date
1585
-
1586
- $is_showed_title_in_row = 0; //FixIn: 7.0.1.16
1587
-
1588
- if ( isset( $time_array_new[$day_filter_id] ) ) {
1589
- //debuge($time_array_new[$day_filter_id]);
1590
- // Loop time cells /////////////////////////////////////////////////////////////////////////////////////////////////
1591
- $tm = floor( 24 / $time_selles_num );
1592
- for ( $tt = 0; $tt < $time_selles_num; $tt++ ) {
1593
-
1594
-
1595
-
1596
- $my_bk_id_array = $time_array_new[$day_filter_id][$tt * 60 * 60];
1597
- $my_bk_id_array = array_unique( $my_bk_id_array ); //remove dublicates
1598
-
1599
- if ( empty( $my_bk_id_array ) ) { // Time cell is E m p t y
1600
-
1601
- $is_bk = 0;
1602
- $previous_booking_id = false;
1603
- $my_bkid_title = $title_in_day = $title = $title_hint = '';
1604
- } else { // Time cell is B O O K E D
1605
- $is_bk = 1;
1606
- $link_id_parameter = array();
1607
-
1608
- if ( ($previous_booking_id !== $my_bk_id_array) || ($previous_booking_id === false) ) {
1609
- $my_bkid_title = $title_in_day = $title = $title_hint = '';
1610
- foreach ( $my_bk_id_array as $bk_id ) {
1611
-
1612
- $my_bk_info = $this->wpbc_get_booking_info_4_tooltip( $bk_id, $bookings, $booking_types, $title_in_day, $title, $title_hint );
1613
-
1614
- $title_in_day = htmlspecialchars_decode( $my_bk_info[0] ); //FixIn: 8.4.2.8
1615
- $title = $my_bk_info[1];
1616
- $title_hint = $my_bk_info[2];
1617
- $is_approved = $my_bk_info[3];
1618
- $link_id_parameter[] = $bk_id;
1619
- }
1620
- } else {
1621
- if ( $is_showed_title_in_row == 1 ){ //FixIn: 7.0.1.16
1622
- $my_bkid_title = $title_in_day = $title = $title_hint = '';
1623
- }
1624
- }
1625
- $previous_booking_id = $my_bk_id_array;
1626
-
1627
-
1628
- $title_hint = str_replace( '"', "", $title_hint );
1629
- $link_id_parameter = implode( ',', $link_id_parameter );
1630
- if ( strpos( $title_in_day, ',' ) !== false ) {
1631
- $title_in_day = explode( ',', $title_in_day );
1632
- $title_in_day = $title_in_day[0] . ' ... ' . $title_in_day[(count( $title_in_day ) - 1)];
1633
- $title_in_day = '<span style=\'font-size:7px;\'>' . $title_in_day . '</span>';
1634
- }
1635
-
1636
- // Show the circle with bk ID(s) in a day
1637
- if ( ! empty($title_in_day ) ) {
1638
-
1639
- $is_show_popover_in_timeline = wpbc_is_show_popover_in_timeline( $this->is_frontend, $this->request_args['booking_hash'] ); //FixIn: 8.1.3.5
1640
-
1641
- if ( $is_show_popover_in_timeline )
1642
- $my_bkid_title = '<a
1643
- href="javascript:void(0)"
1644
- data-content="' . $title_hint . '"
1645
- data-original-title="' . $title . '"
1646
- class="' . $this->wpbc_write_bk_id_css_classes( 'cell_bk_id_', $previous_booking_id )
1647
- . ' popover_bottom popover_click '
1648
- . ( ($title != '') ? 'first_day_in_bookin' : '' )
1649
- . ' ">'
1650
- . $title_in_day
1651
- . '</a>';
1652
- else
1653
- $my_bkid_title = '<span
1654
-
1655
- class="' . $this->wpbc_write_bk_id_css_classes( 'cell_bk_id_', $previous_booking_id )
1656
- . ( ($title != '') ? 'first_day_in_bookin' : '' )
1657
- . ' ">'
1658
- . $title_in_day
1659
- . '</span>';
1660
- }
1661
-
1662
- }
1663
-
1664
- if ( ( $is_today == ' today_date ' ) && ( intval( date_i18n( 'H' ) ) > ($tt * $tm) ) )
1665
- $is_past_time = ' past_time ';
1666
- else
1667
- $is_past_time = '';
1668
-
1669
- if ( $is_bk ) //FixIn:6.1.1.10
1670
- $is_trash = $bookings[ $bk_id ]->trash;
1671
- else
1672
- $is_trash = false;
1673
-
1674
-
1675
- if ( ( $tt < $start_hour_for_1day_view ) || ( $tt > $end_hour_for_1day_view ) ) { continue; } //FixIn: 7.0.1.14
1676
- if ( $limit_hours < 24 ) { //FixIn: 7.0.1.14
1677
- $style_width = 'width:' . floatval( floor( round( 100 / $limit_hours , 2 ) * 10 ) / 10 - 0.2 ) . '%;';
1678
- } else {
1679
- $style_width = '';
1680
- }
1681
-
1682
- echo '<div class="'
1683
- . $this->wpbc_write_bk_id_css_classes( 'cell_bk_id_', $previous_booking_id )
1684
- . ' wpbc_time_section_in_day timeslots_in_this_day' . $time_selles_num
1685
- . ' time_hour' . ($tt * $tm)
1686
- . ' wpbc_time_in_days_num_' . $view_days_num
1687
- . ' ' . ( $is_bk ? ' time_booked_in_day' . $is_past_time : '' )
1688
- . ' ' . ( $is_approved ? 'approved' : '' )
1689
- . ' ' . ( $is_trash? ' booking_trash ': '') //FixIn:6.1.1.10
1690
- . '"'
1691
- . ' style="' . $style_width . '"'
1692
- . '>'
1693
- . ( $is_bk ? $my_bkid_title : '' )
1694
- . '</div>';
1695
- $is_showed_title_in_row = 1; //FixIn: 7.0.1.16
1696
- } //////////////////////////////////////////////////////////////////////////////////////////////////////////////
1697
-
1698
- } else { // Just time borders
1699
-
1700
- $tm = floor( 24 / $time_selles_num );
1701
-
1702
- for ( $tt = 0; $tt < $time_selles_num; $tt++ ) {
1703
-
1704
- if ( ( $tt < $start_hour_for_1day_view ) || ( $tt > $end_hour_for_1day_view ) ) { continue; } //FixIn: 7.0.1.14
1705
- if ( $limit_hours < 24 ) { //FixIn: 7.0.1.14
1706
- $style_width = 'width:' . floatval( floor( round( 100 / $limit_hours , 2 ) * 10 ) / 10 - 0.2 ) . '%;';
1707
- } else {
1708
- $style_width = '';
1709
- }
1710
-
1711
- echo '<div class="wpbc_time_section_in_day'
1712
- . ' timeslots_in_this_day' . $time_selles_num
1713
- . ' time_hour' . ($tt * $tm)
1714
- . ' wpbc_time_in_days_num_' . $view_days_num
1715
- . ' ' . ( $is_bk ? 'time_booked_in_day' : '' )
1716
- . ' ' . ( $is_approved ? 'approved' : '' )
1717
- . '"'
1718
- . ' style="' . $style_width . '"'
1719
- . '>'
1720
- . ( $is_bk ? $my_bkid_title : '' )
1721
- . '</div>';
1722
- $is_showed_title_in_row = 1; //FixIn: 7.0.1.16
1723
- }
1724
- }
1725
- }
1726
-
1727
-
1728
- ?></div><?php
1729
- }
1730
-
1731
- ?>
1732
- </div>
1733
-
1734
- </div>
1735
-
1736
- </div></div></div>
1737
- <?php
1738
-
1739
- return $current_date ;
1740
- }
1741
-
1742
-
1743
- /**
1744
- * Show timeline
1745
- * All parameters must be defined.
1746
- */
1747
- public function show_timeline() {
1748
- $this->wpbc_show_timeline( $this->dates_array, $this->bookings, $this->booking_types, $this->time_array_new );
1749
- }
1750
-
1751
-
1752
- /** Show Structure of the TimeLine */
1753
- public function wpbc_show_timeline( $dates_array, $bookings, $booking_types, $time_array_new = array() ){
1754
-
1755
- // Skip showing rows of booking resource(s) in TimeLine or Calendar Overview, if no any exist booking(s) for current view
1756
- $booked_booking_resources = array(); //FixIn: 7.0.1.51
1757
- if ( ! empty( $this->request_args['only_booked_resources'] ) ) {
1758
-
1759
- foreach ( $bookings as $single_booking ) {
1760
-
1761
- if ( ! empty( $single_booking->booking_type ) )
1762
- $booked_booking_resources[] = $single_booking->booking_type;
1763
-
1764
- foreach ( $single_booking->dates as $booking_date_obj ) {
1765
- if ( ( isset( $booking_date_obj->type_id ) ) && ( ! empty( $booking_date_obj->type_id ) ) )
1766
- $booked_booking_resources[] = $booking_date_obj->type_id;
1767
- }
1768
- }
1769
- $booked_booking_resources = array_unique( $booked_booking_resources );
1770
- }
1771
-
1772
- $view_days_num = $this->request_args['view_days_num']; // Get start date and number of rows, which is depend from the view days mode
1773
- $is_matrix = $this->request_args['is_matrix'];
1774
- $scroll_day = 0;
1775
- $scroll_month = 0;
1776
- $start_year = date_i18n( "Y" );
1777
- $start_month = date_i18n( "m" ); // 09
1778
-
1779
- if ( ! empty( $this->request_args['scroll_start_date'] ) ) { // scroll_start_date=2013-07-01
1780
- // Set the correct start date, if was selected the stard date different from the today in the Filters Tab.
1781
- list( $start_year, $start_month, $start_day ) = explode( '-', $this->request_args['scroll_start_date'] );
1782
- }
1783
-
1784
- ////////////////////////////////////////////////////////////////////////
1785
- // Get Start Date and Scroll Day/Month Variables
1786
- ////////////////////////////////////////////////////////////////////////
1787
- if ( $is_matrix ) { // MATRIX VIEW
1788
-
1789
- $bk_resources_id = explode( ',', $this->request_args['wh_booking_type'] );
1790
- $max_rows_number = count( $bk_resources_id );
1791
-
1792
- switch ( $view_days_num ) {
1793
- case '1':
1794
- if ( isset( $this->request_args['scroll_day'] ) )
1795
- $scroll_day = $this->request_args['scroll_day'];
1796
- if ( empty( $this->request_args['scroll_start_date'] ) )
1797
- $start_day = date_i18n( "d" ); //FixIn: 7.0.1.13
1798
- break;
1799
-
1800
- case '30':
1801
- case '60':
1802
- if ( isset( $this->request_args['scroll_month'] ) )
1803
- $scroll_month = $this->request_args['scroll_month'];
1804
- if ( empty( $this->request_args['scroll_start_date'] ) )
1805
- $start_day = 1;
1806
- break;
1807
-
1808
- case '7': // 7 Week - start from Monday (or other start week day)
1809
- if ( isset( $this->request_args['scroll_day'] ) )
1810
- $scroll_day = $this->request_args['scroll_day'];
1811
- if ( empty( $this->request_args['scroll_start_date'] ) )
1812
- $start_day = date_i18n( "d" );
1813
- $start_week_day_num = date_i18n( "w" );
1814
- $start_day_weeek = get_bk_option( 'booking_start_day_weeek' ); //[0]:Sun .. [6]:Sut
1815
-
1816
- if ( $start_week_day_num != $start_day_weeek ) {
1817
- for ( $d_inc = 1; $d_inc < 8; $d_inc++ ) { // Just get week back
1818
-
1819
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day - $d_inc ), $start_year );
1820
-
1821
- $start_week_day_num = date_i18n( "w", $real_date );
1822
- if ( $start_week_day_num == $start_day_weeek ) {
1823
- $start_day = date_i18n( "d", $real_date );
1824
- $start_year = date_i18n( "Y", $real_date );
1825
- $start_month = date_i18n( "m", $real_date );
1826
- $d_inc = 9;
1827
- }
1828
- }
1829
- }
1830
- break;
1831
-
1832
- default: //30
1833
- if ( isset( $this->request_args['scroll_month'] ) )
1834
- $scroll_month = $this->request_args['scroll_month'];
1835
- if ( empty( $this->request_args['scroll_start_date'] ) )
1836
- $start_day = 1;
1837
- break;
1838
- }
1839
-
1840
- } else { // SINGLE Resource VIEW
1841
-
1842
- switch ( $view_days_num ) {
1843
- case '90':
1844
- if ( isset( $this->request_args['scroll_day'] ) )
1845
- $scroll_day = $this->request_args['scroll_day'];
1846
- else
1847
- $scroll_day = 0;
1848
-
1849
- $max_rows_number = 12;
1850
- if ( empty( $this->request_args['scroll_start_date'] ) )
1851
- $start_day = date_i18n( "d" );
1852
- $start_week_day_num = date_i18n( "w" );
1853
- $start_day_weeek = get_bk_option( 'booking_start_day_weeek' ); //[0]:Sun .. [6]:Sut
1854
-
1855
- if ( $start_week_day_num != $start_day_weeek ) {
1856
- for ( $d_inc = 1; $d_inc < 8; $d_inc++ ) { // Just get week back
1857
- $real_date = mktime( 0, 0, 0, $start_month, ($start_day - $d_inc ), $start_year );
1858
-
1859
- $start_week_day_num = date_i18n( "w", $real_date );
1860
- if ( $start_week_day_num == $start_day_weeek ) {
1861
- $start_day = date_i18n( "d", $real_date );
1862
- $start_year = date_i18n( "Y", $real_date );
1863
- $start_month = date_i18n( "m", $real_date );
1864
- $d_inc = 9;
1865
- }
1866
- }
1867
- }
1868
- break;
1869
-
1870
- case '365':
1871
- if ( isset( $this->request_args['scroll_month'] ) )
1872
- $scroll_month = $this->request_args['scroll_month'];
1873
- else
1874
- $scroll_month = 0;
1875
- $max_rows_number = 12;
1876
- if ( empty( $this->request_args['scroll_start_date'] ) )
1877
- $start_day = 1;
1878
- break;
1879
-
1880
- default: // 30
1881
- if ( isset( $this->request_args['scroll_day'] ) )
1882
- $scroll_day = $this->request_args['scroll_day'];
1883
- else
1884
- $scroll_day = 0;
1885
-
1886
- $max_rows_number = 31;
1887
- if ( empty( $this->request_args['scroll_start_date'] ) )
1888
- $start_day = date_i18n( "d" ); //FixIn: 7.0.1.13
1889
- break;
1890
- }
1891
- }
1892
-
1893
- ////////////////////////////////////////////////////////////////////////////////////////////////
1894
-
1895
- ?><div class="wpbc_timeline_frame<?php if ( $this->is_frontend ) echo ' wpbc_timeline_front_end' ?>">
1896
- <table class="wpbc_tl_table table table-striped" cellpadding="0" cellspacing="0">
1897
- <tr class="wpbc_tl_table_header">
1898
- <?php
1899
- if ( $this->is_frontend ) {
1900
- ?><th colspan="2" class="wpbc_tl_collumn_2"><?php
1901
-
1902
- $title = apply_bk_filter('wpdev_check_for_active_language', $this->timeline_titles['header_title'] );
1903
-
1904
- $params_nav = array();
1905
- $params_nav['title'] = $title;
1906
- $this->client_navigation( $params_nav );
1907
-
1908
- ?></th><?php
1909
-
1910
- } else {
1911
- ?>
1912
- <th class="wpbc_tl_collumn_1"><?php
1913
- $title = apply_bk_filter('wpdev_check_for_active_language', $this->timeline_titles['header_column1'] );
1914
- echo $title; // Resources
1915
- ?></th>
1916
- <th class="wpbc_tl_collumn_2"><?php
1917
- $title = apply_bk_filter('wpdev_check_for_active_language', $this->timeline_titles['header_column2'] );
1918
- echo $title; // Dates
1919
- ?></th>
1920
- <?php } ?>
1921
- </tr>
1922
- <tr class="wpbc_tl_table_row_colspan">
1923
- <td colspan="2"> </td>
1924
- </tr>
1925
- <tr class="wpbc_tl_table_titles">
1926
- <td class="wpbc_tl_collumn_1"></td>
1927
- <td class="wpbc_tl_collumn_2"><?php
1928
- // Header above the calendar table
1929
- $real_date = mktime( 0, 0, 0, ($start_month ), $start_day, $start_year );
1930
-
1931
- if ( $is_matrix ) { // MATRIX VIEW
1932
- switch ( $view_days_num ) { // Set real start date for the each rows in calendar
1933
- case '1':
1934
- case '7':
1935
- $real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $scroll_day ), $start_year );
1936
- break;
1937
-
1938
- case '30':
1939
- case '60':
1940
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month ), $start_day, $start_year );
1941
- break;
1942
-
1943
- default: // 30
1944
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month ), $start_day, $start_year );
1945
- break;
1946
- }
1947
- } else { // Single Resource View
1948
- switch ( $view_days_num ) { // Set real start date for the each rows in calendar
1949
- case '90':
1950
- $real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $scroll_day ), $start_year );
1951
- break;
1952
-
1953
- case '365':
1954
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month ), $start_day, $start_year );
1955
- break;
1956
-
1957
- default: // 30
1958
- $real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $scroll_day ), $start_year );
1959
- break;
1960
- }
1961
- }
1962
-
1963
- $this->wpbc_show_timeline_header_row( $real_date );
1964
- ?>
1965
- </td>
1966
- </tr><?php
1967
-
1968
- for ( $d_inc = 0; $d_inc < $max_rows_number; $d_inc++ ) {
1969
-
1970
- // Skip showing rows of booking resource(s) in TimeLine or Calendar Overview, if no any exist booking(s) for current view
1971
- if ( ! empty( $this->request_args['only_booked_resources'] ) ) { //FixIn: 7.0.1.51
1972
-
1973
- if ( $is_matrix ) $resource_id = $bk_resources_id[$d_inc];
1974
- else $resource_id = $this->request_args['wh_booking_type']; // Request from GET or REQUEST
1975
-
1976
- if ( ! in_array( $resource_id, $booked_booking_resources ) ) {
1977
- continue;
1978
- }
1979
- }
1980
-
1981
-
1982
- // Ger Start Date to real_date variabale /////////////////////
1983
- if ( $is_matrix ) { // MATRIX VIEW
1984
- switch ( $view_days_num ) { // Set real start date for the each rows in calendar
1985
- case '1':
1986
- case '7':
1987
- $real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $scroll_day ), $start_year );
1988
- break;
1989
-
1990
- case '30':
1991
- case '90':
1992
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month ), $start_day, $start_year );
1993
- break;
1994
-
1995
- default: // 30
1996
- $real_date = mktime( 0, 0, 0, ($start_month + $scroll_month ), $start_day, $start_year );
1997
- break;
1998
- }
1999
- } else { // Single Resource View
2000
- switch ( $view_days_num ) { // Set real start date for the each rows in calendar
2001
- case '90':
2002
- $real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $d_inc * 7 + $scroll_day ), $start_year );
2003
- break;
2004
-
2005
- case '365':
2006
- $real_date = mktime( 0, 0, 0, ($start_month + $d_inc + $scroll_month ), $start_day, $start_year );
2007
- break;
2008
-
2009
- default: // 30
2010
- $real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $d_inc + $scroll_day ), $start_year );
2011
- break;
2012
- }
2013
- }
2014
- ////////////////////////////////////////////////////////////////
2015
- ?>
2016
- <tr class="wpbc_tl_table_row_bookings">
2017
- <td class="wpbc_tl_collumn_1"><?php
2018
-
2019
- // Title in first collumn of the each row in calendar //////
2020
- if ( ( $is_matrix ) && ( isset( $bk_resources_id[$d_inc] ) ) && (isset( $booking_types[$bk_resources_id[$d_inc]] )) ) { // Matrix - resource titles
2021
-
2022
- $resource_value = $booking_types[$bk_resources_id[$d_inc]];
2023
- $bk_admin_url = wpbc_get_params_in_url( wpbc_get_bookings_url( false, false ), array( 'wh_booking_type' ) );
2024
-
2025
- ?><div class="wpbc_tl_resource_title <?php
2026
- if ( isset( $resource_value->parent ) ) { if ( $resource_value->parent == 0 ) { echo 'parent'; } else { echo 'child'; } }
2027
- ?> "><?php
2028
- if ( $this->is_frontend ) {
2029
-
2030
- if ( ( isset( $this->options['resource_link'] ) ) && ( isset( $this->options['resource_link'][ $resource_value->booking_type_id ] ) ) ){ //FixIn: 7.0.1.50
2031
-
2032
- ?><a href="<?php echo $this->options['resource_link'][ $resource_value->booking_type_id ]; ?>" ><?php //FixIn: 7.2.1.14
2033
- }
2034
-
2035
- echo apply_bk_filter('wpdev_check_for_active_language', $resource_value->title ); //FixIn: 7.0.1.11
2036
-
2037
- if ( ( isset( $this->options['resource_link'] ) ) && ( isset( $this->options['resource_link'][ $resource_value->booking_type_id ] ) ) ){ //FixIn: 7.0.1.50
2038
- ?></a><?php
2039
- }
2040
- } else {
2041
- ?><a href="<?php echo $bk_admin_url . '&wh_booking_type=' . $bk_resources_id[$d_inc]; ?>" /><?php
2042
- echo apply_bk_filter('wpdev_check_for_active_language', $resource_value->title );
2043
- ?></a><?php
2044
- }
2045
- ?></div><?php
2046
-
2047
- } else { // Single Resource - Dates titles
2048
-
2049
- ?><div class="wpbc_tl_resource_title"><?php
2050
-
2051
- switch ( $view_days_num ) {
2052
- case '90':
2053
- $end_real_date = mktime( 0, 0, 0, $start_month, ( $start_day + $d_inc * 7 + $scroll_day ) + 6, $start_year );
2054
- $date_format = ' j, Y'; //get_bk_option( 'booking_date_format');
2055
- echo __( date_i18n( "M", $real_date ) ) . date_i18n( $date_format, $real_date ) . ' - ' . __( date_i18n( "M", $end_real_date ) ) . date_i18n( $date_format, $end_real_date );
2056
- break;
2057
-
2058
- case '365':
2059
- echo __( date_i18n( "F", $real_date ) ) . ', ' . date_i18n( "Y", $real_date );
2060
- break;
2061
-
2062
- default: // 30
2063
- //$date_format = 'd / m / Y';
2064
- $date_format = get_bk_option( 'booking_date_format' ); //FixIn:5.4.5.13
2065
- echo __( date_i18n( "D", $real_date ) ) . ', ' . date_i18n( $date_format, $real_date );
2066
- break;
2067
- }
2068
-
2069
- ?></div><?php
2070
- }
2071
- ?>
2072
- </td>
2073
- <td class="wpbc_tl_collumn_2">
2074
- <div class="wpbc_tl_dates_line"><?php
2075
-
2076
- if ( $is_matrix ) $resource_id = $bk_resources_id[$d_inc];
2077
- else $resource_id = $this->request_args['wh_booking_type']; // Request from GET or REQUEST
2078
-
2079
- $this->wpbc_show_timeline_booking_row(
2080
- $resource_id
2081
- , $real_date
2082
- , array(
2083
- $dates_array
2084
- , $bookings
2085
- , $booking_types
2086
- , $time_array_new
2087
- )
2088
- );
2089
- ?></div>
2090
- </td>
2091
- </tr><?php
2092
- }
2093
-
2094
- ?></table></div><?php
2095
- }
2096
-
2097
-
2098
- ////////////////////////////////////////////////////////////////////////////
2099
- // T O O L T I P
2100
- ////////////////////////////////////////////////////////////////////////////
2101
-
2102
- /**
2103
- * Get Booking Date for PopOver and inday cell text.
2104
- *
2105
- * @param int $bk_id
2106
- * @param array $bookings
2107
- * @param array $booking_types
2108
- * @param string $text_in_day_cell
2109
- * @param string $header_title
2110
- * @param string $content_text
2111
- *
2112
- * @return array
2113
- */
2114
- public function wpbc_get_booking_info_4_tooltip( $bk_id, $bookings, $booking_types, $text_in_day_cell='', $header_title='', $content_text='' ){
2115
-
2116
- if ( isset( $bookings[ $bk_id ] ) ) {
2117
- $bookings[ $bk_id ]->form_show = str_replace( "&amp;", '&', $bookings[ $bk_id ]->form_show ); //FixIn:7.1.2.12
2118
- }
2119
-
2120
- $is_show_popover_in_timeline = wpbc_is_show_popover_in_timeline( $this->is_frontend, $this->request_args['booking_hash'] ); //FixIn: 8.1.3.5
2121
-
2122
- if ( count( $bookings[$bk_id]->dates ) > 0 )
2123
- $is_approved = $bookings[$bk_id]->dates[0]->approved;
2124
- else $is_approved = 0;
2125
-
2126
-
2127
- ////////////////////////////////////////////////////////////////////////
2128
- // Text in Day Cell
2129
- ////////////////////////////////////////////////////////////////////////
2130
- if ( ! empty( $text_in_day_cell ) ) $text_in_day_cell .= ','; // Other Booking in the same day
2131
-
2132
- if ( $this->is_frontend ) $what_show_in_day_template = get_bk_option( 'booking_default_title_in_day_for_timeline_front_end' );
2133
- else $what_show_in_day_template = get_bk_option( 'booking_default_title_in_day_for_calendar_view_mode' );
2134
-
2135
- if ( function_exists( 'get_title_for_showing_in_day' ) ) {
2136
- $text_in_day_cell .= esc_textarea( get_title_for_showing_in_day( $bk_id, $bookings, $what_show_in_day_template ) ); //FixIn: 7.1.1.2
2137
- } else {
2138
- if ( ! $this->is_frontend )
2139
- $text_in_day_cell .= $bk_id . ':' . esc_textarea( $bookings[$bk_id]->form_data['_all_fields_']['name'] ); // Default Free //FixIn: 7.1.1.2
2140
- }
2141
-
2142
- if ( ! $is_show_popover_in_timeline ) {
2143
- return array(
2144
- $text_in_day_cell
2145
- , $text_in_day_cell//'' // $header_title
2146
- , '' // $content_text
2147
- , $is_approved
2148
- ) ;
2149
- }
2150
-
2151
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2152
- // P O P O V E R
2153
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2154
-
2155
-
2156
- ////////////////////////////////////////////////////////////////////////
2157
- // Header
2158
- ////////////////////////////////////////////////////////////////////////
2159
- if ( $header_title != '' ) { // Each new title of booking in the same day start from new line
2160
- if ( ! $this->is_frontend )
2161
- $header_title .= '<div class=\'clear\'></div>'; // New line
2162
- else
2163
- $header_title .= '; '; // Comma separated
2164
- }
2165
- $header_title .= '<div class=\'popover-title-id\' > ID: ' . $bk_id . '</div>'; // ID
2166
-
2167
- //$header_title .= '<div class=\'popover-title-id\' > ' .
2168
- //(! empty($bookings[$bk_id]->form_data['_all_fields_']['name']) ? $bookings[$bk_id]->form_data['_all_fields_']['name'] : '' ) . ' '
2169
- //. (! empty($bookings[$bk_id]->form_data['_all_fields_']['secondname']) ? $bookings[$bk_id]->form_data['_all_fields_']['secondname'] : '' )
2170
- //. '</div>'; // ID
2171
-
2172
-
2173
- // Buttons
2174
- $header_title .= '<div class=\'control-group timeline_info_bk_actionsbar_' . $bk_id . '\' >';
2175
- $is_can = true; //current_user_can( 'edit_posts' );
2176
- if ( ( ! $this->is_frontend ) && ( $is_can ) ) {
2177
- // Link
2178
- $header_title .= '<a class=\'button button-secondary\' href=\''.wpbc_get_bookings_url( true, false ).'&wh_booking_id='.$bk_id.'&view_mode=vm_listing&tab=actions\' ><i class=\'glyphicon glyphicon-screenshot\'></i></a>';
2179
- //Edit
2180
- if ( class_exists( 'wpdev_bk_personal' ) ) {
2181
- $bk_url_add = wpbc_get_new_booking_url( true, false );
2182
- $bk_hash = (isset( $bookings[$bk_id]->hash )) ? $bookings[$bk_id]->hash : '';
2183
- $bk_booking_type = $bookings[$bk_id]->booking_type;
2184
- $edit_booking_url = $bk_url_add . '&booking_type=' . $bk_booking_type . '&booking_hash=' . $bk_hash . '&parent_res=1';
2185
- $header_title .= '<a class=\'button button-secondary\' href=\'' . $edit_booking_url . '\' onclick=\'\' ><i class=\'glyphicon glyphicon-edit\'></i></a>';
2186
-
2187
- // Print
2188
- if ( class_exists( 'wpdev_bk_biz_s' ) )
2189
- $header_title .= '<a href=\'javascript:void(0)\'
2190
- onclick=\'javascript: wpbc_print_specific_booking_for_timeline( '.$bk_id.' );\'
2191
- class=\'tooltip_top button-secondary button\'
2192
- ><i class=\'glyphicon glyphicon-print\'></i></a>';
2193
-
2194
- $header_title .= '<span class=\'wpbc-buttons-separator\'></span>';
2195
- }
2196
- // Trash
2197
- //$header_title .= '<a class=\'button button-secondary\' href=\'javascript:;\' onclick=\'javascript:delete_booking(' . $bk_id . ', ' . $this->current_user_id . ', &quot;' . wpbc_get_booking_locale() . '&quot; , 1 );\' ><i class=\'glyphicon glyphicon-trash\'></i></a>';
2198
- //FixIn: 6.1.1.10
2199
- $is_trash = $bookings[$bk_id]->trash;
2200
-
2201
- // Trash
2202
- $header_title .= '<a class=\'button button-secondary trash_bk_link'.(( $is_trash)?' hidden_items ':'').'\' href=\'javascript:;\' onclick=\'javascript:if ( wpbc_are_you_sure_popup() ) trash__restore_booking(1,' . $bk_id . ', ' . $this->current_user_id . ', &quot;' . wpbc_get_booking_locale() . '&quot; , 1 );\' ><i class=\'glyphicon glyphicon-trash\'></i></a>'; //FixIn: 8.4.7.14
2203
- // Restore
2204
- $header_title .= '<a class=\'button button-secondary restore_bk_link'.((!$is_trash)?' hidden_items ':'').'\' href=\'javascript:;\' onclick=\'javascript:trash__restore_booking(0,' . $bk_id . ', ' . $this->current_user_id . ', &quot;' . wpbc_get_booking_locale() . '&quot; , 1 );\' ><i class=\'glyphicon glyphicon-repeat\'></i></a>';
2205
- // Delete
2206
- $header_title .= '<a class=\'button button-secondary delete_bk_link'.((!$is_trash)?' hidden_items ':'').'\' href=\'javascript:;\' onclick=\'javascript:if ( wpbc_are_you_sure_popup() ) delete_booking(' . $bk_id . ', ' . $this->current_user_id . ', &quot;' . wpbc_get_booking_locale() . '&quot; , 1 );\' ><i class=\'glyphicon glyphicon-remove\'></i></a>'; //FixIn: 8.4.7.14
2207
- //End FixIn: 6.1.1.10
2208
-
2209
- // Approve | Decline
2210
- $header_title .= '<a class=\'button button-secondary approve_bk_link ' . ($is_approved ? 'hidden_items' : '') . '\' href=\'javascript:;\' onclick=\'javascript:approve_unapprove_booking(' . $bk_id . ',1, ' . $this->current_user_id . ', &quot;' . wpbc_get_booking_locale() . '&quot; , 1 );\' ><i class=\'glyphicon glyphicon-ok-circle\'></i></a>';
2211
- $header_title .= '<a class=\'button button-secondary pending_bk_link ' . ($is_approved ? '' : 'hidden_items') . '\' href=\'javascript:;\' onclick=\'javascript:approve_unapprove_booking(' . $bk_id . ',0, ' . $this->current_user_id . ', &quot;' . wpbc_get_booking_locale() . '&quot; , 1 );\' ><i class=\'glyphicon glyphicon-ban-circle\'></i></a>';
2212
-
2213
-
2214
- }
2215
-
2216
- else if ( ( $this->is_frontend ) && ( ! empty( $this->request_args['booking_hash'] ) ) ) { //FixIn: 8.1.3.5
2217
- // Valid or not valid hasg we was checked at begining of function.
2218
-
2219
- //Edit
2220
- if ( class_exists( 'wpdev_bk_personal' ) ) {
2221
-
2222
- // $edit_booking_url_admin = wpbc_get_bookings_url( true, false ).'&wh_booking_id='.$bk_id.'&view_mode=vm_listing&tab=actions';
2223
- // $trash_booking_url_admin = wpbc_get_bookings_url( true, false ).'&wh_booking_id='.$bk_id.'&view_mode=vm_listing&tab=actions';
2224
-
2225
- if ( ( ! $is_approved ) || ( true ) ) { //FixIn: 8.2.1.14
2226
- $visitorbookingediturl = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingediturl]', $bk_id );
2227
- $visitorbookingcancelurl = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingcancelurl]', $bk_id );
2228
- $visitorbookingpayurl = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingpayurl]', $bk_id );
2229
-
2230
- $header_title .= '<a class=\'btn btn-default wpbc_btn_in_timeline\' title=\''. esc_js( __( 'Edit', 'booking' ) ).'\' href=\'' . $visitorbookingediturl . '\' ><i class=\'glyphicon glyphicon-edit\'></i></a>';
2231
- $header_title .= '<a class=\'btn btn-default wpbc_btn_in_timeline\' title=\''. esc_js( __( 'Decline', 'booking' ) ).'\' href=\'' . $visitorbookingcancelurl . '\' ><i class=\'glyphicon glyphicon-trash\'></i></a>';
2232
- $header_title .= '<a class=\'btn btn-default wpbc_btn_in_timeline\' title=\''. esc_js( __( 'Pay', 'booking' ) ).'\' href=\'' . $visitorbookingpayurl . '\' ><i class=\'glyphicon glyphicon-credit-card\'></i></a>';
2233
- }
2234
- }
2235
- }
2236
-
2237
- $header_title .= '</div>';
2238
-
2239
-
2240
- ////////////////////////////////////////////////////////////////////////
2241
- // Content
2242
- ////////////////////////////////////////////////////////////////////////
2243
- if ( $content_text != '' ) $content_text .= ' <hr class="wpbc_tl_popover_booking_separator" /> '; // Separate Other Booking in the same day
2244
-
2245
- // Container
2246
- $content_text .= '<div id=\'wpbc-booking-id-'.$bk_id.'\' class=\'wpbc-listing-collumn wpbc-popover-content-data\' >';
2247
-
2248
-
2249
-
2250
- $content_text .= '<div class=\'wpbc-popover-labels-bar\' >';
2251
- // ID
2252
- //$content_text .= '<span class=\'field-id\'>' . $bk_id . '</span>';
2253
-
2254
- $content_text .= '<div class=\'field-id text-center\'>';
2255
- $content_text .= '<span class=\'label\'>' . $bk_id . '</span>';
2256
- $content_text .= '</div>';
2257
-
2258
- // Labels
2259
- // $content_text .= '<div class=\'text-left field-labels booking-labels\'>';
2260
- // $content_text .= '<span class=\'label label-default label-pending' . ( $is_approved ? ' hidden_items' : '' ) . '\'>' . __('Pending' ,'booking') . '</span>';
2261
- // $content_text .= '<span class=\'label label-default label-approved' . ( !$is_approved ? ' hidden_items' : '' ) . '\'>' . __('Approved' ,'booking') . '</span>';
2262
- // $content_text .= '</div>';
2263
-
2264
-
2265
-
2266
- // Resource
2267
- if ( function_exists( 'get_booking_title' ) ) {
2268
-
2269
- if ( isset( $booking_types[$bookings[$bk_id]->booking_type] ) ) $bk_title = $booking_types[$bookings[$bk_id]->booking_type]->title;
2270
- else $bk_title = get_booking_title( $bookings[$bk_id]->booking_type );
2271
-
2272
- $content_text .= '<div class=\'text-left field-labels booking-labels\'>';
2273
- $content_text .= '<span class=\'label label-default label-resource label-info\'>' . esc_textarea( $bk_title ) . '</span>'; //FixIn: 7.1.1.2
2274
- $content_text .= '</div>';
2275
- }
2276
-
2277
-
2278
- // Payment Status
2279
- if ( class_exists( 'wpdev_bk_biz_s' ) ) {
2280
-
2281
- if ( function_exists( 'wpdev_bk_get_payment_status_simple' ) ) {
2282
- $pay_status = wpdev_bk_get_payment_status_simple( $bookings[$bk_id]->pay_status );
2283
- $content_text .= '<div class=\'text-left field-labels booking-labels\'>';
2284
- if ( wpbc_is_payment_status_ok( trim( $bookings[$bk_id]->pay_status ) ) )
2285
- $content_text .= '<span class=\'label label-default label-payment-status payment-label-success\'><span class=\'label-payment-status-prefix\'>' . esc_js( __( 'Payment', 'booking' ) ). '</span> ' . esc_js( $pay_status ) . '</span>'; //FixIn: 7.1.1.3
2286
- else {
2287
- if ( floatval( $bookings[ $bk_id ]->cost ) > 0 ) { //FixIn: 8.3.3.9
2288
- $content_text .= '<span class=\'label label-default label-payment-status payment-label-unknown\'><span class=\'label-payment-status-prefix\'>' . esc_js( __( 'Payment', 'booking' ) ) . '</span> ' . esc_js( $pay_status ) . '</span>'; //FixIn: 7.1.1.3
2289
- }
2290
- }
2291
- $content_text .= '</div>';
2292
- }
2293
-
2294
-
2295
- }
2296
- $content_text .= '</div>';
2297
-
2298
- if ( ( class_exists( 'wpdev_bk_biz_s' ) ) ) { //&& ( ! $this->is_frontend ) ){
2299
-
2300
- //FixIn: 8.3.3.9
2301
- if ( floatval( $bookings[ $bk_id ]->cost ) > 0 ) {
2302
- // Cost
2303
- $booking_cost = wpbc_get_cost_with_currency_for_user( $bookings[ $bk_id ]->cost, $bookings[ $bk_id ]->booking_type );
2304
-
2305
- $content_text .= '<div class=\'wpbc-popover-cost-bar\' >';
2306
- //$content_text .= '<div class=\'text-left field-labels booking-labels\'>';
2307
- $content_text .= '<div class=\'label0 label-default0 wpbc-popover-cost\'>' . $booking_cost . '</div>';
2308
- //$content_text .= '</div>';
2309
- $content_text .= '</div>';
2310
- }
2311
- }
2312
-
2313
- if ( ! $this->is_frontend ) {
2314
- // Trash
2315
- $content_text .= '<div class=\'text-left field-labels booking-labels\'>';
2316
- $content_text .= '<span class=\'label label-trash label-danger' . ( ( ! $bookings[$bk_id]->trash ) ? ' hidden_items ' : '' ) . '\'>' . esc_js( __('Trash' ,'booking') ) . '</span>'; //FixIn: 6.1.1.10 //FixIn: 7.1.1.3
2317
- $content_text .= '</div>';
2318
- }
2319
-
2320
-
2321
- $content_text .= '<div class=\'clear\'></div>'; // New line
2322
-
2323
- // Booking Data
2324
- $content_text .= '<div class=\'wpbc-popover-booking-data\'>' . esc_textarea( $bookings[$bk_id]->form_show ) . '</div>'; //FixIn: 7.1.1.2
2325
-
2326
- $content_text .= '<div class=\'clear\'></div>'; // New line
2327
-
2328
-
2329
- // Notes
2330
- if ( ! empty( $bookings[$bk_id]->remark ) ) {
2331
- $content_text .= '<div class=\'wpbc-popover-booking-notes\'>' . '<strong>' . esc_js( __('Note', 'booking') ). ':</strong> ' . esc_textarea( $bookings[$bk_id]->remark ) . '</div>'; //FixIn: 7.1.1.2 //FixIn: 7.1.1.3
2332
- $content_text .= '<div class=\'clear\'></div>'; // New line
2333
- }
2334
-
2335
- // Dates
2336
- $bk_dates_short_id = array(); //BL
2337
- if ( count( $bookings[$bk_id]->dates ) > 0 )
2338
- $bk_dates_short_id = (isset( $bookings[$bk_id]->dates_short_id )) ? $bookings[$bk_id]->dates_short_id : array(); // Array ([0] => [1] => .... [4] => 6... [11] => [12] => 8 )
2339
-
2340
- $short_dates_content = wpbc_get_short_dates_formated_to_show( $bookings[$bk_id]->dates_short, $is_approved, $bk_dates_short_id, $booking_types );
2341
- $short_dates_content = str_replace( '"', "'", $short_dates_content );
2342
-
2343
- $content_text .= '<div class=\'text-left field-dates booking-dates \'>';
2344
- $content_text .= '<div class=\'booking_dates_small\'>' . $short_dates_content . '</div>';
2345
- $content_text .= '</div>';
2346
-
2347
- $content_text .= '</div>';
2348
-
2349
- // if ( ( $this->is_frontend ) && ( ! $is_approved ) ) {
2350
- // $text_in_day_cell = '';
2351
- // }
2352
- return array(
2353
- $text_in_day_cell
2354
- , $header_title
2355
- , $content_text
2356
- , $is_approved
2357
- ) ;
2358
- }
2359
-
2360
- }
2361
-
2362
-
2363
-
2364
- /** Navigation of Timeline in Ajax request */
2365
- function wpbc_ajax_timeline() {
2366
- /*
2367
- [timeline_obj] => Array
2368
- (
2369
- [is_frontend] => 1
2370
- [html_client_id] => wpbc_timeline_1454680376080
2371
- [wh_booking_type] => 3,4,1,5,6,7,8,9,2,10,11,12,14
2372
- [is_matrix] => 1
2373
- [view_days_num] => 30
2374
- [scroll_start_date] =>
2375
- [scroll_day] => 0
2376
- [scroll_month] => 0
2377
- )
2378
- */
2379
-
2380
-
2381
- $attr = $_POST['timeline_obj'];
2382
- $attr['nav_step'] = $_POST['nav_step'];
2383
-
2384
- ob_start();
2385
-
2386
- $timeline = new WPBC_Timeline();
2387
-
2388
- $html_client_id = $timeline->ajax_init( $attr ); // Define arameters and get bookings
2389
- //debuge($timeline->options);
2390
-
2391
- //echo '<div class="wpbc_timeline_ajax_replace">'; // Replace content of this container
2392
- $timeline->show_timeline();
2393
-
2394
-
2395
- $is_show_popover_in_timeline = wpbc_is_show_popover_in_timeline( $attr['is_frontend'], $attr['booking_hash'] ); //FixIn: 8.1.3.5
2396
-
2397
- if ( $is_show_popover_in_timeline ) { // Update New Popovers
2398
-
2399
- ?><script type="text/javascript">
2400
- if ( jQuery.isFunction( jQuery(".popover_click.popover_bottom" ).popover ) ) { //FixIn: 7.0.1.2 - 2016-12-10
2401
- jQuery('.popover_click.popover_bottom').popover( {
2402
- placement: 'bottom' //FixIn: 8.4.5.12
2403
- , trigger:'manual'
2404
- //, delay: {show: 100, hide: 8}
2405
- , content: ''
2406
- , template: '<div class="popover" role="tooltip"><div class="arrow"></div><div class="popover-close"><a href="javascript:void(0)" data-dismiss="popover" aria-hidden="true">&times;</a></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
2407
- , container: '.wpbc_timeline_frame'
2408
- , html: 'true'
2409
- });
2410
- }
2411
- </script><?php
2412
- }
2413
- //echo '</div>';
2414
-
2415
-
2416
- $timeline_results = ob_get_contents();
2417
-
2418
- ob_end_clean();
2419
-
2420
- echo $timeline_results ;
2421
- }
2422
- add_bk_action('wpbc_ajax_timeline', 'wpbc_ajax_timeline');
2423
-
2424
-
2425
-
2426
- /** Check if we are showing booking details or not
2427
- * Admin panel - always show
2428
- * Timeline - show if activated setting option
2429
- * Customer listing - show always, if valid hash.
2430
- *
2431
- * @param $is_frontend
2432
- * @param $booking_hash
2433
- *
2434
- * @return bool
2435
- */
2436
- function wpbc_is_show_popover_in_timeline( $is_frontend, $booking_hash ){
2437
-
2438
- // Default for admin
2439
- $is_show_popover_in_timeline = true;
2440
-
2441
- // For client Timeline
2442
- if ( $is_frontend )
2443
- $is_show_popover_in_timeline = ( get_bk_option( 'booking_is_show_popover_in_timeline_front_end' ) == 'On' ) ? true : false ;
2444
-
2445
- // For customer booking listing with ability to edit
2446
- //FixIn: 8.1.3.5
2447
- if ( ( $is_frontend ) && ( ! empty( $booking_hash ) ) ) {
2448
-
2449
- //In case if we have valid valid hash then show booking details
2450
- $my_booking_id_type = apply_bk_filter( 'wpdev_booking_get_hash_to_id', false, $booking_hash );
2451
-
2452
- if ( ! empty( $my_booking_id_type ) ) {
2453
- $is_show_popover_in_timeline = true;
2454
- } else {
2455
- $is_show_popover_in_timeline = false;
2456
- }
2457
- }
2458
- return $is_show_popover_in_timeline;
2459
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/admin/wpbc-sql.php CHANGED
@@ -704,7 +704,7 @@ function wpbc_get_bookings_objects( $args ){
704
 
705
  ////////////////////////////////////////////////////////////////////////////
706
 
707
-
708
  $bookings_res = $wpdb->get_results( $sql_start_select . $sql . $sql_where . $sql_order . $sql_limit ); // Get Bookings
709
 
710
  $bookings_count = $wpdb->get_results( $sql_start_count . $sql . $sql_where ); // Get Number of bookings
704
 
705
  ////////////////////////////////////////////////////////////////////////////
706
 
707
+
708
  $bookings_res = $wpdb->get_results( $sql_start_select . $sql . $sql_where . $sql_order . $sql_limit ); // Get Bookings
709
 
710
  $bookings_count = $wpdb->get_results( $sql_start_count . $sql . $sql_where ); // Get Number of bookings
core/any/css/admin-br-table.css CHANGED
@@ -115,8 +115,8 @@
115
  .wpbc_resources_table select {
116
  width:auto;
117
  height:2em;
118
- padding: 2px;
119
- border-radius: 0;
120
  }
121
  @media (max-width: 782px) {
122
  .wpbc_resources_table th.wpbc_hide_mobile,
@@ -134,8 +134,13 @@
134
  .wpbc_resources_table .field-currency {
135
  line-height: 2.1em;
136
  }
 
 
 
137
  #wpbody .wpbc_resources_table select {
138
- height:32px;
 
 
139
  }
140
  }
141
  @media (max-width: 600px) {
115
  .wpbc_resources_table select {
116
  width:auto;
117
  height:2em;
118
+ /*padding: 2px;*/
119
+ /*border-radius: 0;*/
120
  }
121
  @media (max-width: 782px) {
122
  .wpbc_resources_table th.wpbc_hide_mobile,
134
  .wpbc_resources_table .field-currency {
135
  line-height: 2.1em;
136
  }
137
+ .wp-admin .wpbc_page select,
138
+ .wp-admin .wpbc_page .form-table select,
139
+ #wpbody .wpbc_resources_table input[type="text"],
140
  #wpbody .wpbc_resources_table select {
141
+ height: 34px;
142
+ min-height: 28px;
143
+ line-height: 1.5;
144
  }
145
  }
146
  @media (max-width: 600px) {
core/any/css/admin-listing-table.css CHANGED
@@ -169,7 +169,7 @@
169
  }
170
 
171
  /* Pagination */
172
- .wpbc-pagination .button{
173
  box-shadow: none;
174
  height: 32px;
175
  line-height: 30px;
@@ -348,6 +348,7 @@
348
  }
349
  .wpbc-listing-collumn.field-action-buttons .control-group a.button {
350
  height: 34px;
 
351
  }
352
  /* Cost Group */
353
  .wpbc-listing-collumn.field-action-buttons .cost-fields-group .field-currency {
169
  }
170
 
171
  /* Pagination */
172
+ .wpdevelop.wpbc-pagination a.button{
173
  box-shadow: none;
174
  height: 32px;
175
  line-height: 30px;
348
  }
349
  .wpbc-listing-collumn.field-action-buttons .control-group a.button {
350
  height: 34px;
351
+ line-height: 2.2;
352
  }
353
  /* Cost Group */
354
  .wpbc-listing-collumn.field-action-buttons .cost-fields-group .field-currency {
core/any/css/admin-support.css CHANGED
@@ -431,7 +431,12 @@ html[xmlns] .clearfix-height.hidden_items {
431
  margin:0;
432
  padding-left:5px;
433
  }
434
-
 
 
 
 
 
435
 
436
  /* Hack to fix checkbox height in Firefox, otherwise sometimes, there exist weird artefact */
437
  @-moz-document url-prefix() {
431
  margin:0;
432
  padding-left:5px;
433
  }
434
+ .wpbc_page input[type='checkbox']:focus,
435
+ .wpbc_page input[type='checkbox']:active,
436
+ .wpbc_page input[type='checkbox']:hover,
437
+ .wpbc_page input[type='checkbox'] {
438
+ outline: none;
439
+ }
440
 
441
  /* Hack to fix checkbox height in Firefox, otherwise sometimes, there exist weird artefact */
442
  @-moz-document url-prefix() {
core/any/css/admin-toolbar.css CHANGED
@@ -401,8 +401,8 @@
401
  .wpdevelop .control-group .btn-toolbar .btn-group > .button,
402
  .wpdevelop .control-group .btn-toolbar .input-group > .input-group-btn .button {
403
  height: 34px;
404
- line-height: 1.5em;
405
- }
406
  .wpdevelop .control-group .btn-toolbar .input-group > input[type='text']{
407
  height: 34px;
408
  padding:0 12px;
401
  .wpdevelop .control-group .btn-toolbar .btn-group > .button,
402
  .wpdevelop .control-group .btn-toolbar .input-group > .input-group-btn .button {
403
  height: 34px;
404
+ /*line-height: 1.5em; */
405
+ }
406
  .wpdevelop .control-group .btn-toolbar .input-group > input[type='text']{
407
  height: 34px;
408
  padding:0 12px;
core/class/wpbc-class-welcome.php CHANGED
@@ -439,6 +439,83 @@ class WPBC_Welcome {
439
 
440
  $this->maintence_section();
441
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
443
  // 8.6
444
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
439
 
440
  $this->maintence_section();
441
 
442
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
443
+ // 8.7
444
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
445
+ ?>
446
+ <h2 style='font-size: 2.1em;'>What's New in Booking Calendar <span style="font-size: 1.1em;
447
+ font-weight: 600;font-family: Consolas,Monaco,monospace;padding-left: 10px;color: #5F5F5F;">8.7</span></h2><?php
448
+
449
+ ?>
450
+ <img src="<?php echo $this->asset_path; ?>8.7/booking-calendar-black2.png" style="border:none;box-shadow: 0 0px 2px #bbb;margin: 2%;width:98%;display:block;" />
451
+ <div class="clear"></div>
452
+ <?php
453
+
454
+ $this->show_col_section( array(
455
+ array( 'text' =>
456
+ '<h4>' .wpbc_recheck_strong_symbols( 'New' ) . '</h4>'
457
+ . '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
458
+ . '<li>' . wpbc_recheck_strong_symbols( 'New **Calendar Skin** with dark colors: "**Black 2**"' ) . '</li>'
459
+ . '<li>' . wpbc_recheck_strong_symbols( 'Ability to define using **Pending days as Selectable days** - its means that such days have the colors the same as Pending days, but visitor still can select and submit new booking, until you do not approve some booking. Its useful in case, if you need to show that at some days already exist bookings, but visitors still can submit the booking. Please note, such feature will not work correctly if you will make bookings for specific time-slots (its will show warning). How to Use ? In the page, where you are having Booking Calendar shortcode, you need to define the js, like this: &lt;script type="text/javascript"&gt; wpbc_settings.set_option( "pending_days_selectable", true ); &lt;/script&gt; [booking type=1 nummonths=2] (8.6.1.18)' ) . '</li>'
460
+
461
+ . '<li>' . wpbc_recheck_strong_symbols( 'Ability to define **dates format** for **search availability form** at the Booking > Settings > Search page. (8.6.1.21) *(Business Large, MultiUser)*' ) . '</li>'
462
+ . '<li>' . wpbc_recheck_strong_symbols( '**Logging** of approving or set as pending bookings to notes section. You can activate this option "Logging of booking approving or rejection" at the Booking > Settings General page in "Booking Admin panel" section. (8.6.1.10) *(Personal, Business Small/Medium/Large, MultiUser)*' ) . '</li>'
463
+ . '<li>' . wpbc_recheck_strong_symbols( 'Updated **iPay88** - Payment Gateway integration v1.6.4 (For Malaysia Only) (8.6.1.3) *(Business Small/Medium/Large, MultiUser)*' ) . '</li>'
464
+ . '</ul>'
465
+
466
+ . '<h4>' .wpbc_recheck_strong_symbols( 'Improvement' ) . '</h4>'
467
+ . '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
468
+ . '<li>' . wpbc_recheck_strong_symbols( 'Ability to auto fill "nickname" of user, when user logged in, and checked this option "Auto-fill fields". In booking form have to be field with name "nickname". (8.6.1.2)' ) . '</li>'
469
+ . '<li>' . wpbc_recheck_strong_symbols( 'Usage of **new Wizard style booking form**, where possible to configure several steps in booking form - **more than 2 steps** (8.6.1.15) *(Personal, Business Small/Medium/Large, MultiUser)*' ) . '</li>'
470
+ . '<li>' . wpbc_recheck_strong_symbols( 'Ability to use option "Use check in/out time", for adding check in/out times to use change over days, when importing events via Google Calendar API (using Google API Key) (8.6.1.1) *(Business Small/Medium/Large, MultiUser)*' ) . '</li>'
471
+ . '<li>' . wpbc_recheck_strong_symbols( 'Ability to use option "Append check out day", for adding check out day, when importing events via Google Calendar API (using Google API Key) (8.6.1.4) *(Business Small/Medium/Large, MultiUser)*' ) . '</li>'
472
+ . '<li>' . wpbc_recheck_strong_symbols( 'Disable the edit / cancel / payment request links in the "Booking Customer Listing" view for "Approved bookings", in case, if you have activated this option " Change hash after the booking is approved " at the Booking > Settings General page in Advanced section. (8.6.1.6) *(Personal, Business Small/Medium/Large, MultiUser)*' ) . '</li>'
473
+ . '<li>' . wpbc_recheck_strong_symbols( 'Replace non standard symbols (like: . or , or ` ) in options for ability correct saving Advanced cost. Otherwise sometimes was not possible to save "Advanced cost" at Booking > Resources > Advanced cost page. (8.6.1.7) *(Business Medium/Large, MultiUser)*' ) . '</li>'
474
+ . '<li>' . wpbc_recheck_strong_symbols( 'Added filter hook "wpbc_booking_resources_selection_class" for controlling CSS class in dropdown element of booking resource selections (8.6.1.9) *(Personal, Business Small/Medium/Large, MultiUser)*' ) . '</li>'
475
+ . '<li>' . wpbc_recheck_strong_symbols( 'Update booking hash during moving booking to trash or restore bookings, for do not ability to edit or cancel such bookings by visitor (8.6.1.11) *(Personal, Business Small/Medium/Large, MultiUser)*' ) . '</li>'
476
+ . '<li>' . wpbc_recheck_strong_symbols( 'Add ability to use only labels in shortcode for showing one payment method (its works only with these exact options): [select payment-method "All payment methods@@" "Stripe" "PayPal" "Authorize.Net" "Sage Pay" "Bank Transfer" "Pay in Cash" "iPay88" "iDEAL"] (8.6.1.16) *(Business Small/Medium/Large, MultiUser)*' ) . '</li>'
477
+ . '<li>' . wpbc_recheck_strong_symbols( 'Ability to activate updating booking cost after editing booking in admin panel, based on new booking data. You can activate this option at the Booking > Settings > Payment page (8.6.1.24) *(Business Small/Medium/Large, MultiUser)*' ) . '</li>'
478
+ . '</ul>'
479
+ . '<h4>' .wpbc_recheck_strong_symbols( 'Translation' ) . '</h4>'
480
+ . '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
481
+
482
+ . '<li>' . wpbc_recheck_strong_symbols( 'German translation [99% completed] by Markus Neumann.' ) . '</li>'
483
+ . '<li>' . wpbc_recheck_strong_symbols( 'Slovenian translation [99% completed] by Klemen Gaber.' ) . '</li>'
484
+ . '</ul>'
485
+
486
+ )
487
+ , array( 'text' =>
488
+
489
+ '<h4>' .wpbc_recheck_strong_symbols( 'Compatibility' ) . '</h4>'
490
+ . '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
491
+ . '<li>' . wpbc_recheck_strong_symbols( 'Support **WordPress 5.3** - updated styles of booking admin panel.' ) . '</li>'
492
+ . '</ul>'
493
+
494
+ . '<h4>' .wpbc_recheck_strong_symbols( 'Deprecated' ) . '</h4>'
495
+ . '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
496
+ . '<li>' . wpbc_recheck_strong_symbols( 'Removing deprecated Timeline v.1. Currently available only new Flex Timeline (Calendar Overview) (8.6.1.13)' ) . '</li>'
497
+ . '<li>' . wpbc_recheck_strong_symbols( 'Removing deprecated Stripe v.1 integration. Now available only Stripe v.3 integration that support SCA (8.6.1.12) *(Business Small/Medium/Large, MultiUser)*' ) . '</li>'
498
+ . '</ul>'
499
+
500
+ . '<h4>' .wpbc_recheck_strong_symbols( 'Fixes' ) . '</h4>'
501
+ . '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
502
+ . '<li>' . wpbc_recheck_strong_symbols( 'Issue Undefined index: name in ../core/admin/wpbc-class-timeline.php on line 2137' ) . '</li>'
503
+ . '<li>' . wpbc_recheck_strong_symbols( 'Issue of not ability to enter new value of CAPTCHA without page reloading, if previous entered value was incorrect. (8.6.1.8)' ) . '</li>'
504
+ . '<li>' . wpbc_recheck_strong_symbols( 'Order of week days in Arabic translation for calendar' ) . '</li>'
505
+ . '<li>' . wpbc_recheck_strong_symbols( 'Show payment description about the booking in Stripe dashboard in Metadata section for Stripe v.3 integration (8.6.1.20) *(Business Small/Medium/Large, MultiUser)*' ) . '</li>'
506
+ . '<li>' . wpbc_recheck_strong_symbols( 'Issue of showing negative balance hint, during using deposit feature with zero cost (8.6.1.5) *(Business Medium/Large, MultiUser)*' ) . '</li>'
507
+ . '<li>' . wpbc_recheck_strong_symbols( 'Issue of incorrectly showing available results in "Advanced search results" (while using the shortcode like this [additional_search "3"] at the Booking > Settings > Search page), and if dates in some resources was marked as unavailable via season filters. (8.6.1.14) *(Business Large, MultiUser)*' ) . '</li>'
508
+ . '<li>' . wpbc_recheck_strong_symbols( 'Issue of incorrectly showing available results, when searching only for 1 specific day (check in/out dates the same in availability form), and we have booked (as full day), this day in specific booking resource. (8.6.1.19) *(Business Large, MultiUser)*' ) . '</li>'
509
+ . '<li>' . wpbc_recheck_strong_symbols( 'Issue of incorrectly disabling end time options in select-box (8.6.1.17) *(Business Small/Medium/Large, MultiUser)*' ) . '</li>'
510
+ . '<li>' . wpbc_recheck_strong_symbols( 'Issue of slow loading calendar (executing too many sql requests), when season filter was deleted at the Booking > Resources > Filters page, but reference relative (Rates) still exist at Booking > Resources > Cost and rates page. Its means that the Rates was not updated (re-saved) relative specific booking resource at the Booking > Resources > Cost and rates page. (8.6.1.22) *(Business Medium/Large, MultiUser)*' ) . '</li>'
511
+ . '<li>' . wpbc_recheck_strong_symbols( 'Issue of possible showing status of Stripe v.3 payment as successful at the Booking Listing page, even when its was not completed yet. (8.6.1.23) *(Business Small/Medium/Large, MultiUser)*' ) . '</li>'
512
+
513
+ . '</ul>'
514
+ )
515
+ )
516
+ );
517
+
518
+
519
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
520
  // 8.6
521
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
core/lib/wpbc-ajax.php CHANGED
@@ -147,7 +147,7 @@ function wpbc_ajax_UPDATE_READ_UNREAD () {
147
  function wpbc_ajax_UPDATE_APPROVE() {
148
 
149
  global $wpdb;
150
-
151
  if ( ! wpdev_check_nonce_in_admin_panel() ) return false; //FixIn: 7.2.1.10
152
 
153
  make_bk_action('check_multiuser_params_for_client_side_by_user_id', $_POST['user_id'] );
@@ -182,6 +182,13 @@ function wpbc_ajax_UPDATE_APPROVE() {
182
  die();
183
  }
184
 
 
 
 
 
 
 
 
185
  wpbc_update_number_new_bookings( explode(',', $approved_id_str) );
186
 
187
  if ($is_approve_or_pending == '1') {
@@ -261,6 +268,13 @@ function wpbc_ajax_TRASH_RESTORE() {
261
  </script> <?php
262
  die();
263
  }
 
 
 
 
 
 
 
264
  ?> <script type="text/javascript">
265
  <?php
266
 
147
  function wpbc_ajax_UPDATE_APPROVE() {
148
 
149
  global $wpdb;
150
+
151
  if ( ! wpdev_check_nonce_in_admin_panel() ) return false; //FixIn: 7.2.1.10
152
 
153
  make_bk_action('check_multiuser_params_for_client_side_by_user_id', $_POST['user_id'] );
182
  die();
183
  }
184
 
185
+ //FixIn: 8.6.1.10
186
+ $curr_user = get_user_by( 'id', (int) $_POST['user_id'] );
187
+ $user_info = $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'; // get_user_meta( $curr_user->ID, 'nickname' )
188
+ wpbc_add_log_info( explode(',',$approved_id_str),
189
+ ( ( $is_approve_or_pending == '1' ) ? __( 'Approved by:', 'booking' ) : __( 'Declined by:', 'booking' ) )
190
+ . ' ' . $user_info );
191
+
192
  wpbc_update_number_new_bookings( explode(',', $approved_id_str) );
193
 
194
  if ($is_approve_or_pending == '1') {
268
  </script> <?php
269
  die();
270
  }
271
+
272
+ // Update the Hash and Cost of the booking
273
+ $booking_id_arr = explode(',', $approved_id_str ); //FixIn: 8.6.1.11
274
+ foreach ( $booking_id_arr as $booking_id ) {
275
+ make_bk_action('wpbc_update_booking_hash', $booking_id );
276
+ }
277
+
278
  ?> <script type="text/javascript">
279
  <?php
280
 
core/lib/wpbc-booking-new.php CHANGED
@@ -47,6 +47,7 @@ function wpbc_check_CAPTCHA( $the_answer_from_respondent, $prefix, $bktype ) {
47
  .fadeOut( 2000 ); // hide message
48
  document.getElementById('captcha_input<?php echo $bktype; ?>').focus(); // make focus to elemnt
49
  jQuery('#booking_form_div<?php echo $bktype; ?> input[type=button]').prop("disabled", false);
 
50
  </script> <?php
51
  return false;
52
  }
@@ -385,7 +386,7 @@ function wpbc_add_new_booking( $params , $is_edit_booking = false ){
385
  die('Error during inserting into DB');
386
  }
387
  $booking_id = (int) $wpdb->insert_id; // Get ID of booking
388
-
389
  } else {
390
 
391
  ////////////////////////////////////////////////////////////////////////////
@@ -418,7 +419,12 @@ function wpbc_add_new_booking( $params , $is_edit_booking = false ){
418
  // Update the Hash and Cost of the booking
419
  make_bk_action('wpbc_update_booking_hash', $booking_id, $bktype );
420
 
421
- if ( $is_edit_booking === false ) { //FixIn: 8.5.2.1 - do not updare cost of booking, while editing this booking.
 
 
 
 
 
422
  make_bk_action('wpdev_booking_post_inserted', $booking_id, $bktype, $str_dates__dd_mm_yyyy, array($start_time, $end_time ) , $formdata );
423
  }
424
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -511,16 +517,28 @@ function wpbc_add_new_booking( $params , $is_edit_booking = false ){
511
  $admin_uri = ltrim( str_replace( get_site_url( null, '', 'admin' ), '', admin_url('admin.php?') ), '/' ) ;
512
 
513
  $is_show_payment_form_after_editing = true; // Default
514
- if ( $is_edit_booking !== false ) {
515
- $is_show_payment_form_after_editing = ! false; //FixIn: 8.4.6.0
516
- }
517
  if ( strpos($_SERVER['HTTP_REFERER'], $admin_uri ) === false ) {
518
-
 
 
519
  if ( ( isset( $params["is_show_payment_form"]) ) && ( $params["is_show_payment_form"] == 1 ) && ( $is_show_payment_form_after_editing ) )
520
  do_action('wpdev_new_booking',$booking_id, $bktype, $str_dates__dd_mm_yyyy, array($start_time, $end_time ) ,$formdata );
521
  else
522
  do_action('wpbc_update_cost_of_new_booking',$booking_id, $bktype, $str_dates__dd_mm_yyyy, array($start_time, $end_time ) ,$formdata );
523
- }
 
 
 
 
 
 
 
 
 
 
524
 
525
  }
526
 
@@ -854,7 +872,8 @@ function wpbc_check_if_dates_free($bktype, $formdata ,$dates_in_diff_formats, $s
854
  // Scroll to the calendar
855
  makeScroll('#calendar_booking<?php echo $bktype; ?>');
856
  // Enable Submit button
857
- jQuery('#booking_form_div<?php echo $bktype; ?> input[type=button]').prop("disabled", false);
 
858
  }
859
  </script> <?php
860
 
47
  .fadeOut( 2000 ); // hide message
48
  document.getElementById('captcha_input<?php echo $bktype; ?>').focus(); // make focus to elemnt
49
  jQuery('#booking_form_div<?php echo $bktype; ?> input[type=button]').prop("disabled", false);
50
+ jQuery( '#booking_form_div<?php echo $bktype; ?> button' ).prop( "disabled", false ); //FixIn: 8.6.1.8
51
  </script> <?php
52
  return false;
53
  }
386
  die('Error during inserting into DB');
387
  }
388
  $booking_id = (int) $wpdb->insert_id; // Get ID of booking
389
+
390
  } else {
391
 
392
  ////////////////////////////////////////////////////////////////////////////
419
  // Update the Hash and Cost of the booking
420
  make_bk_action('wpbc_update_booking_hash', $booking_id, $bktype );
421
 
422
+ //FixIn: 8.6.1.24
423
+ $is_update_cost_after_editing = get_bk_option( 'booking_payment_update_cost_after_edit_in_bap' );
424
+
425
+ if ( ( $is_edit_booking === false )
426
+ || ( 'On' == $is_update_cost_after_editing ) ) {
427
+ //FixIn: 8.5.2.1 - do not updare cost of booking, while editing this booking.
428
  make_bk_action('wpdev_booking_post_inserted', $booking_id, $bktype, $str_dates__dd_mm_yyyy, array($start_time, $end_time ) , $formdata );
429
  }
430
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
517
  $admin_uri = ltrim( str_replace( get_site_url( null, '', 'admin' ), '', admin_url('admin.php?') ), '/' ) ;
518
 
519
  $is_show_payment_form_after_editing = true; // Default
520
+ // if ( $is_edit_booking !== false ) {
521
+ // $is_show_payment_form_after_editing = ! false; //FixIn: 8.4.6.0
522
+ // }
523
  if ( strpos($_SERVER['HTTP_REFERER'], $admin_uri ) === false ) {
524
+
525
+ // Front End
526
+
527
  if ( ( isset( $params["is_show_payment_form"]) ) && ( $params["is_show_payment_form"] == 1 ) && ( $is_show_payment_form_after_editing ) )
528
  do_action('wpdev_new_booking',$booking_id, $bktype, $str_dates__dd_mm_yyyy, array($start_time, $end_time ) ,$formdata );
529
  else
530
  do_action('wpbc_update_cost_of_new_booking',$booking_id, $bktype, $str_dates__dd_mm_yyyy, array($start_time, $end_time ) ,$formdata );
531
+
532
+ } else {
533
+
534
+ // Admin panel
535
+
536
+ //FixIn: 8.6.1.24
537
+ if ( ( $is_edit_booking !== false ) && ( 'On' == $is_update_cost_after_editing ) )
538
+ do_action('wpdev_new_booking',$booking_id, $bktype, $str_dates__dd_mm_yyyy, array($start_time, $end_time ) ,$formdata ); // Update NOTES, Cost, Show Payment form,
539
+ // else
540
+ // do_action('wpbc_update_cost_of_new_booking',$booking_id, $bktype, $str_dates__dd_mm_yyyy, array($start_time, $end_time ) ,$formdata ); // Update Only cost field
541
+ }
542
 
543
  }
544
 
872
  // Scroll to the calendar
873
  makeScroll('#calendar_booking<?php echo $bktype; ?>');
874
  // Enable Submit button
875
+ jQuery('#booking_form_div<?php echo $bktype; ?> input[type=button]').prop("disabled", false);
876
+ jQuery( '#booking_form_div<?php echo $bktype; ?> button' ).prop( "disabled", false ); //FixIn: 8.6.1.8
877
  }
878
  </script> <?php
879
 
core/lib/wpdev-booking-class.php CHANGED
@@ -895,7 +895,8 @@ class wpdev_booking {
895
 
896
  $curr_user = wp_get_current_user();
897
  if ( $curr_user->ID > 0 ) {
898
-
 
899
  $return_form .= '<script type="text/javascript">
900
  jQuery(document).ready( function(){
901
  var bk_af_submit_form = document.getElementById( "booking_form'.$my_boook_type.'" );
@@ -910,6 +911,11 @@ class wpdev_booking {
910
  (bk_af_element.type !=="hidden") &&
911
  (bk_af_element.name !== ("date_booking'.$my_boook_type.'" ) )
912
  ) {
 
 
 
 
 
913
  // Second Name
914
  bk_af_reg = /^([A-Za-z0-9_\-\.])*(last|second){1}([_\-\.])?name([A-Za-z0-9_\-\.])*$/;
915
  if(bk_af_reg.test(bk_af_element.name) != false)
@@ -1058,84 +1064,10 @@ class wpdev_booking {
1058
 
1059
  */
1060
  function bookingtimeline_shortcode($attr) {
1061
-
1062
- //if ( function_exists( 'wpbc_br_cache' ) ) $br_cache = wpbc_br_cache(); // Init booking resources cache
1063
-
1064
- //FixIn: 8.5.2.20
1065
- $booking_timeline_load = get_bk_option( 'booking_timeline_load' );
1066
- if ( 'timeline_v1' != $booking_timeline_load ){
1067
- $timeline_results = bookingflextimeline_shortcode($attr);
1068
- return $timeline_results;
1069
- }
1070
-
1071
-
1072
-
1073
- if ( ! isset( $attr['type' ] ) ) {
1074
- $attr['type' ] = wpbc_get_default_resource();
1075
- }
1076
- if ( ! isset( $attr['view_days_num' ] ) ) {
1077
- $attr['view_days_num' ] = 30;
1078
- }
1079
- if ( ! isset( $attr['scroll_start_date' ] ) ) {
1080
- $attr['scroll_start_date' ] = '';
1081
- }
1082
- if ( ! isset( $attr['scroll_day' ] ) ) {
1083
- $attr['scroll_day' ] = 0;
1084
- }
1085
- if ( ! isset( $attr['scroll_month' ] ) ) {
1086
- $attr['scroll_month' ] = 0;
1087
- }
1088
- if ( ! isset( $attr['header_title' ] ) ) {
1089
- $attr['header_title' ] = '';
1090
- }
1091
-
1092
- ob_start();
1093
-
1094
- $timeline = new WPBC_Timeline();
1095
-
1096
- $html_client_id = $timeline->client_init( $attr ); // Define arameters and get bookings
1097
-
1098
- //wpbc_bs_javascript_tooltips(); // JS Tooltips
1099
- // if ( ! $this->popover_front_end_js_is_writed ) { //Write this JS only once at page
1100
- // wpbc_bs_javascript_popover(); // JS Popover
1101
- // $this->popover_front_end_js_is_writed = true;
1102
- // }
1103
- //wpbc_datepicker_js(); // JS Datepicker
1104
- //wpbc_datepicker_css(); // CSS DatePicker
1105
-
1106
- echo '<div class="wpdevelop">';
1107
-
1108
- echo '<div id="'.$html_client_id.'" class="wpbc_timeline_client_border">';
1109
-
1110
- echo wp_nonce_field( 'WPBC_TIMELINE_NAV', 'wpbc_nonce_' . $html_client_id , true , false );
1111
- echo '<div id="ajax_respond_insert'.$html_client_id.'" class="ajax_respond_insert" style="display:none;"></div>';
1112
-
1113
- echo '<div class="wpbc_timeline_ajax_replace">';
1114
- if ( ! $this->popover_front_end_js_is_writed ) { //Write this JS only once at page
1115
- wpbc_bs_javascript_popover(); // JS Popover
1116
- $this->popover_front_end_js_is_writed = true;
1117
-
1118
- //Define Globar JavaScript Object - array of objects.
1119
- ?>
1120
- <script type="text/javascript">
1121
- var wpbc_timeline_obj = {};
1122
- </script>
1123
- <?php
1124
- }
1125
-
1126
- $timeline->show_timeline();
1127
- echo '</div>';
1128
-
1129
-
1130
- echo '</div>';
1131
-
1132
- echo '</div>';
1133
-
1134
- $timeline_results = ob_get_contents();
1135
-
1136
- ob_end_clean();
1137
 
1138
- return $timeline_results ;
 
 
1139
  }
1140
 
1141
  // Replace MARK at post with content at client side ----- [booking nummonths='1' type='1']
895
 
896
  $curr_user = wp_get_current_user();
897
  if ( $curr_user->ID > 0 ) {
898
+ //$user_nick_name =get_user_meta($curr_user->ID, 'nickname')[0];
899
+ //debuge( $user_nick_name );
900
  $return_form .= '<script type="text/javascript">
901
  jQuery(document).ready( function(){
902
  var bk_af_submit_form = document.getElementById( "booking_form'.$my_boook_type.'" );
911
  (bk_af_element.type !=="hidden") &&
912
  (bk_af_element.name !== ("date_booking'.$my_boook_type.'" ) )
913
  ) {
914
+ // NickName //FixIn: 8.6.1.2
915
+ bk_af_reg = /^([A-Za-z0-9_\-\.])*(nickname){1}([A-Za-z0-9_\-\.])*$/;
916
+ if(bk_af_reg.test(bk_af_element.name) != false)
917
+ if (bk_af_element.value == "" )
918
+ bk_af_element.value = "' . str_replace( "'", '', empty( get_user_meta( $curr_user->ID, 'nickname' ) ) ? '' : get_user_meta( $curr_user->ID, 'nickname' )[0] ) . '";
919
  // Second Name
920
  bk_af_reg = /^([A-Za-z0-9_\-\.])*(last|second){1}([_\-\.])?name([A-Za-z0-9_\-\.])*$/;
921
  if(bk_af_reg.test(bk_af_element.name) != false)
1064
 
1065
  */
1066
  function bookingtimeline_shortcode($attr) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1067
 
1068
+ //FixIn: 8.6.1.13
1069
+ $timeline_results = bookingflextimeline_shortcode($attr);
1070
+ return $timeline_results;
1071
  }
1072
 
1073
  // Replace MARK at post with content at client side ----- [booking nummonths='1' type='1']
core/lib/wpdev-booking-widget.php CHANGED
@@ -71,7 +71,7 @@ class BookingWidget extends WP_Widget {
71
 
72
  $instance['booking_widget_title'] = strip_tags($new_instance['booking_widget_title']);
73
  $instance['booking_widget_show'] = strip_tags($new_instance['booking_widget_show']);
74
- $instance['booking_widget_type'] = strip_tags($new_instance['booking_widget_type']);
75
  $instance['booking_widget_calendar_count'] = strip_tags($new_instance['booking_widget_calendar_count']);
76
  $instance['booking_widget_last_field'] = $new_instance['booking_widget_last_field'];
77
  return $instance;
71
 
72
  $instance['booking_widget_title'] = strip_tags($new_instance['booking_widget_title']);
73
  $instance['booking_widget_show'] = strip_tags($new_instance['booking_widget_show']);
74
+ $instance['booking_widget_type'] = ( empty( $new_instance['booking_widget_type'] ) ? 1 : strip_tags( $new_instance['booking_widget_type'] ) );
75
  $instance['booking_widget_calendar_count'] = strip_tags($new_instance['booking_widget_calendar_count']);
76
  $instance['booking_widget_last_field'] = $new_instance['booking_widget_last_field'];
77
  return $instance;
core/sync/wpbc-gcal-class.php CHANGED
@@ -342,10 +342,45 @@ class WPBC_Google_Calendar {
342
  else
343
  continue; // Skip if we gave no dates
344
 
345
- //debuge($range_dates, $range_time);
346
  $bktype = $this->getResource();
347
-
348
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  $previous_active_user = -1;
350
  // MU
351
  if ( class_exists('wpdev_bk_multiuser') ) {
342
  else
343
  continue; // Skip if we gave no dates
344
 
345
+ //debuge($range_dates, $range_time);
346
  $bktype = $this->getResource();
347
+
348
+ //FixIn: 8.6.1.4
349
+ if ( ( class_exists( 'wpdev_bk_biz_s' ) )
350
+ && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
351
+ && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
352
+ && ( get_bk_option( 'booking_ics_import_append_checkout_day' ) !== 'Off' )
353
+ ) {
354
+ // Add one additional day to .ics event (useful in some cases for bookings with change-over days),
355
+ // if the imported .ics dates is coming without check in/our times
356
+ // Later system is adding check in/out times from Booking Calendar to this event
357
+ $range_dates_arr = explode( ',', $range_dates );
358
+ $ics_event_check_out = trim( $range_dates_arr[ ( count( $range_dates_arr ) - 1 ) ] );
359
+ $ics_event_check_out = explode( '.', $ics_event_check_out );
360
+ $ics_event_check_out = $ics_event_check_out[2] . '-' . $ics_event_check_out[1] . '-' . $ics_event_check_out[0];
361
+
362
+ $ics_event_check_out = strtotime( $ics_event_check_out );
363
+ $ics_event_check_out = strtotime( '+1 day', $ics_event_check_out );
364
+ $ics_event_check_out = date_i18n( "d.m.Y", $ics_event_check_out );
365
+ $range_dates .= ', ' . $ics_event_check_out;
366
+ }
367
+
368
+ //FixIn: 8.6.1.1
369
+ if ( empty( $range_time ) ) {
370
+
371
+ if ( ( class_exists( 'wpdev_bk_biz_s' ) )
372
+ && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
373
+ && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
374
+ ) { //FixIn: 2.0.5.1
375
+ //Add check in/out times to full day events
376
+ $wpbc_check_in = get_bk_option( 'booking_range_selection_start_time' );// . ':01'; // ' 14:00:01'
377
+ $wpbc_check_out = get_bk_option( 'booking_range_selection_end_time' ); // . ':02'; // ' 10:00:02';
378
+ $range_time = $wpbc_check_in . ' - ' . $wpbc_check_out;
379
+ $range_time = "select-one^rangetime{$bktype}^{$range_time}~";
380
+ }
381
+ }
382
+ //debuge($range_dates, $range_time); // array( [0] => 07.08.2017, 08.08.2017, [1] => select-one^rangetime4^03:00 - 07:00~ )
383
+
384
  $previous_active_user = -1;
385
  // MU
386
  if ( class_exists('wpdev_bk_multiuser') ) {
core/timeline/v2/wpbc-class-timeline_v2.php CHANGED
@@ -1648,7 +1648,7 @@ if(0)
1648
  if ( function_exists( 'get_title_for_showing_in_day' ) ) {
1649
  $text_in_day_cell .= esc_textarea( get_title_for_showing_in_day( $bk_id, $bookings, $what_show_in_day_template ) ); //FixIn: 7.1.1.2
1650
  } else {
1651
- if ( ! $this->is_frontend )
1652
  $text_in_day_cell .= $bk_id . ':' . esc_textarea( $bookings[$bk_id]->form_data['_all_fields_']['name'] ); // Default Free //FixIn: 7.1.1.2
1653
  }
1654
 
@@ -2637,7 +2637,8 @@ if(0)
2637
  // $edit_booking_url_admin = wpbc_get_bookings_url( true, false ).'&wh_booking_id='.$bk_id.'&view_mode=vm_listing&tab=actions';
2638
  // $trash_booking_url_admin = wpbc_get_bookings_url( true, false ).'&wh_booking_id='.$bk_id.'&view_mode=vm_listing&tab=actions';
2639
 
2640
- if ( ( ! $is_approved ) || ( true ) ) { //FixIn: 8.2.1.14
 
2641
  $visitorbookingediturl = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingediturl]', $bk_id );
2642
  $visitorbookingcancelurl = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingcancelurl]', $bk_id );
2643
  $visitorbookingpayurl = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingpayurl]', $bk_id );
@@ -3001,10 +3002,7 @@ add_shortcode( 'bookingflextimeline', 'bookingflextimeline_shortcode' );
3001
  /** JSS */
3002
  function wpbc_timeline_js_load_files( $where_to_load ) {
3003
 
3004
- $booking_timeline_load = get_bk_option( 'booking_timeline_load' );
3005
- if ( 'timeline_v1' == $booking_timeline_load ){
3006
- return;
3007
- }
3008
 
3009
  $is_in_footer = ! true;
3010
 
@@ -3024,10 +3022,7 @@ add_action( 'wpbc_enqueue_js_files', 'wpbc_timeline_js_load_files', 50 );
3024
  /** CSS */
3025
  function wpbc_timeline_enqueue_css_files( $where_to_load ) {
3026
 
3027
- $booking_timeline_load = get_bk_option( 'booking_timeline_load' );
3028
- if ( 'timeline_v1' == $booking_timeline_load ){
3029
- return;
3030
- }
3031
 
3032
  if ( in_array( $where_to_load, array( 'admin', 'both', 'client' ) ) ) {
3033
 
1648
  if ( function_exists( 'get_title_for_showing_in_day' ) ) {
1649
  $text_in_day_cell .= esc_textarea( get_title_for_showing_in_day( $bk_id, $bookings, $what_show_in_day_template ) ); //FixIn: 7.1.1.2
1650
  } else {
1651
+ if ( ( ! $this->is_frontend ) && ( isset( $bookings[ $bk_id ]->form_data['_all_fields_']['name'] ) ) )
1652
  $text_in_day_cell .= $bk_id . ':' . esc_textarea( $bookings[$bk_id]->form_data['_all_fields_']['name'] ); // Default Free //FixIn: 7.1.1.2
1653
  }
1654
 
2637
  // $edit_booking_url_admin = wpbc_get_bookings_url( true, false ).'&wh_booking_id='.$bk_id.'&view_mode=vm_listing&tab=actions';
2638
  // $trash_booking_url_admin = wpbc_get_bookings_url( true, false ).'&wh_booking_id='.$bk_id.'&view_mode=vm_listing&tab=actions';
2639
 
2640
+ $is_change_hash_after_approvement = get_bk_option( 'booking_is_change_hash_after_approvement' ); //FixIn: 8.6.1.6
2641
+ if ( ( ! $is_approved ) || ( 'On' != $is_change_hash_after_approvement ) ) { //FixIn: 8.2.1.14
2642
  $visitorbookingediturl = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingediturl]', $bk_id );
2643
  $visitorbookingcancelurl = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingcancelurl]', $bk_id );
2644
  $visitorbookingpayurl = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingpayurl]', $bk_id );
3002
  /** JSS */
3003
  function wpbc_timeline_js_load_files( $where_to_load ) {
3004
 
3005
+ //FixIn: 8.6.1.13
 
 
 
3006
 
3007
  $is_in_footer = ! true;
3008
 
3022
  /** CSS */
3023
  function wpbc_timeline_enqueue_css_files( $where_to_load ) {
3024
 
3025
+ //FixIn: 8.6.1.13
 
 
 
3026
 
3027
  if ( in_array( $where_to_load, array( 'admin', 'both', 'client' ) ) ) {
3028
 
core/wpbc-activation.php CHANGED
@@ -858,8 +858,7 @@ function wpbc_get_default_options( $option_name = '', $is_get_multiuser_general_
858
  $mu_option4delete[]='booking_listing_default_view_mode';
859
  $default_options['booking_view_days_num'] = ( ( ! class_exists( 'wpdev_bk_personal' ) ) ? '90' : '30' );
860
  $mu_option4delete[]='booking_view_days_num';
861
- $default_options['booking_timeline_load'] = 'timeline_v2_flex'; //FixIn: 8.5.2.20
862
- $mu_option4delete[]='booking_timeline_load';
863
  $default_options['booking_max_monthes_in_calendar'] = '1y';
864
  $mu_option4delete[]='booking_max_monthes_in_calendar';
865
  $default_options['booking_client_cal_count'] = '1';
@@ -1137,6 +1136,9 @@ function wpbc_get_default_options( $option_name = '', $is_get_multiuser_general_
1137
  $default_options['booking_change_resource_skip_checking'] = 'Off'; //FixIn: 8.4.5.4
1138
  $mu_option4delete[]='booking_change_resource_skip_checking';
1139
 
 
 
 
1140
 
1141
  }
1142
 
@@ -1300,6 +1302,8 @@ function wpbc_get_default_options( $option_name = '', $is_get_multiuser_general_
1300
  $mu_option4delete[]='booking_cache_expiration';
1301
  $default_options['booking_search_results_order'] = 'prioritet'; //FixIn: 8.4.7.8
1302
  $mu_option4delete[]='booking_search_results_order';
 
 
1303
 
1304
  // Updated during regeneration seacrh cache
1305
  //$default_options['booking_cache_content']='';
858
  $mu_option4delete[]='booking_listing_default_view_mode';
859
  $default_options['booking_view_days_num'] = ( ( ! class_exists( 'wpdev_bk_personal' ) ) ? '90' : '30' );
860
  $mu_option4delete[]='booking_view_days_num';
861
+ //FixIn: 8.6.1.13
 
862
  $default_options['booking_max_monthes_in_calendar'] = '1y';
863
  $mu_option4delete[]='booking_max_monthes_in_calendar';
864
  $default_options['booking_client_cal_count'] = '1';
1136
  $default_options['booking_change_resource_skip_checking'] = 'Off'; //FixIn: 8.4.5.4
1137
  $mu_option4delete[]='booking_change_resource_skip_checking';
1138
 
1139
+ $default_options['booking_log_booking_actions'] = 'Off'; //FixIn: 8.6.1.10
1140
+ $mu_option4delete[]='booking_log_booking_actions';
1141
+
1142
 
1143
  }
1144
 
1302
  $mu_option4delete[]='booking_cache_expiration';
1303
  $default_options['booking_search_results_order'] = 'prioritet'; //FixIn: 8.4.7.8
1304
  $mu_option4delete[]='booking_search_results_order';
1305
+ $default_options['booking_search_form_dates_format'] = 'yy-mm-dd'; //FixIn: 8.6.1.21
1306
+ $mu_option4delete[]='booking_search_form_dates_format';
1307
 
1308
  // Updated during regeneration seacrh cache
1309
  //$default_options['booking_cache_content']='';
core/wpbc-constants.php CHANGED
@@ -26,7 +26,7 @@ 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_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
 
core/wpbc-css.php CHANGED
@@ -68,18 +68,30 @@ class WPBC_CSS extends WPBC_JS_CSS{
68
  wp_enqueue_style( 'wpbc-admin-pages', wpbc_plugin_url( '/css/admin.css' ), array(), WP_BK_VERSION_NUM);
69
  wp_enqueue_style( 'wpbc-admin-skin', wpbc_plugin_url( '/css/admin-skin.css' ), array( 'wpbc-admin-pages' ), WP_BK_VERSION_NUM); //FixIn: 8.0.2.4
70
  wp_enqueue_style( 'wpbc-css-print', wpbc_plugin_url( '/css/print.css' ), array(), WP_BK_VERSION_NUM);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  }
72
  if ( ( $where_to_load != 'admin' ) || ( wpbc_is_new_booking_page() ) ){ // Client or Add New Booking page
73
  wp_enqueue_style( 'wpbc-client-pages', wpbc_plugin_url( '/css/client.css' ), array(), WP_BK_VERSION_NUM);
74
  }
75
 
76
- ////FixIn: 8.5.2.20
77
- $booking_timeline_load = get_bk_option( 'booking_timeline_load' );
78
- if ( 'timeline_v1' == $booking_timeline_load ) {
79
- if ( ( $where_to_load != 'admin' ) || ( wpbc_is_bookings_page() ) ) { // Client or Booking Listing / Timeline pages
80
- wp_enqueue_style( 'wpbc-admin-timeline', wpbc_plugin_url( '/css/timeline.css' ), array(), WP_BK_VERSION_NUM );
81
- }
82
- }
83
 
84
  // wp_enqueue_style('wpbc-datepicker-main', wpbc_plugin_url( '/js/datepick.5.1/css/jquery.datepick.css' ), array(), WP_BK_VERSION_NUM);
85
 
68
  wp_enqueue_style( 'wpbc-admin-pages', wpbc_plugin_url( '/css/admin.css' ), array(), WP_BK_VERSION_NUM);
69
  wp_enqueue_style( 'wpbc-admin-skin', wpbc_plugin_url( '/css/admin-skin.css' ), array( 'wpbc-admin-pages' ), WP_BK_VERSION_NUM); //FixIn: 8.0.2.4
70
  wp_enqueue_style( 'wpbc-css-print', wpbc_plugin_url( '/css/print.css' ), array(), WP_BK_VERSION_NUM);
71
+
72
+ global $wp_version;
73
+
74
+ if ( ( version_compare( $wp_version, '5.3', '>=' ) )
75
+ || ( version_compare( $wp_version, '5.3-RC2-46574', '>=' ) )
76
+ ){
77
+ /* The SVG is arrow-down-alt2 from Dashicons. */
78
+ $css = "
79
+ .wp-core-ui .wpdevelop .control-group .btn-toolbar .input-group > select,
80
+ .wp-core-ui .wpdevelop select.form-control {
81
+ background: #fff url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E') no-repeat right 5px top 55%;
82
+ padding: 2px 30px 2px 10px;
83
+ }
84
+ ";
85
+ wp_add_inline_style( 'wpbc-admin-pages', $css );
86
+ }
87
+
88
+
89
  }
90
  if ( ( $where_to_load != 'admin' ) || ( wpbc_is_new_booking_page() ) ){ // Client or Add New Booking page
91
  wp_enqueue_style( 'wpbc-client-pages', wpbc_plugin_url( '/css/client.css' ), array(), WP_BK_VERSION_NUM);
92
  }
93
 
94
+ //FixIn: 8.6.1.13
 
 
 
 
 
 
95
 
96
  // wp_enqueue_style('wpbc-datepicker-main', wpbc_plugin_url( '/js/datepick.5.1/css/jquery.datepick.css' ), array(), WP_BK_VERSION_NUM);
97
 
core/wpbc-dev-api.php CHANGED
@@ -403,6 +403,4 @@ function your_cust_func_add_new_booking( $booking_id, $resource_id, $str_dates__
403
 
404
  }
405
  add_action( 'wpdev_new_booking', 'your_cust_func_add_new_booking', 100, 5 );
406
- */
407
-
408
-
403
 
404
  }
405
  add_action( 'wpdev_new_booking', 'your_cust_func_add_new_booking', 100, 5 );
406
+ */
 
 
core/wpbc-functions.php CHANGED
@@ -2561,8 +2561,6 @@ function wpbc_print_js() {
2561
 
2562
  if ( ! empty( $wpbc_queued_js ) ) {
2563
 
2564
- echo "<!-- WPBC JavaScript -->\n<script type=\"text/javascript\">\njQuery(function($) {";
2565
-
2566
  $wpbc_queued_js = wp_check_invalid_utf8( $wpbc_queued_js );
2567
 
2568
  $wpbc_queued_js = wp_specialchars_decode( $wpbc_queued_js , ENT_COMPAT); // Converts double quotes '&quot;' => '"'
@@ -2570,7 +2568,7 @@ function wpbc_print_js() {
2570
  $wpbc_queued_js = preg_replace( '/&#(x)?0*(?(1)27|39);?/i', "'", $wpbc_queued_js );
2571
  $wpbc_queued_js = str_replace( "\r", '', $wpbc_queued_js );
2572
 
2573
- echo $wpbc_queued_js . "});\n</script>\n<!-- End WPBC JavaScript -->\n";
2574
 
2575
  $wpbc_queued_js = '';
2576
  unset( $wpbc_queued_js );
@@ -2691,7 +2689,7 @@ function wpbc_welcome_panel() {
2691
  left: -12px;
2692
  width: 10px;
2693
  height: 100%;
2694
- background: url('../wp-admin/images/xit.gif') 0 7% no-repeat;
2695
  }
2696
  .wpbc-panel .welcome-panel .welcome-panel-close:hover:before {
2697
  background-position: 100% 7%;
@@ -3489,4 +3487,27 @@ function wpbc_auto_cancel_booking( $booking_id , $email_reason = '' ) { //Fi
3489
 
3490
  wpbc_redirect( site_url() );
3491
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3492
  }
2561
 
2562
  if ( ! empty( $wpbc_queued_js ) ) {
2563
 
 
 
2564
  $wpbc_queued_js = wp_check_invalid_utf8( $wpbc_queued_js );
2565
 
2566
  $wpbc_queued_js = wp_specialchars_decode( $wpbc_queued_js , ENT_COMPAT); // Converts double quotes '&quot;' => '"'
2568
  $wpbc_queued_js = preg_replace( '/&#(x)?0*(?(1)27|39);?/i', "'", $wpbc_queued_js );
2569
  $wpbc_queued_js = str_replace( "\r", '', $wpbc_queued_js );
2570
 
2571
+ echo "<!-- WPBC JavaScript -->\n<script type=\"text/javascript\">\njQuery(function($) {" . $wpbc_queued_js . "});\n</script>\n<!-- End WPBC JavaScript -->\n";
2572
 
2573
  $wpbc_queued_js = '';
2574
  unset( $wpbc_queued_js );
2689
  left: -12px;
2690
  width: 10px;
2691
  height: 100%;
2692
+ /*background: url('../wp-admin/images/xit.gif') 0 7% no-repeat;*/
2693
  }
2694
  .wpbc-panel .welcome-panel .welcome-panel-close:hover:before {
2695
  background-position: 100% 7%;
3487
 
3488
  wpbc_redirect( site_url() );
3489
  }
3490
+ }
3491
+
3492
+
3493
+ //FixIn: 8.6.1.10
3494
+ /**
3495
+ * Add Log info to Notes of bookings
3496
+ *
3497
+ * @param arr | int $booking_id_arr
3498
+ * @param string $message
3499
+ */
3500
+ function wpbc_add_log_info( $booking_id_arr, $message ) {
3501
+
3502
+ if ( get_bk_option( 'booking_log_booking_actions' ) !== 'On' ) {
3503
+ return;
3504
+ }
3505
+
3506
+ $booking_id_arr = (array) $booking_id_arr;
3507
+
3508
+ $is_append = true;
3509
+ foreach ( $booking_id_arr as $booking_id ) {
3510
+ $date_time = date_i18n( ' [Y-m-d H:i]' );
3511
+ make_bk_action('wpdev_make_update_of_remark' , $booking_id , $message . $date_time , $is_append );
3512
+ }
3513
  }
core/wpbc-include.php CHANGED
@@ -46,13 +46,8 @@ require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-toolbars.php' );
46
  require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-sql.php' ); // Data Engine for Booking Listing / Calendar Overview pages
47
  require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-class-listing.php' ); // CLASS. Booking Listing Table
48
 
49
- ////FixIn: 8.5.2.20
50
- $booking_timeline_load = get_bk_option( 'booking_timeline_load' );
51
- if ( 'timeline_v1' == $booking_timeline_load ){
52
- require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-class-timeline.php' ); // CLASS. Timeline
53
- } else {
54
- require_once( WPBC_PLUGIN_DIR . '/core/timeline/flex-timeline.php' ); // New. Flex. Timeline
55
- }
56
 
57
  require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-dashboard.php' ); // Dashboard Widget
58
  // Admin Pages
46
  require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-sql.php' ); // Data Engine for Booking Listing / Calendar Overview pages
47
  require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-class-listing.php' ); // CLASS. Booking Listing Table
48
 
49
+ //FixIn: 8.6.1.13
50
+ require_once( WPBC_PLUGIN_DIR . '/core/timeline/flex-timeline.php' ); // New. Flex. Timeline
 
 
 
 
 
51
 
52
  require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-dashboard.php' ); // Dashboard Widget
53
  // Admin Pages
css/admin-skin.css CHANGED
@@ -74,7 +74,9 @@
74
  /* In Dropdown lists buttons */
75
  .wpdevelop .dropdown-menu > li .btn-group .button {
76
  font-size: 14px;
77
- line-height: 15px;
 
 
78
  }
79
  .wpdevelop .dropdown-menu li .btn-toolbar .input-group.text-group .dropdown-menu-text-element {
80
  width:100%;
74
  /* In Dropdown lists buttons */
75
  .wpdevelop .dropdown-menu > li .btn-group .button {
76
  font-size: 14px;
77
+ line-height: 1.4;
78
+ height: auto;
79
+ padding: 5px 15px;
80
  }
81
  .wpdevelop .dropdown-menu li .btn-toolbar .input-group.text-group .dropdown-menu-text-element {
82
  width:100%;
css/admin.css CHANGED
@@ -162,4 +162,145 @@ select option.wpbc_child_resource{
162
  .field-action-buttons.booking-actions.col-sm-2 {
163
  text-align: left;
164
  }
165
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  .field-action-buttons.booking-actions.col-sm-2 {
163
  text-align: left;
164
  }
165
+ }
166
+
167
+
168
+
169
+
170
+ /** WordPress 5.3 Fix ***********************************************************************************************/
171
+
172
+ /* General */
173
+ .wp-core-ui .wpbc_page .button,
174
+ .wp-core-ui .wpbc_page .button-primary,
175
+ .wp-core-ui .wpbc_page .button-secondary {
176
+ /*
177
+ line-height: 2.15384615;
178
+ min-height: 30px;
179
+ padding: 0 10px;
180
+ */
181
+ line-height: 26px;
182
+ height: 28px;
183
+ padding: 0 10px 1px;
184
+ }
185
+ /* Secondary buttons styles */
186
+ .wp-core-ui .wpbc_page .button,
187
+ .wp-core-ui .wpbc_page .button-secondary {
188
+ /*
189
+ color: #0071a1;
190
+ border-color: #0071a1;
191
+ background: #f3f5f6;
192
+ */
193
+ color: #555;
194
+ border-color: #ccc;
195
+ background: #f7f7f7;
196
+ /*box-shadow: 0 1px 0 #ccc;*/
197
+ box-shadow: none;
198
+ }
199
+ .wp-core-ui .wpbc_page .button-secondary:active,
200
+ .wp-core-ui .wpbc_page .button.active,
201
+ .wp-core-ui .wpbc_page .button.active:hover,
202
+ .wp-core-ui .wpbc_page .button:active {
203
+ box-shadow: inset 0 2px 5px -3px rgba(0,0,0,.5);
204
+ transform: translateY(1px);
205
+ }
206
+
207
+ /* Secondary buttons :hover styles */
208
+ .wp-core-ui .wpbc_page .button-secondary:hover,
209
+ .wp-core-ui .wpbc_page .button.hover,
210
+ .wp-core-ui .wpbc_page .button:hover {
211
+ /*background: #f1f1f1;
212
+ border-color: #016087;
213
+ color: #016087;
214
+ */
215
+ }
216
+ /* Secondary buttons :focus :hover styles */
217
+ .wp-core-ui .wpbc_page .button-secondary:focus,
218
+ .wp-core-ui .wpbc_page .button-secondary:hover,
219
+ .wp-core-ui .wpbc_page .button.focus,
220
+ .wp-core-ui .wpbc_page .button.hover,
221
+ .wp-core-ui .wpbc_page .button:focus,
222
+ .wp-core-ui .wpbc_page .button:hover {
223
+ background: #fafafa;
224
+ border-color: #999;
225
+ color: #23282d;
226
+ }
227
+ /* Secondary buttons :focus styles */
228
+ .wp-core-ui .wpbc_page .button-secondary:focus,
229
+ .wp-core-ui .wpbc_page .button.focus,
230
+ .wp-core-ui .wpbc_page .button:focus {
231
+ /*background: #f3f5f6;
232
+ border-color: #007cba;
233
+ color: #016087;
234
+ box-shadow: 0 0 0 1px #007cba;
235
+ outline: 2px solid transparent;
236
+ outline-offset: 0;*/
237
+ border-color: #5b9dd9;
238
+ box-shadow: 0 0 3px rgba(0,115,170,.8);
239
+ }
240
+
241
+ /* Primary buttons styles */
242
+ .wp-core-ui .wpbc_page .button-primary {
243
+ /*background: #007cba;
244
+ border-color: #007cba;
245
+ text-shadow: none;
246
+ */
247
+ background: #0085ba;
248
+ border-color: #0073aa #006799 #006799;
249
+ box-shadow: 0 1px 0 #006799;
250
+ text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;
251
+ color: #fff;
252
+ }
253
+ /* Primary buttons :hover styles */
254
+ .wp-core-ui .wpbc_page .button-primary.focus,
255
+ .wp-core-ui .wpbc_page .button-primary.hover,
256
+ .wp-core-ui .wpbc_page .button-primary:focus,
257
+ .wp-core-ui .wpbc_page .button-primary:hover {
258
+ /*
259
+ background: #0071a1;
260
+ border-color: #0071a1;
261
+ */
262
+ background: #008ec2;
263
+ border-color: #006799;
264
+ color:#fff;
265
+ }
266
+ /* Primary buttons :focus styles */
267
+ .wp-core-ui .wpbc_page .button-primary.focus,
268
+ .wp-core-ui .wpbc_page .button-primary:focus {
269
+ box-shadow: 0 1px 0 #0073aa, 0 0 2px 1px #33b3db;
270
+ }
271
+ /**********************************************************************************************************************/
272
+ .wp-core-ui .wpbc_page .control-group input[type="text"] {
273
+ min-height: 26px;
274
+ }
275
+ .wp-core-ui .wpbc_page input[type="text"] {
276
+ min-height: 28px;
277
+ }
278
+ .wp-admin .wpbc_page select {
279
+ color:#32373c;
280
+ }
281
+ @media (max-width: 782px) {
282
+
283
+ .wpdevelop .control-group .btn-group > .button,
284
+ .wpdevelop .control-group .btn-toolbar .btn-group > .button,
285
+ .wpdevelop .control-group .btn-toolbar .input-group > .input-group-btn .button{
286
+ /*line-height: 2;*/
287
+ }
288
+ .wp-core-ui .wpbc_page .button,
289
+ .wp-core-ui .wpbc_page .button-primary,
290
+ .wp-core-ui .wpbc_page .button-secondary,
291
+
292
+ .wpdevelop .control-group .btn-group > .button .glyphicon,
293
+ .wpdevelop .control-group .btn-toolbar .btn-group > .button .glyphicon,
294
+ .wpdevelop .control-group .btn-toolbar .input-group > .input-group-btn .button .glyphicon
295
+ {
296
+ height: auto;
297
+ line-height: 2.2;
298
+
299
+ height: 34px;
300
+ /*line-height:28px;*/
301
+ min-height: 28px;
302
+ }
303
+ .wp-core-ui .wpbc_page .button {
304
+ padding: 1px 14px;
305
+ }
306
+ }
css/skins/black-2.css ADDED
@@ -0,0 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*******************************************************************************/
2
+ /* Black 2 - 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
+ 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:none;
28
+ -moz-border-radius:none;
29
+ -webkit-border-radius:none
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;
71
+ border:2px solid #000000;
72
+ color:#05738e;
73
+ text-transform:uppercase;
74
+ }
75
+ /* Cell border*/
76
+ .block_hints .block_free, .block_hints .block_time, .block_hints .block_booked, .block_hints .block_pending, .block_hints .block_check_in_out,
77
+ .datepick-inline .datepick-days-cell{
78
+ border:2px solid #000000;
79
+ color:#ffff;
80
+ }
81
+
82
+ /* Dates Cells **********************************************************/
83
+ /*******************************************************************************/
84
+
85
+ /* A V A I L A B L E - BACKGROUND */
86
+ .block_hints .block_free,
87
+ .block_hints .block_time,
88
+ .block_hints .block_check_in_out div.check-in-div, /* Item for the LEGEND */
89
+ .block_hints .block_check_in_out div.check-out-div, /* Item for the LEGEND */
90
+ .datepick-inline .date_available,
91
+ .datepick-inline .timespartly.check_in_time div.check-in-div, /* Define the COLOR fot the check in / out times the same as available*/
92
+ .datepick-inline .timespartly.check_out_time div.check-out-div {
93
+ background:none repeat scroll 0 0 #191919;
94
+ }
95
+ /* A V A I L A B L E and UNSELECTABLE - Text */
96
+ .block_hints .block_free,
97
+ .datepick-inline .date_available,
98
+ .datepick-inline .date_available.datepick-unselectable{
99
+ color: #FFFFFF; /* This style for the uvailbale date, when we are select the dates */
100
+ text-shadow:none;
101
+ }
102
+ /* A V A I L A B L E - Text A */
103
+ .block_hints .block_free a,
104
+ .block_hints .block_time,
105
+ .datepick-inline .date_available a{
106
+ color:#fff;
107
+ font-weight: 600;
108
+ text-shadow: none;
109
+ }
110
+ /*******************************************************************************/
111
+
112
+ /* T I M E S L O T S */
113
+ .block_hints .block_time,
114
+ .datepick-inline .timespartly{
115
+ background-image: url("../../assets/img/clock_fill.png");
116
+ background-repeat: no-repeat;
117
+ background-position:100% 100%;
118
+ }
119
+ /*******************************************************************************/
120
+
121
+ /* A P P R O V E D - BACKGROUND */
122
+ .block_hints .date_approved.block_check_in_out,
123
+ .block_hints .block_booked,
124
+ .datepick-inline .date_approved,
125
+ /* 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 */
126
+ td.timespartly.check_in_time.check_out_time.check_in_time_date2approve.check_out_time_date_approved div.check-in-div,
127
+ td.timespartly.check_in_time.check_out_time.check_out_time_date2approve.check_in_time_date_approved div.check-out-div {
128
+ background-color:#c23b1b;
129
+ }
130
+ /* A P P R O V E D - T E X T /including partially booked - timeslots/ */
131
+ .block_hints .date_approved.block_check_in_out,
132
+ .block_hints .block_booked,
133
+ .datepick-inline .date_approved,
134
+ .block_hints .block_booked a,
135
+ .datepick-inline .date_approved a{
136
+ color: #FFF;
137
+ font-weight: 600;
138
+ text-shadow: 0 1px 0 #DD0000;
139
+ }
140
+ /* CHECK IN and CHECK OUT Borders for the approved cells - the COLOR have to be the SAME as BACKGROUND of this cell*/
141
+ .block_hints .date_approved.block_check_in_out div.check-in-div, /* Item for the LEGEND */
142
+ .datepick-inline .date_approved.timespartly.check_in_time div.check-in-div{
143
+ border-right: 1px dotted #C60B0B;
144
+ }
145
+ .block_hints .date_approved.block_check_in_out div.check-out-div, /* Item for the LEGEND */
146
+ .datepick-inline .date_approved.timespartly.check_out_time div.check-out-div{
147
+ border-left: 1px dotted #C60B0B;
148
+ }
149
+ /*******************************************************************************/
150
+
151
+ /* P E N D I N G - BACKGROUND */
152
+ .block_hints .date2approve.block_check_in_out,
153
+ .block_hints .block_pending,
154
+ .datepick-inline .date2approve,
155
+ /* 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 */
156
+ td.timespartly.check_in_time.check_out_time.check_in_time_date_approved.check_out_time_date2approve div.check-in-div,
157
+ td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_in_time_date2approve div.check-out-div {
158
+ background-color: #DF9A00;
159
+ }
160
+ /* P E N D I N G - T E X T /including partially booked - timeslots/ */
161
+ .block_hints .date2approve.block_check_in_out,
162
+ .block_hints .block_pending,
163
+ .datepick-inline .date2approve,
164
+ .block_hints .block_pending a,
165
+ .datepick-inline .date2approve a {
166
+ color: #885500;
167
+ font-weight: 600;
168
+ text-shadow: 0 1px 0 #FFAA00;
169
+ }
170
+ /* CHECK IN and CHECK OUT Borders for the approved cells - the COLOR have to be the SAME as BACKGROUND of this cell*/
171
+ .block_hints .date2approve.block_check_in_out div.check-in-div, /* Item for the LEGEND */
172
+ .datepick-inline .date2approve.timespartly.check_in_time div.check-in-div{
173
+ border-right: 1px dotted #DF9A00;
174
+ }
175
+ .block_hints .date2approve.block_check_in_out div.check-out-div, /* Item for the LEGEND */
176
+ .datepick-inline .date2approve.timespartly.check_out_time div.check-out-div{
177
+ border-left: 1px dotted #DF9A00;
178
+ }
179
+ /*******************************************************************************/
180
+
181
+ /* S E L E C T E D Dates - Background */
182
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day {
183
+ background-color: #05738e;
184
+ }
185
+ /* S E L E C T E D Dates - Text color */
186
+ .datepick-inline .datepick-one-month .datepick .datepick-current-day a{
187
+ color: #EEEEEE;
188
+ text-shadow: 0 -1px 0 #000000;
189
+ }
190
+ /*******************************************************************************/
191
+
192
+ /* C e l l O V E R Dates - Background */
193
+ .datepick-inline .datepick .datepick-days-cell-over{
194
+ background:#aaa;
195
+ }
196
+ /* C e l l O V E R Dates - Text color */
197
+ .datepick-inline .datepick .datepick-days-cell-over a:hover,
198
+ .datepick-inline .datepick .datepick-days-cell-over a{
199
+ color: #eee;
200
+ text-shadow: 0 -1px 0 #888;
201
+ }
202
+ /*******************************************************************************/
203
+ /* FixIn: 6.0.1.2 */
204
+ /* 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 */
205
+ td.timespartly.check_in_time.check_out_time.check_in_time_date_approved.check_out_time_date2approve span,
206
+ td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_in_time_date2approve span,
207
+ td.timespartly.check_in_time.check_out_time.check_in_time_date2approve.check_out_time_date_approved span,
208
+ td.timespartly.check_in_time.check_out_time.check_out_time_date2approve.check_in_time_date_approved span {
209
+ font-weight: 600;
210
+ text-shadow: none;
211
+ }
212
+
213
+ /* Show partially (time-slots) booked days with Background color as for available days ********************************/
214
+ /** //FixIn: 8.2.1.27 Updated 2018-07-04 ****/
215
+ /* Color as in this section A V A I L A B L E - BACKGROUND */
216
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock {
217
+ background-color: #191919;
218
+ }
219
+ /* Same as in this Section above --- A V A I L A B L E - Text A */
220
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .times_clock.date_available a {
221
+ color: #fff;
222
+ font-weight: 600;
223
+ text-shadow: none;
224
+ }
225
+ /* Same as in this Section above --- S E L E C T E D Dates - Text color */
226
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .datepick-one-month .datepick .times_clock.date_available.datepick-current-day a{
227
+ color: #EEEEEE;
228
+ text-shadow: 0 -1px 0 #000000;
229
+ }
230
+ /* Same as in this Section above --- A V A I L A B L E and UNSELECTABLE - Text */
231
+ .wpbc_timeslot_day_bg_as_available .datepick-inline .date_available {
232
+ color: #CCCCCC; /* This style for the uvailbale date, when we are select the dates */
233
+ text-shadow: 0 1px 0 #FFFFFF; /* This style for the uvailbale date, when we are select the dates */
234
+ }
css/timeline.css DELETED
@@ -1,846 +0,0 @@
1
- .wpbc_timeline_frame {
2
- background-color: #fff;
3
- }
4
- /* Calendar Overview admin panel page Styles */
5
- .wpbc_tl_table {
6
- width: auto;
7
- border: 1px solid #ccc;
8
- box-shadow: 0 1px 2px #ccd;
9
- }
10
- .wpbc_tl_table .wpbc_tl_table_header {
11
- background: #e9e9e9 !important
12
- }.wpbc_tl_table .wpbc_tl_table_header th{
13
- font-weight: 600;
14
- }
15
- .wpbc_tl_table .wpbc_tl_collumn_1{
16
- width: 15%;
17
- overflow: hidden;
18
- position: relative;
19
- }
20
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_collumn_2{
21
- text-align:center;
22
- }
23
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_collumn_1,
24
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_collumn_2 {
25
- text-transform: none;
26
- }
27
- .wpbc_tl_table .container-fluid {
28
- margin: 0px;
29
- padding: 0px;
30
- }
31
- .wpbc_tl_table .container-fluid .col-md-12 {
32
- height: 44px;
33
- overflow: hidden;
34
- position: relative;
35
- }
36
- .wpbc_tl_table .container-fluid .wpbc_tl_scroller {
37
- margin-left: -2px;
38
- margin-top: -3px;
39
- position: absolute;
40
- border: 0 none;
41
- height: 34px;
42
- width:100%;
43
- }
44
- .wpbc_tl_table a,
45
- .wpbc_tl_table a:hover,
46
- .wpbc_tl_table a:focus {
47
- box-shadow: none;
48
- outline: none;
49
- }
50
- /* Navigation for Front End */
51
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_nav {
52
- width:100%;
53
- }
54
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_nav .wpbc_tl_prev {
55
- float:left;
56
- width:5%;
57
- font-size:22px;
58
- font-weight: 600;
59
- line-height:12px;
60
- text-align: left;
61
- }
62
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_nav .wpbc_tl_title {
63
- float:left;
64
- width:90%;
65
- font-size:12px;
66
- color: #777;
67
- }
68
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_nav .wpbc_tl_next {
69
- float:right;
70
- width:5%;
71
- text-align:right;
72
- font-size:22px;
73
- font-weight: 600;
74
- line-height:12px;
75
- }
76
-
77
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_nav .wpbc_tl_prev a,
78
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_nav .wpbc_tl_next a,
79
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_nav .wpbc_tl_prev a:hover,
80
- .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_nav .wpbc_tl_next a:hover {
81
- text-decoration: none;
82
- color: #757575;
83
- cursor: pointer;
84
- }
85
-
86
- .wpbc_tl_frame_dates {
87
- /*width:auto;*/
88
- width: 100%;
89
- overflow: hidden;
90
- }
91
- .wpbc_tl_table_titles .wpbc_tl_frame_dates {
92
- border-bottom: 1px solid #DD8800;
93
- height: 33px;
94
- }
95
- .wpbc_tl_frame_dates .month_year {
96
- color: #C32;
97
- font-size: 9px;
98
- font-weight: 600;
99
- margin-left: 2px;
100
- margin-top: 27px;
101
- padding: 0;
102
- position: absolute;
103
- width: 130px;
104
- word-wrap: inherit;
105
- }
106
- .wpbc_tl_table .wpbc_tl_dates_line .container-fluid .col-md-12 {
107
- height: 34px;
108
- }
109
-
110
- .wpbc_tl_table .wpbc_tl_resource_title {
111
- color: #999;
112
- float: left;
113
- text-shadow: none; /*0 -1px 0 #EEE;*/
114
- position: absolute;
115
- white-space: nowrap;
116
- word-wrap: normal;
117
- font-size:12px;
118
- }
119
- .wpbc_tl_table .wpbc_tl_resource_title.parent {
120
- font-weight: 600;
121
- }
122
- .wpbc_tl_table .wpbc_tl_resource_title.child {
123
- margin-left: 20px;
124
- }
125
- .wpbc_tl_resource_title a,
126
- .wpbc_tl_resource_title a:hover{
127
- border-bottom: 1px dashed;
128
- color: #789 !important;
129
- font-size: 12px;
130
- text-decoration: none;
131
- text-shadow: 0 -1px 0 #EEEEEE;
132
- }
133
-
134
- .wpbc_tl_frame_dates .wpbc_tl_day_cell {
135
- width: 31px;
136
- height: 37px;
137
- float: left;
138
- border-left: 1px dashed #CCC;
139
- }
140
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header {
141
- background: none repeat scroll 0 0 #F5F5F5 !important;
142
- border-left: 1px dashed #CCC;
143
- color: #777;
144
- font-size: 10px;
145
- height: 38px;
146
- line-height: 14px;
147
- padding: 6px 0;
148
- text-shadow: 0 -1px 0 #FFF;
149
- vertical-align: top;
150
- }
151
- .wpbc_tl_frame_dates .new_month {
152
- border-left: 2px solid #C54;
153
- }
154
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.new_month {
155
- border-left: 2px solid #C54;
156
- }
157
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday6,
158
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday7 {
159
- color: #E33;
160
- font-weight: 600;
161
- }
162
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header a,
163
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header a:hover{
164
- color: #777;
165
- text-decoration: none;
166
- cursor: pointer;
167
- }
168
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday6 a,
169
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday7 a,
170
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday6 a:hover,
171
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday7 a:hover {
172
- color: #C33;
173
- }
174
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header .day_num,
175
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header .day_week {
176
- width: auto;
177
- padding: 0px;
178
- text-align: center;
179
- font-size:10px;
180
- }
181
- .wpbc_time_section_in_day_header {
182
- border-right: 1px dotted #CCC !important;
183
- font-size: 8px;
184
- margin-top: 0 !important;
185
- padding: 0px;
186
- text-align: left;
187
- }
188
- .wpbc_time_section_in_day {
189
- border-right: 1px dotted #FFF;
190
- float: left;
191
- height: 25px;
192
- margin: 8px 0;
193
- }
194
- .wpbc_time_section_in_day.timeslots_in_this_day24 {
195
- border-right: 1px dotted #CCC;
196
- }
197
- .wpbc_time_section_in_day.wpbc_time_in_days_num_1 {
198
- width: 4.069%; /*3.89%;*/
199
- }
200
- .wpbc_time_in_days_num_1 .day_num {
201
- font-size: 11px;
202
- font-weight: 600;
203
- }
204
- .wpbc_time_section_in_day.timeslots_in_this_day24.time_hour23,
205
- .wpbc_time_in_days_num_1 .wpbc_time_section_in_day_header.time_hour23 {
206
- border-right: none !important;
207
- }
208
- .wpbc_time_section_in_day.wpbc_time_in_days_num_7 {
209
- width: 24.32%;
210
- }
211
- .wpbc_time_section_in_day.timeslots_in_this_day2.time_hour12,
212
- .wpbc_time_in_days_num_30 .wpbc_time_section_in_day_header.time_hour12 {
213
- border-right: none !important;
214
- }
215
- .wpbc_time_section_in_day.wpbc_time_in_days_num_30{
216
- width: 46%;
217
- }
218
- .wpbc_time_in_days_num_7 .day_num {
219
- font-size: 11px;
220
- font-weight: 600;
221
- }
222
- .wpbc_time_section_in_day.timeslots_in_this_day4.time_hour18,
223
- .wpbc_time_in_days_num_7 .wpbc_time_section_in_day_header.time_hour18 {
224
- border-right: none !important;
225
- }
226
- .wpbc_time_section_in_day.wpbc_time_in_days_num_90 {
227
- width: 100%;
228
- }
229
- .wpbc_time_section_in_day.wpbc_time_in_days_num_365 {
230
- width: 100%;
231
- }
232
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header.wpbc_time_in_days_num_90 {
233
- font-size: 8px;
234
-
235
- }
236
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 div.day_num,
237
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 div.day_week {
238
-
239
- }
240
- .wpbc_tl_day_cell .time_booked_in_day {
241
- background: none repeat scroll 0 0 #FC4;
242
- border-right: 1px dotted #9AB;
243
- box-shadow: 1px 1px 2px #AAA;
244
- color: #FFF;
245
- font-size: 7px;
246
- font-weight: 400;
247
- text-shadow: none;
248
- }
249
- .wpbc_tl_day_cell .time_booked_in_day.approved {
250
- background: none repeat scroll 0 0 #78A;
251
- }
252
- .wpbc_tl_table .wpbc_tl_day_cell .first_day_in_bookin,
253
- .wpbc_tl_table .wpbc_tl_day_cell a.first_day_in_bookin:hover,
254
- .wpbc_tl_table .wpbc_tl_day_cell a.first_day_in_bookin:focus {
255
- box-shadow:none;
256
- outline: none;
257
- }
258
- .wpbc_tl_day_cell .first_day_in_bookin {
259
- background: none repeat scroll 0 0 #545455;
260
- border-radius: 5px 5px 5px 5px;
261
- color: #FFF !important;
262
- font-size: 9px;
263
- font-weight: 400;
264
- line-height: 15px;
265
- margin: 13px 2px 4px 0px;
266
- overflow: visible;
267
- padding: 0 3px;
268
- position: absolute;
269
- text-shadow: 0 -1px 0 #000;
270
- visibility: visible;
271
- width: auto !important;
272
- word-wrap: break-word;
273
- z-index: 0;
274
- cursor: pointer;
275
- box-shadow: 0 0 1px #FFF;
276
- -moz-box-shadow: 0 0 1px #FFF;
277
- -webkit-box-shadow: 0 0 1px #FFF;
278
- float: left;
279
- }
280
- .wpbc_tl_day_cell span.first_day_in_bookin {
281
- margin: 4px 2px 4px 0px;
282
- cursor: default;
283
- }
284
- .wpbc_tl_day_cell .timeslots_in_this_day24 a.first_day_in_bookin {
285
- margin: 4px 2px;
286
- }
287
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.today_date {
288
- /*background: none repeat scroll 0 0 #9F5 !important;*/
289
- color: #888 !important;
290
- text-shadow: 0 0 1px #EEE !important;
291
- }
292
-
293
- /* Style for the calendar time-line of the single resource */
294
- .wpbc_tl_single_resource .wpbc_tl_frame_dates .month_year {
295
- display: none;
296
- }
297
- .wpbc_tl_single_resource .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday6,
298
- .wpbc_tl_single_resource .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday7 {
299
- color: #777;
300
- font-weight: 400;
301
- /*border-bottom: 1px solid #EE3333;*/
302
- background: none repeat scroll 0 0 #FEB;
303
- }
304
- .wpbc_tl_single_resource .wpbc_tl_day_cell.wpbc_tl_day_cell_header .wpbc_time_section_in_day.wpbc_time_section_in_day_header {
305
- display: block;
306
- }
307
- .wpbc_tl_single_resource .wpbc_tl_scroller .wpbc_tl_frame_dates {
308
- height: 26px !important;
309
- }
310
-
311
- .wpbc_tl_single_resource .wpbc_time_section_in_day.wpbc_time_in_days_num_30 {
312
- /*border: none;*/
313
- width: 4%;
314
- margin: 10px auto !important;
315
-
316
- }
317
- .wpbc_tl_single_resource.resource_matrix .wpbc_time_section_in_day.wpbc_time_in_days_num_1.wpbc_time_section_in_day_header,
318
- .wpbc_tl_single_resource .wpbc_time_section_in_day.wpbc_time_in_days_num_30.wpbc_time_section_in_day_header {
319
- width: 4%;
320
- margin: auto !important;
321
- }
322
- .wpbc_tl_table .wpbc_tl_single_resource .wpbc_tl_dates_line .container-fluid .col-md-12 {
323
- height: 32px;
324
- }
325
- .wpbc_tl_table .wpbc_tl_single_resource .container-fluid .wpbc_tl_scroller {
326
- height: 33px;
327
- margin-top: 0;
328
- }
329
- .wpbc_tl_single_resource .wpbc_tl_scroller .wpbc_tl_frame_dates {
330
- height: 34px !important;
331
- }
332
- .wpbc_tl_single_resource .wpbc_tl_scroller .wpbc_tl_frame_dates .wpbc_tl_day_cell {
333
- height: 34px;
334
- }
335
- .wpbc_tl_single_resource .wpbc_tl_scroller .wpbc_tl_frame_dates .wpbc_tl_day_cell .wpbc_time_section_in_day {
336
- height: 25px;
337
- margin: 8px -95% 0 0;
338
- }
339
- .wpbc_tl_table .wpbc_tl_single_resource.container-fluid .wpbc_tl_scroller {
340
- margin-top: 0;
341
- }
342
-
343
- .wpbc_tl_single_resource .wpbc_tl_scroller .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header {
344
- color: #888;
345
- font-size: 9px;
346
- font-weight: bold !important;
347
- padding: 8px 0;
348
- text-shadow: 0 1px 0 #FFF;
349
- }
350
- .wpbc_tl_single_resource.container-fluid .col-md-12 {
351
- height: 34px;
352
- }
353
- .wpbc_tl_table_titles .wpbc_tl_collumn_1,
354
- .wpbc_tl_table .wpbc_tl_table_row_bookings .wpbc_tl_collumn_1 {
355
- border-right: 2px solid #C54;
356
- }
357
- .wpbc_tl_table .wpbc_tl_table_titles .wpbc_tl_collumn_2,
358
- .wpbc_tl_table .wpbc_tl_table_row_bookings .wpbc_tl_collumn_2 {
359
- padding:0 !important;
360
- }
361
- .wpbc_timeline_frame .wpbc_tl_day_cell .wpbc_day_cell_number {
362
- color: #ccc;
363
- cursor: default;
364
- float: right;
365
- font-size: 8px;
366
- font-weight: 400;
367
- line-height: 15px;
368
- margin: -4px 0 0;
369
- overflow: visible;
370
- padding: 0 1px;
371
- position: relative;
372
- visibility: visible;
373
- width: auto !important;
374
- word-wrap: break-word;
375
- z-index: 0;
376
- font-style: normal;
377
- position: absolute; /* FixIn: 7.0.1.16 */
378
- }
379
-
380
- /******************************************************************************/
381
- /* MATRIX VIEW */
382
- /******************************************************************************/
383
-
384
- /**** HEADER ****/
385
- .wpbc_timeline_frame *{
386
- box-sizing: content-box;
387
- }
388
- .wpbc_tl_table .container-fluid .row,
389
- .wpbc_tl_table .container-fluid .col-md-12{
390
- padding:0;
391
- margin:0;
392
- }
393
- /* Hide the Time titles in the header for the 7, 30, 60 day view */
394
- .wpbc_tl_matrix_resources .wpbc_time_section_in_day.wpbc_time_section_in_day_header.time_hour0.wpbc_time_in_days_num_7,
395
- .wpbc_tl_matrix_resources .wpbc_time_section_in_day.wpbc_time_section_in_day_header.time_hour0.wpbc_time_in_days_num_30,
396
- .wpbc_tl_matrix_resources .wpbc_time_section_in_day.wpbc_time_section_in_day_header.time_hour0.wpbc_time_in_days_num_60{
397
- display:none;
398
- }
399
- .wpbc_tl_matrix_resources .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday6,
400
- .wpbc_tl_matrix_resources .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_weekday7 {
401
- color: #c33; /*#777;*/
402
- font-weight: 400;
403
- /*border-bottom: 1px solid #EE3333;*/
404
- background: none repeat scroll 0 0 #FEB;
405
- }
406
- /* Date mouseover link incorrect show booked dates, so we are need to put it up */
407
- .wpbc_tl_day_cell.today_date {
408
- background: #efc !important; /*#5a3;*/
409
- border-left: 1px dashed #009900;
410
- }
411
- .wpbc_timeline_frame .wpbc_tl_matrix_resources .wpbc_tl_day_cell .wpbc_day_cell_number {
412
- margin: -1px 0 -14px;
413
- }
414
- /* Today date */
415
- .wpbc_timeline_frame .wpbc_tl_matrix_resources .today_date .wpbc_day_cell_number {
416
- color: #aaa;
417
- }
418
- /* Past bookins */
419
- .wpbc_tl_day_cell.past_date .time_booked_in_day,
420
- .wpbc_tl_day_cell.today_date .time_booked_in_day.past_time {
421
- background-color:#c91;
422
- }
423
- .wpbc_tl_day_cell.past_date .time_booked_in_day.approved,
424
- .wpbc_tl_day_cell.today_date .time_booked_in_day.past_time.approved{
425
- background-color: #457;
426
- }
427
-
428
- /* FixIn:6.1.1.10 */
429
- /* Past bookins */
430
- .wpbc_tl_day_cell .time_booked_in_day.booking_trash,
431
- .wpbc_tl_day_cell.today_date .time_booked_in_day.booking_trash{
432
- background-color: #c55;
433
- }
434
- .wpbc_tl_day_cell.past_date .time_booked_in_day.booking_trash,
435
- .wpbc_tl_day_cell.today_date .time_booked_in_day.past_time.booking_trash{
436
- background-color: #a44;
437
- }
438
-
439
- /* FixIn:7.2.1.8 */
440
- .wpbc_tl_day_cell .time_booked_in_day.booking_blank,
441
- .wpbc_tl_day_cell.today_date .time_booked_in_day.booking_blank{
442
- border: 1px dashed #F55;
443
- }
444
-
445
-
446
- /* Show description title of the booking */
447
- .wpbc_tl_matrix_resources .wpbc_time_section_in_day{
448
- float: left;
449
- height: 25px;
450
- margin: 11px -95% 0 0;
451
- width:100%;
452
- }
453
- .wpbc_tl_matrix_resources .wpbc_time_section_in_day.wpbc_time_in_days_num_1{
454
- width: 4.069%;
455
- margin: 11px 0 0 0;
456
- }
457
- .wpbc_tl_matrix_resources a.first_day_in_bookin {
458
- margin: 16px 2px 4px 0px;
459
- }
460
- .wpbc_tl_matrix_resources .timeslots_in_this_day24 a.first_day_in_bookin {
461
- margin: 5px 0 0 5px;
462
- }
463
-
464
- /* P O P O V E R ************************************************************/
465
- .wpdevelop .popover {
466
- /* width:400px;
467
- max-width:400px;*/
468
- border: 2px solid #555;
469
- font-size: 12px;
470
- }
471
- .wpdevelop .popover .popover-title {
472
- padding:2px 14px 0;
473
- line-height: 30px;
474
- }
475
- .wpdevelop .popover .popover-title .popover-title-id {
476
- display: inline-block;
477
- margin: 0 5px 0 0;
478
- }
479
- .wpdevelop .wpbc_timeline_front_end .popover .popover-title .popover-title-id { /* FrontEnd*/
480
- line-height: 35px;
481
- }
482
- .wpdevelop .popover .popover-title .control-group {
483
- display: inline-block;
484
- vertical-align: middle;
485
- margin:2px 0;
486
- }
487
- .wpdevelop .popover .popover-title .control-group a.button{
488
- margin: 0 0 0 5px;
489
- line-height: 28px;
490
-
491
- margin: 0 5px 5px 0;
492
- }
493
- .wpdevelop .popover .popover-title .control-group .wpbc-buttons-separator {
494
- margin-right: 10px;
495
- }
496
- .wpdevelop .popover .popover-content {
497
- border-top: 1px solid #aaa;
498
- }
499
- .wpdevelop .popover-inner {
500
- width: 350px;
501
- }
502
- .wpdevelop.popover.left .arrow {
503
- left:auto;
504
- }
505
- .wpdevelop.tooltip {
506
- z-index:9999;
507
- }
508
- .wpdevelop .popover a,
509
- .wpdevelop .popover a:hover,
510
- .wpdevelop .popover a:focus {
511
- box-shadow: none;
512
- outline: none;
513
- }
514
- .wpdevelop .popover .popover-close,
515
- .wpdevelop .popover .popover-close:hover {
516
- font-size: 20px;
517
- position: absolute;
518
- right: 10px;
519
- top: 8px;
520
-
521
- padding: 5px 6px;
522
- right: 0;
523
- top: 0;
524
- }
525
- .wpdevelop .popover .popover-close a,
526
- .wpdevelop .popover .popover-close a:hover,
527
- .wpdevelop .popover .popover-close a:active,
528
- .wpdevelop .popover .popover-close a:focus {
529
- text-decoration: none;
530
- color:#444;
531
- border-style: none;
532
- outline: 0;
533
- }
534
- .wpdevelop .popover_calendar_hover,
535
- .wpdevelop .popover_calendar_hover .popover-content{
536
- border: none;
537
- }
538
- .wpdevelop .popover-content .wpbc_tl_popover_booking_separator {
539
- margin: 10px 0;
540
- }
541
- /* PopOver Content Data *******************************************************/
542
- .wpdevelop .popover-title,
543
- .wpdevelop .popover-content .wpbc-popover-content-data {
544
- color:#000;
545
- }
546
- .wpdevelop .popover-content .wpbc-popover-content-data {
547
- font-size: 13px;
548
- color:#000;
549
- }
550
- .wpdevelop .popover-content .wpbc-popover-content-data .wpbc-popover-labels-bar,
551
- .wpdevelop .popover-content .wpbc-popover-content-data .wpbc-popover-cost-bar {
552
- float: left;
553
- margin: 0px;
554
- padding: 0px;
555
- width: auto;
556
- }
557
- .wpdevelop .popover-content .wpbc-popover-content-data .wpbc-popover-cost-bar {
558
- float: right;
559
- }
560
- /* ID, Labels ... */
561
- .wpdevelop .popover-content .wpbc-popover-content-data .field-id,
562
- .wpdevelop .popover-content .wpbc-popover-content-data .field-labels {
563
- float:left;
564
- margin: 0 10px 2px 0;
565
- font-size: 1em;
566
- }
567
- /* ID */
568
- .wpdevelop .popover-content .wpbc-popover-content-data .field-id span.label {
569
- line-height:1.5em;
570
- padding: 2px 5px;
571
-
572
- font-weight: 600;
573
- border:none;
574
- border-radius: 10px;
575
- -moz-border-radius: 10px;
576
- -webkit-border-radius: 10px;
577
- color: #fff;
578
- background: #888;
579
- }
580
- /* Labels */
581
- .wpdevelop .popover-content .wpbc-popover-content-data .field-labels span.label{
582
- line-height: 1.5em;
583
- padding: 2px 5px;
584
- font-weight: 600;
585
-
586
- border: 1px solid #eeeeee;
587
- box-shadow: 0 0 1px #cccccc;
588
- }
589
- /* Payment status*/
590
- .wpdevelop .popover-content .wpbc-popover-content-data .field-labels span.label .label-payment-status-prefix {
591
- font-size: 0.8em;
592
- font-weight: 400;
593
- }
594
- /* Cost */
595
- .wpdevelop .popover-content .wpbc-popover-content-data .wpbc-popover-cost {
596
- font-size: 1em;
597
- font-weight: 600;
598
- line-height: 1.5em;
599
- padding: 0;
600
- text-align: center;
601
- white-space: nowrap;
602
- }
603
- /*Data*/
604
- .wpdevelop .popover-content .wpbc-popover-content-data .wpbc-popover-booking-data,
605
- .wpdevelop .popover-content .wpbc-popover-content-data .wpbc-popover-booking-data > div {
606
- line-height: 1.7em;
607
- text-align: left;
608
- word-wrap: break-word;
609
- margin:5px 0 10px;
610
- }
611
- /* Notes */
612
- .wpdevelop .popover-content .wpbc-popover-content-data .wpbc-popover-booking-notes {
613
- font-size: 0.9em;
614
- font-style: italic;
615
- margin: 0 0 10px;
616
- }
617
- /*Dates*/
618
- .wpdevelop .popover-content .wpbc-popover-content-data .field-dates .field-booking-date,
619
- .wpdevelop .popover-content .wpbc-popover-content-data .field-dates .field-booking-date:hover {
620
- background: none repeat scroll 0 0 #FFBB45;
621
- border: 1px solid #EEE;
622
- border-radius: 5px 5px 5px 5px;
623
- box-shadow: 0 0 1px #CCC;
624
- color: #FFF;
625
- font-weight: 600;
626
- padding: 4px 10px 3px;
627
- text-decoration: none;
628
- text-shadow: 0 -1px 0 #CCC;
629
- white-space: nowrap;
630
- font-size: 0.85em;
631
- line-height: 2.5em;
632
- }
633
- .wpdevelop .popover-content .wpbc-popover-content-data .field-dates .field-booking-date.approved,
634
- .wpdevelop .popover-content .wpbc-popover-content-data .field-dates .field-booking-date.approved:hover {
635
- background: none repeat scroll 0 0 #9BE;
636
- }
637
- .wpdevelop .popover-content .wpbc-popover-content-data .field-dates .field-booking-time {
638
- color: #555;
639
- text-decoration: none;
640
- text-shadow: 0 0 1px #AAA;
641
- }
642
- .wpdevelop .popover-content .wpbc-popover-content-data .field-dates .date_tire {
643
- font-size: 17px;
644
- font-weight: 600;
645
- }
646
- .wpdevelop .popover-content .wpbc-popover-content-data .field-dates .booking_dates_small,
647
- .wpdevelop .popover-content .wpbc-popover-content-data .field-dates .booking_dates_full {
648
- line-height: 24px;
649
- }
650
- .wpdevelop .popover-content .wpbc-popover-content-data .field-dates .date_from_dif_type {
651
- color: #FFF;
652
- text-shadow: 0 -1px 0 #BBB;
653
- }
654
-
655
- /* Edit buttons in timeline at popover during customer listing */
656
- .wpbc_timeline_frame.wpbc_timeline_front_end .popover-title a.wpbc_btn_in_timeline {
657
- padding: 4px 8px 2px;
658
- background: #fafafa;
659
- margin: 2px 5px;
660
- border: 1px solid #ccc;
661
- }
662
- /* M O B I L E ************************************************************/
663
- @media (max-width: 782px) {
664
-
665
- .wpbc_tl_table .wpbc_tl_collumn_1 {
666
- font-size: 0.8em;
667
- padding-left: 4px !important;
668
- width: 20%;
669
- }
670
-
671
- .wpbc_tl_frame_dates .wpbc_tl_day_cell.wpbc_tl_day_cell_header .day_num {
672
- font-size: 0.9em;
673
- overflow: visible;
674
- position: relative;
675
- white-space: nowrap;
676
- }
677
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_90 .day_num{
678
- overflow: hidden;
679
- }
680
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_90 .wpbc_time_section_in_day_header {
681
- border:none !important;
682
- }
683
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_90 {
684
- box-sizing: padding-box;
685
- padding-left: 4px !important;
686
- padding-right: 4px !important;
687
- }
688
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num1,
689
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num2,
690
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num4,
691
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num5,
692
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num7,
693
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num8,
694
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num10,
695
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num11,
696
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num13,
697
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num14,
698
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num16,
699
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num17,
700
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num19,
701
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num20,
702
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num22,
703
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num23,
704
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num25,
705
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num26,
706
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num28,
707
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num29,
708
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num31,
709
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num32,
710
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num34,
711
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num35,
712
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num37,
713
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num38,
714
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num40,
715
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num41,
716
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num43,
717
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num44,
718
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num46,
719
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num47,
720
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num49,
721
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num50,
722
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num52,
723
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num53,
724
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num55,
725
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num56,
726
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num58,
727
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num59,
728
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num61,
729
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_60 .day_num.day_num62,
730
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num1,
731
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num2,
732
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num4,
733
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num5,
734
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num7,
735
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num8,
736
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num10,
737
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num11,
738
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num13,
739
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num14,
740
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num16,
741
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num17,
742
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num19,
743
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num20,
744
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num22,
745
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num23,
746
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num25,
747
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num26,
748
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num28,
749
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num29,
750
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num31,
751
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .day_num.day_num32,
752
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num1,
753
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num2,
754
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num4,
755
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num5,
756
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num7,
757
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num8,
758
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num10,
759
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num11,
760
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num13,
761
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num14,
762
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num16,
763
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num17,
764
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num19,
765
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num20,
766
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num22,
767
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num23,
768
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num25,
769
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num26,
770
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num28,
771
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num29,
772
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num31,
773
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_365 .day_num.day_num32 {
774
- display:none ;
775
- }
776
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour1,
777
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour2,
778
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour4,
779
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour5,
780
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour7,
781
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour8,
782
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour10,
783
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour11,
784
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour13,
785
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour14,
786
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour16,
787
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour17,
788
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour19,
789
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour20,
790
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour22,
791
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_1 .time_hour23,
792
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour1,
793
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour2,
794
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour4,
795
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour5,
796
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour7,
797
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour8,
798
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour10,
799
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour11,
800
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour13,
801
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour14,
802
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour16,
803
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour17,
804
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour19,
805
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour20,
806
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour22,
807
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_30 .time_hour23 {
808
- visibility: hidden;
809
- }
810
-
811
- .wpbc_tl_frame_dates .wpbc_tl_day_cell_header.wpbc_time_in_days_num_7 {
812
- overflow: hidden;
813
- }
814
- .wpbc_timeline_frame .wpbc_tl_day_cell .wpbc_day_cell_number {
815
- display:none;
816
- }
817
-
818
- /* PopOver */
819
- .wpdevelop .popover .popover-title .control-group {
820
- display: block;
821
- margin: 0 0 0 -5px;
822
- vertical-align: middle;
823
- }
824
- .wpdevelop .popover .popover-title .control-group a.button{
825
- height: 34px;
826
- line-height: 1.5em;
827
- }
828
- }
829
-
830
-
831
- /* General Structure :
832
- .wpbc_timeline_frame {}
833
- .wpbc_timeline_frame .wpbc_tl_table{}
834
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_header{}
835
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_collumn_1,
836
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_header .wpbc_tl_collumn_2{}
837
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_row_colspan{}
838
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_titles{}
839
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_titles .wpbc_tl_collumn_1,
840
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_titles .wpbc_tl_collumn_2{}
841
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_row_bookings{}
842
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_row_bookings .wpbc_tl_collumn_1,
843
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_row_bookings .wpbc_tl_collumn_2{}
844
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_row_bookings .wpbc_tl_collumn_1 .wpbc_tl_resource_title,
845
- .wpbc_timeline_frame .wpbc_tl_table .wpbc_tl_table_row_bookings .wpbc_tl_collumn_2 .wpbc_tl_dates_line{}
846
- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/client.js CHANGED
@@ -14,6 +14,39 @@ var numbb = 0;
14
  var timeoutID_of_thank_you_page = null;
15
 
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  /**
18
  * Calendar Init
19
  *
@@ -208,6 +241,9 @@ function init_datepick_cal(bk_type, date_approved_par, my_num_month, start_day_
208
  var tm=0;
209
  var ts=0;
210
  var time_return_value = false;
 
 
 
211
  // Select dates which need to approve, its exist only in Admin
212
  if(typeof(date2approve[ bk_type ]) !== 'undefined')
213
  if(typeof(date2approve[ bk_type ][ class_day ]) !== 'undefined') {
@@ -218,8 +254,7 @@ function init_datepick_cal(bk_type, date_approved_par, my_num_month, start_day_
218
  tm = date2approve[ bk_type ][ class_day ][ia][4];
219
  ts = date2approve[ bk_type ][ class_day ][ia][5];
220
  if ( ( th == 0 ) && ( tm == 0 ) && ( ts == 0 ) ) {
221
- // return [ true, 'cal4date-' + class_day +' date2approve' + blank_admin_class_day ]; // set pending days selectable //FixIn: 7.0.1.23
222
- return [false, 'cal4date-' + class_day +' date2approve' + blank_admin_class_day]; // Orange
223
  } else {
224
  if ( is_booking_used_check_in_out_time === true ) {
225
  if (ts == '1') additional_class += ' check_in_time' + ' check_in_time_date2approve'; //FixIn: 6.0.1.2
@@ -227,11 +262,10 @@ function init_datepick_cal(bk_type, date_approved_par, my_num_month, start_day_
227
  } else {
228
  additional_class += ' times_clock'; //FixIn: 8.2.1.27
229
  }
230
- time_return_value = [true, 'date_available cal4date-' + class_day +' date2approve timespartly' + additional_class]; // Times
231
  if(typeof( isDayFullByTime ) == 'function') {
232
- if ( isDayFullByTime(bk_type, class_day ) ) {
233
- // return [true, 'cal4date-' + class_day +' date2approve' + blank_admin_class_day]; // set pending days selectable //FixIn: 7.0.1.23
234
- return [false, 'cal4date-' + class_day +' date2approve' + blank_admin_class_day]; // Orange
235
  }
236
  }
237
  }
@@ -1428,27 +1462,102 @@ function wpbc_check_errors_in_booking_form( bk_type ) {
1428
 
1429
  //FixIn: 8.4.4.4
1430
  function bk_calendar_step_click( el ){
1431
- var br_id = jQuery( el ).closest( 'form' ).find( 'input[name^="bk_type"]' ).val();
1432
- var is_error = wpbc_check_errors_in_booking_form( br_id );
1433
- if ( is_error ) { return false; }
1434
- if ( br_id != undefined ) {
1435
- jQuery( "#booking_form" + br_id + " .bk_calendar_step" ).css({"display":"none"});
1436
- jQuery( "#booking_form" + br_id + " .bk_form_step" ).css({"display":"block"});
1437
- } else {
1438
- jQuery(".bk_calendar_step" ).css({"display":"none"});
1439
- jQuery(".bk_form_step" ).css({"display":"block"});
1440
- }
 
 
1441
  }
 
1442
  function bk_form_step_click( el ){
1443
- var br_id = jQuery( el ).closest( 'form' ).find( 'input[name^="bk_type"]' ).val();
1444
- var is_error = false; // wpbc_check_errors_in_booking_form( br_id ); //FixIn: 8.4.5.6
1445
- if ( is_error ) { return false; }
1446
- if ( br_id != undefined ) {
1447
- jQuery( "#booking_form" + br_id + " .bk_calendar_step" ).css({"display":"block"});
1448
- jQuery( "#booking_form" + br_id + " .bk_form_step" ).css({"display":"none"});
1449
- makeScroll( "#bklnk" + br_id );
1450
- } else {
1451
- jQuery(".bk_calendar_step" ).css({"display":"block"});
1452
- jQuery(".bk_form_step" ).css({"display":"none"});
1453
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1454
  }
14
  var timeoutID_of_thank_you_page = null;
15
 
16
 
17
+ /**
18
+ * Booking Calendar - JavaScript Settings
19
+ *
20
+ * Example or redefine some settings:
21
+ * <script type="text/javascript"> wpbc_settings.set_option( 'pending_days_selectable', true ); </script>
22
+ * [booking type=1]
23
+ *
24
+ //FixIn: 8.6.1.18
25
+ */
26
+ var wpbc_settings = (function ( obj, $) {
27
+
28
+ // Define private property
29
+ var p_options = obj.options = obj.options || [];
30
+
31
+ p_options['pending_days_selectable'] = false;
32
+
33
+ // Get Option
34
+ obj.get_option = function ( item_id ) {
35
+
36
+ return p_options[ item_id ];
37
+ };
38
+
39
+ // Set Option
40
+ obj.set_option = function ( item_id, item_value ) {
41
+
42
+ p_options[ item_id ] = item_value;
43
+ };
44
+
45
+ return obj;
46
+
47
+ }(wpbc_settings || {}, jQuery ));
48
+
49
+
50
  /**
51
  * Calendar Init
52
  *
241
  var tm=0;
242
  var ts=0;
243
  var time_return_value = false;
244
+
245
+ var is_set_pending_days_selectable = wpbc_settings.get_option( 'pending_days_selectable' ); // set pending days selectable //FixIn: 8.6.1.18
246
+
247
  // Select dates which need to approve, its exist only in Admin
248
  if(typeof(date2approve[ bk_type ]) !== 'undefined')
249
  if(typeof(date2approve[ bk_type ][ class_day ]) !== 'undefined') {
254
  tm = date2approve[ bk_type ][ class_day ][ia][4];
255
  ts = date2approve[ bk_type ][ class_day ][ia][5];
256
  if ( ( th == 0 ) && ( tm == 0 ) && ( ts == 0 ) ) {
257
+ return [ is_set_pending_days_selectable, 'cal4date-' + class_day +' date2approve' + blank_admin_class_day]; // Orange //FixIn: 8.6.1.18
 
258
  } else {
259
  if ( is_booking_used_check_in_out_time === true ) {
260
  if (ts == '1') additional_class += ' check_in_time' + ' check_in_time_date2approve'; //FixIn: 6.0.1.2
262
  } else {
263
  additional_class += ' times_clock'; //FixIn: 8.2.1.27
264
  }
265
+ time_return_value = [true, 'date_available cal4date-' + class_day +' date2approve timespartly' + additional_class]; // Times
266
  if(typeof( isDayFullByTime ) == 'function') {
267
+ if ( isDayFullByTime(bk_type, class_day ) ) {
268
+ return [ is_set_pending_days_selectable, 'cal4date-' + class_day +' date2approve' + blank_admin_class_day]; // Orange //FixIn: 8.6.1.18
 
269
  }
270
  }
271
  }
1462
 
1463
  //FixIn: 8.4.4.4
1464
  function bk_calendar_step_click( el ){
1465
+ var br_id = jQuery( el ).closest( 'form' ).find( 'input[name^="bk_type"]' ).val();
1466
+ var is_error = wpbc_check_errors_in_booking_form( br_id );
1467
+ if ( is_error ){
1468
+ return false;
1469
+ }
1470
+ if ( br_id != undefined ){
1471
+ jQuery( "#booking_form" + br_id + " .bk_calendar_step" ).css( {"display": "none"} );
1472
+ jQuery( "#booking_form" + br_id + " .bk_form_step" ).css( {"display": "block"} );
1473
+ } else {
1474
+ jQuery( ".bk_calendar_step" ).css( {"display": "none"} );
1475
+ jQuery( ".bk_form_step" ).css( {"display": "block"} );
1476
+ }
1477
  }
1478
+
1479
  function bk_form_step_click( el ){
1480
+ var br_id = jQuery( el ).closest( 'form' ).find( 'input[name^="bk_type"]' ).val();
1481
+ var is_error = false; // wpbc_check_errors_in_booking_form( br_id ); //FixIn: 8.4.5.6
1482
+ if ( is_error ){
1483
+ return false;
1484
+ }
1485
+ if ( br_id != undefined ){
1486
+ jQuery( "#booking_form" + br_id + " .bk_calendar_step" ).css( {"display": "block"} );
1487
+ jQuery( "#booking_form" + br_id + " .bk_form_step" ).css( {"display": "none"} );
1488
+ makeScroll( "#bklnk" + br_id );
1489
+ } else {
1490
+ jQuery( ".bk_calendar_step" ).css( {"display": "block"} );
1491
+ jQuery( ".bk_form_step" ).css( {"display": "none"} );
1492
+ }
1493
+ }
1494
+
1495
+ //FixIn: 8.6.1.15
1496
+ /**
1497
+ * Go to next specific step in Wizard style booking form, with
1498
+ * check all required elements specific step, otherwise show warning message!
1499
+ *
1500
+ * @param el
1501
+ * @param step_num
1502
+ * @returns {boolean}
1503
+ */
1504
+ function wpbc_wizard_step( el, step_num ){
1505
+ var br_id = jQuery( el ).closest( 'form' ).find( 'input[name^="bk_type"]' ).val();
1506
+ var is_error = wpbc_check_errors_in_booking_form( br_id );
1507
+ if ( is_error ){
1508
+ return false;
1509
+ }
1510
+
1511
+ if ( wpbc_is_some_elements_visible( br_id, ['rangetime', 'durationtime', 'starttime', 'endtime'] ) ){
1512
+ if ( is_this_time_selections_not_available( br_id, document.getElementById( 'booking_form' + br_id ) ) ){
1513
+ return false;
1514
+ }
1515
+ }
1516
+
1517
+ if ( br_id != undefined ){
1518
+ jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" ).css( {"display": "none"} );
1519
+ jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" + step_num ).css( {"display": "block"} );
1520
+ }
1521
+ }
1522
+
1523
+
1524
+ //FixIn: 8.6.1.15
1525
+ /**
1526
+ * Check if at least one element from array of elements names in booking form visible or not.
1527
+ * Usage Example: if ( wpbc_is_some_elements_visible( br_id, ['rangetime', 'durationtime', 'starttime', 'endtime'] ) ){ ... }
1528
+ *
1529
+ * @param bk_type
1530
+ * @param elements_names
1531
+ * @returns {boolean}
1532
+ */
1533
+ function wpbc_is_some_elements_visible( bk_type, elements_names ){
1534
+
1535
+ var is_some_elements_visible = false;
1536
+
1537
+ var my_form = jQuery( '#booking_form' + bk_type );
1538
+
1539
+ if ( my_form.length ){
1540
+
1541
+ // Pseudo-selector that get form elements <input , <textarea , <select, <button...
1542
+ my_form.find( ':input' ).each( function ( index, el ){
1543
+
1544
+ // Skip some elements
1545
+ var skip_elements = ['hidden', 'button'];
1546
+
1547
+ if ( -1 == skip_elements.indexOf( jQuery( el ).attr( 'type' ) ) ){
1548
+
1549
+ for ( var ei = 0; ei < ( elements_names.length - 1) ; ei++ ){
1550
+
1551
+ // Check Calendar Dates Selection
1552
+ if ( (elements_names[ ei ] + bk_type) == jQuery( el ).attr( 'name' ) ){
1553
+
1554
+ if ( jQuery( el ).is( ':visible' ) ){
1555
+ is_some_elements_visible = true;
1556
+ }
1557
+ }
1558
+ }
1559
+ }
1560
+ } );
1561
+ }
1562
+ return is_some_elements_visible;
1563
  }
js/datepick/jquery.datepick-ar.js CHANGED
@@ -16,9 +16,9 @@
16
  monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
17
  monthStatus: 'عرض شهر آخر', yearStatus: 'عرض سنة آخرى',
18
  weekHeader: 'أسبوع', weekStatus: 'أسبوع السنة',
19
- dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'],
20
- dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
21
- dayNamesMin: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
22
  dayStatus: 'اختر DD لليوم الأول من الأسبوع', dateStatus: 'اختر D, M d',
23
  dateFormat: 'dd/mm/yy', firstDay: 0,
24
  initStatus: 'اختر يوم', isRTL: true,
16
  monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
17
  monthStatus: 'عرض شهر آخر', yearStatus: 'عرض سنة آخرى',
18
  weekHeader: 'أسبوع', weekStatus: 'أسبوع السنة',
19
+ dayNames: [ 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
20
+ dayNamesShort: [ 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
21
+ dayNamesMin: [ 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
22
  dayStatus: 'اختر DD لليوم الأول من الأسبوع', dateStatus: 'اختر D, M d',
23
  dateFormat: 'dd/mm/yy', firstDay: 0,
24
  initStatus: 'اختر يوم', isRTL: true,
js/wpbc_times.js CHANGED
@@ -924,7 +924,7 @@ function wpbc_is_time_field_in_booking_form( resource_id, form_elements ){
924
 
925
  //TODO: continue here with time_field_to_check
926
  var removed_time_slots = is_time_slot_booked_for_this_time_array( bk_type, times_array, td_class , time_field_to_check );
927
- //console.log( 'removed_time_slots', removed_time_slots );
928
 
929
  var my_time_value = jQuery( time_field_to_check[ 0 ] + ' option,' + time_field_to_check[ 1 ] + ' option' );
930
 
@@ -1059,7 +1059,6 @@ function wpbc_is_time_field_in_booking_form( resource_id, form_elements ){
1059
  var my_range_time;
1060
 
1061
  var removed_time_slots = [];
1062
-
1063
  if ( times_array.length > 0 ){ //FixIn: 6.1.1.6
1064
  //Situation when we have first time option as End time. So we need to add start time to the midnight
1065
  if ( parseInt( times_array[ 0 ][ 2 ] ) == 2 ){
@@ -1090,6 +1089,7 @@ function wpbc_is_time_field_in_booking_form( resource_id, form_elements ){
1090
 
1091
  if ( my_time_value[ j ].value == my_range_time ){ // Mark as disable this option
1092
 
 
1093
  removed_time_slots[ removed_time_slots.length ] = j;
1094
  //return true;
1095
 
@@ -1125,8 +1125,19 @@ function wpbc_is_time_field_in_booking_form( resource_id, form_elements ){
1125
  bk_time_slot_selection = bk_time_slot_selection.split( ':' );
1126
 
1127
  // Get only minutes
1128
- minutes_booked = [ (parseInt( times_array[ i - 1 ][ 0 ] * 60 ) + parseInt( times_array[ i - 1 ][ 1 ] )), (parseInt( times_array[ i ][ 0 ] * 60 ) + parseInt( times_array[ i ][ 1 ] )) ];
1129
  minutes_slot = [ (parseInt( bk_time_slot_selection[ 0 ] * 60 ) + parseInt( bk_time_slot_selection[ 1 ] )) ];
 
 
 
 
 
 
 
 
 
 
 
1130
  if (
1131
  ((minutes_slot[ 0 ] >= minutes_booked[ 0 ]) && (minutes_slot[ 0 ] < minutes_booked[ 1 ]))
1132
  ){
924
 
925
  //TODO: continue here with time_field_to_check
926
  var removed_time_slots = is_time_slot_booked_for_this_time_array( bk_type, times_array, td_class , time_field_to_check );
927
+ //console.log( 'removed_time_slots',time_field_to_check, removed_time_slots );
928
 
929
  var my_time_value = jQuery( time_field_to_check[ 0 ] + ' option,' + time_field_to_check[ 1 ] + ' option' );
930
 
1059
  var my_range_time;
1060
 
1061
  var removed_time_slots = [];
 
1062
  if ( times_array.length > 0 ){ //FixIn: 6.1.1.6
1063
  //Situation when we have first time option as End time. So we need to add start time to the midnight
1064
  if ( parseInt( times_array[ 0 ][ 2 ] ) == 2 ){
1089
 
1090
  if ( my_time_value[ j ].value == my_range_time ){ // Mark as disable this option
1091
 
1092
+
1093
  removed_time_slots[ removed_time_slots.length ] = j;
1094
  //return true;
1095
 
1125
  bk_time_slot_selection = bk_time_slot_selection.split( ':' );
1126
 
1127
  // Get only minutes
1128
+ minutes_booked = [ (parseInt( times_array[ i - 1 ][ 0 ] * 60 ) + parseInt( times_array[ i - 1 ][ 1 ] )) , (parseInt( times_array[ i ][ 0 ] * 60 ) + parseInt( times_array[ i ][ 1 ] )) ];
1129
  minutes_slot = [ (parseInt( bk_time_slot_selection[ 0 ] * 60 ) + parseInt( bk_time_slot_selection[ 1 ] )) ];
1130
+
1131
+ //FixIn: 8.6.1.17
1132
+ var is_end_time = time_field_to_check[ 0 ].indexOf( "endtime" );
1133
+
1134
+ if ( -1 !== is_end_time ){ // This is End Time
1135
+
1136
+ // Transform to seconds, and minus 10 second
1137
+ minutes_booked[ 0 ] = minutes_booked[ 0 ] * 60;
1138
+ minutes_booked[ 1 ] = minutes_booked[ 1 ] * 60;
1139
+ minutes_slot[ 0 ] = minutes_slot[ 0 ] * 60 - 10;
1140
+ }
1141
  if (
1142
  ((minutes_slot[ 0 ] >= minutes_booked[ 0 ]) && (minutes_slot[ 0 ] < minutes_booked[ 1 ]))
1143
  ){
languages/booking-de_DE.mo CHANGED
Binary file
languages/booking-sl_SI.mo CHANGED
Binary file
readme.txt CHANGED
@@ -4,8 +4,8 @@ Donate link: https://wpbookingcalendar.com/buy/
4
  Tags: booking calendar, booking system, availability calendar, events calendar, appointments , booking form, reservation, availability, oplugins, calendar, Booking Calendar, ical
5
  Requires at least: 4.0
6
  Requires PHP: 5.2.4
7
- Tested up to: 5.2
8
- Stable tag: 8.6
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -13,7 +13,7 @@ Booking Calendar - original 1st booking plugin for WordPress. Easily receive res
13
 
14
  == Description ==
15
 
16
- ####The original "**Booking Calendar**" plugin is the 1st booking system for WordPress, **downloaded over 1,300,000** times [since 2009](https://wpbookingcalendar.com/changelog/).
17
 
18
  **Booking Calendar** plugin enable awesome **booking system** for your site. Simply show availability and receive bookings for your property or service in easy to use booking system with clean and smooth interface.
19
 
@@ -151,7 +151,7 @@ If you're unclear about the installation process, check out our [HELP](https://w
151
  **Important notice:** Because of changes in CSS and JavaScript files, please clear browser cache, after you made this update.
152
  = Requirements =
153
 
154
- - PHP 5.2.4 or newer,
155
  - MySQL version 5.0 or newer,
156
  - WordPress 4.0 or newer,
157
  - jQuery 1.9.1 or newer
@@ -173,8 +173,8 @@ Please see [FAQ](https://wpbookingcalendar.com/faq/).
173
  - Spanish [99% Completed]
174
  - Dutch [98% Completed]
175
  - Romanian [98% Completed]
176
- - Slovenian [98% Completed]
177
- - German [98% Completed]
178
  - Italian [97% Completed]
179
  - Finnish [96% Completed]
180
  - Danish [94% Completed]
@@ -227,6 +227,40 @@ Please see [Video Guides](https://wpbookingcalendar.com/help/).
227
  13. **Time Slots**. Simple configuration of **time slots** selection in booking form.
228
 
229
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  = 8.6 =
231
  - Changes in **all** versions:
232
  * **New**. Updated new interface of **Calendar Overview** in admin panel and **Timeline** at front-end side with new clean, flex design.
@@ -632,5 +666,5 @@ Please see [Video Guides](https://wpbookingcalendar.com/help/).
632
  For more information, see the [full release notes](https://wpbookingcalendar.com/changelog/).
633
 
634
  == Upgrade Notice ==
635
- = 8.6 =
636
- New updated Timeline & Calendar Overview in clean flex design.
4
  Tags: booking calendar, booking system, availability calendar, events calendar, appointments , booking form, reservation, availability, oplugins, calendar, Booking Calendar, ical
5
  Requires at least: 4.0
6
  Requires PHP: 5.2.4
7
+ Tested up to: 5.3
8
+ Stable tag: 8.7
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
13
 
14
  == Description ==
15
 
16
+ ####The original "**Booking Calendar**" plugin is the 1st booking system for WordPress, **downloaded over 1,400,000** times [since 2009](https://wpbookingcalendar.com/changelog/).
17
 
18
  **Booking Calendar** plugin enable awesome **booking system** for your site. Simply show availability and receive bookings for your property or service in easy to use booking system with clean and smooth interface.
19
 
151
  **Important notice:** Because of changes in CSS and JavaScript files, please clear browser cache, after you made this update.
152
  = Requirements =
153
 
154
+ - PHP 5.2.4 (some versions require PHP 5.6) or newer,
155
  - MySQL version 5.0 or newer,
156
  - WordPress 4.0 or newer,
157
  - jQuery 1.9.1 or newer
173
  - Spanish [99% Completed]
174
  - Dutch [98% Completed]
175
  - Romanian [98% Completed]
176
+ - Slovenian [99% Completed]
177
+ - German [99% Completed]
178
  - Italian [97% Completed]
179
  - Finnish [96% Completed]
180
  - Danish [94% Completed]
227
  13. **Time Slots**. Simple configuration of **time slots** selection in booking form.
228
 
229
  == Changelog ==
230
+ = 8.7 =
231
+ - Changes in **all** versions:
232
+ * **New**. calendar skin with dark colors: "Black 2"
233
+ * **New**. Ability to define using **Pending days as Selectable days** - its means that such days have the colors the same as Pending days, but visitor still can select and submit new booking, until you do not approve some booking. Its useful in case, if you need to show that at some days already exist bookings, but visitors still can submit the booking. Please note, such feature will not work correctly if you will make bookings for specific time-slots (its will show warning). How to Use ? In the page, where you are having Booking Calendar shortcode, you need to define the js, like this: &lt;script type="text/javascript"&gt; wpbc_settings.set_option( 'pending_days_selectable', true ); &lt;/script&gt; [booking type=4 nummonths=2] (8.6.1.18)
234
+ * **Compatibility**. Support **WordPress 5.3** - update of admin panel styles.
235
+ * **Translation** German translation [99% completed] by Markus Neumann.
236
+ * **Translation** Slovenian translation [99% completed] by Klemen Gaber.
237
+ * **Improvement**. Ability to auto fill "nickname" of user, when user logged in, and checked this option "Auto-fill fields". In booking form have to be field with name "nickname". (8.6.1.2)
238
+ * **Deprecated**. Removing deprecated Timeline v.1. Currently available only new Flex Timeline (Calendar Overview) (8.6.1.13)
239
+ * **Fix**. Issue Undefined index: name in ../core/admin/wpbc-class-timeline.php on line 2137
240
+ * **Fix**. Issue of not ability to enter new value of CAPTCHA without page reloading, if previous entered value was incorrect. (8.6.1.8)
241
+ * **Fix**. Order of week days in Arabic translation for calendar
242
+ - Changes in **Personal / Business Small / Business Medium / Business Large / MultiUser** versions:
243
+ * **New**. Ability to define dates format for search availability form at the Booking > Settings > Search page. (8.6.1.21) *(Business Large, MultiUser)*
244
+ * **New**. updated **iPay88** - Payment Gateway integration v1.6.4 (For Malaysia Only) (8.6.1.3) *(Business Small/Medium/Large, MultiUser)*
245
+ * **New**. Added log of approving or set as pending bookings to notes section. You can activate this option "Logging of booking approving or rejection" at the Booking > Settings General page in "Booking Admin panel" section. (8.6.1.10) *(Personal, Business Small/Medium/Large, MultiUser)*
246
+ * **Improvement**. Usage of new Wizard style booking form, where possible to configure several steps in booking form - more than 2 steps (8.6.1.15) *(Personal, Business Small/Medium/Large, MultiUser)*
247
+ * **Improvement**. Ability to use option "Use check in/out time", for adding check in/out times to use change over days, when importing events via Google Calendar API (using Google API Key) (8.6.1.1) *(Business Small/Medium/Large, MultiUser)*
248
+ * **Improvement**. Ability to use option "Append check out day", for adding check out day, when importing events via Google Calendar API (using Google API Key) (8.6.1.4) *(Business Small/Medium/Large, MultiUser)*
249
+ * **Improvement**. Disable the edit / cancel / payment request links in the "Booking Customer Listing" view for "Approved bookings", in case, if you have activated this option " Change hash after the booking is approved " at the Booking > Settings General page in Advanced section. (8.6.1.6) *(Personal, Business Small/Medium/Large, MultiUser)*
250
+ * **Improvement**. Replace non standard symbols (like: . or , or ' ) in options for ability correct saving Advanced cost. Otherwise sometimes was not possible to save "Advanced cost" at Booking > Resources > Advanced cost page. (8.6.1.7) *(Business Medium/Large, MultiUser)*
251
+ * **Improvement**. Added filter hook 'wpbc_booking_resources_selection_class' for controlling CSS class in dropdown element of booking resource selections (8.6.1.9) *(Personal, Business Small/Medium/Large, MultiUser)*
252
+ * **Improvement**. Update booking hash during moving booking to trash or restore bookings, for do not ability to edit or cancel such bookings by visitor (8.6.1.11) *(Personal, Business Small/Medium/Large, MultiUser)*
253
+ * **Improvement**. Add ability to use only labels in shortcode for showing one payment method (its works only with these exact options): [select payment-method "All payment methods@@" "Stripe" "PayPal" "Authorize.Net" "Sage Pay" "Bank Transfer" "Pay in Cash" "iPay88" "iDEAL"] (8.6.1.16) *(Business Small/Medium/Large, MultiUser)*
254
+ * **Improvement**. Ability to activate updating booking cost after editing booking in admin panel, based on new booking data. You can activate this option at the Booking > Settings > Payment page (8.6.1.24) *(Business Small/Medium/Large, MultiUser)*
255
+ * **Deprecated**. Removing deprecated Stripe v.1 integration. Now available only Stripe v.3 integration that support SCA (8.6.1.12) *(Business Small/Medium/Large, MultiUser)*
256
+ * **Fix**. Show payment description about the booking in Stripe dashboard in Metadata section for Stripe v.3 integration (8.6.1.20) *(Business Small/Medium/Large, MultiUser)*
257
+ * **Fix**. Issue of showing negative balance hint, during using deposit feature with zero cost (8.6.1.5) *(Business Medium/Large, MultiUser)*
258
+ * **Fix**. Issue of incorrectly showing available results in "Advanced search results" (while using the shortcode like this [additional_search "3"] at the Booking > Settings > Search page), and if dates in some resources was marked as unavailable via season filters. (8.6.1.14) *(Business Large, MultiUser)*
259
+ * **Fix**. Issue of incorrectly showing available results, when searching only for 1 specific day (check in/out dates the same in availability form), and we have booked (as full day), this day in specific booking resource. (8.6.1.19) *(Business Large, MultiUser)*
260
+ * **Fix**. Issue of incorrectly disabling end time options in select-box (8.6.1.17) *(Business Small/Medium/Large, MultiUser)*
261
+ * **Fix**. Issue of slow loading calendar (executing too many sql requests), when season filter was deleted at the Booking > Resources > Filters page, but reference relative (Rates) still exist at Booking > Resources > Cost and rates page. Its means that the Rates was not updated (re-saved) relative specific booking resource at the Booking > Resources > Cost and rates page. (8.6.1.22) *(Business Medium/Large, MultiUser)*
262
+ * **Fix**. Issue of possible showing status of Stripe v.3 payment as successful at the Booking Listing page, even when its was not completed yet. (8.6.1.23) *(Business Small/Medium/Large, MultiUser)*
263
+
264
  = 8.6 =
265
  - Changes in **all** versions:
266
  * **New**. Updated new interface of **Calendar Overview** in admin panel and **Timeline** at front-end side with new clean, flex design.
666
  For more information, see the [full release notes](https://wpbookingcalendar.com/changelog/).
667
 
668
  == Upgrade Notice ==
669
+ = 8.7 =
670
+ Latest WordPress version support. New calendar skin. In paid versions, ability to define dates format for searching; logging feature, ...
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: 8.6
11
  */
12
 
13
  /* Copyright 2009 - 2019 www.wpbookingcalendar.com (email: info@wpbookingcalendar.com),
@@ -29,7 +29,7 @@ Version: 8.6
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', '8.6' ); }
33
 
34
  ////////////////////////////////////////////////////////////////////////////////
35
  // PRIMARY URL CONSTANTS
7
  Author URI: https://wpbookingcalendar.com/
8
  Text Domain: booking
9
  Domain Path: /languages/
10
+ Version: 8.7
11
  */
12
 
13
  /* Copyright 2009 - 2019 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', '8.7' ); }
33
 
34
  ////////////////////////////////////////////////////////////////////////////////
35
  // PRIMARY URL CONSTANTS