| 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 |
$vbo_app = VikBooking::getVboApplication(); |
| 14 |
$formatvals = VikBooking::getNumberFormatData(); |
| 15 |
$formatparts = explode(':', $formatvals); |
| 16 |
?> |
| 17 |
<div class="vbo-config-maintab-left"> |
| 18 |
<fieldset class="adminform"> |
| 19 |
<div class="vbo-params-wrap"> |
| 20 |
<legend class="adminlegend"><?php echo JText::translate('VBOCPARAMCURRENCY'); ?></legend> |
| 21 |
<div class="vbo-params-container"> |
| 22 |
<div class="vbo-param-container"> |
| 23 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGTHREECURNAME'); ?></div> |
| 24 |
<div class="vbo-param-setting"><input type="text" name="currencyname" value="<?php echo JHtml::fetch('esc_attr', VikBooking::getCurrencyName()); ?>" size="10"/></div> |
| 25 |
</div> |
| 26 |
<div class="vbo-param-container"> |
| 27 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGTHREECURSYMB'); ?></div> |
| 28 |
<div class="vbo-param-setting"><input type="text" name="currencysymb" value="<?php echo JHtml::fetch('esc_attr', VikBooking::getCurrencySymb()); ?>" size="10"/></div> |
| 29 |
</div> |
| 30 |
<div class="vbo-param-container"> |
| 31 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGTHREECURCODEPP'); ?></div> |
| 32 |
<div class="vbo-param-setting"><input type="text" name="currencycodepp" value="<?php echo JHtml::fetch('esc_attr', VikBooking::getCurrencyCodePp()); ?>" size="10"/></div> |
| 33 |
</div> |
| 34 |
<div class="vbo-param-container"> |
| 35 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGNUMDECIMALS'); ?></div> |
| 36 |
<div class="vbo-param-setting"><input type="number" name="numdecimals" value="<?php echo $formatparts[0]; ?>" min="0" max="9"/></div> |
| 37 |
</div> |
| 38 |
<div class="vbo-param-container vbo-param-nested"> |
| 39 |
<div class="vbo-param-label"><?php echo JText::translate('VBO_NO_EMPTY_DECIMALS'); ?></div> |
| 40 |
<div class="vbo-param-setting"><?php echo $vbo_app->printYesNoButtons('noemptydecimals', JText::translate('VBYES'), JText::translate('VBNO'), VikBooking::hideEmptyDecimals(), 1, 0); ?></div> |
| 41 |
</div> |
| 42 |
<div class="vbo-param-container"> |
| 43 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGNUMDECSEPARATOR'); ?></div> |
| 44 |
<div class="vbo-param-setting"><input type="text" name="decseparator" value="<?php echo JHtml::fetch('esc_attr', $formatparts[1]); ?>" size="2"/></div> |
| 45 |
</div> |
| 46 |
<div class="vbo-param-container"> |
| 47 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGNUMTHOSEPARATOR'); ?></div> |
| 48 |
<div class="vbo-param-setting"><input type="text" name="thoseparator" value="<?php echo JHtml::fetch('esc_attr', $formatparts[2]); ?>" size="2"/></div> |
| 49 |
</div> |
| 50 |
<div class="vbo-param-container"> |
| 51 |
<div class="vbo-param-label"><?php echo JText::translate('VBO_POSITION'); ?></div> |
| 52 |
<div class="vbo-param-setting"> |
| 53 |
<?php |
| 54 |
echo $vbo_app->multiStateToggleSwitchField( |
| 55 |
'currencypos', |
| 56 |
VikBooking::getCurrencyPosition(), |
| 57 |
[ |
| 58 |
'before', |
| 59 |
'after', |
| 60 |
], |
| 61 |
[ |
| 62 |
[ |
| 63 |
'value' => VikBooking::getCurrencySymb() . ' 100', |
| 64 |
'title' => JText::translate('VBO_CURRENCY_POS_BEFORE'), |
| 65 |
], |
| 66 |
[ |
| 67 |
'value' => '100 ' . VikBooking::getCurrencySymb(), |
| 68 |
'title' => JText::translate('VBO_CURRENCY_POS_AFTER'), |
| 69 |
], |
| 70 |
], |
| 71 |
[ |
| 72 |
[ |
| 73 |
'label_class' => 'vik-multiswitch-radiobtn-light', |
| 74 |
], |
| 75 |
[ |
| 76 |
'label_class' => 'vik-multiswitch-radiobtn-auto', |
| 77 |
], |
| 78 |
], |
| 79 |
[ |
| 80 |
'class' => 'vbo-multiswitch-double', |
| 81 |
] |
| 82 |
); |
| 83 |
?> |
| 84 |
</div> |
| 85 |
</div> |
| 86 |
</div> |
| 87 |
</div> |
| 88 |
</fieldset> |
| 89 |
|
| 90 |
<fieldset class="adminform"> |
| 91 |
<div class="vbo-params-wrap"> |
| 92 |
<legend class="adminlegend"><?php echo JText::translate('VBOCPARAMTAXPAY'); ?></legend> |
| 93 |
<div class="vbo-params-container"> |
| 94 |
<div class="vbo-param-container"> |
| 95 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGTWOFIVE'); ?></div> |
| 96 |
<div class="vbo-param-setting"><?php echo $vbo_app->printYesNoButtons('ivainclusa', JText::translate('VBYES'), JText::translate('VBNO'), (VikBooking::ivaInclusa(true) ? 'yes' : 0), 'yes', 0); ?></div> |
| 97 |
</div> |
| 98 |
<div class="vbo-param-container"> |
| 99 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGTAXSUMMARY'); ?></div> |
| 100 |
<div class="vbo-param-setting"><?php echo $vbo_app->printYesNoButtons('taxsummary', JText::translate('VBYES'), JText::translate('VBNO'), (VikBooking::showTaxOnSummaryOnly(true) ? 'yes' : 0), 'yes', 0); ?></div> |
| 101 |
</div> |
| 102 |
<div class="vbo-param-container"> |
| 103 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGMULTIPAY'); ?></div> |
| 104 |
<div class="vbo-param-setting"><?php echo $vbo_app->printYesNoButtons('multipay', JText::translate('VBYES'), JText::translate('VBNO'), (VikBooking::multiplePayments() ? 'yes' : 0), 'yes', 0); ?></div> |
| 105 |
</div> |
| 106 |
<div class="vbo-param-container"> |
| 107 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGTWOSIX'); ?></div> |
| 108 |
<div class="vbo-param-setting"><input type="text" name="paymentname" value="<?php echo JHtml::fetch('esc_attr', VikBooking::getPaymentName()); ?>" size="25"/></div> |
| 109 |
</div> |
| 110 |
<div class="vbo-param-container"> |
| 111 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGONETENSEVEN'); ?></div> |
| 112 |
<div class="vbo-param-setting"><input type="number" name="minuteslock" value="<?php echo VikBooking::getMinutesLock(); ?>" min="0"/></div> |
| 113 |
</div> |
| 114 |
<div class="vbo-param-container"> |
| 115 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGMINAUTOREMOVE'); ?></div> |
| 116 |
<div class="vbo-param-setting"><input type="number" name="minautoremove" value="<?php echo VikBooking::getMinutesAutoRemove(); ?>" min="0"/></div> |
| 117 |
</div> |
| 118 |
</div> |
| 119 |
</div> |
| 120 |
</fieldset> |
| 121 |
</div> |
| 122 |
|
| 123 |
<?php |
| 124 |
$dep_overrides = VikBooking::getDepositOverrides(true); |
| 125 |
$pay_total = VikBooking::payTotal(); |
| 126 |
?> |
| 127 |
<div class="vbo-info-overlay-block"> |
| 128 |
<a class="vbo-info-overlay-close" href="javascript: void(0);"></a> |
| 129 |
<div class="vbo-info-overlay-content vbo-info-overlay-content-depovr"></div> |
| 130 |
</div> |
| 131 |
|
| 132 |
<div class="vbo-config-maintab-right"> |
| 133 |
<fieldset class="adminform"> |
| 134 |
<div class="vbo-params-wrap"> |
| 135 |
<legend class="adminlegend"><?php echo JText::translate('VBOCPARAMDEPOSITPAY'); ?></legend> |
| 136 |
<div class="vbo-params-container"> |
| 137 |
<div class="vbo-param-container"> |
| 138 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGTWOTHREE'); ?></div> |
| 139 |
<div class="vbo-param-setting"><?php echo $vbo_app->printYesNoButtons('paytotal', JText::translate('VBYES'), JText::translate('VBNO'), ($pay_total ? 'yes' : 0), 'yes', 0, 'vboTogglePayDeposit();'); ?></div> |
| 140 |
</div> |
| 141 |
<div class="vbo-param-container" data-related="paytotal" style="<?php echo $pay_total ? 'display: none;' : ''; ?>"> |
| 142 |
<div class="vbo-param-label"><?php echo JText::translate('VBCONFIGTWOFOUR'); ?></div> |
| 143 |
<div class="vbo-param-setting"><input type="number" name="payaccpercent" value="<?php echo VikBooking::getAccPerCent(); ?>" min="0"/> <select id="typedeposit" name="typedeposit"><option value="pcent">%</option><option value="fixed"<?php echo (VikBooking::getTypeDeposit(true) == "fixed" ? ' selected="selected"' : ''); ?>><?php echo VikBooking::getCurrencySymb(); ?></option></select></div> |
| 144 |
</div> |
| 145 |
<div class="vbo-param-container" data-related="paytotal" style="<?php echo $pay_total ? 'display: none;' : ''; ?>"> |
| 146 |
<div class="vbo-param-label"><?php echo JText::translate('VBOCONFDEPOSITOVRDS'); ?></div> |
| 147 |
<div class="vbo-param-setting"> |
| 148 |
<input type="hidden" id="depoverrides" name="depoverrides" value="<?php echo htmlspecialchars($dep_overrides); ?>"/> |
| 149 |
<div id="cur_depoverrides" class="cur_depoverrides"></div> |
| 150 |
<button type="button" class="btn" onclick="vboDisplayDepositOverrides();"><i class="vboicn-pencil2 icn-nomargin"></i></button> |
| 151 |
</div> |
| 152 |
</div> |
| 153 |
<div class="vbo-param-container" data-related="paytotal" style="<?php echo $pay_total ? 'display: none;' : ''; ?>"> |
| 154 |
<div class="vbo-param-label"><?php echo JText::translate('VBOCONFDEPONLYIFDADV'); ?></div> |
| 155 |
<div class="vbo-param-setting"><input type="number" style="max-width: 60px;" name="depifdaysadv" min="0" value="<?php echo VikBooking::getDepositIfDays(); ?>"/></div> |
| 156 |
</div> |
| 157 |
<div class="vbo-param-container" data-related="paytotal" style="<?php echo $pay_total ? 'display: none;' : ''; ?>"> |
| 158 |
<div class="vbo-param-label"><?php echo JText::translate('VBO_CONF_DEP_BALANCE_NDAYS'); ?></div> |
| 159 |
<div class="vbo-param-setting"><input type="number" style="max-width: 60px;" name="depbalancedays" min="-14" value="<?php echo VBOFactory::getConfig()->get('depbalancedays'); ?>"/></div> |
| 160 |
</div> |
| 161 |
<div class="vbo-param-container" data-related="paytotal" style="<?php echo $pay_total ? 'display: none;' : ''; ?>"> |
| 162 |
<div class="vbo-param-label"><?php echo JText::translate('VBOCONFDEPCUSTCHOICE'); ?></div> |
| 163 |
<div class="vbo-param-setting"><?php echo $vbo_app->printYesNoButtons('depcustchoice', JText::translate('VBYES'), JText::translate('VBNO'), (VikBooking::depositCustomerChoice() ? 'yes' : 0), 'yes', 0); ?></div> |
| 164 |
</div> |
| 165 |
<div class="vbo-param-container" data-related="paytotal" style="<?php echo $pay_total ? 'display: none;' : ''; ?>"> |
| 166 |
<div class="vbo-param-label"><?php echo $vbo_app->createPopover(array('title' => JText::translate('VBOCONFNODEPNONREFUND'), 'content' => JText::translate('VBOCONFNODEPNONREFUNDHELP'))); ?> <?php echo JText::translate('VBOCONFNODEPNONREFUND'); ?></div> |
| 167 |
<div class="vbo-param-setting"><?php echo $vbo_app->printYesNoButtons('nodepnonrefund', JText::translate('VBYES'), JText::translate('VBNO'), (int)VikBooking::noDepositForNonRefund(), 1, 0); ?></div> |
| 168 |
</div> |
| 169 |
</div> |
| 170 |
</div> |
| 171 |
</fieldset> |
| 172 |
</div> |
| 173 |
|
| 174 |
<script type="text/javascript"> |
| 175 |
var vbo_overlay_on = false; |
| 176 |
var vbo_depovr_defs = { |
| 177 |
"nights": "<?php echo addslashes(JText::translate('VBDAYS')); ?>", |
| 178 |
"more": "<?php echo addslashes(JText::translate('VBOCONFDEPOSITOVRDSMORE')); ?>", |
| 179 |
"add": "<?php echo addslashes(JText::translate('VBCONFIGCLOSINGDATEADD')); ?>", |
| 180 |
"apply": "<?php echo addslashes(JText::translate('VBAPPLY')); ?>" |
| 181 |
} |
| 182 |
jQuery(function() { |
| 183 |
vboPopulateDepositOverrides(); |
| 184 |
jQuery(document).mouseup(function(e) { |
| 185 |
if (!vbo_overlay_on) { |
| 186 |
return; |
| 187 |
} |
| 188 |
var vbo_overlay_cont = jQuery(".vbo-info-overlay-content"); |
| 189 |
if (!vbo_overlay_cont.is(e.target) && vbo_overlay_cont.has(e.target).length === 0) { |
| 190 |
vboHideDepositOverrides(); |
| 191 |
} |
| 192 |
}); |
| 193 |
jQuery(document).keyup(function(e) { |
| 194 |
if (e.keyCode == 27 && vbo_overlay_on) { |
| 195 |
vboHideDepositOverrides(); |
| 196 |
} |
| 197 |
}); |
| 198 |
}); |
| 199 |
function vboDisplayDepositOverrides() { |
| 200 |
jQuery(".vbo-info-overlay-block").fadeIn(400, function() { |
| 201 |
if (jQuery(".vbo-info-overlay-block").is(":visible")) { |
| 202 |
vbo_overlay_on = true; |
| 203 |
} else { |
| 204 |
vbo_overlay_on = false; |
| 205 |
} |
| 206 |
}); |
| 207 |
} |
| 208 |
function vboHideDepositOverrides() { |
| 209 |
jQuery(".vbo-info-overlay-block").fadeOut(); |
| 210 |
vbo_overlay_on = false; |
| 211 |
} |
| 212 |
function vboPopulateDepositOverrides() { |
| 213 |
var vbo_dep_overrides = jQuery('#depoverrides').val(); |
| 214 |
var vbo_dep_type = document.getElementById('typedeposit'); |
| 215 |
var vbo_dep_oper = vbo_dep_type.options[vbo_dep_type.selectedIndex].text; |
| 216 |
try { |
| 217 |
var dep_ovr_obj = JSON.parse(vbo_dep_overrides); |
| 218 |
var tot_ovr = Object.keys(dep_ovr_obj).length; |
| 219 |
var cur_ovr_str = '', |
| 220 |
cur_ovr_cont = '<div class="vbo-info-overlay-header">'; |
| 221 |
cur_ovr_cont += '<h3><?php echo addslashes(JText::translate('VBOCONFDEPOSITOVRDS')); ?></h3>'; |
| 222 |
cur_ovr_cont += '<div class="vbo-info-overlay-buttons-wrap">'; |
| 223 |
// always include the add and apply buttons |
| 224 |
cur_ovr_cont += '<button type="button" class="btn vbo-config-btn" onclick="vboAddDepositeOverride();"><?php VikBookingIcons::e('plus-circle'); ?> '+vbo_depovr_defs.add+'</button>'; |
| 225 |
cur_ovr_cont += '<button type="button" class="btn btn-success" onclick="vboApplyDepositeOverrides();"><i class="vboicn-checkmark"></i> '+vbo_depovr_defs.apply+'</button>'; |
| 226 |
// |
| 227 |
cur_ovr_cont += '</div>'; |
| 228 |
cur_ovr_cont += '</div>'; |
| 229 |
if (tot_ovr > 1) { |
| 230 |
for (var prop in dep_ovr_obj) { |
| 231 |
if (!dep_ovr_obj.hasOwnProperty(prop) || prop == 'more') { |
| 232 |
continue; |
| 233 |
} |
| 234 |
cur_ovr_str += '<span>'+vbo_depovr_defs.nights+': '+prop+(dep_ovr_obj['more'] == prop ? ' '+vbo_depovr_defs.more : '')+', '+(vbo_dep_oper != '%' ? vbo_dep_oper+' ' : '')+dep_ovr_obj[prop]+(vbo_dep_oper == '%' ? vbo_dep_oper : '')+'</span>'; |
| 235 |
cur_ovr_cont += '<div class="new_depovr_container">'+ |
| 236 |
'<span><span>'+vbo_depovr_defs.nights+'</span><input type="number" min="0" class="new_depovr_nights" value="'+prop+'"/></span>'+ |
| 237 |
'<span>' + (vbo_dep_oper != '%' ? '<span>'+vbo_dep_oper+'</span>' : '') + '<input type="number" min="0" step="any" class="new_depovr_amounts" value="'+dep_ovr_obj[prop]+'"/>' + (vbo_dep_oper == '%' ? '<span>'+vbo_dep_oper+'</span>' : '') + '</span>'+ |
| 238 |
'<span><select class="new_depovr_more"><option value="">---</option><option value="more">'+vbo_depovr_defs.more+'</option></select></span>'+ |
| 239 |
'<span><button type="button" class="btn btn-danger" onclick="jQuery(this).closest(\'.new_depovr_container\').remove();">×</button></span>'+ |
| 240 |
'</div>'; |
| 241 |
} |
| 242 |
jQuery('#cur_depoverrides').html(cur_ovr_str); |
| 243 |
} else { |
| 244 |
//no overrides defined: make the boxes empty |
| 245 |
jQuery('#cur_depoverrides').html(''); |
| 246 |
} |
| 247 |
jQuery('.vbo-info-overlay-content-depovr').html(cur_ovr_cont); |
| 248 |
} catch(e) { |
| 249 |
console.log('cannot parse JSON'); |
| 250 |
console.log(e); |
| 251 |
} |
| 252 |
} |
| 253 |
function vboAddDepositeOverride() { |
| 254 |
var vbo_dep_type = document.getElementById('typedeposit'); |
| 255 |
var vbo_dep_oper = vbo_dep_type.options[vbo_dep_type.selectedIndex].text; |
| 256 |
var add_ovr_cont = '<div class="new_depovr_container">'+ |
| 257 |
'<span><span>'+vbo_depovr_defs.nights+'</span><input type="number" min="0" class="new_depovr_nights" value=""/></span>'+ |
| 258 |
'<span>' + (vbo_dep_oper != '%' ? '<span>'+vbo_dep_oper+'</span>' : '') + '<input type="number" min="0" step="any" class="new_depovr_amounts" value=""/>' + (vbo_dep_oper == '%' ? '<span>'+vbo_dep_oper+'</span>' : '') + '</span>'+ |
| 259 |
'<span><select class="new_depovr_more"><option value="">---</option><option value="more">'+vbo_depovr_defs.more+'</option></select></span>'+ |
| 260 |
'<span><button type="button" class="btn btn-danger" onclick="jQuery(this).closest(\'.new_depovr_container\').remove();">×</button></span>'+ |
| 261 |
'</div>'; |
| 262 |
var cur_ovrs = jQuery('.new_depovr_container'); |
| 263 |
if (cur_ovrs.length > 0) { |
| 264 |
cur_ovrs.last().after(add_ovr_cont); |
| 265 |
} else { |
| 266 |
jQuery('.vbo-info-overlay-content-depovr').append(add_ovr_cont); |
| 267 |
} |
| 268 |
} |
| 269 |
function vboApplyDepositeOverrides() { |
| 270 |
var respval = {"more": ""}; |
| 271 |
var nights_arr = jQuery('.new_depovr_nights'); |
| 272 |
var amounts_arr = jQuery('.new_depovr_amounts'); |
| 273 |
var more_arr = jQuery('.new_depovr_more'); |
| 274 |
nights_arr.each(function(k, v) { |
| 275 |
var use_nights = jQuery(this).val(); |
| 276 |
var use_amounts = jQuery(amounts_arr[k]).val(); |
| 277 |
if (isNaN(use_nights) || isNaN(use_amounts)) { |
| 278 |
console.log('skipping loop #'+k); |
| 279 |
return true; |
| 280 |
} |
| 281 |
respval[parseInt(use_nights)] = parseFloat(use_amounts); |
| 282 |
if (jQuery(more_arr[k]).val() == 'more') { |
| 283 |
respval['more'] = parseInt(use_nights); |
| 284 |
} |
| 285 |
}); |
| 286 |
jQuery('#depoverrides').val(JSON.stringify(respval)); |
| 287 |
vboHideDepositOverrides(); |
| 288 |
vboPopulateDepositOverrides(); |
| 289 |
} |
| 290 |
function vboTogglePayDeposit() { |
| 291 |
if (jQuery('input[name="paytotal"]').prop('checked')) { |
| 292 |
jQuery('.vbo-param-container[data-related="paytotal"]').css('display', 'none'); |
| 293 |
} else { |
| 294 |
jQuery('.vbo-param-container[data-related="paytotal"]').css('display', ''); |
| 295 |
} |
| 296 |
} |
| 297 |
</script> |
| 298 |
|