File "default.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/admin/views/calendar/tmpl/default.php
File size: 52.59 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikBooking
* @subpackage com_vikbooking
* @author Alessio Gaggii - e4j - Extensionsforjoomla.com
* @copyright Copyright (C) 2018 e4j - Extensionsforjoomla.com. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* @link https://vikwp.com
*/
defined('ABSPATH') or die('No script kiddies please!');
$room = $this->room;
$allc = $this->allc;
$payments = $this->payments;
$busy = $this->busy;
$vmode = $this->vmode;
$dbo = JFactory::getDbo();
$vbo_app = VikBooking::getVboApplication();
$vbo_app->loadSelect2();
$vbo_app->loadDatePicker();
$vbo_app->loadDatesRangePicker();
$document = JFactory::getDocument();
$document->addStyleSheet(VBO_ADMIN_URI.'resources/jquery.highlighttextarea.min.css');
JHtml::fetch('script', VBO_ADMIN_URI.'resources/jquery.highlighttextarea.min.js');
// JS lang def
JText::script('VBFILLCUSTFIELDS');
JText::script('VBMSGTHREE');
JText::script('VBMSGFOUR');
JText::script('VBDBTEXTROOMCLOSED');
JText::script('ORDER_NOTES');
JText::script('VBSUBMCLOSEROOM');
JText::script('VBCUSTINFO');
JText::script('VBMAKERESERV');
JText::script('VBDAY');
JText::script('VBOCALCLOSEOTHERROOMS');
JText::script('VBERRCUSTOMEREMAILEXISTS');
JText::script('VBAPPLY');
JText::script('VBANNULLA');
JText::script('VBO_MARK_UNITS_CLOSED');
$vbo_df = VikBooking::getDateFormat(true);
if ($vbo_df == "%d/%m/%Y") {
$df = 'd/m/Y';
$juidf = 'dd/mm/yy';
} elseif ($vbo_df == "%m/%d/%Y") {
$df = 'm/d/Y';
$juidf = 'mm/dd/yy';
} else {
$df = 'Y/m/d';
$juidf = 'yy/mm/dd';
}
$datesep = VikBooking::getDateSeparator(true);
$prices_vat_included = (int)VikBooking::ivaInclusa();
$pcheckin = VikRequest::getString('checkin', '', 'request');
$pcheckin_ymd = $pcheckin;
if (!empty($pcheckin)) {
$pcheckin = date(str_replace('%', '', $vbo_df), strtotime($pcheckin));
}
$pcheckout = VikRequest::getString('checkout', '', 'request');
$pcheckout_ymd = $pcheckout;
if (!empty($pcheckout)) {
$pcheckout = date(str_replace('%', '', $vbo_df), strtotime($pcheckout));
}
$ptmpl = VikRequest::getString('tmpl', '', 'request');
$poverview = VikRequest::getInt('overv', '', 'request');
$poverview_change = VikRequest::getInt('overview_change', 0, 'request');
$padults = VikRequest::getInt('adults', 0, 'request');
$pchildren = VikRequest::getInt('children', 0, 'request');
$pidprice = VikRequest::getInt('idprice', 0, 'request');
$pbooknow = VikRequest::getInt('booknow', 0, 'request');
/**
* Split stay data for booking.
*
* @since 1.16.0 (J) - 1.6.0 (WP)
*/
$split_stay = VikRequest::getVar('split_stay', array());
$rooms_data = [];
foreach ($allc as $room_info) {
$rooms_data[$room_info['id']] = $room_info['name'];
}
if ($this->new_res_id) {
?>
<p class="successmade"><?php echo JText::translate('VBBOOKMADE'); ?> <a href="index.php?option=com_vikbooking&task=editorder&cid[]=<?php echo $this->new_res_id; ?>" target="_blank" class="btn"><i class="vboicn-eye"></i> <?php echo JText::translate('VBOVIEWBOOKINGDET'); ?></a></p>
<?php
if ($poverview > 0 && $ptmpl == 'component') {
$poverview_change = 1;
}
}
$timeopst = VikBooking::getTimeOpenStore();
if (is_array($timeopst)) {
$opent = VikBooking::getHoursMinutes($timeopst[0]);
$closet = VikBooking::getHoursMinutes($timeopst[1]);
$hcheckin = $opent[0];
$mcheckin = $opent[1];
$hcheckout = $closet[0];
$mcheckout = $closet[1];
} else {
$hcheckin = 0;
$mcheckin = 0;
$hcheckout = 0;
$mcheckout = 0;
}
$formatparts = explode(':', VikBooking::getNumberFormatData());
$currencysymb = VikBooking::getCurrencySymb();
$globnumadults = VikBooking::getSearchNumAdults(true);
$adultsparts = explode('-', $globnumadults);
$seladults = "<select name=\"adults\" id=\"vbo-sel-adults\">\n";
for ($i = $adultsparts[0]; $i <= ((int)$adultsparts[1] * $room['units']); $i++) {
$seladults .= "<option value=\"".$i."\"".((intval($adultsparts[0]) < 1 && $i == 1 && $padults < 1) || ($padults > 0 && $i == $padults) ? " selected=\"selected\"" : "").">".$i."</option>\n";
}
$seladults .= "</select>\n";
$globnumchildren = VikBooking::getSearchNumChildren(true);
$childrenparts = explode('-', $globnumchildren);
$selchildren = "<select name=\"children\" id=\"vbo-sel-children\">\n";
for ($i = $childrenparts[0]; $i <= ((int)$childrenparts[1] * $room['units']); $i++) {
$selchildren .= "<option value=\"".$i."\"" . ($pchildren > 0 && $i == $pchildren ? ' selected="selected"' : '') . ">".$i."</option>\n";
}
$selchildren .= "</select>\n";
$selpayments = '<select name="payment"><option value="">'.JText::translate('VBPAYMUNDEFINED').'</option>';
if (is_array($payments) && $payments) {
foreach ($payments as $pay) {
$selpayments .= '<option value="'.$pay['id'].'">'.$pay['name'].'</option>';
}
}
$selpayments .= '</select>';
// custom fields
$all_countries = array();
$q = "SELECT * FROM `#__vikbooking_custfields` ORDER BY `#__vikbooking_custfields`.`ordering` ASC;";
$dbo->setQuery($q);
$all_cfields = $dbo->loadAssocList();
if ($all_cfields) {
$q = "SELECT * FROM `#__vikbooking_countries` ORDER BY `#__vikbooking_countries`.`country_name` ASC;";
$dbo->setQuery($q);
$all_countries = $dbo->loadAssocList();
}
$wiva = "";
$q = "SELECT * FROM `#__vikbooking_iva`;";
$dbo->setQuery($q);
$ivas = $dbo->loadAssocList();
if ($ivas) {
foreach ($ivas as $kiv => $iv) {
$wiva .= "<option value=\"".$iv['id']."\" data-aliqid=\"".$iv['id']."\"".($kiv < 1 ? ' selected="selected"' : '').">".(empty($iv['name']) ? $iv['aliq']."%" : $iv['name']." - ".$iv['aliq']."%")."</option>\n";
}
}
// close other rooms select
$closeotherrooms = '';
if (count($allc) > 1) {
$closeotherrooms = "<select id=\"vbo-calendar-closeall\" multiple=\"multiple\" name=\"closeothers[]\" onchange=\"vboCheckCloseOthers();\">\n";
$closeotherrooms .= "<option></option>\n";
$closeotherrooms .= "<option value=\"".$room['id']."\" data-currentr=\"true\" disabled=\"disabled\">".$room['name']."</option>\n";
$closeotherrooms .= "<option value=\"-1\">- ".JText::translate('VBOCALCLOSEALLROOMSDT')."</option>\n";
foreach ($allc as $cc) {
if ($cc['id'] == $room['id']) {
continue;
}
$closeotherrooms .= "<option value=\"".$cc['id']."\">".$cc['name']."</option>\n";
}
$closeotherrooms .= "</select>\n";
}
?>
<div class="vbo-admin-container">
<div class="vbo-config-maintab-left">
<fieldset class="adminform">
<div class="vbo-params-wrap">
<legend class="adminlegend">
<div class="vbo-quickres-head">
<span><?php echo $room['name'] . " - " . JText::translate('VBQUICKBOOK') . (!empty($split_stay) ? ' (' . JText::translate('VBO_SPLIT_STAY') . ')' : ''); ?></span>
<div class="vbo-quickres-head-right">
<form name="vbchroom" id="vbchroom" method="post" action="index.php?option=com_vikbooking">
<input type="hidden" name="task" value="calendar"/>
<input type="hidden" name="option" value="com_vikbooking"/>
<select id="vbo-calendar-changeroom" name="cid[]" onchange="jQuery('#vbchroom').submit();">
<?php
foreach ($allc as $cc) {
echo "<option value=\"".$cc['id']."\"".($cc['id'] == $room['id'] ? " selected=\"selected\"" : "").">".$cc['name']."</option>\n";
}
?>
</select>
<?php
if ($ptmpl == 'component') {
echo "<input type=\"hidden\" name=\"tmpl\" value=\"component\" />\n";
}
?>
</form>
</div>
</div>
</legend>
<form name="newb" method="post" action="index.php?option=com_vikbooking" id="vbo-calendar-newb-form">
<div class="vbo-params-container">
<div class="vbo-param-container">
<div class="vbo-param-label"><?php echo JText::translate('VBDATEPICKUP'); ?></div>
<div class="vbo-param-setting">
<div class="input-append">
<input type="text" autocomplete="off" name="checkindate" id="checkindate" size="10" />
<button type="button" class="btn btn-secondary" id="checkindate-trig"><?php VikBookingIcons::e('calendar', 'icn-nomargin'); ?></button>
</div>
<span class="vbo-calendar-time-inline"><?php echo JText::translate('VBAT')." ".($hcheckin < 10 ? '0'.$hcheckin : $hcheckin).":".($mcheckin < 10 ? '0'.$mcheckin : $mcheckin); ?></span>
<input type="hidden" name="checkinh" value="<?php echo $hcheckin; ?>"/>
<input type="hidden" name="checkinm" value="<?php echo $mcheckin; ?>"/>
</div>
</div>
<div class="vbo-param-container">
<div class="vbo-param-label"><?php echo JText::translate('VBDATERELEASE'); ?></div>
<div class="vbo-param-setting">
<div class="input-append">
<input type="text" autocomplete="off" name="checkoutdate" id="checkoutdate" size="10" />
<button type="button" class="btn btn-secondary" id="checkoutdate-trig"><?php VikBookingIcons::e('calendar', 'icn-nomargin'); ?></button>
</div>
<span class="vbo-calendar-time-inline"><?php echo JText::translate('VBAT')." ".($hcheckout < 10 ? '0'.$hcheckout : $hcheckout).":".($mcheckout < 10 ? '0'.$mcheckout : $mcheckout); ?></span>
<span style="display: none; margin-left: 25px; vertical-align: top;" id="vbjstotnights">
<span style="font-weight: bold;"><?php echo JText::translate('VBDAYS'); ?></span>
<input type="number" min="1" step="1" value="1" id="vbo-numnights" style="margin: 0;" />
</span>
<input type="hidden" name="checkouth" value="<?php echo $hcheckout; ?>"/>
<input type="hidden" name="checkoutm" value="<?php echo $mcheckout; ?>"/>
</div>
</div>
<div class="vbo-param-container" style="<?php echo !empty($split_stay) ? 'display: none;' : ''; ?>">
<div class="vbo-param-label">
<span class="vbcloseroomsp">
<label for="setclosed-on"><?php echo JText::translate('VBCLOSEROOM'); ?> <i class="<?php echo VikBookingIcons::i('ban'); ?>" style="float: none;"></i></label>
</span>
</div>
<div class="vbo-param-setting">
<?php echo $vbo_app->printYesNoButtons('setclosed', JText::translate('VBYES'), JText::translate('VBNO'), 0, 1, 0, 'vbCloseRoom();'); ?>
<div class="vbo-close-all-rooms-sel" id="vbo-close-all-rooms-sel" style="display: none;"><?php echo $closeotherrooms; ?></div>
</div>
</div>
<?php
if ($room['units'] > 1 && empty($split_stay)) {
$num_rooms_vals = range(1, $room['units']);
$num_rooms_opts = '';
foreach ($num_rooms_vals as $nrv) {
$num_rooms_opts .= '<option value="'.$nrv.'">'.$nrv.'</option>'."\n";
}
?>
<div class="vbo-param-container" id="vbo-row-numrooms">
<div class="vbo-param-label"><?php echo JText::translate('VBPVIEWROOMSEVEN'); ?></div>
<div class="vbo-param-setting">
<select name="num_rooms" id="vbo-sel-numrooms">
<?php echo $num_rooms_opts; ?>
</select>
</div>
</div>
<?php
} else {
?>
<input type="hidden" name="num_rooms" value="1"/>
<?php
}
?>
<div class="vbo-param-container" id="vbo-row-people">
<div class="vbo-param-label"><?php echo JText::translate('VBQUICKRESGUESTS'); ?></div>
<div class="vbo-param-setting">
<span class="vbo-quickres-aduchi-wrap">
<span class="vbo-quickres-aduchi-inlbl"><?php echo JText::translate('VBQUICKADULTS'); ?></span>
<?php echo $seladults; ?>
</span>
<span class="vbo-quickres-aduchi-wrap">
<span class="vbo-quickres-aduchi-inlbl"><?php echo JText::translate('VBQUICKCHILDREN'); ?></span>
<?php echo $selchildren; ?>
</span>
</div>
</div>
<?php
if (!empty($split_stay)) {
foreach ($split_stay as $sps_k => $sps_v) {
?>
<div class="vbo-param-container">
<div class="vbo-param-label"><?php echo $sps_k < 1 ? '<i class="' . VikBookingIcons::i('random') . '"></i> ' . JText::translate('VBO_SPLIT_STAY') : ' '; ?></div>
<div class="vbo-param-setting">
<div class="vbo-cal-splitstay-details">
<div class="vbo-cal-splitstay-room">
<span class="vbo-cal-splitstay-room-name"><?php VikBookingIcons::e('bed'); ?> <?php echo $rooms_data[$sps_v['idroom']]; ?></span>
<span class="vbo-cal-splitstay-room-nights"><?php VikBookingIcons::e('moon'); ?> <?php echo $sps_v['nights']; ?> <?php echo $sps_v['nights'] > 1 ? JText::translate('VBDAYS') : JText::translate('VBDAY'); ?></span>
</div>
<div class="vbo-cal-splitstay-dates">
<span class="vbo-cal-splitstay-dates-in"><?php VikBookingIcons::e('plane-arrival'); ?> <?php echo date(str_replace("/", $datesep, $df), strtotime($sps_v['checkin'])); ?></span>
<span class="vbo-cal-splitstay-dates-out"><?php VikBookingIcons::e('plane-departure'); ?> <?php echo date(str_replace("/", $datesep, $df), strtotime($sps_v['checkout'])); ?></span>
</div>
</div>
</div>
</div>
<?php
}
}
?>
<div class="vbo-param-container"<?php echo ($poverview > 0 ? ' style="display: none;"' : ''); ?> id="vbo-row-bstat">
<div class="vbo-param-label"><?php echo JText::translate('VBCALBOOKINGSTATUS'); ?></div>
<div class="vbo-param-setting">
<select name="newstatus">
<option value="confirmed"><?php echo JText::translate('VBCONFIRMED'); ?></option>
<option value="standby"><?php echo JText::translate('VBSTANDBY'); ?></option>
</select>
</div>
</div>
<div class="vbo-param-container" id="vbo-row-bpay">
<div class="vbo-param-label"><?php echo JText::translate('VBCALBOOKINGPAYMENT'); ?></div>
<div class="vbo-param-setting">
<?php echo $selpayments; ?>
</div>
</div>
<div class="vbo-param-container" id="vbo-row-fillcustfields">
<div class="vbo-param-label"> </div>
<div class="vbo-param-setting">
<span class="vbo-assign-customer" id="vbfillcustfields">
<i class="<?php echo VikBookingIcons::i('user-circle'); ?>"></i>
<span><?php echo JText::translate('VBFILLCUSTFIELDS'); ?></span>
</span>
</div>
</div>
<div class="vbo-param-container" id="vbo-row-cmail">
<div class="vbo-param-label"><?php echo JText::translate('VBCUSTEMAIL'); ?></div>
<div class="vbo-param-setting">
<input type="text" name="custmail" id="custmailfield" value="" size="25"/>
</div>
</div>
<div class="vbo-param-container">
<div class="vbo-param-label" id="vbcustdatalbl"><?php echo JText::translate('VBCUSTINFO'); ?></div>
<div class="vbo-param-setting">
<textarea name="custdata" id="vbcustdatatxtarea" rows="5" cols="70" style="min-width: 300px;"></textarea>
</div>
</div>
<div class="vbo-param-container" id="vbo-website-rates-row" style="display: none;">
<div class="vbo-param-label"><?php echo JText::translate('VBOWEBSITERATES'); ?></div>
<div class="vbo-param-setting" id="vbo-website-rates-cont"></div>
</div>
<div class="vbo-param-container" id="vbo-row-custcost">
<div class="vbo-param-label"><?php echo JText::translate('VBOROOMCUSTRATEPLANADD'); ?></div>
<div class="vbo-param-setting">
<div class="vbo-calendar-costs-wrapper">
<?php echo $currencysymb; ?> <input name="cust_cost" id="cust_cost" value="" onfocus="document.getElementById('taxid').style.display = 'inline-block';" onkeyup="vbCalcDailyCost(this.value);" onchange="vbCalcDailyCost(this.value);" type="number" step="any" min="0">
<select class="vbo-calendar-taxid" name="taxid" id="taxid" style="display: none;">
<option value=""><?php echo JText::translate('VBNEWOPTFOUR'); ?></option>
<?php echo $wiva; ?>
</select>
<div id="avg-daycost" class="vbo-calendar-avg-daycost" style="display: none;">
<select name="totalpnight">
<option value="total"></option>
<option value="pnight"></option>
</select>
</div>
</div>
</div>
</div>
<div id="vbo-force-bookingdates" class="vbo-param-container" style="display: none;">
<div class="vbo-param-label"><?php echo $vbo_app->createPopover(array('title' => JText::translate('VBO_FORCE_BOOKDATES'), 'content' => JText::translate('VBO_FORCE_BOOKDATES_HELP'))); ?> <?php echo JText::translate('VBO_FORCE_BOOKDATES'); ?></div>
<div class="vbo-param-setting">
<?php echo $vbo_app->printYesNoButtons('forcebooking', JText::translate('VBYES'), JText::translate('VBNO'), 0, 1, 0); ?>
<div class="vbo-param-setting-comment"></div>
</div>
</div>
<div class="vbo-param-container">
<div class="vbo-param-label"> </div>
<div class="vbo-param-setting">
<button type="submit" id="quickbsubmit" class="btn btn-success btn-large"><i class="icon-save"></i> <span><?php echo JText::translate('VBMAKERESERV'); ?></span></button>
</div>
</div>
</div>
<?php
if ($poverview > 0) {
?>
<input type="hidden" name="overv" value="<?php echo $poverview; ?>" />
<?php
}
if ($ptmpl == 'component') {
?>
<input type="hidden" name="tmpl" value="component" />
<?php
}
if (!empty($split_stay)) {
// add hidden fields for the split stay booking
foreach ($split_stay as $spsk => $sps_room) {
foreach ($sps_room as $sps_room_k => $sps_room_v) {
?>
<input type="hidden" name="split_stay_data[<?php echo $spsk; ?>][<?php echo $sps_room_k; ?>]" value="<?php echo JHtml::fetch('esc_attr', $sps_room_v); ?>" />
<?php
}
}
}
?>
<input type="hidden" name="customer_id" value="" id="customer_id_inpfield"/>
<input type="hidden" name="countrycode" value="" id="ccode_inpfield"/>
<input type="hidden" name="state" value="" id="state_inpfield"/>
<input type="hidden" name="t_first_name" value="" id="t_first_name_inpfield"/>
<input type="hidden" name="t_last_name" value="" id="t_last_name_inpfield"/>
<input type="hidden" name="phone" value="" id="phonefield"/>
<input type="hidden" name="idprice" value="" id="booking-idprice"/>
<input type="hidden" name="roomcost" value="" id="booking-roomcost"/>
<input type="hidden" name="task" value="calendar"/>
<input type="hidden" name="cid[]" value="<?php echo $room['id']; ?>"/>
<input type="hidden" name="option" value="com_vikbooking" />
</form>
</div>
</fieldset>
</div>
<div class="vbo-config-maintab-right">
<div class="vbo-avcalendars-wrapper">
<div class="vbo-avcalendars-roomphoto">
<?php
if (is_file(VBO_SITE_PATH . DIRECTORY_SEPARATOR . 'resources' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $room['img'])) {
?>
<img alt="Room Image" src="<?php echo VBO_SITE_URI; ?>resources/uploads/<?php echo $room['img']; ?>" />
<?php
} else {
VikBookingIcons::e('image', 'vbo-enormous-icn');
}
?>
</div>
<?php
$check = false;
if (empty($busy)) {
?>
<p class="warn"><?php echo JText::translate('VBNOFUTURERES'); ?></p>
<?php
} else {
$check = true;
// build URL for each number of calendar months
$base_uri_data = [
'option' => 'com_vikbooking',
'task' => 'calendar',
'cid' => [
$room['id']
],
'split_stay' => $split_stay,
];
if (!empty($pcheckin_ymd) && !empty($pcheckout_ymd)) {
$base_uri_data['checkin'] = $pcheckin_ymd;
$base_uri_data['checkout'] = $pcheckout_ymd;
}
if ($padults > 0) {
$base_uri_data['adults'] = $padults;
$base_uri_data['children'] = $pchildren;
}
if (!empty($pidprice)) {
$base_uri_data['idprice'] = $pidprice;
}
if (!empty($pbooknow)) {
$base_uri_data['booknow'] = $pbooknow;
}
if ($ptmpl == 'component') {
$base_uri_data['tmpl'] = 'component';
}
?>
<div>
<a class="vbmodelink<?php echo $vmode == 3 ? ' vbmodelink-active' : ''; ?>" href="index.php?<?php echo http_build_query(array_merge($base_uri_data, ['vmode' => 3])); ?>"><?php VikBookingIcons::e('calendar'); ?> <span><?php echo JText::translate('VBTHREEMONTHS'); ?></span></a>
<a class="vbmodelink<?php echo $vmode == 6 ? ' vbmodelink-active' : ''; ?>" href="index.php?<?php echo http_build_query(array_merge($base_uri_data, ['vmode' => 6])); ?>"><?php VikBookingIcons::e('calendar'); ?> <span><?php echo JText::translate('VBSIXMONTHS'); ?></span></a>
<a class="vbmodelink<?php echo $vmode == 12 ? ' vbmodelink-active' : ''; ?>" href="index.php?<?php echo http_build_query(array_merge($base_uri_data, ['vmode' => 12])); ?>"><?php VikBookingIcons::e('calendar'); ?> <span><?php echo JText::translate('VBTWELVEMONTHS'); ?></span></a>
<a class="vbmodelink<?php echo $vmode == 24 ? ' vbmodelink-active' : ''; ?>" href="index.php?<?php echo http_build_query(array_merge($base_uri_data, ['vmode' => 24])); ?>"><?php VikBookingIcons::e('calendar'); ?> <span><?php echo JText::translate('VBTWOYEARS'); ?></span></a>
</div>
<?php
}
?>
<div class="vbo-calendar-cals-container">
<?php
$arr = getdate();
$mon = $arr['mon'];
$year = $arr['year'];
$dayts = mktime(0, 0, 0, $mon, 1, $year);
$newarr = getdate($dayts);
$firstwday = (int)VikBooking::getFirstWeekDay();
$days_labels = array(
JText::translate('VBSUN'),
JText::translate('VBMON'),
JText::translate('VBTUE'),
JText::translate('VBWED'),
JText::translate('VBTHU'),
JText::translate('VBFRI'),
JText::translate('VBSAT')
);
$days_indexes = array();
for ($i = 0; $i < 7; $i++) {
$days_indexes[$i] = (6-($firstwday-$i)+1)%7;
}
for ($jj = 1; $jj <= $vmode; $jj++) {
$d_count = 0;
echo '<div class="vbo-calendar-cal-container">';
$cal = "";
?>
<table class="vbadmincaltable">
<tr class="vbadmincaltrmon">
<td colspan="7" align="center"><?php echo VikBooking::sayMonth($newarr['mon'])." ".$newarr['year']; ?></td>
</tr>
<tr class="vbadmincaltrmdays">
<?php
for ($i = 0; $i < 7; $i++) {
$d_ind = ($i + $firstwday) < 7 ? ($i + $firstwday) : ($i + $firstwday - 7);
echo '<td>'.$days_labels[$d_ind].'</td>';
}
?>
</tr>
<tr>
<?php
for ($i=0, $n = $days_indexes[$newarr['wday']]; $i < $n; $i++, $d_count++) {
$cal .= "<td align=\"center\"> </td>";
}
while ($newarr['mon'] == $mon) {
if ($d_count > 6) {
$d_count = 0;
$cal .= "</tr>\n<tr>";
}
$dclass = "free";
$dalt = "";
$bid = "";
$totfound = 0;
if ($check) {
foreach ($busy as $b) {
$tmpone = getdate($b['checkin']);
$ritts = mktime(0, 0, 0, $tmpone['mon'], $tmpone['mday'], $tmpone['year']);
$tmptwo = getdate($b['checkout']);
$conts = mktime(0, 0, 0, $tmptwo['mon'], $tmptwo['mday'], $tmptwo['year']);
if ($newarr[0] >= $ritts && $newarr[0] < $conts) {
$dclass = "busy";
$bid = $b['idorder'];
if ((int)$b['closure']) {
$dclass .= " busy-closure";
$dalt = JText::translate('VBDBTEXTROOMCLOSED');
} elseif ($newarr[0] == $ritts) {
$dalt = JText::translate('VBPICKUPAT')." ".date('H:i', $b['checkin']);
} elseif ($newarr[0] == $conts) {
$dalt = JText::translate('VBRELEASEAT')." ".date('H:i', $b['checkout']);
}
$totfound++;
}
}
}
$useday = ($newarr['mday'] < 10 ? "0".$newarr['mday'] : $newarr['mday']);
if ($totfound > 0 && $totfound < $room['units']) {
$dclass .= " vbo-partially";
}
if ($totfound == 1) {
$dlnk = "<a href=\"index.php?option=com_vikbooking&task=editbusy&cid[]=".$bid."\"".($ptmpl == 'component' ? ' target="_blank"' : '').">".$useday."</a>";
$cal .= "<td align=\"center\" data-daydate=\"".date($df, $newarr[0])."\" class=\"".$dclass."\"".(!empty($dalt) ? " title=\"".$dalt."\"" : "").">".$dlnk."</td>\n";
} elseif ($totfound > 1) {
$dlnk = "<a href=\"index.php?option=com_vikbooking&task=choosebusy&idroom=".$room['id']."&ts=".$newarr[0]."\"".($ptmpl == 'component' ? ' target="_blank"' : '').">".$useday."</a>";
$cal .= "<td align=\"center\" data-daydate=\"".date($df, $newarr[0])."\" class=\"".$dclass."\">".$dlnk."</td>\n";
} else {
$dlnk = $useday;
$cal .= "<td align=\"center\" data-daydate=\"".date($df, $newarr[0])."\" class=\"".$dclass."\">".$dlnk."</td>\n";
}
$next = $newarr['mday'] + 1;
$dayts = mktime(0, 0, 0, $newarr['mon'], $next, $newarr['year']);
$newarr = getdate($dayts);
$d_count++;
}
for ($i = $d_count; $i <= 6; $i++) {
$cal .= "<td align=\"center\"> </td>";
}
echo $cal;
?>
</tr>
</table>
<?php
echo "</div>";
if ($mon == 12) {
$mon = 1;
$year += 1;
$dayts = mktime(0, 0, 0, $mon, 01, $year);
} else {
$mon += 1;
$dayts = mktime(0, 0, 0, $mon, 01, $year);
}
$newarr = getdate($dayts);
}
?>
</div>
</div>
</div>
</div>
<div class="vbo-calendar-modal-helper" style="display: none;">
<div class="vbo-calendar-cfields-filler">
<div class="vbo-calendar-cfields-topcont">
<div class="vbo-calendar-cfields-search">
<div class="vbo-singleselect-inline-elems-wrap vbo-search-elems-wrap">
<?php
/**
* Display a search elements dropdown for searching customers.
*
* @since 1.18.0 (J) - 1.8.0 (WP)
*/
echo $vbo_app->renderSearchElementsDropDown([
'id' => 'vbo-calendar-view-search-customer',
'elements' => 'customers',
'placeholder' => JText::translate('VBOSEARCHEXISTCUST'),
'allow_clear' => true,
'attributes' => [
'name' => 'calendar[id_customer]',
],
'style_selection' => true,
'selection_class' => 'vbo-sel2-selected-search-elem-full',
'selection_event' => 'vbo-calendar-view-choose-customer',
'load_assets' => false,
'width' => '300px',
]);
?>
</div>
</div>
</div>
<div class="vbo-calendar-cfields-inner">
<?php
foreach ($all_cfields as $cfield) {
if ($cfield['type'] == 'text' && $cfield['isphone'] == 1) {
?>
<div class="vbo-calendar-cfield-entry">
<label for="cfield<?php echo $cfield['id']; ?>" data-fieldid="<?php echo $cfield['id']; ?>"><?php echo JText::translate($cfield['name']); ?></label>
<span>
<?php
echo $vbo_app->printPhoneInputField([
'id' => 'cfield' . $cfield['id'],
'class' => 'vbo-calendar-cfield-phone',
'data-isemail' => '0',
'data-isnominative' => '0',
'data-isphone' => '1'
], [
'fullNumberOnBlur' => true
]);
?>
</span>
</div>
<?php
} elseif ($cfield['type'] == 'text') {
?>
<div class="vbo-calendar-cfield-entry">
<label for="cfield<?php echo $cfield['id']; ?>" data-fieldid="<?php echo $cfield['id']; ?>"><?php echo JText::translate($cfield['name']); ?></label>
<span>
<input type="text" id="cfield<?php echo $cfield['id']; ?>" data-isemail="<?php echo ($cfield['isemail'] == 1 ? '1' : '0'); ?>" data-isnominative="<?php echo ($cfield['isnominative'] == 1 ? '1' : '0'); ?>" data-isphone="0" value="" size="35"/>
</span>
</div>
<?php
} elseif ($cfield['type'] == 'textarea') {
?>
<div class="vbo-calendar-cfield-entry">
<label for="cfield<?php echo $cfield['id']; ?>" data-fieldid="<?php echo $cfield['id']; ?>"><?php echo JText::translate($cfield['name']); ?></label>
<span>
<textarea id="cfield<?php echo $cfield['id']; ?>" rows="4" cols="35"></textarea>
</span>
</div>
<?php
} elseif ($cfield['type'] == 'country') {
?>
<div class="vbo-calendar-cfield-entry">
<label for="cfield<?php echo $cfield['id']; ?>" data-fieldid="<?php echo $cfield['id']; ?>"><?php echo JText::translate($cfield['name']); ?></label>
<span>
<select id="cfield<?php echo $cfield['id']; ?>" class="vbo-calendar-cfield-country">
<option value=""> </option>
<?php
foreach ($all_countries as $country) {
?>
<option value="<?php echo $country['country_name']; ?>" data-ccode="<?php echo $country['country_3_code']; ?>" data-c2code="<?php echo $country['country_2_code']; ?>"><?php echo $country['country_name']; ?></option>
<?php
}
?>
</select>
</span>
</div>
<?php
} elseif ($cfield['type'] == 'state') {
?>
<div class="vbo-calendar-cfield-entry">
<label for="cfield<?php echo $cfield['id']; ?>" data-fieldid="<?php echo $cfield['id']; ?>"><?php echo JText::translate($cfield['name']); ?></label>
<span>
<select id="cfield<?php echo $cfield['id']; ?>" class="vbo-calendar-cfield-state">
<option value="">-----</option>
</select>
</span>
</div>
<?php
}
}
?>
</div>
</div>
</div>
<form action="index.php?option=com_vikbooking" method="post" name="adminForm" id="adminForm">
<input type="hidden" name="task" value="" />
<input type="hidden" name="option" value="com_vikbooking" />
</form>
<script type="text/javascript">
<?php echo ($poverview_change > 0 ? 'window.parent.hasNewBooking = true;' . "\n" : ''); ?>
var vbo_glob_sel_nights = 0;
var prev_tareat = null;
var booknowmade = false;
var vbo_quickres_has_custdetails = false;
var vboListingsMiniThumbnails = <?php echo json_encode(VBORoomHelper::getInstance()->loadMiniThumbnails($allc)); ?>;
function vbCloseRoom() {
var ckbox = jQuery('input[name="setclosed"]');
if (ckbox.length && ckbox.prop('checked')) {
jQuery('#vbo-close-all-rooms-sel').show();
jQuery('#vbo-row-people').hide();
if (jQuery('#vbo-row-numrooms').length) {
jQuery('#vbo-row-numrooms').hide();
}
jQuery('#vbo-row-bstat').hide();
jQuery('#vbo-row-custcost').hide();
jQuery('#vbo-row-cmail').hide();
jQuery('#vbo-row-fillcustfields').hide();
jQuery('#vbo-row-bpay').hide();
jQuery("#vbo-website-rates-row").hide();
if (prev_tareat === null) {
// save the previous customer information
prev_tareat = jQuery('#vbcustdatatxtarea').val();
}
jQuery('#vbcustdatatxtarea').val(Joomla.JText._('VBDBTEXTROOMCLOSED'));
jQuery('#vbcustdatalbl').text(Joomla.JText._('ORDER_NOTES'));
jQuery("#quickbsubmit").removeClass("btn-success").addClass("btn-danger").find("span").text(Joomla.JText._('VBSUBMCLOSEROOM'));
// hide force booking and untick checkbox
jQuery('#vbo-force-bookingdates').hide();
jQuery('input[name="forcebooking"]').prop('checked', false);
} else {
jQuery('#vbo-close-all-rooms-sel').hide();
jQuery('#vbo-row-people').show();
if (jQuery('#vbo-row-numrooms').length) {
jQuery('#vbo-row-numrooms').show();
}
jQuery('#vbo-row-bstat').show();
jQuery('#vbo-row-custcost').show();
jQuery('#vbo-row-cmail').show();
jQuery('#vbo-row-fillcustfields').show();
jQuery('#vbo-row-bpay').show();
jQuery('#vbcustdatatxtarea').val(prev_tareat + "");
jQuery('#vbcustdatalbl').text(Joomla.JText._('VBCUSTINFO'));
jQuery("#quickbsubmit").removeClass("btn-danger").addClass("btn-success").find("span").text(Joomla.JText._('VBMAKERESERV'));
}
}
function showCustomFields() {
let modal_body = VBOCore.displayModal({
suffix: 'calendar-cfields',
extra_class: 'vbo-modal-tall',
title: Joomla.JText._('VBFILLCUSTFIELDS'),
body_prepend: true,
footer_left: '<button type="button" class="btn" onclick="hideCustomFields();">' + Joomla.JText._('VBANNULLA') + '</button>',
footer_right: '<button type="button" class="btn btn-success" onclick="applyCustomFieldsContent();"><i class="icon-edit"></i> ' + Joomla.JText._('VBAPPLY') + '</button>',
dismiss_event: 'vbo-calendar-cfields-dismiss',
onDismiss: () => {
jQuery('.vbo-calendar-cfields-filler').appendTo('.vbo-calendar-modal-helper');
},
});
jQuery('.vbo-calendar-cfields-filler').appendTo(modal_body);
setTimeout(function() {
jQuery('#vbo-calendar-view-search-customer').select2('open');
}, 500);
}
function hideCustomFields() {
// dismiss modal
VBOCore.emitEvent('vbo-calendar-cfields-dismiss');
// trigger event to unregister the keydown event for choosing the customer
VBOCore.emitEvent('vbo-search-customers-navigation-dismissed');
}
function applyCustomFieldsContent() {
var cfields_cont = "";
var cfields_labels = new Array;
var nominatives = new Array;
var tot_rows = 1;
jQuery(".vbo-calendar-cfields-inner .vbo-calendar-cfield-entry").each(function() {
var cfield_name = jQuery(this).find("label").text();
var cfield_input = jQuery(this).find("span").find("input");
var cfield_textarea = jQuery(this).find("span").find("textarea");
var cfield_select = jQuery(this).find("span").find("select.vbo-calendar-cfield-country");
var cfield_state = jQuery(this).find("span").find("select.vbo-calendar-cfield-state");
var cfield_cont = "";
if (cfield_input.length) {
cfield_cont = cfield_input.val();
if (cfield_input.attr("data-isemail") == "1" && cfield_cont && cfield_cont.length) {
jQuery("#custmailfield").val(cfield_cont);
}
if (cfield_input.attr("data-isphone") == "1") {
jQuery("#phonefield").val(cfield_cont);
}
if (cfield_input.attr("data-isnominative") == "1") {
nominatives.push(cfield_cont);
}
} else if (cfield_textarea.length) {
cfield_cont = cfield_textarea.val();
} else if (cfield_select.length) {
cfield_cont = cfield_select.val();
if (cfield_cont && cfield_cont.length) {
var country_code = jQuery("option:selected", cfield_select).attr("data-ccode");
if (country_code.length) {
jQuery("#ccode_inpfield").val(country_code);
}
}
} else if (cfield_state.length) {
cfield_cont = cfield_state.val();
jQuery("#state_inpfield").val(cfield_cont);
}
if (cfield_cont && cfield_cont.length) {
cfields_cont += cfield_name + ": " + cfield_cont + "\r\n";
tot_rows++;
cfields_labels.push(cfield_name + ":");
}
});
if (cfields_cont.length) {
cfields_cont = cfields_cont.replace(/\r\n+$/, "");
}
if (nominatives.length > 1) {
jQuery("#t_first_name_inpfield").val(nominatives[0]);
jQuery("#t_last_name_inpfield").val(nominatives[1]);
}
jQuery("#vbcustdatatxtarea").val(cfields_cont);
jQuery("#vbcustdatatxtarea").attr("rows", tot_rows);
// highlight custom fields labels
if (jQuery('#vbo-highlight-cfields').length) {
jQuery("#vbcustdatatxtarea").highlightTextarea('destroy');
}
jQuery("#vbcustdatatxtarea").highlightTextarea({
words: cfields_labels,
color: "#ddd",
id: "vbo-highlight-cfields"
});
// end highlight
hideCustomFields();
// toggle var to detect some values were entered
vbo_quickres_has_custdetails = true;
}
function vbCalcNights() {
vbo_glob_sel_nights = 0;
var vbcheckin = document.getElementById("checkindate").value;
var vbcheckout = document.getElementById("checkoutdate").value;
if (vbcheckin.length > 0 && vbcheckout.length > 0) {
var vbcheckinp = vbcheckin.split("/");
var vbcheckoutp = vbcheckout.split("/");
var vbo_df = "<?php echo $vbo_df; ?>";
if (vbo_df == "%d/%m/%Y") {
var vbinmonth = parseInt(vbcheckinp[1]);
vbinmonth = vbinmonth - 1;
var vbinday = parseInt(vbcheckinp[0], 10);
var vbcheckind = new Date(vbcheckinp[2], vbinmonth, vbinday);
var vboutmonth = parseInt(vbcheckoutp[1]);
vboutmonth = vboutmonth - 1;
var vboutday = parseInt(vbcheckoutp[0], 10);
var vbcheckoutd = new Date(vbcheckoutp[2], vboutmonth, vboutday);
}else if (vbo_df == "%m/%d/%Y") {
var vbinmonth = parseInt(vbcheckinp[0]);
vbinmonth = vbinmonth - 1;
var vbinday = parseInt(vbcheckinp[1], 10);
var vbcheckind = new Date(vbcheckinp[2], vbinmonth, vbinday);
var vboutmonth = parseInt(vbcheckoutp[0]);
vboutmonth = vboutmonth - 1;
var vboutday = parseInt(vbcheckoutp[1], 10);
var vbcheckoutd = new Date(vbcheckoutp[2], vboutmonth, vboutday);
} else {
var vbinmonth = parseInt(vbcheckinp[1]);
vbinmonth = vbinmonth - 1;
var vbinday = parseInt(vbcheckinp[2], 10);
var vbcheckind = new Date(vbcheckinp[0], vbinmonth, vbinday);
var vboutmonth = parseInt(vbcheckoutp[1]);
vboutmonth = vboutmonth - 1;
var vboutday = parseInt(vbcheckoutp[2], 10);
var vbcheckoutd = new Date(vbcheckoutp[0], vboutmonth, vboutday);
}
var vbdivider = 1000 * 60 * 60 * 24;
var vbints = vbcheckind.getTime();
var vboutts = vbcheckoutd.getTime();
if (vboutts > vbints) {
//var vbnights = Math.ceil((vboutts - vbints) / (vbdivider));
var utc1 = Date.UTC(vbcheckind.getFullYear(), vbcheckind.getMonth(), vbcheckind.getDate());
var utc2 = Date.UTC(vbcheckoutd.getFullYear(), vbcheckoutd.getMonth(), vbcheckoutd.getDate());
var vbnights = Math.ceil((utc2 - utc1) / vbdivider);
if (vbnights > 0) {
vbo_glob_sel_nights = vbnights;
jQuery('#vbjstotnights').show();
jQuery("#vbo-numnights").val(vbnights);
// update average cost per night
vbCalcDailyCost(document.getElementById("cust_cost").value);
} else {
jQuery('#vbjstotnights').hide();
}
} else {
jQuery('#vbjstotnights').hide();
}
} else {
jQuery('#vbjstotnights').hide();
}
}
function vbCalcDailyCost(cur_val) {
// trigger calculation of website rates
vboCalcWebsiteRates();
//
if (cur_val.length && !isNaN(cur_val) && vbo_glob_sel_nights > 0) {
var cur_float = parseFloat(cur_val);
var selopts = jQuery("#avg-daycost").find("select").find("option");
// total cost with average cost per night
var avg_cost = (cur_float / vbo_glob_sel_nights).toFixed(<?php echo (int)$formatparts[0]; ?>);
var avg_cost_str = "<?php echo $currencysymb; ?> " + avg_cost + "/" + Joomla.JText._('VBDAY') + " = <?php echo $currencysymb; ?> " + cur_float.toFixed(<?php echo (int)$formatparts[0]; ?>);
selopts.first().text(avg_cost_str);
// cost multiplied by number of nights
var final_cost = (cur_float * vbo_glob_sel_nights).toFixed(<?php echo (int)$formatparts[0]; ?>);
var final_cost_str = "<?php echo $currencysymb; ?> " + cur_float.toFixed(<?php echo (int)$formatparts[0]; ?>) + "/" + Joomla.JText._('VBDAY') + " = <?php echo $currencysymb; ?> " + final_cost;
selopts.last().text(final_cost_str);
// show drop down
jQuery("#avg-daycost").show();
} else {
jQuery("#avg-daycost").hide();
}
}
function vboCalcWebsiteRates() {
// unset previously selected rates, if any
vboUnsetWebsiteRate();
// hide force booking and untick checkbox
jQuery('#vbo-force-bookingdates').hide();
jQuery('input[name="forcebooking"]').prop('checked', false);
//
var checkinfdate = jQuery("#checkindate").val();
var adults = jQuery("#vbo-sel-adults").val();
var children = jQuery("#vbo-sel-children").val();
var units = jQuery("#vbo-sel-numrooms").val();
if (!checkinfdate.length || vbo_glob_sel_nights < 1 || jQuery("input[name=\"setclosed\"]").is(":checked") || <?php echo !empty($split_stay) ? 'true' : 'false'; ?>) {
jQuery("#vbo-website-rates-row").hide();
return false;
}
var jqxhr = jQuery.ajax({
type: "POST",
url: "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=calc_rates'); ?>",
data: {
id_room: <?php echo $room['id']; ?>,
checkinfdate: checkinfdate,
num_nights: vbo_glob_sel_nights,
num_adults: adults,
num_children: children,
units: units,
only_rates: 1,
tmpl: "component"
}
}).done(function(resp) {
var obj_res = null;
try {
obj_res = typeof resp === 'string' ? JSON.parse(resp) : resp;
} catch(err) {
console.error("could not parse JSON response", resp);
}
if (obj_res === null || !Array.isArray(obj_res)) {
jQuery("#vbo-website-rates-row").hide();
console.info("invalid JSON response", resp);
return false;
}
if (jQuery("input[name=\"setclosed\"]").is(":checked")) {
jQuery("#vbo-website-rates-row").hide();
return false;
}
if (obj_res.hasOwnProperty(1) && obj_res[1] == -1 && !jQuery('input[name="setclosed"]').prop('checked')) {
// the room is not available or has no rates, display force booking toggle
jQuery('#vbo-force-bookingdates').show();
if (typeof obj_res[0] == 'string' && obj_res[0].indexOf('e4j.error') >= 0) {
jQuery('#vbo-force-bookingdates').find('.vbo-param-setting-comment').text(obj_res[0].replace('e4j.error.', ''));
} else {
jQuery('#vbo-force-bookingdates').find('.vbo-param-setting-comment').text('');
}
}
if (!obj_res[0].hasOwnProperty("idprice")) {
jQuery("#vbo-website-rates-row").hide();
console.log("error in response", resp);
return false;
}
// check whether rates are inclusive of taxes
var vbo_tax_included = <?php echo $prices_vat_included; ?>;
// display the rates obtained
var wrhtml = "";
for (var i in obj_res) {
if (!obj_res.hasOwnProperty(i)) {
continue;
}
if (!vbo_tax_included && obj_res[i].hasOwnProperty('net') && obj_res[i].hasOwnProperty('fnet')) {
obj_res[i]['tot'] = obj_res[i]['net'];
obj_res[i]['ftot'] = obj_res[i]['fnet'];
}
wrhtml += "<div class=\"vbo-cal-wbrate-wrap\" onclick=\"vboSelWebsiteRate(this);\">";
wrhtml += "<div class=\"vbo-cal-wbrate-inner\">";
wrhtml += "<span class=\"vbo-cal-wbrate-name\" data-idprice=\"" + obj_res[i]['idprice'] + "\">" + obj_res[i]['name'] + "</span>";
wrhtml += "<span class=\"vbo-cal-wbrate-cost\" data-cost=\"" + obj_res[i]['tot'] + "\">" + obj_res[i]['ftot'] + "</span>";
wrhtml += "</div>";
wrhtml += "</div>";
}
jQuery("#vbo-website-rates-cont").html(wrhtml);
jQuery("#vbo-website-rates-row").fadeIn();
if (<?php echo $pidprice > 0 && $pbooknow > 0 ? 'true' : 'false'; ?> && !booknowmade) {
// we get here by clicking the book-now button from the rates calculator only once
booknowmade = true;
// trigger the click for the requested rate plan ID
jQuery('.vbo-cal-wbrate-name[data-idprice="<?php echo $pidprice; ?>"]').closest('.vbo-cal-wbrate-wrap').trigger('click');
}
}).fail(function() {
jQuery("#vbo-website-rates-row").hide();
console.error("Error calculating the rates");
});
}
function vboSelWebsiteRate(elem) {
var rate = jQuery(elem);
var idprice = rate.find('.vbo-cal-wbrate-name').attr('data-idprice');
var cost = rate.find('.vbo-cal-wbrate-cost').attr('data-cost');
var prev_idprice = jQuery('#booking-idprice').val();
// reset all selected classes
jQuery('.vbo-cal-wbrate-wrap').removeClass('vbo-cal-wbrate-wrap-selected');
if (prev_idprice.length && prev_idprice == idprice) {
// rate plan has been de-selected
jQuery('#booking-idprice').val("");
jQuery('#booking-roomcost').val("");
jQuery('#cust_cost').attr('readonly', false);
} else {
// rate plan has been selected
rate.addClass('vbo-cal-wbrate-wrap-selected');
jQuery('#booking-idprice').val(idprice);
jQuery('#booking-roomcost').val(cost);
jQuery('#cust_cost').attr('readonly', true);
}
}
function vboUnsetWebsiteRate() {
jQuery('#booking-idprice').val("");
jQuery('#booking-roomcost').val("");
jQuery('.vbo-cal-wbrate-wrap').removeClass('vbo-cal-wbrate-wrap-selected');
jQuery('#cust_cost').attr('readonly', false);
}
function vboReloadStates(country_3_code) {
var states_elem = jQuery('select.vbo-calendar-cfield-state');
// unset the current states/provinces
states_elem.html('');
if (!country_3_code || !country_3_code.length) {
return;
}
// make a request to load the states/provinces of the selected country
VBOCore.doAjax(
"<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=states.load_from_country'); ?>",
{
country_3_code: country_3_code,
tmpl: "component"
},
(response) => {
try {
var obj_res = typeof response === 'string' ? JSON.parse(response) : response;
if (!obj_res) {
console.error('Unexpected JSON response', obj_res);
return false;
}
// append empty value
states_elem.append('<option value="">-----</option>');
for (var i = 0; i < obj_res.length; i++) {
// append state
states_elem.append('<option value="' + obj_res[i]['state_2_code'] + '">' + obj_res[i]['state_name'] + '</option>');
}
} catch(err) {
console.error('could not parse JSON response', err, response);
}
},
(error) => {
console.error(error);
}
);
}
jQuery(function() {
jQuery('.vbo-calendar-cfield-country').on('change', function() {
// trigger event for phone number
jQuery('.vbo-calendar-cfield-phone').trigger('vboupdatephonenumber', jQuery(this).find('option:selected').attr('data-c2code'));
// reload state/province
vboReloadStates(jQuery(this).find('option:selected').attr('data-ccode'));
});
jQuery('td.free').click(function() {
var indate = jQuery('#checkindate').val();
var outdate = jQuery('#checkoutdate').val();
var clickdate = jQuery(this).attr('data-daydate');
if (!(indate.length > 0)) {
jQuery('#checkindate').vboDatesRangePicker("setCheckinDate", clickdate);
} else if (!(outdate.length > 0) && clickdate != indate) {
jQuery('#checkindate').vboDatesRangePicker("setDates", [indate, clickdate]);
} else {
jQuery('#checkindate').vboDatesRangePicker("setDates", [clickdate, '']);
}
jQuery(".ui-datepicker-current-day").click();
});
jQuery("#quickbsubmit").click(function() {
setTimeout(function() {
jQuery(this).prop('disabled', true);
}, 200);
});
jQuery('#vbo-calendar-newb-form').on('submit', function() {
if (!document.newb.checkindate.value.match(/\S/)) {
alert(Joomla.JText._('VBMSGTHREE'));
jQuery('#quickbsubmit').prop('disabled', false);
return false;
}
if (!document.newb.checkoutdate.value.match(/\S/)) {
alert(Joomla.JText._('VBMSGFOUR'));
jQuery('#quickbsubmit').prop('disabled', false);
return false;
}
jQuery('#quickbsubmit').prop('disabled', true);
if (!jQuery(this).find('[name="setclosed"]').prop('checked') && !jQuery(this).find('[name="custmail"]').val() && !vbo_quickres_has_custdetails && <?php echo $room['units'] > 1 ? 'true' : 'false'; ?>) {
// no closure, no customer email, multiple units, ask if the units should be marked as closed
if (confirm(Joomla.JText._('VBO_MARK_UNITS_CLOSED'))) {
// append hidden field to form
jQuery(this).append('<input type="hidden" name="setunitsclosed" value="1" />');
// check if "room closed" should be added
if (!jQuery('#vbcustdatatxtarea').val()) {
jQuery('#vbcustdatatxtarea').val(Joomla.JText._('VBDBTEXTROOMCLOSED'));
}
}
}
return true;
});
jQuery("#vbo-calendar-changeroom").select2({
templateResult: (element) => {
if (typeof vboListingsMiniThumbnails !== 'undefined' && vboListingsMiniThumbnails.hasOwnProperty((element.id || 0))) {
return jQuery('<span class="vbo-sel2-element-img"><img src="' + vboListingsMiniThumbnails[element.id] + '" /> <span>' + element.text + '</span></span>');
} else {
return element.text;
}
},
});
if (jQuery("#vbo-calendar-closeall").length) {
jQuery("#vbo-calendar-closeall").select2({
placeholder: "- " + Joomla.JText._('VBOCALCLOSEOTHERROOMS') + " -",
width: "300px",
templateResult: (element) => {
if (typeof vboListingsMiniThumbnails !== 'undefined' && vboListingsMiniThumbnails.hasOwnProperty((element.id || 0))) {
return jQuery('<span class="vbo-sel2-element-img"><img src="' + vboListingsMiniThumbnails[element.id] + '" /> <span>' + element.text + '</span></span>');
} else {
return element.text;
}
},
});
}
jQuery("#vbo-sel-numrooms, #vbo-sel-adults").change(function() {
vboCalcWebsiteRates();
});
jQuery('.vbo-calendar-cfield-entry input[data-isemail="1"]').first().blur(function() {
var curemail = jQuery(this).val();
if (curemail.length) {
var jqxhr = jQuery.ajax({
type: "POST",
url: "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=searchcustomer'); ?>",
data: {
kw: curemail,
email: 1,
tmpl: "component"
}
}).done(function(cont) {
try {
var obj_res = typeof cont === 'string' ? JSON.parse(cont) : cont;
alert(Joomla.JText._('VBERRCUSTOMEREMAILEXISTS') + " (" + obj_res['first_name'] + " " + obj_res['last_name'] + ")");
} catch(e) {
console.error(e);
}
}).fail(function() {
console.log("Error searching for existing email");
});
}
});
jQuery("#vbfillcustfields").click(function() {
showCustomFields();
});
// DRP - start
jQuery("#checkindate").vboDatesRangePicker({
checkout: '#checkoutdate',
showOn: "focus",
minDate: '-3y',
dateFormat: "<?php echo $juidf; ?>",
numberOfMonths: 2,
responsiveNumMonths: {
threshold: 860,
},
onSelect: {
checkin: (selectedDate) => {
var nownights = parseInt(jQuery('#vbo-numnights').val());
var nowcheckin = jQuery('#checkindate').vboDatesRangePicker('getCheckinDate');
var nowcheckindate = new Date(nowcheckin.getTime());
nowcheckindate.setDate(nowcheckindate.getDate() + nownights);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'minDate', nowcheckindate);
vbCalcNights();
},
checkout: (selectedDate) => {
if (!jQuery('#checkindate').vboDatesRangePicker('getCheckoutDate')) {
return;
}
vbCalcNights();
},
},
labels: {
checkin: Joomla.JText._('VBPICKUPROOM'),
checkout: Joomla.JText._('VBRETURNROOM'),
},
bottomCommands: {
clear: Joomla.JText._('VBO_CLEAR_DATES'),
close: Joomla.JText._('VBO_CLOSE'),
onClear: () => {
vbCalcNights();
},
},
environment: {
section: 'admin',
autoHide: true,
},
});
jQuery('#checkindate-trig, #checkoutdate-trig').click(function() {
let dp = jQuery(this).prev('input');
if (!dp.length) {
return;
}
if (dp.hasClass('hasDatepicker')) {
dp.focus();
} else if (dp.attr('id') == 'checkoutdate') {
jQuery('#checkindate').focus();
}
});
jQuery("#vbo-numnights").on("change keyup", function() {
if (!jQuery('#checkindate').vboDatesRangePicker('getCheckinDate')) {
return;
}
var nownights = parseInt(jQuery(this).val());
var nowcheckin = jQuery('#checkindate').vboDatesRangePicker('getCheckinDate');
var nowcheckindate = new Date(nowcheckin.getTime());
nowcheckindate.setDate(nowcheckindate.getDate() + nownights);
// update checkout date
jQuery('#checkindate').vboDatesRangePicker('setCheckoutDate', nowcheckindate);
// update global nights of stay
vbo_glob_sel_nights = nownights;
// update average cost per night
vbCalcDailyCost(document.getElementById("cust_cost").value);
});
// datepickers - end
<?php echo (!empty($pcheckin) || !empty($pcheckout) ? 'jQuery("#checkindate").vboDatesRangePicker("setDates", ["'.$pcheckin.'", "'.$pcheckout.'"]);'."\n" : ''); ?>
});
// subscribe to the event for choosing a customer to assign to a new booking
document.addEventListener('vbo-calendar-view-choose-customer', vboCalendarHandleCustomerSelection);
/**
* Handles the selection of a customer to assign to a new booking.
*/
function vboCalendarHandleCustomerSelection(e) {
if (!e?.detail?.element?.id) {
return;
}
let custid = e.detail.element.id;
let custemail = e.detail.element?.email;
let custphone = e.detail.element?.phone;
let custcountry = e.detail.element?.country;
let custfirstname = e.detail.element?.first_name;
let custlastname = e.detail.element?.last_name;
// set customer ID
jQuery("#customer_id_inpfield").val(custid);
// check previous custom fields
if (e.detail.element?.cfields && typeof e.detail.element.cfields === 'object') {
for (const [cfid, cfval] of Object.entries(e.detail.element.cfields)) {
let fill_field = document.querySelector('#cfield' + cfid);
if (fill_field && cfval) {
// set previous value
fill_field.value = cfval;
}
}
} else {
jQuery("input[data-isnominative=\"1\"]").each(function(k, v) {
if (k == 0) {
jQuery(this).val(custfirstname);
return true;
}
if (k == 1) {
jQuery(this).val(custlastname);
return true;
}
return false;
});
jQuery("input[data-isemail=\"1\"]").val(custemail);
jQuery("input[data-isphone=\"1\"]").val(custphone).trigger('vboupdatephonenumber');
// populate main calendar form
jQuery("#custmailfield").val(custemail);
jQuery("#t_first_name_inpfield").val(custfirstname);
jQuery("#t_last_name_inpfield").val(custlastname);
}
applyCustomFieldsContent();
if (custcountry.length) {
jQuery("#ccode_inpfield").val(custcountry);
}
if (custphone.length) {
jQuery("#phonefield").val(custphone);
}
};
var vborefreshingsel = false;
function vboCheckCloseOthers() {
if (!jQuery("#vbo-calendar-closeall").length || vborefreshingsel) {
// avoid recursion loop by triggering the change event for select2
return;
}
var selall = jQuery('#vbo-calendar-closeall option[value="-1"]').is(':selected');
// always select the current room unless all get de-selected
var optselected = jQuery('#vbo-calendar-closeall option:selected');
var none_sel = !optselected.length ? true : false;
if (optselected.length === 1 && optselected.first().attr('data-currentr')) {
none_sel = true;
}
var curropt = jQuery('#vbo-calendar-closeall option[data-currentr="true"]');
if (!none_sel) {
curropt.prop('selected', true);
curropt.prop('disabled', true);
} else {
curropt.prop('selected', false);
curropt.prop('disabled', true);
}
//
jQuery('#vbo-calendar-closeall').find('option').each(function() {
var curval = jQuery(this).val();
var curroom = jQuery(this).attr('data-currentr');
if (!curval.length || curval == '-1' || curroom) {
return true;
}
if (selall) {
jQuery(this).prop('disabled', true);
jQuery(this).prop('selected', false);
} else {
jQuery(this).prop('disabled', false);
}
});
vboRefreshCloseOthers();
}
function vboRefreshCloseOthers() {
// prevent recursion loop
vborefreshingsel = true;
jQuery("#vbo-calendar-closeall").trigger('change');
setTimeout(function() {
vborefreshingsel = false;
}, 200);
}
</script>