PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.8.16
VikBooking Hotel Booking Engine & PMS v1.8.16
1.8.16 1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 All 37 releases
← All changes | admin/views/orders/tmpl/default.php +63 -44 1.6.7 → 1.8.16 View file →
@@ -49,9 +49,10 @@
49 49
50 50 $cid = VikRequest::getVar('cid', array());
51 51 $pcust_id = $app->getUserStateFromRequest("vbo.orders.cust_id", 'cust_id', 0, 'int');
52 52 $pconfirmnumber = VikRequest::getString('confirmnumber', '', 'request');
53 -//Color tags
53 +
54 +// color tags
54 55 $colortags = VikBooking::loadBookingsColorTags();
55 56 $bctags_tip = '';
56 57 if (count($colortags) > 0) {
57 58 $bctags_tip = '<div class=\"vbo-blist-tip-bctag-subtip-inner\">';
@@ -59,9 +60,8 @@
59 60 $bctags_tip .= '<div class=\"vbo-blist-tip-bctag-subtip-circle hasTooltip\" data-ctagkey=\"'.$ctagk.'\" data-ctagcolor=\"'.$ctagv['color'].'\" title=\"'.addslashes(JText::translate($ctagv['name'])).'\"><div class=\"vbo-blist-tip-bctag-subtip-circlecont\" style=\"background-color: '.$ctagv['color'].';\"></div></div>';
60 61 }
61 62 $bctags_tip .= '</div>';
62 63 }
63 -//
64 64
65 65 if (empty($rows)) {
66 66 $rows = array();
67 67 ?>
@@ -246,9 +246,9 @@
246 246 <option value="-1"<?php echo $pchannel == '-1' ? ' selected="selected"' : ''; ?>>- <?php echo JText::translate('VBORDFROMSITE'); ?></option>
247 247 <?php
248 248 foreach ($all_channels as $o_channel) {
249 249 ?>
250 - <option value="<?php echo $o_channel; ?>"<?php echo $pchannel == $o_channel ? ' selected="selected"' : ''; ?>>- <?php echo ucwords($o_channel); ?></option>
250 + <option value="<?php echo JHtml::fetch('esc_attr', $o_channel); ?>"<?php echo $pchannel == $o_channel ? ' selected="selected"' : ''; ?>>- <?php echo ucwords($o_channel); ?></option>
251 251 <?php
252 252 }
253 253 }
254 254 ?>
@@ -263,10 +263,10 @@
263 263 foreach ($allrooms as $room) {
264 264 $rsel .= '<option value="'.$room['id'].'"'.(!empty($pidroom) && $pidroom == $room['id'] ? ' selected="selected"' : '').'>'.$room['name'].'</option>';
265 265 }
266 266 $rsel .= '</select>';
267 + echo $rsel;
267 268 }
268 - echo $rsel;
269 269 ?>
270 270 </div>
271 271 <?php
272 272 $pcategory_id = $app->getUserStateFromRequest("vbo.orders.category_id", 'category_id', 0, 'int');
@@ -278,9 +278,9 @@
278 278 <option value=""><?php echo JText::translate('VBOCATEGORYFILTER'); ?></option>
279 279 <?php
280 280 foreach ($this->categories as $catid => $catname) {
281 281 ?>
282 - <option value="<?php echo $catid; ?>"<?php echo $catid == $pcategory_id ? ' selected="selected"' : ''; ?>><?php echo $catname; ?></option>
282 + <option value="<?php echo JHtml::fetch('esc_attr', $catid); ?>"<?php echo $catid == $pcategory_id ? ' selected="selected"' : ''; ?>><?php echo $catname; ?></option>
283 283 <?php
284 284 }
285 285 ?>
286 286 </select>
@@ -302,9 +302,9 @@
302 302 $dbo->setQuery($q);
303 303 $allpayments = $dbo->loadAssocList();
304 304 foreach ($allpayments as $paym) {
305 305 ?>
306 - <option value="<?php echo $paym['id']; ?>"<?php echo $paym['id'] == $pidpayment ? ' selected="selected"' : ''; ?>><?php echo $paym['name']; ?></option>
306 + <option value="<?php echo (int) $paym['id']; ?>"<?php echo $paym['id'] == $pidpayment ? ' selected="selected"' : ''; ?>><?php echo $paym['name']; ?></option>
307 307 <?php
308 308 }
309 309 ?>
310 310 </select>
@@ -316,19 +316,22 @@
316 316 $pstatus = $app->getUserStateFromRequest("vbo.orders.status", 'status', '', 'string');
317 317 $filters_set = !empty($pstatus) || $filters_set;
318 318 $status_filter = !empty($pstatus) ? '&amp;status='.$pstatus : '';
319 319 ?>
320 - <optgroup label="<?php echo JText::translate('VBSTATUS'); ?>">
320 + <optgroup label="<?php echo JHtml::fetch('esc_attr', JText::translate('VBSTATUS')); ?>">
321 321 <option value="confirmed"<?php echo $pstatus == 'confirmed' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBCONFIRMED'); ?></option>
322 322 <option value="standby"<?php echo $pstatus == 'standby' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBSTANDBY'); ?></option>
323 323 <option value="cancelled"<?php echo $pstatus == 'cancelled' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBCANCELLED'); ?></option>
324 - <option value="closure"<?php echo $pstatus == 'closure' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBDBTEXTROOMCLOSED'); ?></option>
324 + </optgroup>
325 + <optgroup label="<?php echo JHtml::fetch('esc_attr', JText::translate('VBPSHOWSEASONSTHREE')); ?>">
325 326 <option value="inquiry"<?php echo $pstatus == 'inquiry' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBO_BTYPE_INQUIRY'); ?></option>
326 327 <option value="request"<?php echo $pstatus == 'request' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBO_BTYPE_REQUEST'); ?></option>
328 + <option value="quote"<?php echo $pstatus == 'quote' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBO_BTYPE_QUOTE'); ?></option>
329 + <option value="overbooking"<?php echo $pstatus == 'overbooking' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBO_BTYPE_OVERBOOKING'); ?></option>
327 330 <option value="split_stay"<?php echo $pstatus == 'split_stay' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBO_SPLIT_STAY'); ?></option>
328 - <option value="overbooking"<?php echo $pstatus == 'overbooking' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBO_BTYPE_OVERBOOKING'); ?></option>
331 + <option value="closure"<?php echo $pstatus == 'closure' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBDBTEXTROOMCLOSED'); ?></option>
329 332 </optgroup>
330 - <optgroup label="<?php echo JText::translate('VBOCHECKEDSTATUS'); ?>">
333 + <optgroup label="<?php echo JHtml::fetch('esc_attr', JText::translate('VBOCHECKEDSTATUS')); ?>">
331 334 <option value="checkedin"<?php echo $pstatus == 'checkedin' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBOCHECKEDSTATUSIN'); ?></option>
332 335 <option value="checkedout"<?php echo $pstatus == 'checkedout' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBOCHECKEDSTATUSOUT'); ?></option>
333 336 <option value="noshow"<?php echo $pstatus == 'noshow' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBOCHECKEDSTATUSNOS'); ?></option>
334 337 <option value="none"<?php echo $pstatus == 'none' ? ' selected="selected"' : ''; ?>><?php echo JText::translate('VBOCHECKEDSTATUSZERO'); ?></option>
@@ -342,9 +345,9 @@
342 345 $pdatefiltfrom = $app->getUserStateFromRequest("vbo.orders.datefiltfrom", 'datefiltfrom', '', 'string');
343 346 $pdatefiltto = $app->getUserStateFromRequest("vbo.orders.datefiltto", 'datefiltto', '', 'string');
344 347 if (!empty($pdatefilt) && (!empty($pdatefiltfrom) || !empty($pdatefiltto))) {
345 348 $filters_set = true;
346 - $dates_filter = '&amp;datefilt='.$pdatefilt.(!empty($pdatefiltfrom) ? '&amp;datefiltfrom='.$pdatefiltfrom : '').(!empty($pdatefiltto) ? '&amp;datefiltto='.$pdatefiltto : '');
349 + $dates_filter = JHtml::fetch('esc_attr', '&amp;datefilt='.$pdatefilt.(!empty($pdatefiltfrom) ? '&amp;datefiltfrom='.$pdatefiltfrom : '').(!empty($pdatefiltto) ? '&amp;datefiltto='.$pdatefiltto : ''));
347 350 }
348 351 $datesel = '<select name="datefilt" onchange="vboToggleDateFilt(this.value);"><option value="">'.JText::translate('VBOFILTERBYDATES').'</option>';
349 352 $datesel .= '<option value="1"'.(!empty($pdatefilt) && $pdatefilt == 1 ? ' selected="selected"' : '').'>'.JText::translate('VBOFILTERDATEBOOK').'</option>';
350 353 $datesel .= '<option value="2"'.(!empty($pdatefilt) && $pdatefilt == 2 ? ' selected="selected"' : '').'>'.JText::translate('VBOFILTERDATEIN').'</option>';
@@ -353,9 +356,9 @@
353 356 echo $datesel;
354 357 ?>
355 358 </div>
356 359 <div class="btn-group pull-left" id="vbo-dates-cont" style="display: <?php echo (!empty($pdatefilt) && (!empty($pdatefiltfrom) || !empty($pdatefiltto)) ? 'inline-block' : 'none'); ?>;">
357 - <input type="text" id="vbo-date-from" placeholder="<?php echo JText::translate('VBNEWSEASONONE'); ?>" value="<?php echo $pdatefiltfrom; ?>" size="10" name="datefiltfrom" autocomplete="off" />&nbsp;-&nbsp;<input type="text" id="vbo-date-to" placeholder="<?php echo JText::translate('VBNEWSEASONTWO'); ?>" value="<?php echo $pdatefiltto; ?>" size="10" name="datefiltto" autocomplete="off" />
360 + <input type="text" id="vbo-date-from" placeholder="<?php echo JText::translate('VBNEWSEASONONE'); ?>" value="<?php echo JHtml::fetch('esc_attr', $pdatefiltfrom); ?>" size="10" name="datefiltfrom" autocomplete="off" />&nbsp;-&nbsp;<input type="text" id="vbo-date-to" placeholder="<?php echo JText::translate('VBNEWSEASONTWO'); ?>" value="<?php echo JHtml::fetch('esc_attr', $pdatefiltto); ?>" size="10" name="datefiltto" autocomplete="off" />
358 361 </div>
359 362 <div class="btn-group pull-left">
360 363 <button type="submit" class="btn btn-primary"><i class="icon-search"></i> <?php echo JText::translate('VBPVIEWORDERSSEARCHSUBM'); ?></button>
361 364 </div>
@@ -408,9 +411,9 @@
408 411 <th class="title center" width="100" align="center"><span><?php echo JText::translate('VBPVIEWORDERCHANNEL'); ?></span></th>
409 412 </tr>
410 413 </thead>
411 414 <?php
412 - $currencysymb = VikBooking::getCurrencySymb(true);
415 + $currencysymb = VikBooking::getCurrencySymb();
413 416 $monsmap = array(
414 417 JText::translate('VBSHORTMONTHONE'),
415 418 JText::translate('VBSHORTMONTHTWO'),
416 419 JText::translate('VBSHORTMONTHTHREE'),
@@ -470,9 +473,9 @@
470 473 if (strstr($otachannelclass, '.') !== false) {
471 474 $otaccparts = explode('.', $otachannelclass);
472 475 $otachannelclass = $otaccparts[0];
473 476 }
474 - $otacurrency = strlen($row['chcurrency']) > 0 ? $row['chcurrency'] : '';
477 + $otacurrency = strlen((string)$row['chcurrency']) ? $row['chcurrency'] : '';
475 478 }
476 479 //Customer Details
477 480 $custdata = $row['custdata'];
478 481 $custdata_parts = explode("\n", $row['custdata']);
@@ -598,9 +601,9 @@
598 601 <?php echo $custdata; ?>
599 602 </div>
600 603 <div class="vbo-customer-info-box-avatar vbo-customer-avatar-small">
601 604 <span>
602 - <img src="<?php echo strpos($customer_avatar, 'http') === 0 ? $customer_avatar : VBO_SITE_URI . 'resources/uploads/' . $customer_avatar; ?>" data-caption="<?php echo htmlspecialchars($avatar_caption); ?>" />
605 + <img src="<?php echo strpos($customer_avatar, 'http') === 0 ? $customer_avatar : VBO_SITE_URI . 'resources/uploads/' . $customer_avatar; ?>" data-caption="<?php echo htmlspecialchars($avatar_caption); ?>" decoding="async" loading="lazy" />
603 606 </span>
604 607 </div>
605 608 </div>
606 609 <?php
@@ -607,9 +610,9 @@
607 610 } else {
608 611 echo $custdata;
609 612 }
610 613 ?>
611 - <span class="vbo-orders-review-link" style="display: none;" title="<?php echo addslashes(JText::translate('VBOSEEGUESTREVIEW')); ?>" data-bid="<?php echo $row['id']; ?>"></span>
614 + <span class="vbo-orders-review-link" title="<?php echo $this->escape(JText::translate('VBOSEEGUESTREVIEW')); ?>" data-bid="<?php echo $row['id']; ?>" style="display: none;"></span>
612 615 </td>
613 616 <td class="center">
614 617 <?php
615 618 if (count($room_names) > 1) {
@@ -716,23 +719,20 @@
716 719 </td>
717 720 <td class="center">
718 721 <div class="vbo-bookingslist-total-wrap">
719 722 <div class="vbo-bookingslist-total-amount">
720 - <span><?php echo strlen($otacurrency) > 0 ? $otacurrency : $currencysymb; ?></span>
721 - <span><?php echo VikBooking::numberFormat($isdue); ?></span>
723 + <?php echo VikBooking::formatCurrencyNumber(VikBooking::numberFormat($isdue), ($otacurrency ?: $currencysymb), ['<span>%s</span>', '<span>%s</span>']); ?>
722 724 </div>
723 725 <?php
724 726 if (!is_null($row['totpaid'])) {
725 727 ?>
726 728 <div class="vbo-bookingslist-total-totpaid">
727 - <span><?php echo $currencysymb; ?></span>
728 - <span><?php echo VikBooking::numberFormat($row['totpaid']); ?></span>
729 + <?php echo VikBooking::formatCurrencyNumber(VikBooking::numberFormat($row['totpaid']), $currencysymb, ['<span>%s</span>', '<span>%s</span>']); ?>
729 730 <?php
730 731 if ($row['refund'] > 0) {
731 732 ?>
732 733 <span class="vbo-bookingslist-total-refunded">
733 - <span><?php echo $currencysymb; ?></span>
734 - <span><?php echo VikBooking::numberFormat($row['refund']); ?></span>
734 + <?php echo VikBooking::formatCurrencyNumber(VikBooking::numberFormat($row['refund']), $currencysymb, ['<span>%s</span>', '<span>%s</span>']); ?>
735 735 </span>
736 736 <?php
737 737 }
738 738 ?>
@@ -741,10 +741,9 @@
741 741 } elseif ($row['refund'] > 0) {
742 742 ?>
743 743 <div class="vbo-bookingslist-total-totpaid">
744 744 <span class="vbo-bookingslist-total-refunded">
745 - <span><?php echo $currencysymb; ?></span>
746 - <span><?php echo VikBooking::numberFormat($row['refund']); ?></span>
745 + <?php echo VikBooking::formatCurrencyNumber(VikBooking::numberFormat($row['refund']), $currencysymb, ['<span>%s</span>', '<span>%s</span>']); ?>
747 746 </span>
748 747 </div>
749 748 <?php
750 749 }
@@ -766,12 +765,20 @@
766 765 <?php
767 766 if (!empty($row['adminnotes'])) {
768 767 ?>
769 768 <span class="vbo-admin-tipsicon vbo-admin-notes-icn" data-bid="<?php echo $row['id']; ?>"><?php VikBookingIcons::e('sticky-note'); ?></span>&nbsp;
770 - <div class="vbo-order-admin-notes-cnt" data-bid="<?php echo $row['id']; ?>" style="display: none;"><?php echo nl2br($row['adminnotes']); ?></div>
769 + <div class="vbo-order-admin-notes-cnt" data-bid="<?php echo $row['id']; ?>" style="display: none;"><?php echo nl2br(htmlspecialchars($row['adminnotes'])); ?></div>
771 770 <?php
772 771 }
773 - $invoice_path = implode(DIRECTORY_SEPARATOR, [VBO_SITE_PATH, 'helpers', 'invoices', 'generated', "{$row['id']}_{$row['sid']}.pdf"]);
772 +
773 + // build the proper invoice SID for bc
774 + $inv_sid = $row['sid'] ?: $row['idorderota'] ?: '';
775 + if (empty($row['sid']) && is_file(implode(DIRECTORY_SEPARATOR, [VBO_SITE_PATH, 'helpers', 'invoices', 'generated', "{$row['id']}_{$row['sid']}.pdf"]))) {
776 + // use the old file name signature for OTA bookings
777 + $inv_sid = $row['sid'];
778 + }
779 + $invoice_path = implode(DIRECTORY_SEPARATOR, [VBO_SITE_PATH, 'helpers', 'invoices', 'generated', "{$row['id']}_{$inv_sid}.pdf"]);
780 +
774 781 echo (is_file($invoice_path) ? '<a class="hasTooltip vbo-admin-invoiceicon" href="'.VBO_SITE_URI.'helpers/invoices/generated/'.$row['id'].'_'.$row['sid'].'.pdf" target="_blank" title="' . htmlspecialchars(JText::translate('VBOINVDOWNLOAD')) . '"><i class="' . VikBookingIcons::i('invoice') . '"></i></a>' : '');
775 782 ?>
776 783 <span class="vbo-bookings-guestmessages-bubble-cont vbo-admin-tipsicon" style="display: none;" data-bid="<?php echo $row['id']; ?>">
777 784 <a href="index.php?option=com_vikbooking&task=editorder&cid[]=<?php echo $row['id']; ?>#messaging">
@@ -812,9 +819,9 @@
812 819
813 820 </table>
814 821 </div>
815 822 <input type="hidden" name="option" value="com_vikbooking" />
816 -<input type="hidden" name="cust_id" id="cust_id" value="<?php echo !empty($pcust_id) ? $pcust_id : ''; ?>" />
823 +<input type="hidden" name="cust_id" id="cust_id" value="<?php echo !empty($pcust_id) ? JHtml::fetch('esc_attr', $pcust_id) : ''; ?>" />
817 824 <input type="hidden" name="task" value="orders" />
818 825 <input type="hidden" name="boxchecked" value="0" />
819 826 <?php echo JHtml::fetch('form.token'); ?>
820 827 <?php echo $navbut; ?>
@@ -819,12 +826,10 @@
819 826 <?php echo JHtml::fetch('form.token'); ?>
820 827 <?php echo $navbut; ?>
821 828 </form>
822 829
823 -<a style="display: none;" id="vcm-review-details-base" href="index.php?option=com_vikchannelmanager&task=reviews&revid="></a>
824 -
825 830 <script type="text/javascript">
826 -if (jQuery.isFunction(jQuery.fn.tooltip)) {
831 +if (typeof jQuery.fn.tooltip === 'function') {
827 832 jQuery(".hasTooltip").tooltip();
828 833 } else {
829 834 jQuery.fn.tooltip = function(){};
830 835 }
@@ -989,9 +994,9 @@
989 994 if ( e.keyCode == 27 && bctags_tip_on === true ) {
990 995 jQuery(".vbo-blist-tip-bctag-subtip").remove();
991 996 bctags_tip_on = false;
992 997 }
993 - if (e.keyCode == 13) {
998 + if (e.keyCode == 13 && !e.altKey && !e.ctrlKey && !e.shiftKey) {
994 999 //prevent form-submit by hitting enter
995 1000 e.preventDefault();
996 1001 return false;
997 1002 }
@@ -998,9 +1003,9 @@
998 1003 });
999 1004
1000 1005 jQuery(document).mouseup(function(e) {
1001 1006 if (!bctags_tip_on) {
1002 - return false;
1007 + return;
1003 1008 }
1004 1009 if (jQuery(".vbo-blist-tip-bctag-subtip").length) {
1005 1010 var vbo_overlay_subtip_cont = jQuery(".vbo-blist-tip-bctag-subtip-inner");
1006 1011 if (!vbo_overlay_subtip_cont.is(e.target) && vbo_overlay_subtip_cont.has(e.target).length === 0) {
@@ -1005,9 +1010,9 @@
1005 1010 var vbo_overlay_subtip_cont = jQuery(".vbo-blist-tip-bctag-subtip-inner");
1006 1011 if (!vbo_overlay_subtip_cont.is(e.target) && vbo_overlay_subtip_cont.has(e.target).length === 0) {
1007 1012 jQuery(".vbo-blist-tip-bctag-subtip").remove();
1008 1013 bctags_tip_on = false;
1009 - return true;
1014 + return;
1010 1015 }
1011 1016 }
1012 1017 });
1013 1018
@@ -1057,15 +1062,29 @@
1057 1062 bids: <?php echo json_encode($vcm_bids); ?>
1058 1063 },
1059 1064 (res) => {
1060 1065 try {
1061 - var obj = JSON.parse(res);
1062 - var base_link = jQuery('#vcm-review-details-base').attr('href');
1063 - for (var bid in obj) {
1066 + // loop through all bookings with a review
1067 + var obj = typeof res === 'object' ? res : JSON.parse(res);
1068 + for (let bid in obj) {
1064 1069 if (!obj.hasOwnProperty(bid)) {
1065 1070 continue;
1066 1071 }
1067 - jQuery('.vbo-orders-review-link[data-bid="' + bid + '"]').html('<a href="' + base_link + obj[bid] + '" target="_blank"><?php VikBookingIcons::e('star'); ?></a>').fadeIn();
1072 +
1073 + // the review ID
1074 + let review_id = obj[bid];
1075 +
1076 + // click-able element
1077 + var rev_elem = jQuery('<a></a>').addClass('vbo-staropen-greview').html('<?php VikBookingIcons::e('star'); ?>');
1078 + rev_elem.on('click', (e) => {
1079 + e.stopPropagation();
1080 + VBOCore.handleDisplayWidgetNotification({widget_id: 'guest_reviews'}, {review_id: review_id});
1081 + });
1082 +
1083 + // review trigger element
1084 + var trigger = jQuery('.vbo-orders-review-link[data-bid="' + bid + '"]');
1085 + trigger.append(rev_elem);
1086 + trigger.fadeIn();
1068 1087 }
1069 1088 } catch(err) {
1070 1089 console.error(err);
1071 1090 }
@@ -1157,9 +1176,9 @@
1157 1176 tmpl: "component",
1158 1177 id_order: all_bids
1159 1178 },
1160 1179 (res) => {
1161 - var counters = JSON.parse(res);
1180 + var counters = typeof res === 'object' ? res : JSON.parse(res);
1162 1181 for (var bid in all_bids) {
1163 1182 if (!all_bids.hasOwnProperty(bid)) {
1164 1183 continue;
1165 1184 }
@@ -1226,13 +1245,13 @@
1226 1245 <div class="vbo-gen-invoices-helper" style="display: none;">
1227 1246 <form action="index.php?option=com_vikbooking" method="post" id="vbo-geninv-form">
1228 1247 <div class="vbo-calendar-cfield-entry">
1229 1248 <label for="invoice_num"><?php echo JText::translate('VBINVSTARTNUM'); ?></label>
1230 - <span><input type="number" min="1" size="4" value="<?php echo $nextinvnum; ?>" id="invoice_num" name="invoice_num" /></span>
1249 + <span><input type="number" min="1" size="4" value="<?php echo JHtml::fetch('esc_attr', $nextinvnum); ?>" id="invoice_num" name="invoice_num" /></span>
1231 1250 </div>
1232 1251 <div class="vbo-calendar-cfield-entry">
1233 1252 <label for="invoice_suff"><?php echo JText::translate('VBINVNUMSUFFIX'); ?></label>
1234 - <span><input type="text" size="7" value="<?php echo $invsuff; ?>" id="invoice_suff" name="invoice_suff" /></span>
1253 + <span><input type="text" size="7" value="<?php echo JHtml::fetch('esc_attr', $invsuff); ?>" id="invoice_suff" name="invoice_suff" /></span>
1235 1254 </div>
1236 1255 <div class="vbo-calendar-cfield-entry">
1237 1256 <label for="invoice_date"><?php echo JText::translate('VBINVUSEDATE'); ?></label>
1238 1257 <span>
@@ -1239,9 +1258,9 @@
1239 1258 <select id="invoice_date" name="invoice_date">
1240 1259 <?php
1241 1260 if (!empty($oldinvdate)) {
1242 1261 ?>
1243 - <option value="<?php echo date($df, $oldinvdate); ?>"><?php echo date($df, $oldinvdate); ?></option>
1262 + <option value="<?php echo JHtml::fetch('esc_attr', date($df, $oldinvdate)); ?>"><?php echo date($df, $oldinvdate); ?></option>
1244 1263 <?php
1245 1264 }
1246 1265 ?>
1247 1266 <option value="<?php echo date($df, time()); ?>"><?php echo date($df, time()); ?></option>
@@ -1261,12 +1280,12 @@
1261 1280
1262 1281 </div>
1263 1282 <?php
1264 1283 foreach ($cid as $invid) {
1265 - echo '<input type="hidden" name="cid[]" value="'.$invid.'" />';
1284 + echo '<input type="hidden" name="cid[]" value="'. (int) $invid . '" />';
1266 1285 }
1267 1286 if ($pconfirmgen > 0) {
1268 - echo '<input type="hidden" name="confirmgen" value="'.$cid[0].'" />';
1287 + echo '<input type="hidden" name="confirmgen" value="' . (int) $cid[0] . '" />';
1269 1288 }
1270 1289 ?>
1271 1290 <input type="hidden" name="option" value="com_vikbooking" />
1272 1291 <input type="hidden" name="task" value="geninvoices" />
@@ -1284,9 +1303,9 @@
1284 1303 footer_right: '<button type="button" class="btn btn-success" onclick="document.getElementById(\'vbo-geninv-form\').submit();"><i class="vboicn-file-text2"></i><?php echo addslashes(JText::translate('VBOGENINVOICES')); ?></button>',
1285 1304 <?php
1286 1305 if (count($cid) === 1) {
1287 1306 ?>
1288 - footer_left: '<a href="index.php?option=com_vikbooking&task=editbusy&cid[]=<?php echo $cid[0]; ?>&frominv=1" class="btn vbo-config-btn"><?php echo addslashes(JText::translate('VBINVEDITBINFO')); ?></a>',
1307 + footer_left: '<a href="index.php?option=com_vikbooking&task=editbusy&cid[]=<?php echo (int) $cid[0]; ?>&frominv=1" class="btn vbo-config-btn"><?php echo addslashes(JText::translate('VBINVEDITBINFO')); ?></a>',
1289 1308 <?php
1290 1309 }
1291 1310 ?>
1292 1311 onDismiss: () => {