File "error_form.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/site/helpers/error_form.php
File size: 36.64 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('_JEXEC') or defined('ABSPATH') or die('No script kiddies please!');
//This is a template file loaded (included) by the main lib in case of errors during the booking process to keep the current query string, without performing any redirect.
//The output of this template file is similar to the default view 'vikbooking' but it takes an error-message variable and an array parameter declared in the main library file.
//This is not a core-file and, even though it does not support overrides, it can be customized as it is never replaced by any update.
$dbo = JFactory::getDbo();
$session = JFactory::getSession();
$vbo_tn = VikBooking::getTranslator();
$vbo_app = VikBooking::getVboApplication();
$vbo_app->loadDatePicker(['type' => 'dates_range']);
if (VikBooking::allowBooking()) {
$is_mobile = VikBooking::detectUserAgent(false, false);
$calendartype = VikBooking::calendarType();
$document = JFactory::getDocument();
// load modalframe lib for search suggestions
$document->addStyleSheet(VBO_SITE_URI.'resources/jquery.fancybox.css');
JHtml::fetch('script', VBO_SITE_URI.'resources/jquery.fancybox.js');
// restrictions and values
$restrictions = VikBooking::loadRestrictions();
$oldroomsnum = $session->get('vbroomsnum', '');
$oldarrpeople = $session->get('vbarrpeople', '');
$pcheckin = VikRequest::getInt('checkin', '', 'request');
$pcheckout = VikRequest::getInt('checkout', '', 'request');
$sesscheckin = $session->get('vbcheckin', '');
$sesscheckout = $session->get('vbcheckout', '');
$pcategories = VikRequest::getString('categories', '', 'request');
$pitemid = VikRequest::getInt('Itemid', '', 'request');
$pval = "";
$rval = "";
$vbdateformat = VikBooking::getDateFormat();
if ($vbdateformat == "%d/%m/%Y") {
$df = 'd/m/Y';
} elseif ($vbdateformat == "%m/%d/%Y") {
$df = 'm/d/Y';
} else {
$df = 'Y/m/d';
}
if (!empty($pcheckin) || !empty($sesscheckin)) {
$pcheckin = !empty($pcheckin) ? $pcheckin : $sesscheckin;
$dp = date($df, $pcheckin);
if (VikBooking::dateIsValid($dp)) {
$pval = $dp;
}
}
if (!empty($pcheckout) || !empty($sesscheckout)) {
$pcheckout = !empty($pcheckout) ? $pcheckout : $sesscheckout;
$dr = date($df, $pcheckout);
if (VikBooking::dateIsValid($dr)) {
$rval = $dr;
}
}
// form method is dependant to the platform
$form_method = VBOPlatformDetection::isWordPress() ? 'post' : 'get';
$selform = "<div class=\"vbdivsearch vbo-search-mainview vbo-search-noresults-cont\"><form action=\"".JRoute::rewrite('index.php?option=com_vikbooking&Itemid='.VikRequest::getString('Itemid', '', 'request'))."\" method=\"{$form_method}\"><div class=\"vb-search-inner\">\n";
$selform .= "<input type=\"hidden\" name=\"option\" value=\"com_vikbooking\"/>\n";
$selform .= "<input type=\"hidden\" name=\"task\" value=\"search\"/>\n";
$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;
}
// datepicker calendar setup
if ($calendartype == "jqueryui") {
if ($vbdateformat == "%d/%m/%Y") {
$juidf = 'dd/mm/yy';
} elseif ($vbdateformat == "%m/%d/%Y") {
$juidf = 'mm/dd/yy';
} else {
$juidf = 'yy/mm/dd';
}
// lang for jQuery UI Calendar is loaded through the application class
$ldecl = '
jQuery.noConflict();
function vbGetDateObject(dstring) {
var dparts = dstring.split("-");
return new Date(dparts[0], (parseInt(dparts[1]) - 1), parseInt(dparts[2]), 0, 0, 0, 0);
}
function vbFullObject(obj) {
var jk;
for(jk in obj) {
return obj.hasOwnProperty(jk);
}
}
var vbrestrctarange, vbrestrctdrange, vbrestrcta, vbrestrctd;';
$document->addScriptDeclaration($ldecl);
// global restrictions
$totrestrictions = count($restrictions);
$wdaysrestrictions = [];
$wdaystworestrictions = [];
$wdaysrestrictionsrange = [];
$wdaysrestrictionsmonths = [];
$ctarestrictionsrange = [];
$ctarestrictionsmonths = [];
$ctdrestrictionsrange = [];
$ctdrestrictionsmonths = [];
$monthscomborestr = [];
$minlosrestrictions = [];
$minlosrestrictionsrange = [];
$maxlosrestrictions = [];
$maxlosrestrictionsrange = [];
$notmultiplyminlosrestrictions = [];
if ($totrestrictions > 0) {
foreach ($restrictions as $rmonth => $restr) {
if ($rmonth != 'range') {
if (strlen((string)$restr['wday'])) {
$wdaysrestrictions[($rmonth - 1)] = $restr['wday'];
$wdaysrestrictionsmonths[] = $rmonth;
if (strlen((string)$restr['wdaytwo'])) {
$wdaystworestrictions[($rmonth - 1)] = $restr['wdaytwo'];
$monthscomborestr[($rmonth - 1)] = VikBooking::parseJsDrangeWdayCombo($restr);
}
} elseif (!empty($restr['ctad']) || !empty($restr['ctdd'])) {
if (!empty($restr['ctad'])) {
$ctarestrictionsmonths[($rmonth - 1)] = explode(',', $restr['ctad']);
}
if (!empty($restr['ctdd'])) {
$ctdrestrictionsmonths[($rmonth - 1)] = explode(',', $restr['ctdd']);
}
}
if ($restr['multiplyminlos'] == 0) {
$notmultiplyminlosrestrictions[] = $rmonth;
}
$minlosrestrictions[($rmonth - 1)] = $restr['minlos'];
if (!empty($restr['maxlos']) && $restr['maxlos'] > 0 && $restr['maxlos'] >= $restr['minlos']) {
$maxlosrestrictions[($rmonth - 1)] = $restr['maxlos'];
}
} else {
foreach ($restr as $kr => $drestr) {
if (strlen((string)$drestr['wday'])) {
$wdaysrestrictionsrange[$kr][0] = date('Y-m-d', $drestr['dfrom']);
$wdaysrestrictionsrange[$kr][1] = date('Y-m-d', $drestr['dto']);
$wdaysrestrictionsrange[$kr][2] = $drestr['wday'];
$wdaysrestrictionsrange[$kr][3] = $drestr['multiplyminlos'];
$wdaysrestrictionsrange[$kr][4] = strlen((string)$drestr['wdaytwo']) ? $drestr['wdaytwo'] : -1;
$wdaysrestrictionsrange[$kr][5] = VikBooking::parseJsDrangeWdayCombo($drestr);
} elseif (!empty($drestr['ctad']) || !empty($drestr['ctdd'])) {
$ctfrom = date('Y-m-d', $drestr['dfrom']);
$ctto = date('Y-m-d', $drestr['dto']);
if (!empty($drestr['ctad'])) {
$ctarestrictionsrange[$kr][0] = $ctfrom;
$ctarestrictionsrange[$kr][1] = $ctto;
$ctarestrictionsrange[$kr][2] = explode(',', $drestr['ctad']);
}
if (!empty($drestr['ctdd'])) {
$ctdrestrictionsrange[$kr][0] = $ctfrom;
$ctdrestrictionsrange[$kr][1] = $ctto;
$ctdrestrictionsrange[$kr][2] = explode(',', $drestr['ctdd']);
}
}
$minlosrestrictionsrange[$kr][0] = date('Y-m-d', $drestr['dfrom']);
$minlosrestrictionsrange[$kr][1] = date('Y-m-d', $drestr['dto']);
$minlosrestrictionsrange[$kr][2] = $drestr['minlos'];
if (!empty($drestr['maxlos']) && $drestr['maxlos'] > 0 && $drestr['maxlos'] >= $drestr['minlos']) {
$maxlosrestrictionsrange[$kr] = $drestr['maxlos'];
}
}
unset($restrictions['range']);
}
}
$resdecl = "
var vbrestrmonthswdays = " . json_encode($wdaysrestrictionsmonths) . ";
var vbrestrmonths = " . json_encode(array_keys($restrictions)) . ";
var vbrestrmonthscombojn = " . json_encode($monthscomborestr) . ";
var vbrestrminlos = " . json_encode((object) $minlosrestrictions) . ";
var vbrestrminlosrangejn = " . json_encode($minlosrestrictionsrange) . ";
var vbrestrmultiplyminlos = " . json_encode($notmultiplyminlosrestrictions) . ";
var vbrestrmaxlos = " . json_encode((object) $maxlosrestrictions) . ";
var vbrestrmaxlosrangejn = " . json_encode($maxlosrestrictionsrange) . ";
var vbrestrwdaysrangejn = " . json_encode($wdaysrestrictionsrange) . ";
var vbrestrcta = " . json_encode($ctarestrictionsmonths) . ";
var vbrestrctarange = " . json_encode($ctarestrictionsrange) . ";
var vbrestrctd = " . json_encode($ctdrestrictionsmonths) . ";
var vbrestrctdrange = " . json_encode($ctdrestrictionsrange) . ";
var vbcombowdays = {};
function vbRefreshCheckout(darrive) {
if (vbFullObject(vbcombowdays)) {
var vbtosort = new Array();
for(var vbi in vbcombowdays) {
if (vbcombowdays.hasOwnProperty(vbi)) {
var vbusedate = darrive;
vbtosort[vbi] = vbusedate.setDate(vbusedate.getDate() + (vbcombowdays[vbi] - 1 - vbusedate.getDay() + 7) % 7 + 1);
}
}
vbtosort.sort(function(da, db) {
return da > db ? 1 : -1;
});
for(var vbnext in vbtosort) {
if (vbtosort.hasOwnProperty(vbnext)) {
var vbfirstnextd = new Date(vbtosort[vbnext]);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'minDate', vbfirstnextd);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'setcheckoutdate', vbfirstnextd);
break;
}
}
}
}
function vbSetMinCheckoutDate(selectedDate) {
var minlos = ".VikBooking::getDefaultNightsCalendar().";
var maxlosrange = 0;
var nowcheckin = jQuery('#checkindate').vboDatesRangePicker('getCheckinDate');
var nowd = nowcheckin.getDay();
var nowcheckindate = new Date(nowcheckin.getTime());
vbcombowdays = {};
if (vbFullObject(vbrestrminlosrangejn)) {
for (var rk in vbrestrminlosrangejn) {
if (vbrestrminlosrangejn.hasOwnProperty(rk)) {
var minldrangeinit = vbGetDateObject(vbrestrminlosrangejn[rk][0]);
if (nowcheckindate >= minldrangeinit) {
var minldrangeend = vbGetDateObject(vbrestrminlosrangejn[rk][1]);
if (nowcheckindate <= minldrangeend) {
minlos = parseInt(vbrestrminlosrangejn[rk][2]);
if (vbFullObject(vbrestrmaxlosrangejn)) {
if (rk in vbrestrmaxlosrangejn) {
maxlosrange = parseInt(vbrestrmaxlosrangejn[rk]);
}
}
if (rk in vbrestrwdaysrangejn && nowd in vbrestrwdaysrangejn[rk][5]) {
vbcombowdays = vbrestrwdaysrangejn[rk][5][nowd];
}
}
}
}
}
}
var nowm = nowcheckin.getMonth();
if (vbFullObject(vbrestrmonthscombojn) && vbrestrmonthscombojn.hasOwnProperty(nowm)) {
if (nowd in vbrestrmonthscombojn[nowm]) {
vbcombowdays = vbrestrmonthscombojn[nowm][nowd];
}
}
if (jQuery.inArray((nowm + 1), vbrestrmonths) != -1) {
minlos = parseInt(vbrestrminlos[nowm]);
}
nowcheckindate.setDate(nowcheckindate.getDate() + minlos);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'minDate', nowcheckindate);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'minStayNights', minlos);
if (maxlosrange > 0) {
var diffmaxminlos = maxlosrange - minlos;
var maxcheckoutdate = new Date(nowcheckindate.getTime());
maxcheckoutdate.setDate(maxcheckoutdate.getDate() + diffmaxminlos);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'maxDate', maxcheckoutdate);
}
if (nowm in vbrestrmaxlos) {
var diffmaxminlos = parseInt(vbrestrmaxlos[nowm]) - minlos;
var maxcheckoutdate = new Date(nowcheckindate.getTime());
maxcheckoutdate.setDate(maxcheckoutdate.getDate() + diffmaxminlos);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'maxDate', maxcheckoutdate);
}
if (!vbFullObject(vbcombowdays)) {
var is_checkout_disabled = false;
if (typeof selectedDate !== 'undefined' && typeof jQuery('#checkindate').vboDatesRangePicker('drpoption', 'beforeShowDay.checkout') === 'function') {
// let the datepicker validate if the min date to set for check-out is disabled due to CTD rules
is_checkout_disabled = !jQuery('#checkindate').vboDatesRangePicker('drpoption', 'beforeShowDay.checkout')(nowcheckindate)[0];
}
if (!is_checkout_disabled) {
jQuery('#checkindate').vboDatesRangePicker('checkout', 'setCheckoutDate', nowcheckindate);
} else {
setTimeout(() => {
// make sure the minimum date just set for the checkout has not populated a CTD date that we do not want
var current_out_dt = jQuery('#checkindate').vboDatesRangePicker('getCheckoutDate');
if (current_out_dt && current_out_dt.getTime() === nowcheckindate.getTime()) {
jQuery('#checkindate').vboDatesRangePicker('checkout', 'setCheckoutDate', null);
}
}, 100);
}
} else {
vbRefreshCheckout(nowcheckin);
}
}";
if ($wdaysrestrictions || $wdaysrestrictionsrange) {
$resdecl .= "
var vbrestrwdays = " . json_encode((object) $wdaysrestrictions) . ";
var vbrestrwdaystwo = " . json_encode((object) $wdaystworestrictions) . ";
function vbIsDayDisabled(date) {
if (!vbIsDayOpen(date) || !vboValidateCta(date)) {
return [false];
}
var m = date.getMonth(), wd = date.getDay();
if (vbFullObject(vbrestrwdaysrangejn)) {
for (var rk in vbrestrwdaysrangejn) {
if (vbrestrwdaysrangejn.hasOwnProperty(rk)) {
var wdrangeinit = vbGetDateObject(vbrestrwdaysrangejn[rk][0]);
if (date >= wdrangeinit) {
var wdrangeend = vbGetDateObject(vbrestrwdaysrangejn[rk][1]);
if (date <= wdrangeend) {
if (wd != vbrestrwdaysrangejn[rk][2]) {
if (vbrestrwdaysrangejn[rk][4] == -1 || wd != vbrestrwdaysrangejn[rk][4]) {
return [false];
}
}
}
}
}
}
}
if (vbFullObject(vbrestrwdays)) {
if (jQuery.inArray((m+1), vbrestrmonthswdays) == -1) {
return [true];
}
if (wd == vbrestrwdays[m]) {
return [true];
}
if (vbFullObject(vbrestrwdaystwo)) {
if (wd == vbrestrwdaystwo[m]) {
return [true];
}
}
return [false];
}
return [true];
}
function vbIsDayDisabledCheckout(date) {
if (!vbIsDayOpen(date) || !vboValidateCtd(date)) {
return [false];
}
var m = date.getMonth(), wd = date.getDay();
if (vbFullObject(vbcombowdays)) {
if (jQuery.inArray(wd, vbcombowdays) != -1) {
return [true];
} else {
return [false];
}
}
if (vbFullObject(vbrestrwdaysrangejn)) {
for (var rk in vbrestrwdaysrangejn) {
if (vbrestrwdaysrangejn.hasOwnProperty(rk)) {
var wdrangeinit = vbGetDateObject(vbrestrwdaysrangejn[rk][0]);
if (date >= wdrangeinit) {
var wdrangeend = vbGetDateObject(vbrestrwdaysrangejn[rk][1]);
if (date <= wdrangeend) {
if (wd != vbrestrwdaysrangejn[rk][2] && vbrestrwdaysrangejn[rk][3] == 1) {
return [false];
}
}
}
}
}
}
if (vbFullObject(vbrestrwdays)) {
if (jQuery.inArray((m+1), vbrestrmonthswdays) == -1 || jQuery.inArray((m+1), vbrestrmultiplyminlos) != -1) {
return [true];
}
if (wd == vbrestrwdays[m]) {
return [true];
}
return [false];
}
return [true];
}";
}
$document->addScriptDeclaration($resdecl);
}
// global closing dates
$closing_dates = VikBooking::parseJsClosingDates();
$sdecl = "
var vbclosingdates = " . json_encode($closing_dates) . ";
function vbCheckClosingDatesIn(date) {
if (!vbIsDayOpen(date) || !vboValidateCta(date)) {
return [false];
}
return [true];
}
function vbCheckClosingDatesOut(date) {
if (!vbIsDayOpen(date) || !vboValidateCtd(date)) {
return [false];
}
return [true];
}
function vbIsDayOpen(date) {
if (vbFullObject(vbclosingdates)) {
for (var cd in vbclosingdates) {
if (vbclosingdates.hasOwnProperty(cd)) {
var cdfrom = vbGetDateObject(vbclosingdates[cd][0]);
var cdto = vbGetDateObject(vbclosingdates[cd][1]);
if (date >= cdfrom && date <= cdto) {
return false;
}
}
}
}
return true;
}
function vboValidateCta(date) {
var m = date.getMonth(), wd = date.getDay();
if (vbFullObject(vbrestrctarange)) {
for (var rk in vbrestrctarange) {
if (vbrestrctarange.hasOwnProperty(rk)) {
var wdrangeinit = vbGetDateObject(vbrestrctarange[rk][0]);
if (date >= wdrangeinit) {
var wdrangeend = vbGetDateObject(vbrestrctarange[rk][1]);
if (date <= wdrangeend) {
if (jQuery.inArray('-'+wd+'-', vbrestrctarange[rk][2]) >= 0) {
return false;
}
}
}
}
}
}
if (vbFullObject(vbrestrcta)) {
if (vbrestrcta.hasOwnProperty(m) && jQuery.inArray('-'+wd+'-', vbrestrcta[m]) >= 0) {
return false;
}
}
return true;
}
function vboValidateCtd(date) {
var m = date.getMonth(), wd = date.getDay();
if (vbFullObject(vbrestrctdrange)) {
for (var rk in vbrestrctdrange) {
if (vbrestrctdrange.hasOwnProperty(rk)) {
var wdrangeinit = vbGetDateObject(vbrestrctdrange[rk][0]);
if (date >= wdrangeinit) {
var wdrangeend = vbGetDateObject(vbrestrctdrange[rk][1]);
if (date <= wdrangeend) {
if (jQuery.inArray('-'+wd+'-', vbrestrctdrange[rk][2]) >= 0) {
return false;
}
}
}
}
}
}
if (vbFullObject(vbrestrctd)) {
if (vbrestrctd.hasOwnProperty(m) && jQuery.inArray('-'+wd+'-', vbrestrctd[m]) >= 0) {
return false;
}
}
return true;
}
function vbSetGlobalMinCheckoutDate() {
var minlos = ".VikBooking::getDefaultNightsCalendar().";
var nowcheckin = jQuery('#checkindate').vboDatesRangePicker('getCheckinDate');
var nowcheckindate = new Date(nowcheckin.getTime());
nowcheckindate.setDate(nowcheckindate.getDate() + minlos);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'minDate', nowcheckindate);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'minStayNights', minlos);
jQuery('#checkindate').vboDatesRangePicker('checkout', 'setCheckoutDate', nowcheckindate);
}
jQuery(function() {
// reset regional
jQuery.datepicker.setDefaults(jQuery.datepicker.regional['']);
// start DRP
jQuery('#checkindate').vboDatesRangePicker({
checkout: '#checkoutdate',
dateFormat: '{$juidf}',
showOn: 'focus',
numberOfMonths: " . ($is_mobile ? '1' : '2') . ",
minDate: '" . VikBooking::getMinDaysAdvance() . "d',
maxDate: '" . VikBooking::getMaxDateFuture() . "',
beforeShowDay: {
checkin: " . ($wdaysrestrictions || $wdaysrestrictionsrange ? 'vbIsDayDisabled' : 'vbCheckClosingDatesIn') . ",
checkout: " . ($wdaysrestrictions || $wdaysrestrictionsrange ? 'vbIsDayDisabledCheckout' : 'vbCheckClosingDatesOut') . ",
},
onSelect: {
checkin: (selectedDate) => {
" . ($totrestrictions ? 'vbSetMinCheckoutDate(selectedDate);' : 'vbSetGlobalMinCheckoutDate();') . "
vbCalcNights();
},
checkout: (selectedDate) => {
vbCalcNights();
},
},
labels: {
checkin: Joomla.JText._('VBPICKUPROOM'),
checkout: Joomla.JText._('VBRETURNROOM'),
minStayNights: (nights) => {
return (Joomla.JText._('VBO_MIN_STAY_NIGHTS') + '').replace('%d', nights);
},
},
bottomCommands: {
clear: Joomla.JText._('VBO_CLEAR_DATES'),
close: Joomla.JText._('VBO_CLOSE'),
onClear: () => {
vbCalcNights();
},
},
});
// set proper regional
jQuery('#checkindate').datepicker('option', jQuery.datepicker.regional['vikbooking']);
// register additional triggers
jQuery('.vb-cal-img, .vbo-caltrigger').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();
}
});
});";
// add script declaration to document
$document->addScriptDeclaration($sdecl);
// add HTML code to the form
$selform .= "<div class=\"vbo-search-inpblock vbo-search-inpblock-checkin\"><label for=\"checkindate\">" . JText::translate('VBPICKUPROOM') . "</label><div class=\"input-group\"><input type=\"text\" name=\"checkindate\" id=\"checkindate\" size=\"10\" autocomplete=\"off\" onfocus=\"this.blur();\" readonly/><i class=\"".VikBookingIcons::i('calendar', 'vbo-caltrigger')."\"></i></div><input type=\"hidden\" name=\"checkinh\" value=\"".$hcheckin."\"/><input type=\"hidden\" name=\"checkinm\" value=\"".$mcheckin."\"/></div>\n";
$selform .= "<div class=\"vbo-search-inpblock vbo-search-inpblock-checkout\"><label for=\"checkoutdate\">" . JText::translate('VBRETURNROOM') . "</label><div class=\"input-group\"><input type=\"text\" name=\"checkoutdate\" id=\"checkoutdate\" size=\"10\" autocomplete=\"off\" onfocus=\"this.blur();\" readonly/><i class=\"".VikBookingIcons::i('calendar', 'vbo-caltrigger')."\"></i></div><input type=\"hidden\" name=\"checkouth\" value=\"".$hcheckout."\"/><input type=\"hidden\" name=\"checkoutm\" value=\"".$mcheckout."\"/></div>\n";
} else {
// default platform Calendar
$selform .= "<div class=\"vbo-search-inpblock vbo-search-inpblock-checkin\"><label for=\"checkindate\">" . JText::translate('VBPICKUPROOM') . "</label><div class=\"input-group\">" . $vbo_app->getCalendar('', 'checkindate', 'checkindate', $vbdateformat, array ('class' => '','size' => '10','maxlength' => '19'));
$selform .= "<input type=\"hidden\" name=\"checkinh\" value=\"".$hcheckin."\"/><input type=\"hidden\" name=\"checkinm\" value=\"".$mcheckin."\"/></div></div>\n";
$selform .= "<div class=\"vbo-search-inpblock vbo-search-inpblock-checkout\"><label for=\"checkoutdate\">" . JText::translate('VBRETURNROOM') . "</label><div class=\"input-group\">" . $vbo_app->getCalendar('', 'checkoutdate', 'checkoutdate', $vbdateformat, array ('class' => '','size' => '10','maxlength' => '19'));
$selform .= "<input type=\"hidden\" name=\"checkouth\" value=\"".$hcheckout."\"/><input type=\"hidden\" name=\"checkoutm\" value=\"".$mcheckout."\"/></div></div>\n";
}
// rooms, adults, children
$showchildren = VikBooking::showChildrenFront();
$guests_label = VBOFactory::getConfig()->get('guests_label', 'adults');
$use_guests_label = 'VBFORMADULTS';
if (!$showchildren && !strcasecmp($guests_label, 'guests')) {
$use_guests_label = 'VBOINVTOTGUESTS';
}
// max number of rooms
$maxsearchnumrooms = VikBooking::getSearchNumRooms();
if (intval($maxsearchnumrooms) > 1) {
$roomsel = "<label for=\"vbo-roomsnum\">".JText::translate('VBFORMROOMSN')."</label><select id=\"vbo-roomsnum\" name=\"roomsnum\" onchange=\"vbSetRoomsAdults(this.value);\">\n";
for($r = 1; $r <= $maxsearchnumrooms; $r++) {
$roomsel .= "<option value=\"".$r."\"".(!empty($oldroomsnum) && $oldroomsnum == $r ? " selected=\"selected\"" : "").">".$r."</option>\n";
}
$roomsel .= "</select>\n";
} else {
$roomsel = "<input type=\"hidden\" name=\"roomsnum\" value=\"1\">\n";
}
// max number of adults per room
$globnumadults = VikBooking::getSearchNumAdults();
$adultsparts = explode('-', $globnumadults);
$adultsel = "<select name=\"adults[]\">";
for($a = $adultsparts[0]; $a <= $adultsparts[1]; $a++) {
$adultsel .= "<option value=\"".$a."\"".((is_array($oldarrpeople) && isset($oldarrpeople[1]) && $oldarrpeople[1]['adults'] == $a) || (intval($adultsparts[0]) < 1 && $a == 1) ? " selected=\"selected\"" : "").">".$a."</option>";
}
$adultsel .= "</select>";
// max number of children per room
$globnumchildren = VikBooking::getSearchNumChildren();
$childrenparts = explode('-', $globnumchildren);
$childrensel = "<select name=\"children[]\">";
for($c = $childrenparts[0]; $c <= $childrenparts[1]; $c++) {
$childrensel .= "<option value=\"".$c."\"".(is_array($oldarrpeople) && isset($oldarrpeople[1]) && $oldarrpeople[1]['children'] == $c ? " selected=\"selected\"" : "").">".$c."</option>";
}
$childrensel .= "</select>";
//
$selform .= "<div class=\"vbo-search-num-racblock\">\n";
$selform .= " <div class=\"vbo-search-num-rooms\">".$roomsel."</div>\n";
$selform .= " <div class=\"vbo-search-num-aduchild-block\" id=\"vbo-search-num-aduchild-block\">\n";
$selform .= " <div class=\"vbo-search-num-aduchild-entry\">".(intval($maxsearchnumrooms) > 1 || (!empty($oldroomsnum) && (int)$oldroomsnum > 1) ? "<span class=\"vbo-search-roomnum\">".JText::translate('VBFORMNUMROOM')." 1</span>" : "")."\n";
$selform .= " <div class=\"vbo-search-num-adults-entry\"><label class=\"vbo-search-num-adults-entry-label\">".JText::translate($use_guests_label)."</label><span class=\"vbo-search-num-adults-entry-inp\">".$adultsel."</span></div>\n";
if ($showchildren) {
$selform .= " <div class=\"vbo-search-num-children-entry\"><label class=\"vbo-search-num-children-entry-label\">".JText::translate('VBFORMCHILDREN')."</label><span class=\"vbo-search-num-children-entry-inp\">".$childrensel."</span></div>\n";
}
$selform .= " </div>\n";
$selform .= " </div>\n";
//the tag <div id=\"vbjstotnights\"></div> will be used by javascript to calculate the nights
$selform .= " <div id=\"vbjstotnights\"></div>\n";
$selform .= "</div>\n";
if (VikBooking::showCategoriesFront()) {
$q = "SELECT * FROM `#__vikbooking_categories` ORDER BY `#__vikbooking_categories`.`name` ASC;";
$dbo->setQuery($q);
$categories = $dbo->loadAssocList();
if ($categories) {
$vbo_tn->translateContents($categories, '#__vikbooking_categories');
$selform .= "<div class=\"vbo-search-categories\"><label for=\"vbo-formcategories\" class=\"vbformcategories\">" . JText::translate('VBROOMCAT') . "</label><select id=\"vbo-formcategories\" name=\"categories\">";
$selform .= "<option value=\"all\">" . JText::translate('VBALLCAT') . "</option>\n";
foreach ($categories as $cat) {
$selform .= "<option value=\"" . $cat['id'] . "\"" . ($pcategories == (string)$cat['id'] ? ' selected="selected"' : '') . ">" . $cat['name'] . "</option>\n";
}
$selform .= "</select></div>\n";
}
}
$selform .= "<div class=\"vbo-search-submit\"><button type=\"submit\" class=\"btn vbo-pref-color-btn\">" . JText::translate('VBSEARCHBUTTON') . "</button></div>\n";
$selform .= "</div>\n";
$selform .= (!empty ($pitemid) ? "<input type=\"hidden\" name=\"Itemid\" value=\"" . $pitemid . "\"/>" : "") . "</form></div>";
?>
<script type="text/javascript">
function vbAddElement() {
var ni = document.getElementById('vbo-search-num-aduchild-block');
var numi = document.getElementById('vbroomhelper');
var num = (document.getElementById('vbroomhelper').value -1)+ 2;
numi.value = num;
var newdiv = document.createElement('div');
var divIdName = 'vb'+num+'racont';
newdiv.setAttribute('id',divIdName);
newdiv.innerHTML = '<div class=\'vbo-search-num-aduchild-entry\'><span class=\'vbo-search-roomnum\'><?php echo addslashes(JText::translate('VBFORMNUMROOM')); ?> '+ num +'</span><div class=\'vbo-search-num-adults-entry\'><label class=\'vbo-search-num-adults-entry-label\'><?php echo addslashes(JText::translate($use_guests_label)); ?></label><span class=\'vbo-search-num-adults-entry-inp\'><?php echo addslashes(str_replace('"', "'", $adultsel)); ?></span></div><?php if ($showchildren): ?><div class=\'vbo-search-num-children-entry\'><label class=\'vbo-search-num-children-entry-label\'><?php echo addslashes(JText::translate('VBFORMCHILDREN')); ?></label><span class=\'vbo-search-num-adults-entry-inp\'><?php echo addslashes(str_replace('"', "'", $childrensel)); ?></span></div><?php endif; ?></div>';
ni.appendChild(newdiv);
}
function vbSetRoomsAdults(totrooms) {
var actrooms = parseInt(document.getElementById('vbroomhelper').value);
var torooms = parseInt(totrooms);
var difrooms;
if (torooms > actrooms) {
difrooms = torooms - actrooms;
for(var ir=1; ir<=difrooms; ir++) {
vbAddElement();
}
}
if (torooms < actrooms) {
for(var ir=actrooms; ir>torooms; ir--) {
if (ir > 1) {
var rmra = document.getElementById('vb' + ir + 'racont');
rmra.parentNode.removeChild(rmra);
}
}
document.getElementById('vbroomhelper').value = torooms;
}
}
function vbCalcNights() {
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("/");
<?php
if ($vbdateformat == "%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);
<?php
} elseif ($vbdateformat == "%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);
<?php
} 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);
<?php
}
?>
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) {
document.getElementById('vbjstotnights').innerHTML = '<?php echo addslashes(JText::translate('VBJSTOTNIGHTS')); ?>: '+vbnights;
} else {
document.getElementById('vbjstotnights').innerHTML = '';
}
} else {
document.getElementById('vbjstotnights').innerHTML = '';
}
} else {
document.getElementById('vbjstotnights').innerHTML = '';
}
}
</script>
<input type="hidden" id="vbroomhelper" value="1"/>
<?php
if (isset($err) && strlen($err)) {
echo "<p class=\"err\">" . $err . "</p>";
}
?>
<div class="vbo-intro-main"><?php echo VikBooking::getIntroMain(); ?></div>
<?php
// write the form
echo $selform;
// check for guests allowed policy
if (!$showchildren && $guests_allowed_policy = VikBooking::getGuestsAllowedPolicy($vbo_tn)) {
?>
<div class="vbo-guests-allowed-policy"><?php echo $guests_allowed_policy; ?></div>
<?php
}
?>
<div class="vbo-closing-main"><?php echo VikBooking::getClosingMain(); ?></div>
<script type="text/javascript">
jQuery(function() {
jQuery('.vbo-search-submit').find('button[type="submit"]').on('click', function(e) {
e.preventDefault();
jQuery(this).prop('disabled', true);
jQuery(this).html('<?php VikBookingIcons::e('circle-notch', 'fa-spin fa-fw'); ?> ' + jQuery(this).text());
jQuery(this).closest('form').submit();
});
});
</script>
<?php
//search suggestions
if (isset($err_code_info) && count($err_code_info) > 0 && (int)VikBooking::showSearchSuggestions() > 0) {
if (!empty($pitemid) && !isset($err_code_info['Itemid'])) {
$err_code_info['Itemid'] = $pitemid;
}
/**
* We also inject the current category filter to suggest only rooms of the same category.
*
* @since 1.14 (J) - 1.4.0 (WP)
*/
if (!empty($pcategories) && $pcategories != 'all') {
$err_code_info['categories'] = $pcategories;
}
//
/**
* Clients have reported that in case of error code #1 (no availability for the party requested, but some rooms would
* be able to allocate the party in the rooms that are simply not available on the requested dates), we should not
* suggest only other closed booking dates, but rather check for also other possible booking solutions. In short,
* if the error code is #1, we should perform another AJAX request like if the error code was #2 (query failed for
* fetching the rooms, no rates defined for this number of nights or no rooms for the party requested).
*
* @since 1.13.5 (J) - 1.3.6 (WP)
*/
$rq_err_code_infos = array();
if ($err_code_info['code'] === 1) {
// clone the error code info array
$copy_errcode = $err_code_info;
// overwrite error code to #2
$copy_errcode['code'] = 2;
// push first request to fetch other possible rooms (higher priority to get the booking)
array_push($rq_err_code_infos, $copy_errcode);
// then push the regular error code #1 to find the closest available booking dates
array_push($rq_err_code_infos, $err_code_info);
// if split stays are enabled, we invert the error code positions
if (VBOFactory::getConfig()->get('split_stay_ratio', 0) > 0) {
$rq_err_code_infos = array_reverse($rq_err_code_infos);
}
} else {
// push the regular error code info to make just one request
array_push($rq_err_code_infos, $err_code_info);
}
?>
<div id="vbo-search-suggestions"></div>
<script type="text/javascript">
jQuery(function() {
<?php
foreach ($rq_err_code_infos as $rq_index => $err_code_info) {
?>
setTimeout(function() {
var jqxhr = jQuery.ajax({
type: "POST",
url: "<?php echo VikBooking::ajaxUrl(JRoute::rewrite('index.php?option=com_vikbooking&view=searchsuggestions&getjson=1&tmpl=component', false)); ?>",
data: <?php echo json_encode($err_code_info); ?>
}).done(function(res) {
try {
// response is a JSON-encoded array
var out = JSON.parse(res);
jQuery("#vbo-search-suggestions").append(out[0]);
} catch (err) {
jQuery("#vbo-search-suggestions").html(res);
}
}).fail(function() {
console.log('Failure event when calling the search suggestions view');
});
}, <?php echo $rq_index * 500; ?>);
<?php
}
?>
});
</script>
<?php
}
//
//echo javascript to fill the date values
if (!empty ($pval) && !empty ($rval)) {
if ($calendartype == "jqueryui") {
?>
<script type="text/javascript">
jQuery(function() {
jQuery('#checkindate').val('<?php echo $pval; ?>');
jQuery('#checkoutdate').val('<?php echo $rval; ?>');
});
</script>
<?php
} else {
?>
<script type="text/javascript">
document.getElementById('checkindate').value='<?php echo $pval; ?>';
document.getElementById('checkoutdate').value='<?php echo $rval; ?>';
</script>
<?php
}
}
//
if (!empty($oldroomsnum) && $oldroomsnum > 1 && count($oldarrpeople) > 0) {
$oldroomscountadults = array();
$oldroomscountchildren = array();
for($i = 2; $i <= $oldroomsnum; $i++) {
$globnumadults = VikBooking::getSearchNumAdults();
$adultsparts = explode('-', $globnumadults);
$adultsel = "<select name=\"adults[]\">";
for($a = $adultsparts[0]; $a <= $adultsparts[1]; $a++) {
$adultsel .= "<option value=\"".$a."\"".($oldarrpeople[$i]['adults'] == $a ? " selected=\"selected\"" : "").">".$a."</option>";
}
$adultsel .= "</select>";
$oldroomscountadults[$i] = $adultsel;
$globnumchildren = VikBooking::getSearchNumChildren();
$childrenparts = explode('-', $globnumchildren);
$childrensel = "<select name=\"children[]\">";
for($c = $childrenparts[0]; $c <= $childrenparts[1]; $c++) {
$childrensel .= "<option value=\"".$c."\"".($oldarrpeople[$i]['children'] == $c ? " selected=\"selected\"" : "").">".$c."</option>";
}
$childrensel .= "</select>";
$oldroomscountchildren[$i] = $childrensel;
}
?>
<script type="text/javascript">
function vbAddElementSession() {
var oldradultsvals = new Array();
var oldrchildrenvals = new Array();
<?php
for($i = 2; $i <= $oldroomsnum; $i++) {
?>
oldradultsvals[<?php echo $i; ?>] = "<?php echo addslashes(str_replace('"', "'", $oldroomscountadults[$i])); ?>";
oldrchildrenvals[<?php echo $i; ?>] = "<?php echo addslashes(str_replace('"', "'", $oldroomscountchildren[$i])); ?>";
<?php
}
?>
var ni = document.getElementById('vbo-search-num-aduchild-block');
var numi = document.getElementById('vbroomhelper');
var num = (document.getElementById('vbroomhelper').value -1)+ 2;
numi.value = num;
var newdiv = document.createElement('div');
var divIdName = 'vb'+num+'racont';
newdiv.setAttribute('id',divIdName);
newdiv.innerHTML = '<div class=\'vbo-search-num-aduchild-entry\'><span class=\'vbo-search-roomnum\'><?php echo addslashes(JText::translate('VBFORMNUMROOM')); ?> '+ num +'</span><div class=\'vbo-search-num-adults-entry\'><span class=\'vbo-search-num-adults-entry-label\'><?php echo addslashes(JText::translate($use_guests_label)); ?></span><span class=\'vbo-search-num-adults-entry-inp\'>'+ oldradultsvals[num] +'</span></div><?php if ($showchildren): ?><div class=\'vbo-search-num-children-entry\'><span class=\'vbo-search-num-children-entry-label\'><?php echo addslashes(JText::translate('VBFORMCHILDREN')); ?></span><span class=\'vbo-search-num-adults-entry-inp\'>'+ oldrchildrenvals[num] +'</span></div><?php endif; ?></div>';
ni.appendChild(newdiv);
}
function vbSetRoomsAdultsSession(totrooms) {
var actrooms = parseInt(document.getElementById('vbroomhelper').value);
var torooms = parseInt(totrooms);
var difrooms;
if (torooms > actrooms) {
difrooms = torooms - actrooms;
for(var ir=1; ir<=difrooms; ir++) {
vbAddElementSession();
}
}
if (torooms < actrooms) {
for(var ir=actrooms; ir>torooms; ir--) {
if (ir > 1) {
var rmra = document.getElementById('vb' + ir + 'racont');
rmra.parentNode.removeChild(rmra);
}
}
document.getElementById('vbroomhelper').value = torooms;
}
}
vbSetRoomsAdultsSession('<?php echo $oldroomsnum; ?>');
</script>
<?php
}
} else {
echo VikBooking::getDisabledBookingMsg();
}