| @@ -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) ? '&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 = '&datefilt='.$pdatefilt.(!empty($pdatefiltfrom) ? '&datefiltfrom='.$pdatefiltfrom : '').(!empty($pdatefiltto) ? '&datefiltto='.$pdatefiltto : ''); | |
| 349 | + $dates_filter = JHtml::fetch('esc_attr', '&datefilt='.$pdatefilt.(!empty($pdatefiltfrom) ? '&datefiltfrom='.$pdatefiltfrom : '').(!empty($pdatefiltto) ? '&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" /> - <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" /> - <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> |
| 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: () => { |