PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.6.6
VikBooking Hotel Booking Engine & PMS v1.6.6
1.8.16 1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 All 37 releases
vikbooking / site / views / tableaux / tmpl / default.php

default.php in VikBooking Hotel Booking Engine & PMS 1.6.6, at site/views/tableaux/tmpl/default.php

1,013 lines 40.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package VikBooking
4 * @subpackage com_vikbooking
5 * @author Alessio Gaggii - e4j - Extensionsforjoomla.com
6 * @copyright Copyright (C) 2018 e4j - Extensionsforjoomla.com. All rights reserved.
7 * @license GNU General Public License version 2 or later; see LICENSE
8 * @link https://vikwp.com
9 */
10
11 defined('ABSPATH') or die('No script kiddies please!');
12
13 $rooms = $this->rooms;
14 $rooms_busy = $this->rooms_busy;
15 $fromts = $this->fromts;
16 $tots = $this->tots;
17
18 $operator_perms = !empty($this->operator['perms']) && is_array($this->operator['perms']) ? $this->operator['perms'] : [];
19
20 $pitemid = VikRequest::getInt('Itemid', '', 'request');
21
22 // JS lang vars
23 JText::script('VBFORMADULTS');
24 JText::script('VBFORMCHILDREN');
25 JText::script('ORDER_SPREQUESTS');
26 JText::script('VBOCUSTOMERNOMINATIVE');
27 JText::script('VBPICKUP');
28 JText::script('VBRETURN');
29 JText::script('VBSEARCHRESROOM');
30 JText::script('VBOEXTRASERVICES');
31 JText::script('VBO_PETS');
32
33 $nowdf = VikBooking::getDateFormat();
34 if ($nowdf == "%d/%m/%Y") {
35 $df = 'd/m/Y';
36 } elseif ($nowdf == "%m/%d/%Y") {
37 $df = 'm/d/Y';
38 } else {
39 $df = 'Y/m/d';
40 }
41 $datesep = VikBooking::getDateSeparator();
42
43 //load jQuery
44 if (VikBooking::loadJquery()) {
45 JHtml::fetch('jquery.framework', true, true);
46 }
47
48 $days_labels = array(
49 JText::translate('VBSUN'),
50 JText::translate('VBMON'),
51 JText::translate('VBTUE'),
52 JText::translate('VBWED'),
53 JText::translate('VBTHU'),
54 JText::translate('VBFRI'),
55 JText::translate('VBSAT')
56 );
57 $months_labels = array(
58 JText::translate('VBMONTHONE'),
59 JText::translate('VBMONTHTWO'),
60 JText::translate('VBMONTHTHREE'),
61 JText::translate('VBMONTHFOUR'),
62 JText::translate('VBMONTHFIVE'),
63 JText::translate('VBMONTHSIX'),
64 JText::translate('VBMONTHSEVEN'),
65 JText::translate('VBMONTHEIGHT'),
66 JText::translate('VBMONTHNINE'),
67 JText::translate('VBMONTHTEN'),
68 JText::translate('VBMONTHELEVEN'),
69 JText::translate('VBMONTHTWELVE')
70 );
71
72 // count the cells per month
73 $months_days = array();
74 $nowinfo = getdate($fromts);
75 while ($nowinfo[0] <= $tots) {
76 $mkey = $nowinfo['mon'] . '_' . $nowinfo['year'];
77 if (!isset($months_days[$mkey])) {
78 $months_days[$mkey] = 0;
79 }
80 $months_days[$mkey]++;
81 // next loop
82 $nowinfo = getdate(mktime(0, 0, 0, $nowinfo['mon'], ($nowinfo['mday'] + 1), $nowinfo['year']));
83 }
84
85 // today
86 $todaydt = date('Y-m-d');
87 $todayts = strtotime($todaydt);
88
89 // tomorrow
90 $tomorrowts = strtotime("+1 day", $todayts);
91
92 // count today and tomorrow bookings
93 $tod_arrive = 0;
94 $tom_arrive = 0;
95 $tod_depart = 0;
96 $tom_depart = 0;
97 $tod_stays = 0;
98 $tom_stays = 0;
99 foreach ($rooms_busy as $rid => $busy) {
100 foreach ($busy as $b) {
101 $tmpone = getdate($b['checkin']);
102 $ritts = mktime(0, 0, 0, $tmpone['mon'], $tmpone['mday'], $tmpone['year']);
103 $tmptwo = getdate($b['checkout']);
104 $conts = mktime(0, 0, 0, $tmptwo['mon'], $tmptwo['mday'], $tmptwo['year']);
105 if ($todayts == $ritts) {
106 $tod_arrive++;
107 }
108 if ($tomorrowts == $ritts) {
109 $tom_arrive++;
110 }
111 if ($todayts == $conts) {
112 $tod_depart++;
113 }
114 if ($tomorrowts == $conts) {
115 $tom_depart++;
116 }
117 if ($todayts > $ritts && $todayts < $conts) {
118 $tod_stays++;
119 }
120 if ($tomorrowts > $ritts && $tomorrowts < $conts) {
121 $tom_stays++;
122 }
123 }
124 }
125 ?>
126
127 <div id="vbdialog-overlay">
128 <a class="vbdialog-overlay-close">&nbsp;</a>
129 <div class="vbdialog-inner">
130 <div class="vbdialog-inner-tableaux"></div>
131 </div>
132 </div>
133
134 <div class="vbo-modal-overlay-block vbo-modal-overlay-block-fests">
135 <a class="vbo-modal-overlay-close" href="javascript: void(0);"></a>
136 <div class="vbo-modal-overlay-content vbo-modal-overlay-content-fests">
137 <div class="vbo-modal-overlay-content-head vbo-modal-overlay-content-head-fests">
138 <h3><?php VikBookingIcons::e('star'); ?> <span></span></h3>
139 </div>
140 <div class="vbo-modal-overlay-content-body">
141 <div class="vbo-overlay-fests-list"></div>
142 </div>
143 </div>
144 </div>
145
146 <div class="vbo-modal-overlay-block vbo-modal-overlay-block-roomdaynotes">
147 <a class="vbo-modal-overlay-close" href="javascript: void(0);"></a>
148 <div class="vbo-modal-overlay-content vbo-modal-overlay-content-roomdaynotes">
149 <div class="vbo-modal-overlay-content-head vbo-modal-overlay-content-head-roomdaynotes">
150 <h3>
151 <?php VikBookingIcons::e('exclamation-circle'); ?>
152 <span class="vbo-modal-roomdaynotes-dt"></span>
153 <span class="vbo-modal-overlay-close-times" onclick="hideVboDialogRdaynotes();">&times;</span>
154 </h3>
155 </div>
156 <div class="vbo-modal-overlay-content-body">
157 <div class="vbo-modal-roomdaynotes-list"></div>
158 <div class="vbo-modal-roomdaynotes-addnew" data-readymd="" data-ymd="" data-roomid="" data-subroomid="">
159 <h4><?php echo JText::translate('VBOADDCUSTOMNOTETODAY'); ?></h4>
160 <div class="vbo-modal-roomdaynotes-addnew-elem">
161 <label for="vbo-newrdnote-name"><?php echo JText::translate('VBNAME'); ?></label>
162 <input type="text" id="vbo-newrdnote-name" value="" />
163 </div>
164 <div class="vbo-modal-roomdaynotes-addnew-elem">
165 <label for="vbo-newrdnote-descr"><?php echo JText::translate('VBOINVCOLDESCR'); ?></label>
166 <textarea id="vbo-newrdnote-descr"></textarea>
167 </div>
168 <div class="vbo-modal-roomdaynotes-addnew-elem">
169 <label for="vbo-newrdnote-cdays"><?php echo JText::translate('VBOCONSECUTIVEDAYS'); ?></label>
170 <input type="number" id="vbo-newrdnote-cdays" min="0" max="365" value="0" onchange="vboRdayNoteCdaysCount();" onkeyup="vboRdayNoteCdaysCount();" />
171 <span class="vbo-newrdnote-dayto">
172 <span class="vbo-newrdnote-dayto-lbl"><?php echo JText::translate('VBOUNTIL'); ?></span>
173 <span class="vbo-newrdnote-dayto-val"></span>
174 </span>
175 </div>
176 <div class="vbo-modal-roomdaynotes-addnew-save">
177 <button type="button" class="btn vbo-pref-color-btn" onclick="vboAddRoomDayNote(this);"><?php echo JText::translate('VBOSIGNATURESAVE'); ?></button>
178 </div>
179 </div>
180 </div>
181 </div>
182 </div>
183
184 <div class="vbo-tableaux-todaystats">
185 <div class="vbo-tableaux-todaystat">
186 <div class="vbo-tableaux-todaystat-inner">
187 <span class="vbo-tableaux-today-lbl"><?php echo JText::translate('VBOTABLEAUXARRTD'); ?></span>
188 <span class="vbo-tableaux-today-val"><?php echo $tod_arrive; ?></span>
189 </div>
190 <div class="vbo-tableaux-todaystat-inner">
191 <span class="vbo-tableaux-today-lbl"><?php echo JText::translate('VBOTABLEAUXARRTM'); ?></span>
192 <span class="vbo-tableaux-today-val"><?php echo $tom_arrive; ?></span>
193 </div>
194 </div>
195 <div class="vbo-tableaux-todaystat">
196 <div class="vbo-tableaux-todaystat-inner">
197 <span class="vbo-tableaux-today-lbl"><?php echo JText::translate('VBOTABLEAUXDEPTD'); ?></span>
198 <span class="vbo-tableaux-today-val"><?php echo $tod_depart; ?></span>
199 </div>
200 <div class="vbo-tableaux-todaystat-inner">
201 <span class="vbo-tableaux-today-lbl"><?php echo JText::translate('VBOTABLEAUXDEPTM'); ?></span>
202 <span class="vbo-tableaux-today-val"><?php echo $tom_depart; ?></span>
203 </div>
204 </div>
205 <div class="vbo-tableaux-todaystat">
206 <div class="vbo-tableaux-todaystat-inner">
207 <span class="vbo-tableaux-today-lbl"><?php echo JText::translate('VBOTABLEAUXSTYTD'); ?></span>
208 <span class="vbo-tableaux-today-val"><?php echo $tod_stays; ?></span>
209 </div>
210 <div class="vbo-tableaux-todaystat-inner">
211 <span class="vbo-tableaux-today-lbl"><?php echo JText::translate('VBOTABLEAUXSTYTM'); ?></span>
212 <span class="vbo-tableaux-today-val"><?php echo $tom_stays; ?></span>
213 </div>
214 </div>
215 </div>
216
217 <div class="vbo-tableaux-outer">
218 <div class="vbo-tableaux-container">
219 <div class="vbo-tableaux-tbl-container">
220 <div class="vbo-table-responsive vbo-tableaux-tbl-wrap">
221 <table class="vbo-table vbo-tableaux-table">
222 <tbody>
223 <tr class="vbo-tableaux-monthsrow">
224 <td class="vbo-tableaux-emptycell">
225 <a href="javascript: void(0);" class="vbo-tableaux-togglefullscreen" title="<?php echo htmlentities(JText::translate('VBOTGLFULLSCREEN')); ?>"><?php VikBookingIcons::e('expand'); ?></a>
226 </td>
227 <?php
228 foreach ($months_days as $mkey => $totdays) {
229 $mkeyparts = explode('_', $mkey);
230 ?>
231 <td class="vbo-tableaux-monthcell" colspan="<?php echo $totdays; ?>">
232 <h4><?php echo $months_labels[($mkeyparts[0] - 1)] . ' ' . $mkeyparts[1]; ?></h4>
233 </td>
234 <?php
235 }
236 ?>
237 </tr>
238 <tr class="vbo-tableaux-firstrow">
239 <td class="vbo-tableaux-emptycell">&nbsp;</td>
240 <?php
241 $newmonth = 0;
242 $nowinfo = getdate($fromts);
243 while ($nowinfo[0] <= $tots) {
244 $nowinfo_ymd = date('Y-m-d', $nowinfo[0]);
245 $monthclass = !empty($newmonth) && $nowinfo['mon'] != $newmonth ? ' vbo-tableaux-newmonthcell' : '';
246 $monthclass = date('Y-m-d', $nowinfo[0]) == $todaydt ? ' vbo-tableaux-todaycell' : $monthclass;
247 $newmonth = $nowinfo['mon'];
248 $read_day = $days_labels[$nowinfo['wday']] . ' ' . $nowinfo['mday'] . ' ' . $months_labels[($nowinfo['mon'] - 1)] . ' ' . $nowinfo['year'];
249 $fest_class = isset($this->festivities[$nowinfo_ymd]) ? ' vbo-tableaux-festcell' : '';
250 ?>
251 <td class="vbo-tableaux-daycell<?php echo $monthclass . $fest_class; ?>" data-ymd="<?php echo $nowinfo_ymd; ?>" data-readymd="<?php echo $read_day; ?>">
252 <div class="vbo-tableaux-day-cont">
253 <span class="vbo-tableaux-day-wday"><?php echo $days_labels[$nowinfo['wday']]; ?></span>
254 <span class="vbo-tableaux-day-mday"><?php echo $nowinfo['mday']; ?></span>
255 </div>
256 </td>
257 <?php
258 // next loop
259 $nowinfo = getdate(mktime(0, 0, 0, $nowinfo['mon'], ($nowinfo['mday'] + 1), $nowinfo['year']));
260 }
261 ?>
262 </tr>
263 <?php
264 $rooms_features_map = array();
265 $rooms_features_bookings = array();
266 $rooms_loop_count = array();
267 foreach ($rooms as $rid => $rdata) {
268 // distinctive features
269 $room_params = !empty($rdata['params']) ? json_decode($rdata['params'], true) : array();
270 if (is_array($room_params) && array_key_exists('features', $room_params) && count($room_params['features']) > 0) {
271 $rooms_features_map[$rid] = array();
272 foreach ($room_params['features'] as $rind => $rfeatures) {
273 foreach ($rfeatures as $fname => $fval) {
274 if (strlen($fval)) {
275 $rooms_features_map[$rid][$rind] = '#'.$fval;
276 break;
277 }
278 }
279 }
280 if (!(count($rooms_features_map[$rid]) > 0)) {
281 unset($rooms_features_map[$rid]);
282 }
283 }
284 //
285 ?>
286 <tr class="vbo-tableaux-roomrow">
287 <td class="vbo-tableaux-roomname"><?php echo $rdata['name']; ?></td>
288 <?php
289 $nowinfo = getdate($fromts);
290 $bookbuffer = array();
291 $prevbuffer = array();
292 $positions = array();
293 $newmonth = 0;
294 while ($nowinfo[0] <= $tots) {
295 $nowinfo_ymd = date('Y-m-d', $nowinfo[0]);
296 $monthclass = !empty($newmonth) && $nowinfo['mon'] != $newmonth ? ' vbo-tableaux-newmonthcell' : '';
297 $monthclass = date('Y-m-d', $nowinfo[0]) == $todaydt ? ' vbo-tableaux-todaycell' : $monthclass;
298 $newmonth = $nowinfo['mon'];
299
300 /**
301 * Critical dates defined at room-day level, or for any sub-unit.
302 *
303 * @since 1.13.5
304 */
305 $rdaynote_class = ' vbo-roomdaynote-empty';
306 $rdaynote_icn = 'far fa-sticky-note';
307 $cell_rdnotes = '';
308 $rdnkeys_lookup = range(0, $rdata['units']);
309 $rdaynote_keyids = array();
310 $glob_rdn_keyid = $nowinfo_ymd . '_' . $rdata['id'] . '_0';
311 // find room-day note keys with some notes (room-day level or subroom-day level)
312 foreach ($rdnkeys_lookup as $lookup_index) {
313 $rdaynote_keyid = $nowinfo_ymd . '_' . $rdata['id'] . '_' . $lookup_index;
314 if (isset($this->rdaynotes[$rdaynote_keyid])) {
315 // push associative index with notes
316 $rdaynote_keyids[$lookup_index] = $rdaynote_keyid;
317 }
318 }
319 if (count($rdaynote_keyids)) {
320 // some notes exist for this combination of date, room ID and subunit
321 $rdaynote_class = ' vbo-roomdaynote-full';
322 $rdaynote_icn = 'sticky-note';
323 /**
324 * Try to populate the notes for this room-day cell
325 * only if the previous day does not have the same note.
326 * Just the first readable room-day cell should have notes.
327 */
328 $notes_titles = array();
329 $yesterday_ts = mktime(0, 0, 0, $nowinfo['mon'], ($nowinfo['mday'] - 1), $nowinfo['year']);
330 $yesterday_ymd = date('Y-m-d', $yesterday_ts);
331 // loop through all the keys with notes
332 foreach ($rdaynote_keyids as $lookup_index => $rdaynote_keyid) {
333 $yesterday_keyid = $yesterday_ymd . '_' . $rdata['id'] . '_' . $lookup_index;
334 foreach ($this->rdaynotes[$rdaynote_keyid]['info'] as $today_note) {
335 // only manual (custom) room-day notes will be displayed
336 $display_note = ($today_note->type == 'custom');
337 if (isset($this->rdaynotes[$yesterday_keyid])) {
338 // make sure the same note is not present for yesterday
339 foreach ($this->rdaynotes[$yesterday_keyid]['info'] as $yesterday_note) {
340 if ($today_note->type == $yesterday_note->type && $today_note->name == $yesterday_note->name) {
341 // same note available also for yesterday
342 $display_note = false;
343 break;
344 }
345 }
346 }
347 if ($display_note) {
348 // push just the name of the note
349 array_push($notes_titles, $today_note->name);
350 }
351 }
352 }
353 // separate all notes (if any) with comma
354 $cell_rdnotes = implode(', ', $notes_titles);
355 //
356 }
357 //
358
359 ?>
360 <td class="vbo-tableaux-roombooks<?php echo $monthclass . $rdaynote_class; ?>" data-day="<?php echo $nowinfo_ymd; ?>" data-dayrid="<?php echo $nowinfo_ymd . $rdata['id']; ?>" data-rdnkeys="<?php echo implode(',', array_keys($rdaynote_keyids)); ?>" data-notes="<?php echo $this->escape($cell_rdnotes); ?>">
361 <?php
362 $room_bookings = array();
363 if (isset($rooms_busy[$rid])) {
364 foreach ($rooms_busy[$rid] as $b) {
365 $tmpone = getdate($b['checkin']);
366 $ritts = mktime(0, 0, 0, $tmpone['mon'], $tmpone['mday'], $tmpone['year']);
367 $tmptwo = getdate($b['checkout']);
368 $conts = mktime(0, 0, 0, $tmptwo['mon'], $tmptwo['mday'], $tmptwo['year']);
369 $b['basefrom'] = $ritts;
370 $b['baseto'] = $conts;
371 if ($nowinfo[0] >= $ritts && $nowinfo[0] <= $conts) {
372 array_push($room_bookings, $b);
373 }
374 }
375 /**
376 * By default, we attempt to sort the bookings for this day by room index.
377 *
378 * @since 1.13.5
379 */
380 if (count($room_bookings)) {
381 $rindexes_map = array();
382 foreach ($room_bookings as $rbk => $rbval) {
383 $rindexes_map[$rbk] = isset($rbval['indexes']) ? $rbval['indexes'] : '';
384 }
385 asort($rindexes_map);
386 $room_bookings_copy = array();
387 foreach ($rindexes_map as $rbk => $rbval) {
388 array_push($room_bookings_copy, $room_bookings[$rbk]);
389 }
390 $room_bookings = $room_bookings_copy;
391 }
392 //
393 }
394 if (count($room_bookings) && count($bookbuffer)) {
395 // sort bookings according to the previous map
396 $newbookings = array();
397 foreach ($bookbuffer as $oid) {
398 foreach ($room_bookings as $kb => $rbook) {
399 if ($oid == $rbook['idorder']) {
400 // get this key first
401 $newbookings[$kb] = $rbook;
402 // do not break the loop as there could be multiple idorder, just continue
403 continue;
404 }
405 }
406 }
407 if (count($newbookings)) {
408 // merge array by keys by unsetting double keys from second array
409 $room_bookings = $newbookings + $room_bookings;
410 }
411 // copy buffer before reset to see whether this is the first cell displayed for the booking
412 $prevbuffer = $bookbuffer;
413 // reset buffer to fill the current day bookings
414 $bookbuffer = array();
415 }
416 $indexpos = 0;
417 foreach ($room_bookings as $k => $rbook) {
418 $contclass = 'stay';
419 if ($rbook['basefrom'] == $nowinfo[0]) {
420 $contclass = 'checkin';
421 } elseif ($rbook['baseto'] == $nowinfo[0]) {
422 $contclass = 'checkout';
423 }
424 $shortstaycls = '';
425 if (ceil(($rbook['baseto'] - $rbook['basefrom']) / 86400) < 2) {
426 $shortstaycls = ' vbo-tableaux-booking-short';
427 }
428 //check position
429 $pos = $indexpos;
430 if (isset($positions[$rbook['idorder']]) && $indexpos < $positions[$rbook['idorder']]) {
431 // print empty blocks to give the right position to this booking
432 $pos = $indexpos.'-'.$positions[$rbook['idorder']];
433 $looplim = ($positions[$rbook['idorder']] - $indexpos);
434 for ($i = 0; $i < $looplim; $i++) {
435 $indexpos++;
436 ?>
437 <div class="vbo-tableaux-booking vbo-tableaux-booking-empty">
438 <span>&nbsp;</span>
439 </div>
440 <?php
441 }
442 $pos .= '-'.$indexpos;
443 }
444 // push position
445 if (!isset($positions[$rbook['idorder']])) {
446 $positions[$rbook['idorder']] = $indexpos;
447 }
448 // push booking to the buffer for the ordering in the next loop
449 array_push($bookbuffer, $rbook['idorder']);
450
451 // cell content
452 $cellcont = '&nbsp;';
453 // container attributes
454 $cont_attrs = array();
455 if (!in_array($rbook['idorder'], $prevbuffer)) {
456 // first time we print the details for this booking - compose the content of the element
457 $cellcont = '';
458 // get the key to use for reading values that were grouped and separated with the query
459 if (!isset($rooms_loop_count[$rbook['idorder']])) {
460 // the index to read of the feature depending on how many times this booking was printed (in case of multiple same rooms in one booking)
461 $rooms_loop_count[$rbook['idorder']] = 0;
462 } else {
463 // increment index for this room booking
464 $rooms_loop_count[$rbook['idorder']]++;
465 }
466 $nowdataindex = $rooms_loop_count[$rbook['idorder']];
467 // add data attribute for adults, children and pets
468 $adultsinfo = explode(';', $rbook['adults']);
469 $childreninfo = explode(';', $rbook['children']);
470 $petsinfo = explode(';', $rbook['pets']);
471 if (isset($adultsinfo[$nowdataindex]) && isset($childreninfo[$nowdataindex])) {
472 $cont_attrs['party'] = $adultsinfo[$nowdataindex] . ';' . $childreninfo[$nowdataindex];
473 if (isset($petsinfo[$nowdataindex])) {
474 $cont_attrs['party'] .= ';' . $petsinfo[$nowdataindex];
475 }
476 }
477 // add data attribute for traveler first and last name
478 $namesinfo = explode(';', $rbook['tnames']);
479 $lnamesinfo = explode(';', $rbook['tlnames']);
480 if (isset($namesinfo[$nowdataindex]) && isset($lnamesinfo[$nowdataindex]) && !empty($namesinfo[$nowdataindex])) {
481 /**
482 * Make sure permissions allow to see the guest name.
483 *
484 * @since 1.15.0 (J) - 1.5.0 (WP)
485 */
486 if (!empty($operator_perms['guestname'])) {
487 $cont_attrs['tnominative'] = htmlspecialchars($namesinfo[$nowdataindex] . ' ' . $lnamesinfo[$nowdataindex]);
488 }
489 }
490 // check-in time
491 $cont_attrs['checkin'] = date(str_replace("/", $datesep, $df).' H:i', $rbook['checkin']);
492 $cont_attrs['checkout'] = date(str_replace("/", $datesep, $df).' H:i', $rbook['checkout']);
493
494 /**
495 * If permissions allow to see extra services, build a list of services included.
496 *
497 * @since 1.15.0 (J) - 1.5.0 (WP)
498 */
499 if (!empty($operator_perms['roomextras'])) {
500 // build extra info strings
501 $room_extra_infos = [];
502
503 // parse Website and OTA rate plans
504 $room_rplans = explode('__', $rbook['ridtars']);
505 $room_ota_rplans = explode('__', $rbook['rotarplans']);
506 if (!empty($room_rplans[$nowdataindex])) {
507 $rplan_name = $this->getRatePlanFromTariff(($room_rplans[$nowdataindex]));
508 if ($rplan_name) {
509 $room_extra_infos[] = $rplan_name;
510 }
511 } elseif (!empty($room_ota_rplans[$nowdataindex])) {
512 $room_extra_infos[] = $room_ota_rplans[$nowdataindex];
513 }
514
515 // parse options
516 $room_options = explode('__', $rbook['roptions']);
517 if (!empty($room_options[$nowdataindex])) {
518 $room_options_list = [];
519 $all_room_options = explode(';', $room_options[$nowdataindex]);
520 foreach ($all_room_options as $room_opt) {
521 $room_opt_parts = explode(':', $room_opt);
522 if (count($room_opt_parts) < 2 || empty($room_opt_parts[0]) || !isset($this->all_options[$room_opt_parts[0]])) {
523 continue;
524 }
525 $room_options_list[] = $this->all_options[$room_opt_parts[0]]['name'];
526 }
527 if (count($room_options_list)) {
528 $room_extra_infos[] = JText::translate('VBACCOPZ') . ': ' . implode(', ', $room_options_list);
529 }
530 }
531
532 // parse extra services
533 $room_extras = explode('__', $rbook['rextras']);
534 if (!empty($room_extras[$nowdataindex])) {
535 $room_extras_list = [];
536 $decoded_room_extras = json_decode($room_extras[$nowdataindex]);
537 if (is_array($decoded_room_extras)) {
538 foreach ($decoded_room_extras as $dre) {
539 if (!empty($dre->name)) {
540 $room_extras_list[] = $dre->name;
541 }
542 }
543 }
544 if (count($room_extras_list)) {
545 $room_extra_infos[] = JText::translate('VBOEXTRASERVICES') . ': ' . implode(', ', $room_extras_list);
546 }
547 }
548
549 // set the whole room extra infos string
550 $cont_attrs['rextrainfos'] = implode(' - ', $room_extra_infos);
551 }
552
553 // check for special requests
554 if (preg_match("/special requests: (.*?)(?=[a-z0-9\-_ ]+:|$)/is", $rbook['custdata'], $matches)) {
555 $cont_attrs['sprequest'] = htmlspecialchars($matches[1]);
556 }
557 // distinctive features
558 if (!empty($rbook['indexes']) && isset($rooms_features_map[$rid])) {
559 $bookindexes = explode(';', $rbook['indexes']);
560 if (!isset($rooms_features_bookings[$rid.'_'.$rbook['idorder']])) {
561 // the index to read of the feature depending on how many times this booking was printed (in case of multiple same rooms in one booking)
562 $rooms_features_bookings[$rid.'_'.$rbook['idorder']] = 0;
563 } else {
564 // increment index for this room booking
565 $rooms_features_bookings[$rid.'_'.$rbook['idorder']]++;
566 }
567 $nowfeatindex = $rooms_features_bookings[$rid.'_'.$rbook['idorder']];
568 if (isset($bookindexes[$nowfeatindex]) && isset($rooms_features_map[$rid][$bookindexes[$nowfeatindex]])) {
569 // get this room feature
570 $cellcont .= '<span class="vbo-tableaux-roomindex">'.$rooms_features_map[$rid][$bookindexes[$nowfeatindex]] . '</span> ';
571 }
572 }
573 // customer details
574 if (!empty($rbook['first_name']) || !empty($rbook['last_name'])) {
575 // customer record
576 if (!empty($operator_perms['guestname'])) {
577 $cellcont .= $rbook['first_name'].' '.$rbook['last_name'];
578 } else {
579 $cellcont .= '#' . $rbook['idorder'];
580 }
581 } else {
582 // parse the customer data string
583 $custdata_parts = explode("\n", $rbook['custdata']);
584 $enoughinfo = false;
585 if (count($custdata_parts) > 2 && strpos($custdata_parts[0], ':') !== false && strpos($custdata_parts[1], ':') !== false) {
586 // get the first two fields
587 $custvalues = array();
588 foreach ($custdata_parts as $custdet) {
589 if (strlen($custdet) < 1) {
590 continue;
591 }
592 $custdet_parts = explode(':', $custdet);
593 if (count($custdet_parts) >= 2) {
594 unset($custdet_parts[0]);
595 array_push($custvalues, trim(implode(':', $custdet_parts)));
596 }
597 if (count($custvalues) > 1) {
598 break;
599 }
600 }
601 if (count($custvalues) > 1) {
602 $enoughinfo = true;
603 $cellcont .= implode(' ', $custvalues);
604 }
605 }
606 if (!$enoughinfo) {
607 $cellcont .= $rbook['idorder'];
608 }
609 }
610 }
611 $data_attrs = array();
612 foreach ($cont_attrs as $datak => $datav) {
613 array_push($data_attrs, "data-{$datak}=\"{$datav}\"");
614 }
615 ?>
616 <div class="vbo-tableaux-booking vbo-tableaux-booking-<?php echo $contclass.$shortstaycls.' vbo-'.$pos; ?>" data-bid="<?php echo $rbook['idorder']; ?>" <?php echo implode(' ', $data_attrs); ?>>
617 <span><?php echo $cellcont; ?></span>
618 </div>
619 <?php
620 // increase the positioning index
621 $indexpos++;
622 }
623 ?>
624 <span class="vbo-roomdaynote-trigger" data-roomday="<?php echo $glob_rdn_keyid; ?>"><?php VikBookingIcons::e($rdaynote_icn, 'vbo-roomdaynote-display'); ?></span>
625 </td>
626 <?php
627 // next loop
628 $nowinfo = getdate(mktime(0, 0, 0, $nowinfo['mon'], ($nowinfo['mday'] + 1), $nowinfo['year']));
629 }
630 ?>
631 </tr>
632 <?php
633 }
634 ?>
635 </tbody>
636 </table>
637 </div>
638 </div>
639 </div>
640 </div>
641
642 <script type="text/javascript">
643 var vboFests = <?php echo json_encode($this->festivities); ?>;
644 var vboRdayNotes = <?php echo json_encode($this->rdaynotes); ?>;
645 var vbdialog_on = false;
646 var vbodialogfests_on = false;
647 var vbodialogrdaynotes_on = false;
648
649 function vbDialogClose() {
650 if (vbdialog_on === true) {
651 jQuery("#vbdialog-overlay").fadeOut();
652 vbdialog_on = false;
653 }
654 }
655
656 /**
657 * Fests
658 */
659 function hideVboDialogFests() {
660 if (vbodialogfests_on === true) {
661 jQuery(".vbo-modal-overlay-block-fests").fadeOut(400, function () {
662 jQuery(".vbo-modal-overlay-content-fests").show();
663 });
664 vbodialogfests_on = false;
665 }
666 }
667
668 function vboRenderFests(day, daytitle) {
669 // set day title
670 if (daytitle) {
671 jQuery('.vbo-modal-overlay-content-fests').find('h3').find('span').text(daytitle);
672 }
673 // compose fests information
674 var fests_html = '';
675 if (vboFests[day] && vboFests[day]['festinfo'] && vboFests[day]['festinfo'].length) {
676 for (var i = 0; i < vboFests[day]['festinfo'].length; i++) {
677 var fest = vboFests[day]['festinfo'][i];
678 fests_html += '<div class="vbo-overlay-fest-details">';
679 fests_html += ' <div class="vbo-fest-info">';
680 fests_html += ' <div class="vbo-fest-name">' + fest['trans_name'] + '</div>';
681 fests_html += ' <div class="vbo-fest-desc">' + fest['descr'].replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '<br />' + '$2') + '</div>';
682 fests_html += ' </div>';
683 fests_html += '</div>';
684 }
685 }
686 // set content and display modal
687 jQuery('.vbo-overlay-fests-list').html(fests_html);
688 jQuery('.vbo-modal-overlay-block-fests').fadeIn();
689 vbodialogfests_on = true;
690 }
691
692 /**
693 * Room-day-notes
694 */
695 var rdaynote_icn_full = '<?php echo VikBookingIcons::i('sticky-note', 'vbo-roomdaynote-display'); ?>';
696 var rdaynote_icn_empty = '<?php echo VikBookingIcons::i('far fa-sticky-note', 'vbo-roomdaynote-display'); ?>';
697 var rooms_features_map = JSON.parse('<?php echo isset($rooms_features_map) && count($rooms_features_map) ? json_encode($rooms_features_map) : json_encode(array()); ?>');
698
699 function hideVboDialogRdaynotes() {
700 if (vbodialogrdaynotes_on === true) {
701 jQuery(".vbo-modal-overlay-block-roomdaynotes").fadeOut(400, function () {
702 jQuery(".vbo-modal-overlay-content-roomdaynotes").show();
703 });
704 // reset values
705 jQuery('#vbo-newrdnote-name').val('');
706 jQuery('#vbo-newrdnote-descr').val('');
707 jQuery('#vbo-newrdnote-cdays').val('0').trigger('change');
708 // turn flag off
709 vbodialogrdaynotes_on = false;
710 }
711 }
712
713 function vboRenderRdayNotes(day, idroom, subunit, readymd) {
714 // compose room-day notes information (subunit always = 0 for room-day level)
715 var notes_html = '';
716 var keyids = new Array;
717 // always push 0 as the room-level day note key
718 keyids.push(0);
719 // grab all the other note keys at sub-unit level
720 if (jQuery('.vbo-tableaux-roombooks[data-dayrid="' + day + idroom + '"]').length) {
721 var all_nkeys = jQuery('.vbo-tableaux-roombooks[data-dayrid="' + day + idroom + '"]').attr('data-rdnkeys');
722 if (all_nkeys && all_nkeys.length) {
723 var nkeys = all_nkeys.split(',');
724 for (var k in nkeys) {
725 var int_index = parseInt(nkeys[k]);
726 if (!nkeys.hasOwnProperty(k) || isNaN(int_index) || int_index < 1) {
727 continue;
728 }
729 // push sub-unit key for lookup
730 keyids.push(nkeys[k]);
731 }
732 }
733 }
734 // parse all room keys with notes
735 for (var z = 0; z < keyids.length; z++) {
736 // this is the real sub-unit we are parsing
737 var subunit_index = keyids[z];
738 var keyid = day + '_' + idroom + '_' + subunit_index;
739 if (vboRdayNotes.hasOwnProperty(keyid) && vboRdayNotes[keyid]['info'] && vboRdayNotes[keyid]['info'].length) {
740 for (var i = 0; i < vboRdayNotes[keyid]['info'].length; i++) {
741 var note_data = vboRdayNotes[keyid]['info'][i];
742 var subunit_name = '';
743 if (parseInt(subunit_index) > 0) {
744 subunit_name = '(' + subunit_index + ') ';
745 if (rooms_features_map.hasOwnProperty(idroom) && rooms_features_map[idroom].hasOwnProperty(subunit_index)) {
746 subunit_name = rooms_features_map[idroom][subunit_index] + ' - ';
747 }
748 }
749 notes_html += '<div class="vbo-overlay-fest-details vbo-modal-roomdaynotes-note-details">';
750 notes_html += ' <div class="vbo-fest-info vbo-modal-roomdaynotes-note-info">';
751 notes_html += ' <div class="vbo-fest-name vbo-modal-roomdaynotes-note-name">' + subunit_name + note_data['name'] + '</div>';
752 notes_html += ' <div class="vbo-fest-desc vbo-modal-roomdaynotes-note-desc">' + note_data['descr'].replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '<br />' + '$2') + '</div>';
753 notes_html += ' </div>';
754 notes_html += '</div>';
755 }
756 }
757 }
758 // update attributes keys for the selected date, useful for adding new notes (always at room-level)
759 jQuery('.vbo-modal-roomdaynotes-addnew').attr('data-ymd', day).attr('data-roomid', idroom).attr('data-subroomid', '0');
760 if (readymd !== null) {
761 jQuery('.vbo-modal-roomdaynotes-addnew').attr('data-readymd', readymd);
762 jQuery('.vbo-newrdnote-dayto-val').text(readymd);
763 }
764 // set content and display modal
765 jQuery('.vbo-modal-roomdaynotes-list').html(notes_html);
766 }
767
768 function vboAddRoomDayNote(that) {
769 var mainelem = jQuery(that).closest('.vbo-modal-roomdaynotes-addnew');
770 var ymd = mainelem.attr('data-ymd');
771 var roomid = mainelem.attr('data-roomid');
772 var subroomid = mainelem.attr('data-subroomid');
773 var note_name = jQuery('#vbo-newrdnote-name').val();
774 var note_descr = jQuery('#vbo-newrdnote-descr').val();
775 var note_cdays = jQuery('#vbo-newrdnote-cdays').val();
776 if (!note_name.length && !note_descr.length) {
777 alert('Missing required fields');
778 return false;
779 }
780 // make the AJAX request to the controller to add this note to the DB
781 var jqxhr = jQuery.ajax({
782 type: "POST",
783 url: "<?php echo VikBooking::ajaxUrl(JRoute::rewrite('index.php?option=com_vikbooking&task=add_roomdaynote&tmpl=component'.(!empty($pitemid) ? '&Itemid='.$pitemid : ''), false)); ?>",
784 data: {
785 option: "com_vikbooking",
786 task: "add_roomdaynote",
787 dt: ymd,
788 idroom: roomid,
789 subunit: subroomid,
790 type: "custom",
791 name: note_name,
792 descr: note_descr,
793 cdays: note_cdays
794 }
795 }).done(function(res) {
796 // parse the JSON response that contains the note object for the passed date
797 try {
798 var stored_notes = JSON.parse(res);
799 var counter = 0;
800 for (var keyid in stored_notes) {
801 if (!stored_notes.hasOwnProperty(keyid)) {
802 continue;
803 }
804 var is_date_visible = (jQuery('.vbo-roomdaynote-trigger[data-roomday="' + keyid + '"]').length > 0);
805 if (!vboRdayNotes.hasOwnProperty(keyid) && is_date_visible) {
806 // we need to add the proper class to the cell for this note (if it's visible)
807 jQuery('.vbo-roomdaynote-trigger[data-roomday="' + keyid + '"]').parent('td').removeClass('vbo-roomdaynote-empty').addClass('vbo-roomdaynote-full').find('i').attr('class', rdaynote_icn_full);
808 }
809 // update global object with the new notes in any case
810 vboRdayNotes[keyid] = stored_notes[keyid];
811 // update readable notes in custom data attribute
812 if (counter < 1 && is_date_visible && note_name.length) {
813 // we push just this name
814 var current_cell_notes = jQuery('.vbo-roomdaynote-trigger[data-roomday="' + keyid + '"]').parent('td').attr('data-notes');
815 var all_cell_notes = current_cell_notes && current_cell_notes.length ? current_cell_notes.split(', ') : new Array;
816 all_cell_notes.push(note_name);
817 jQuery('.vbo-roomdaynote-trigger[data-roomday="' + keyid + '"]').parent('td').attr('data-notes', all_cell_notes.join(', '));
818 }
819 // increase counter
820 counter++;
821 }
822 // close modal
823 hideVboDialogRdaynotes();
824 // reset input fields
825 jQuery('#vbo-newrdnote-name').val('');
826 jQuery('#vbo-newrdnote-descr').val('');
827 jQuery('#vbo-newrdnote-cdays').val('0').trigger('change');
828 } catch (e) {
829 console.log(res);
830 alert('Invalid response');
831 return false;
832 }
833 }).fail(function() {
834 alert('Request failed');
835 });
836 }
837
838 function vboRdayNoteCdaysCount() {
839 var cdays = parseInt(jQuery('#vbo-newrdnote-cdays').val());
840 var defymd = jQuery('.vbo-modal-roomdaynotes-addnew').attr('data-ymd');
841 var defreadymd = jQuery('.vbo-modal-roomdaynotes-addnew').attr('data-readymd');
842 defreadymd = !defreadymd || !defreadymd.length ? defymd : defreadymd;
843 if (isNaN(cdays) || cdays < 1) {
844 jQuery('.vbo-newrdnote-dayto-val').text(defreadymd);
845 return;
846 }
847 // calculate target (until) date
848 var targetdate = new Date(defymd);
849 targetdate.setDate(targetdate.getDate() + cdays);
850 var target_y = targetdate.getFullYear();
851 var target_m = targetdate.getMonth() + 1;
852 target_m = target_m < 10 ? '0' + target_m : target_m;
853 var target_d = targetdate.getDate();
854 target_d = target_d < 10 ? '0' + target_d : target_d;
855 // display target date
856 var display_target = target_y + '-' + target_m + '-' + target_d;
857 // check if we can get the "read ymd property"
858 if (jQuery('.vbo-tableaux-daycell[data-ymd="' + display_target + '"]').length) {
859 display_target = jQuery('.vbo-tableaux-daycell[data-ymd="' + display_target + '"]').attr('data-readymd');
860 }
861 jQuery('.vbo-newrdnote-dayto-val').text(display_target);
862 }
863
864 jQuery(document).ready(function() {
865
866 jQuery('.vbo-tableaux-togglefullscreen').click(function() {
867 if (jQuery('.vbo-tableaux-outer').hasClass('vbo-tableaux-fullscreen')) {
868 jQuery(this).find('i').addClass('fa-expand').removeClass('fa-compress');
869 jQuery('.vbo-tableaux-outer').removeClass('vbo-tableaux-fullscreen');
870 } else {
871 jQuery(this).find('i').addClass('fa-compress').removeClass('fa-expand');
872 jQuery('.vbo-tableaux-outer').addClass('vbo-tableaux-fullscreen');
873 }
874 jQuery(this).blur();
875 });
876
877 jQuery('.vbo-tableaux-booking').click(function() {
878 jQuery('.vbdialog-inner-tableaux').html('');
879 var attrs = jQuery(this).data();
880 var bid = attrs['bid'];
881 if (!attrs.hasOwnProperty('party')) {
882 var first = jQuery(this).closest('tr').find('.vbo-tableaux-booking[data-bid="'+bid+'"]').first();
883 if (!first) {
884 return false;
885 }
886 first.trigger('click');
887 return;
888 }
889 // prepare data to be displayed:
890 var ovcont = '';
891 // find room name
892 var rname = jQuery(this).closest('tr').find('.vbo-tableaux-roomname').text();
893 if (rname && rname.length) {
894 // try to find room index
895 var rindex = '';
896 if (jQuery(this).find('.vbo-tableaux-roomindex').length) {
897 rindex = jQuery(this).find('.vbo-tableaux-roomindex').text();
898 rindex = rindex.length ? ' ' + rindex : rindex;
899 }
900 ovcont += '<div class="vbo-tableaux-bookdet-entry"><span class="vbo-tableaux-bookdet-lbl">' + Joomla.JText._('VBSEARCHRESROOM') + '</span><span class="vbo-tableaux-bookdet-val">' + rname + rindex + '</span></div>';
901 }
902 //
903 if (attrs.hasOwnProperty('tnominative')) {
904 ovcont += '<div class="vbo-tableaux-bookdet-entry"><span class="vbo-tableaux-bookdet-lbl">' + Joomla.JText._('VBOCUSTOMERNOMINATIVE') + '</span><span class="vbo-tableaux-bookdet-val">'+attrs['tnominative']+'</span></div>';
905 }
906 if (attrs.hasOwnProperty('party')) {
907 var guests = attrs['party'].split(';');
908 ovcont += '<div class="vbo-tableaux-bookdet-entry"><span class="vbo-tableaux-bookdet-lbl">' + Joomla.JText._('VBFORMADULTS') + '</span><span class="vbo-tableaux-bookdet-val">' + guests[0] + '</span></div>';
909 ovcont += '<div class="vbo-tableaux-bookdet-entry"><span class="vbo-tableaux-bookdet-lbl">' + Joomla.JText._('VBFORMCHILDREN') + '</span><span class="vbo-tableaux-bookdet-val">' + guests[1] + '</span></div>';
910 if (guests.length > 2 && guests[2] > 0) {
911 ovcont += '<div class="vbo-tableaux-bookdet-entry"><span class="vbo-tableaux-bookdet-lbl">' + Joomla.JText._('VBO_PETS') + '</span><span class="vbo-tableaux-bookdet-val">' + guests[2] + '</span></div>';
912 }
913 }
914 if (attrs.hasOwnProperty('checkin')) {
915 ovcont += '<div class="vbo-tableaux-bookdet-entry"><span class="vbo-tableaux-bookdet-lbl">' + Joomla.JText._('VBPICKUP') + '</span><span class="vbo-tableaux-bookdet-val">'+attrs['checkin']+'</span></div>';
916 }
917 if (attrs.hasOwnProperty('checkout')) {
918 ovcont += '<div class="vbo-tableaux-bookdet-entry"><span class="vbo-tableaux-bookdet-lbl">' + Joomla.JText._('VBRETURN') + '</span><span class="vbo-tableaux-bookdet-val">'+attrs['checkout']+'</span></div>';
919 }
920 if (attrs.hasOwnProperty('rextrainfos')) {
921 ovcont += '<div class="vbo-tableaux-bookdet-entry"><span class="vbo-tableaux-bookdet-lbl">' + Joomla.JText._('VBOEXTRASERVICES') + '</span><span class="vbo-tableaux-bookdet-val">'+attrs['rextrainfos']+'</span></div>';
922 }
923 if (attrs.hasOwnProperty('sprequest')) {
924 ovcont += '<div class="vbo-tableaux-bookdet-entry"><span class="vbo-tableaux-bookdet-lbl">' + Joomla.JText._('ORDER_SPREQUESTS') + '</span><span class="vbo-tableaux-bookdet-val">'+attrs['sprequest']+'</span></div>';
925 }
926 jQuery('.vbdialog-inner-tableaux').html(ovcont);
927 jQuery('#vbdialog-overlay').fadeIn();
928 vbdialog_on = true;
929 });
930
931 jQuery(document).keydown(function(e) {
932 if ( e.keyCode == 27 ) {
933 if (vbdialog_on === true) {
934 vbDialogClose();
935 }
936 if (vbodialogfests_on === true) {
937 hideVboDialogFests();
938 }
939 if (vbodialogrdaynotes_on === true) {
940 hideVboDialogRdaynotes();
941 }
942 }
943 });
944
945 jQuery(document).mouseup(function(e) {
946 if (!vbdialog_on && !vbodialogfests_on && !vbodialogrdaynotes_on) {
947 return false;
948 }
949 if (vbdialog_on) {
950 var vbdialog_cont = jQuery(".vbdialog-inner");
951 if (!vbdialog_cont.is(e.target) && vbdialog_cont.has(e.target).length === 0) {
952 vbDialogClose();
953 }
954 }
955 if (vbodialogfests_on) {
956 var vbo_overlay_cont = jQuery(".vbo-modal-overlay-content-fests");
957 if (!vbo_overlay_cont.is(e.target) && vbo_overlay_cont.has(e.target).length === 0) {
958 hideVboDialogFests();
959 }
960 }
961 if (vbodialogrdaynotes_on) {
962 var vbo_overlay_cont = jQuery(".vbo-modal-overlay-content-roomdaynotes");
963 if (!vbo_overlay_cont.is(e.target) && vbo_overlay_cont.has(e.target).length === 0) {
964 hideVboDialogRdaynotes();
965 }
966 }
967 });
968
969 // fests
970 jQuery(document.body).on("click", "td.vbo-tableaux-daycell.vbo-tableaux-festcell", function() {
971 if (jQuery(this).hasClass('skip-tableaux-daycell-click')) {
972 return;
973 }
974 var ymd = jQuery(this).attr('data-ymd');
975 var daytitle = jQuery(this).attr('data-readymd');
976 // front-end tableaux does not permit to add new fests
977 if (!vboFests.hasOwnProperty(ymd)) {
978 return;
979 }
980 vboRenderFests(ymd, daytitle);
981 });
982 //
983
984 // room-day notes
985 jQuery(document.body).on("click", ".vbo-roomdaynote-display", function() {
986 if (!jQuery(this).closest('.vbo-roomdaynote-trigger').length) {
987 return;
988 }
989 var daytitle = new Array;
990 var roomday_info = jQuery(this).closest('.vbo-roomdaynote-trigger').attr('data-roomday').split('_');
991 // readable day
992 var readymd = roomday_info[0];
993 if (jQuery('.vbo-tableaux-daycell[data-ymd="' + roomday_info[0] + '"]').length) {
994 readymd = jQuery('.vbo-tableaux-daycell[data-ymd="' + roomday_info[0] + '"]').attr('data-readymd');
995 }
996 daytitle.push(readymd);
997 // room name
998 if (jQuery('.vbo-tableaux-roomname[data-roomid="' + roomday_info[1] + '"]').length) {
999 daytitle.push(jQuery('.vbo-tableaux-roomname[data-roomid="' + roomday_info[1] + '"]').text());
1000 }
1001 // set day title
1002 jQuery('.vbo-modal-overlay-content-head-roomdaynotes').find('h3').find('span.vbo-modal-roomdaynotes-dt').text(daytitle.join(', '));
1003 // populate current room day notes
1004 vboRenderRdayNotes(roomday_info[0], roomday_info[1], roomday_info[2], readymd);
1005 // display modal
1006 jQuery('.vbo-modal-overlay-block-roomdaynotes').fadeIn();
1007 vbodialogrdaynotes_on = true;
1008 //
1009 });
1010 //
1011 });
1012 </script>
1013