From 5013b2777704fdd90fee22acfad11cd65ae5ac1f Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Fri, 9 Jan 2026 17:08:55 +0530 Subject: [PATCH 01/78] Fixed: order details action permission issue --- .../template/controllers/orders/helpers/view/view.tpl | 2 +- controllers/admin/AdminOrdersController.php | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl index c0c841758..62911ba03 100644 --- a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl @@ -1110,7 +1110,7 @@
 {l s='Voucher'} - {if $can_edit && $order->total_paid > 0} + {if $can_edit && $order->total_paid > 0 && $cartRuleAccess['add'] === 1} diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 30026bcca..b142e385d 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -1028,7 +1028,11 @@ class AdminOrdersControllerCore extends AdminController $taxRulesGroups = TaxRulesGroup::getTaxRulesGroups(true); $smartyVars['taxRulesGroups'] = $taxRulesGroups; $smartyVars['invoices_collection'] = $objOrder->getInvoicesCollection(); - $smartyVars['customServiceAllowed'] = Configuration::get('PS_ALLOW_CREATE_CUSTOM_SERVICES_IN_BOOKING'); + $serviceProductAccess = Profile::getProfileAccess( + $this->context->employee->id_profile, + Tab::getIdFromClassName('AdminNormalProducts') + ); + $smartyVars['customServiceAllowed'] = $serviceProductAccess['add'] && Configuration::get('PS_ALLOW_CREATE_CUSTOM_SERVICES_IN_BOOKING'); $smartyVars['current_id_lang'] = $this->context->language->id; $this->context->smarty->assign($smartyVars); @@ -3602,6 +3606,7 @@ class AdminOrdersControllerCore extends AdminController $objProduct = new Product(); $hotelStandaloneProducts = $objProduct->getServiceProducts(null, Product::SELLING_PREFERENCE_HOTEL_STANDALONE); $standaloneProducts = $objProduct->getServiceProducts(null, Product::SELLING_PREFERENCE_STANDALONE); + $cartRuleAccess = Profile::getProfileAccess($this->context->employee->id_profile, (int)Tab::getIdFromClassName('AdminCartRules')); $this->tpl_view_vars = array( 'hotelStandaloneProducts' => $hotelStandaloneProducts, @@ -3670,6 +3675,7 @@ class AdminOrdersControllerCore extends AdminController 'iso_code_lang' => $this->context->language->iso_code, 'id_lang' => $this->context->language->id, 'can_edit' => ($this->tabAccess['edit'] === 1), + 'cartRuleAccess' => $cartRuleAccess, 'current_id_lang' => $this->context->language->id, 'invoices_collection' => $order->getInvoicesCollection(), 'not_paid_invoices_collection' => $order->getNotPaidInvoicesCollection(), From e88faa7fd42975cb5e1ba1fbe1bcca2784cb1ca2 Mon Sep 17 00:00:00 2001 From: azhar bhat Date: Wed, 21 Jan 2026 19:19:11 +0530 Subject: [PATCH 02/78] Vulnerability issue while uploading code updated --- modules/qlohotelreview/classes/QhrHotelReview.php | 4 ++++ modules/qlohotelreview/controllers/front/default.php | 2 +- modules/qlohotelreview/views/js/hook/review.js | 8 ++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/modules/qlohotelreview/classes/QhrHotelReview.php b/modules/qlohotelreview/classes/QhrHotelReview.php index 8768061d2..70ef425ed 100644 --- a/modules/qlohotelreview/classes/QhrHotelReview.php +++ b/modules/qlohotelreview/classes/QhrHotelReview.php @@ -290,9 +290,13 @@ class QhrHotelReview extends ObjectModel public function saveReviewImages() { $files = QhrHotelReviewHelper::fileAttachmentMultiple('images'); + $allowedExtensions = array('jpg', 'png', 'jpeg',); if (is_array($files) && count($files)) { foreach ($files as $key => $file) { $ext = pathinfo($file['rename'], PATHINFO_EXTENSION); + if (!in_array($ext, $allowedExtensions, true)) { + continue; + } $dir = _PS_MODULE_DIR_.'qlohotelreview/views/img/review/'.Image::getImgFolderStatic($this->id); QhrHotelReviewHelper::createDirectory($dir); $useSameExt = false; diff --git a/modules/qlohotelreview/controllers/front/default.php b/modules/qlohotelreview/controllers/front/default.php index c380cd5f7..899428526 100644 --- a/modules/qlohotelreview/controllers/front/default.php +++ b/modules/qlohotelreview/controllers/front/default.php @@ -86,7 +86,7 @@ class QloHotelReviewDefaultModuleFrontController extends ModuleFrontController } if (is_array($_FILES) && array_key_exists('images', $_FILES) ) { - $allowedExtensions = array('jpg', 'png'); + $allowedExtensions = array('jpg', 'png', 'jpeg',); foreach ($_FILES['images']['name'] as $key => $imageName) { $extension = Tools::strtolower(pathinfo($imageName, PATHINFO_EXTENSION)); if (!in_array($extension, $allowedExtensions)) { diff --git a/modules/qlohotelreview/views/js/hook/review.js b/modules/qlohotelreview/views/js/hook/review.js index 2a30ce2ef..b34571456 100644 --- a/modules/qlohotelreview/views/js/hook/review.js +++ b/modules/qlohotelreview/views/js/hook/review.js @@ -147,7 +147,7 @@ var QhrReviewImages = { reader.readAsDataURL(file); }, removeFile: function(iInput, iFile) { - var input = $('.images-field input.input-images').eq(iInput); + var input = $('.images-field input.input-images').get(iInput); var files = $(input).get(0).files; var dataTransfer = new DataTransfer(); $(files).each(function(iiFile, file) { @@ -155,9 +155,9 @@ var QhrReviewImages = { dataTransfer.items.add(file); } }); - input.get(0).files = dataTransfer.files; - if (input.get(0).files.length === 0) { - input.remove(); + input.files = dataTransfer.files; + if (input.files.length === 0) { + $(input).remove(); } }, resetPreviews: function() { From 96df477887b1f9fd599a33a1a9a8218c83101bef Mon Sep 17 00:00:00 2001 From: azhar bhat Date: Fri, 23 Jan 2026 12:26:00 +0530 Subject: [PATCH 03/78] Prevent invalid formats before upload --- .../controllers/front/default.php | 2 +- modules/qlohotelreview/qlohotelreview.php | 1 + .../qlohotelreview/views/css/front/review.css | 4 +++ .../qlohotelreview/views/js/hook/review.js | 26 ++++++++++++++++++- .../views/templates/hook/add-review-popup.tpl | 1 + 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/modules/qlohotelreview/controllers/front/default.php b/modules/qlohotelreview/controllers/front/default.php index 899428526..66e1b0a4f 100644 --- a/modules/qlohotelreview/controllers/front/default.php +++ b/modules/qlohotelreview/controllers/front/default.php @@ -90,7 +90,7 @@ class QloHotelReviewDefaultModuleFrontController extends ModuleFrontController foreach ($_FILES['images']['name'] as $key => $imageName) { $extension = Tools::strtolower(pathinfo($imageName, PATHINFO_EXTENSION)); if (!in_array($extension, $allowedExtensions)) { - $errors['general'][] = $imageName . ' ' . $objModule->l('is not a supported image format.','default'); + $errors['general'][] = $objModule->l('Only images with the following extensions are allowed: jpg, jpeg, png','default'); } } } diff --git a/modules/qlohotelreview/qlohotelreview.php b/modules/qlohotelreview/qlohotelreview.php index 405f12ff4..086265f15 100644 --- a/modules/qlohotelreview/qlohotelreview.php +++ b/modules/qlohotelreview/qlohotelreview.php @@ -182,6 +182,7 @@ class QloHotelReview extends Module $this->l('You can upload a maximum of %d images.', false, true), (int) Configuration::get('QHR_MAX_IMAGES_PER_REVIEW') ), + 'allowed_extensions' => $this->l('Only images with the following extensions are allowed: jpg, jpeg, png', false, true), ), ))); diff --git a/modules/qlohotelreview/views/css/front/review.css b/modules/qlohotelreview/views/css/front/review.css index 0c7346dce..539d10199 100644 --- a/modules/qlohotelreview/views/css/front/review.css +++ b/modules/qlohotelreview/views/css/front/review.css @@ -52,6 +52,10 @@ margin-bottom: 14px; } +#add-review-popup .hint { + margin-top: 6px; +} + #add-review-popup .review-error { margin-top: 2px; color: #E85757; diff --git a/modules/qlohotelreview/views/js/hook/review.js b/modules/qlohotelreview/views/js/hook/review.js index b34571456..2db6b37b9 100644 --- a/modules/qlohotelreview/views/js/hook/review.js +++ b/modules/qlohotelreview/views/js/hook/review.js @@ -132,6 +132,29 @@ var QhrReviewImages = { init: function() { QhrReviewImages.inputHtml = ''; }, + validateFiles: function () { + $('#review-general-errors').hide(); + let isValid = true; + $('.images-field input.input-images').each(function (iInput, input) { + let files = input.files; + let dataTransfer = new DataTransfer(); + $.each(files, function (iFile, file) { + if (file.type.startsWith('image/')) { + dataTransfer.items.add(file); + } else { + isValid = false; + } + }); + input.files = dataTransfer.files; + if (!input.files.length) { + $(input).remove(); + } + }); + if (!isValid) { + QhrReviewForm.showGeneralErrors(qlo_hotel_review_js_vars.texts.allowed_extensions); + } + return isValid; + }, getFilesCount: function() { var count = 0; $('.images-field input.input-images').each(function(i, input) { @@ -244,8 +267,9 @@ $(document).on('change', 'input.input-images', function(e) { var filesCount = QhrReviewImages.getFilesCount(); if (filesCount > qlo_hotel_review_js_vars.num_images_max) { QhrReviewImages.removeLastInput(); - alert(qlo_hotel_review_js_vars.texts.num_files); + QhrReviewForm.showGeneralErrors(qlo_hotel_review_js_vars.texts.num_files); } else { + QhrReviewImages.validateFiles(); QhrReviewImages.updatePreviews(); if (filesCount == qlo_hotel_review_js_vars.num_images_max) { diff --git a/modules/qlohotelreview/views/templates/hook/add-review-popup.tpl b/modules/qlohotelreview/views/templates/hook/add-review-popup.tpl index a838127d8..1ba6f6936 100644 --- a/modules/qlohotelreview/views/templates/hook/add-review-popup.tpl +++ b/modules/qlohotelreview/views/templates/hook/add-review-popup.tpl @@ -40,6 +40,7 @@
+

{l s='Allowed formats are: .jpg, .jpeg, .png' mod='qlohotelreview'}

From 48e08bed870dc4e6ad1486fb26d0bcc06f285a29 Mon Sep 17 00:00:00 2001 From: azhar bhat Date: Tue, 17 Feb 2026 15:33:31 +0530 Subject: [PATCH 04/78] Improve room management: introduce connected rooms in Back Office --- .../orders/_current_cart_details_data.tpl | 6 +- .../controllers/orders/_product_line.tpl | 3 + .../controllers/products/configuration.tpl | 153 ++++++++++++++++++ .../controllers/products/connected-rooms.tpl | 87 ++++++++++ .../products/modal-connected-rooms.tpl | 148 +++++++++++++++++ controllers/admin/AdminOrdersController.php | 1 + .../classes/HotelCartBookingData.php | 1 + .../classes/HotelReservationSystemDb.php | 11 +- .../classes/HotelRoomConnected.php | 86 ++++++++++ .../AdminHotelRoomsBookingController.php | 1 + modules/hotelreservationsystem/define.php | 1 + .../helpers/view/_partials/booking-rooms.tpl | 6 +- 12 files changed, 501 insertions(+), 3 deletions(-) create mode 100644 admin/themes/default/template/controllers/products/connected-rooms.tpl create mode 100644 admin/themes/default/template/controllers/products/modal-connected-rooms.tpl create mode 100644 modules/hotelreservationsystem/classes/HotelRoomConnected.php diff --git a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl index e3405fa99..161c83965 100644 --- a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl +++ b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl @@ -51,7 +51,11 @@ {assign var=curr_id value=$cart->id_currency|intval} {foreach from=$cart_detail_data item=data} - {$data.room_num|escape:'html':'UTF-8'} {hook h='displayRoomNumAfter' data=$data type='adminOrder'} + {$data.room_num|escape:'html':'UTF-8'} + {if isset($data['connected_rooms'][$data['id_room']]) && $data['connected_rooms'][$data['id_room']]|@count > 0} + {include file="controllers/products/connected-rooms.tpl" htl_connected_rooms= $data['connected_rooms'][$data['id_room']]} + {/if} + {hook h='displayRoomNumAfter' data=$data type='adminOrder'}

{$data.room_type|escape:'html':'UTF-8'}

diff --git a/admin/themes/default/template/controllers/orders/_product_line.tpl b/admin/themes/default/template/controllers/orders/_product_line.tpl index 1e44a648f..299c0fa22 100644 --- a/admin/themes/default/template/controllers/orders/_product_line.tpl +++ b/admin/themes/default/template/controllers/orders/_product_line.tpl @@ -29,6 +29,9 @@ {if $data.is_back_order} {l s='overbooked'} {/if} + {if isset($data['connected_rooms'][$data['id_room']]) && $data['connected_rooms'][$data['id_room']]|@count > 0} + {include file="controllers/products/connected-rooms.tpl" htl_connected_rooms=$data['connected_rooms'][$data['id_room']]} + {/if} diff --git a/admin/themes/default/template/controllers/products/configuration.tpl b/admin/themes/default/template/controllers/products/configuration.tpl index 7f0bc0f60..c960e3f53 100644 --- a/admin/themes/default/template/controllers/products/configuration.tpl +++ b/admin/themes/default/template/controllers/products/configuration.tpl @@ -67,6 +67,14 @@ + + + {hook h='displayHotelRoomListTableHeaderColumn'} {l s='--'} @@ -108,6 +116,16 @@ {* Since the data can also be used from post incase of errors, which will cause issues with the id index *} + + {if isset($room_info['id'])} + + + + {/if} + {if isset($room_info['id'])} {hook h='displayHotelRoomListTableRowColumn' index=$key id_room=$room_info['id']} {else} @@ -1885,6 +1903,141 @@ return false; } } + //connected modal + $(document).on('click', '.connectedRoomModal', function(e) { + e.preventDefault(); + + let roomId = $(this).data('id-room'); + let hotelId = $(this).data('id-hotel'); + let currentRoomType = $('[name="id_product"]').val(); + $.ajax({ + type: 'POST', + url: prod_link, + dataType: 'json', + data: { + ajax: true, + action: 'getModalConnectedRooms', + room_id: roomId, + hotel_id: hotelId, + current_roomtype: currentRoomType, + }, + success: function(response) { + $('#modalLoader').remove(); + if (response.success) { + if ($('#connectedRoomModal').length) { + $('#connectedRoomModal').modal('hide'); + $('#connectedRoomModal').data('bs.modal', null); + $('#connectedRoomModal').remove(); + } + $('.modal-backdrop').remove(); + $('body').removeClass('modal-open'); + $("#footer").next(".bootstrap").append(response.html); + $('#connectedRoomModal').modal({ + backdrop: 'static', + keyboard: true + }); + } else { + alert(response.message); + } + } + + + }); + }); + function filterRoomsByType() { + var selectedType = $('#connect_room_type').val(); + var firstVisible = null; + $('#connect_room option').each(function() { + if ($(this).data('type') == selectedType) { + $(this).show(); + if (!firstVisible) firstVisible = $(this); + } else { + $(this).hide(); + } + }); + if (firstVisible) { + firstVisible.prop('selected', true); + } + } + $(document).on('change', '#connect_room_type', function() { + filterRoomsByType(); + }); + $(document).on('shown.bs.modal', '#connectedRoomModal', function() { + filterRoomsByType(); + }); + //add connected room + $(document).on('click', '#save_connected_room', function() { + var mainRoomId = $('#connected_room_main_id').val(); + var connectedRoomId = $('#connect_room').val(); + var hotelId = $('#hotel_id').val(); + let currentRoomType = $('[name="id_product"]').val(); + if (!connectedRoomId) { + alert('Please select a room'); + return; + } + $.ajax({ + url: prod_link, + type: 'POST', + dataType: 'json', + data: { + ajax: true, + action: 'ManageConnectedRoom', + mode: 'add', + hotel_id: hotelId, + room_id: mainRoomId, + connected_room_id: connectedRoomId, + current_roomtype: currentRoomType, + }, + beforeSend: function() { + $('#save_connected_room').prop('disabled', true); + }, + success: function(response) { + if (response.success) { + showSuccessMessage(response.message); + $('#connectedRoomModal .modal-content').replaceWith($(response.html).find('.modal-content')); + filterRoomsByType(); + } else { + alert(response.message); + } + }, + complete: function() { + $('#save_connected_room').prop('disabled', false); + } + }); + }); + //remove connected room + $(document).on('click', '.delete-connected-room', function() { + var roomId = $(this).data('room-id'); + var connectedRoomId = $(this).data('connected-room-id'); + var connectedId = $(this).data('connected-id'); + var hotelId = $(this).data('hotel-id'); + let currentRoomType = $('[name="id_product"]').val(); + $.ajax({ + url: prod_link, + type: 'POST', + dataType: 'json', + data: { + ajax: true, + action: 'ManageConnectedRoom', + mode: 'delete', + room_id: roomId, + connected_room_id: connectedRoomId, + connected_id: connectedId, + hotel_id: hotelId, + current_roomtype: currentRoomType, + }, + success: function(response) { + if (response.success) { + showSuccessMessage(response.message); + $('#connectedRoomModal .modal-content').replaceWith($(response.html).find( + '.modal-content')); + filterRoomsByType(); + } else { + alert(response.message); + } + } + }); + }); }); diff --git a/admin/themes/default/template/controllers/products/connected-rooms.tpl b/admin/themes/default/template/controllers/products/connected-rooms.tpl new file mode 100644 index 000000000..2e33a4daf --- /dev/null +++ b/admin/themes/default/template/controllers/products/connected-rooms.tpl @@ -0,0 +1,87 @@ +{** +* NOTICE OF LICENSE +* +* This source file is subject to the Open Software License version 3.0 +* that is bundled with this package in the file LICENSE.md +* It is also available through the world-wide-web at this URL: +* https://opensource.org/license/osl-3-0-php +* If you did not receive a copy of the license and are unable to +* obtain it through the world-wide-web, please send an email +* to support@qloapps.com so we can send you a copy immediately. +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade this module to a newer +* versions in the future. If you wish to customize this module for your needs +* please refer to https://store.webkul.com/customisation-guidelines for more information. +* +* @author Webkul IN +* @copyright Since 2010 Webkul +* @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 +*} +{if isset($htl_connected_rooms) && $htl_connected_rooms|@count > 0} + + +
+ + +
+
+{/if} + \ No newline at end of file diff --git a/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl b/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl new file mode 100644 index 000000000..38b34e2d8 --- /dev/null +++ b/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl @@ -0,0 +1,148 @@ +{** +* NOTICE OF LICENSE +* +* This source file is subject to the Open Software License version 3.0 +* that is bundled with this package in the file LICENSE.md +* It is also available through the world-wide-web at this URL: +* https://opensource.org/license/osl-3-0-php +* If you did not receive a copy of the license and are unable to +* obtain it through the world-wide-web, please send an email +* to support@qloapps.com so we can send you a copy immediately. +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade this module to a newer +* versions in the future. If you wish to customize this module for your needs +* please refer to https://store.webkul.com/customisation-guidelines for more information. +* +* @author Webkul IN +* @copyright Since 2010 Webkul +* @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 +*} + \ No newline at end of file diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 30026bcca..1bc548457 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -3485,6 +3485,7 @@ class AdminOrdersControllerCore extends AdminController $order_detail_data[$key]['amt_with_qty_tax_incl'] = $value['total_price_tax_incl']; $order_detail_data[$key]['room_type_info'] = $objHotelRoomType->getRoomTypeInfoByIdProduct($value['id_product']); $order_detail_data[$key]['total_room_tax'] = $order_detail_data[$key]['total_room_price_ti'] - $order_detail_data[$key]['total_room_price_te']; + $order_detail_data[$key]['connected_rooms'] = HotelRoomConnected::getConnectedRoomsByHotel($value['id_hotel'], Context::getContext()->language->id, $value['id_room'], true); if (isset($value['refund_info']) && $value['refund_info']['refunded'] diff --git a/modules/hotelreservationsystem/classes/HotelCartBookingData.php b/modules/hotelreservationsystem/classes/HotelCartBookingData.php index be3cabc94..d57e208d0 100644 --- a/modules/hotelreservationsystem/classes/HotelCartBookingData.php +++ b/modules/hotelreservationsystem/classes/HotelCartBookingData.php @@ -1331,6 +1331,7 @@ class HotelCartBookingData extends ObjectModel ); $cart_detail_data[$key]['amt_with_qty'] = $roomTypeDateRangePrice['total_price_tax_excl']; + $cart_detail_data[$key]['connected_rooms'] = HotelRoomConnected::getConnectedRoomsByHotel($obj_htl_room_info->id_hotel, Context::getContext()->language->id, $obj_htl_room_info->id, true); } } if ($cart_detail_data) { diff --git a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php index ca44a2826..1260200cd 100644 --- a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php +++ b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php @@ -552,6 +552,14 @@ class HotelReservationSystemDb SELECT 5, `id_lang`, 'Hotel Amenities Block', 'Configure Hotels Amenities settings. You can display hotel amenities images using this block. This block will be displayed on home page.' FROM `"._DB_PREFIX_."lang` ORDER BY `id_lang`;", + "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."htl_connected_room` ( + `id_connected_room` int(11) NOT NULL AUTO_INCREMENT, + `id_room_information` int(11) NOT NULL, + `id_room` int(11) NOT NULL, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_connected_room`) + ) ENGINE="._MYSQL_ENGINE_." DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;", ); } @@ -615,7 +623,8 @@ class HotelReservationSystemDb `'._DB_PREFIX_.'htl_room_type_bed_type`, `'._DB_PREFIX_.'htl_access`, `'._DB_PREFIX_.'htl_settings_link`, - `'._DB_PREFIX_.'htl_settings_link_lang`' + `'._DB_PREFIX_.'htl_settings_link_lang` + `'._DB_PREFIX_.'htl_connected_room`' ); } } diff --git a/modules/hotelreservationsystem/classes/HotelRoomConnected.php b/modules/hotelreservationsystem/classes/HotelRoomConnected.php new file mode 100644 index 000000000..be9ccaf6b --- /dev/null +++ b/modules/hotelreservationsystem/classes/HotelRoomConnected.php @@ -0,0 +1,86 @@ + 'htl_connected_room', + 'primary' => 'id_connected_room', + 'fields' => array( + 'id_room_information' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), + 'id_room' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), + 'date_add' => array('type' => self::TYPE_DATE), + 'date_upd' => array('type' => self::TYPE_DATE), + ), + ); + public static function getConnectedRoomsByHotel($idHotel, $idLang, $roomId = null, $isConnected = true) + { + if ($isConnected) { + $sql = 'SELECT + hcr.id_connected_room,hcr.id_room_information,hcr.id_room,main_room.id_hotel,main_room.room_num AS main_room_num,connected_room.room_num AS connected_room_num, + main_pl.name AS main_room_type,conn_pl.name AS connected_room_type + FROM `' . _DB_PREFIX_ . 'htl_connected_room` hcr + INNER JOIN `' . _DB_PREFIX_ . 'htl_room_information` main_room ON main_room.id = hcr.id_room_information + INNER JOIN `' . _DB_PREFIX_ . 'htl_room_information` connected_room ON connected_room.id = hcr.id_room + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` main_pl ON (main_pl.id_product = main_room.id_product AND main_pl.id_lang = ' . $idLang . ') + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` conn_pl ON (conn_pl.id_product = connected_room.id_product AND conn_pl.id_lang = ' . $idLang . ') + WHERE main_room.id_hotel = ' . $idHotel . ' + AND connected_room.id_hotel = ' . $idHotel; + if (!empty($roomId)) { + $sql .= ' AND main_room.id = ' . (int) $roomId; + $results = Db::getInstance()->executeS($sql); + } else { + $results = Db::getInstance()->executeS($sql); + } + $grouped = []; + foreach ($results as $row) { + $roomId = $row['id_room_information']; + $connType = $row['connected_room_type']; + if (!isset($grouped[$roomId])) { + $grouped[$roomId] = []; + } + if (!isset($grouped[$roomId][$connType])) { + $grouped[$roomId][$connType] = []; + } + $grouped[$roomId][$connType][] = $row; + } + return $grouped; + } else { + $sql = 'SELECT hri.*, pl.name AS room_type + FROM `' . _DB_PREFIX_ . 'htl_room_information` hri + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (pl.id_product = hri.id_product AND pl.id_lang = ' . $idLang . ') + WHERE hri.id_hotel = ' . (int) $idHotel . ' + AND hri.id != ' . (int) $roomId . ' + AND NOT EXISTS (SELECT 1 FROM `' . _DB_PREFIX_ . 'htl_connected_room` cr WHERE cr.id_room_information = ' . (int) $roomId . ' AND cr.id_room = hri.id) + ORDER BY hri.room_num ASC'; + return Db::getInstance()->executeS($sql); + } + } +} + diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php index fac60d468..3cccd6ca7 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php @@ -387,6 +387,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController 'max_child_in_room' => Configuration::get('WK_GLOBAL_MAX_CHILD_IN_ROOM'), 'link' => $this->context->link, 'ALLOTMENT_MANUAL' => HotelBookingDetail::ALLOTMENT_MANUAL, + 'htl_connected_rooms' => HotelRoomConnected::getConnectedRoomsByHotel($this->id_hotel, $this->context->language->id, 0, true), )); if (Configuration::get('PS_BACKOFFICE_SEARCH_TYPE') == HotelBookingDetail::SEARCH_TYPE_OWS) { diff --git a/modules/hotelreservationsystem/define.php b/modules/hotelreservationsystem/define.php index e8a7cc909..141064a13 100644 --- a/modules/hotelreservationsystem/define.php +++ b/modules/hotelreservationsystem/define.php @@ -49,6 +49,7 @@ require_once 'classes/HotelRoomDisableDates.php'; require_once 'classes/HotelBranchRefundRules.php'; require_once 'classes/HotelBedType.php'; require_once 'classes/HotelRoomTypeBedType.php'; +require_once 'classes/HotelRoomConnected.php'; // linked products require_once 'classes/RoomTypeServiceProduct.php'; diff --git a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-rooms.tpl b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-rooms.tpl index 7c68db350..e83979106 100644 --- a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-rooms.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-rooms.tpl @@ -40,7 +40,11 @@ {foreach from=$book_v['data']['available'] key=avai_k item=avai_v} - {$avai_v['room_num']|escape:'htmlall':'UTF-8'} {hook h='displayRoomNumAfter' data=$avai_v type='available'} + {$avai_v['room_num']|escape:'htmlall':'UTF-8'} + {if isset($htl_connected_rooms[$avai_v['id_room']]) && $htl_connected_rooms[$avai_v['id_room']]|@count > 0} + {include file="controllers/products/connected-rooms.tpl" htl_connected_rooms=$htl_connected_rooms[$avai_v['id_room']]} + {/if} + {hook h='displayRoomNumAfter' data=$avai_v type='available'} {assign var="is_full_date" value=($show_full_date && ($date_from|date_format:'%D' == $date_to|date_format:'%D'))} {dateFormat date=$date_from full=$is_full_date} - {dateFormat date=$date_to full=$is_full_date} {$avai_v['room_comment']|escape:'htmlall':'UTF-8'} From 0a5a5a0289e4c84bb7d99550f4b5d03736827fe4 Mon Sep 17 00:00:00 2001 From: azhar bhat Date: Tue, 17 Feb 2026 17:52:55 +0530 Subject: [PATCH 05/78] fixed ajax error --- controllers/admin/AdminProductsController.php | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 0a7acb76f..113547c93 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -5646,4 +5646,114 @@ class AdminProductsControllerCore extends AdminController return $tpl->fetch(); } + + public function ajaxProcessGetModalConnectedRooms() + { + $roomId = (int) Tools::getValue('room_id'); + $hotelId = (int) Tools::getValue('hotel_id'); + if (!$roomId || !$hotelId) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Invalid data.') + ])); + } + $objRoomType = new HotelRoomType(); + $connectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, true); + $notConnectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, false); + $this->context->smarty->assign(array( + 'htl_connected_rooms' => $connectedRooms, + 'htl_not_connected_rooms' => $notConnectedRooms, + 'main_room_id' => $roomId, + 'hotel_id' => $hotelId, + 'current_roomtype' => Tools::getValue('current_roomtype') + )); + $modalContent = $this->context->smarty->fetch( + 'controllers/products/modal-connected-rooms.tpl' + ); + die(json_encode([ + 'success' => true, + 'html' => $modalContent + ])); + } + + public function ajaxProcessManageConnectedRoom() + { + $mode = Tools::getValue('mode'); + $roomId = (int) Tools::getValue('room_id'); + $connectedRoomId = (int) Tools::getValue('connected_room_id'); + $connectedId = (int) Tools::getValue('connected_id'); + $hotelId = Tools::getValue('hotel_id'); + if (!$roomId || !$connectedRoomId) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Invalid room data.') + ])); + } + if ($roomId == $connectedRoomId) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('You cannot connect a room to itself.') + ])); + } + if ($mode === 'add') { + $connection = new HotelRoomConnected(); + $connection->id_room_information = $roomId; + $connection->id_room = $connectedRoomId; + if ($connection->add()) { + $connectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, true); + $notConnectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, false); + $this->context->smarty->assign(array( + 'htl_connected_rooms' => $connectedRooms, + 'htl_not_connected_rooms' => $notConnectedRooms, + 'main_room_id' => $roomId, + 'hotel_id' => $hotelId, + 'current_roomtype' => Tools::getValue('current_roomtype') + )); + $modalContent = $this->context->smarty->fetch( + 'controllers/products/modal-connected-rooms.tpl' + ); + die(json_encode([ + 'html' => $modalContent, + 'success' => true, + 'message' => $this->l('Room connected successfully.') + ])); + } + + die(json_encode([ + 'success' => false, + 'message' => $this->l('Failed to connect room.') + ])); + } + //remove room + if ($mode === 'delete') { + $objHotelRoomConnected = new HotelRoomConnected($connectedId); + if ($objHotelRoomConnected->delete()) { + $connectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, true); + $notConnectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, false); + $this->context->smarty->assign(array( + 'htl_connected_rooms' => $connectedRooms, + 'htl_not_connected_rooms' => $notConnectedRooms, + 'main_room_id' => $roomId, + 'hotel_id' => $hotelId, + 'current_roomtype' => Tools::getValue('current_roomtype') + )); + $modalContent = $this->context->smarty->fetch( + 'controllers/products/modal-connected-rooms.tpl' + ); + die(json_encode([ + 'success' => true, + 'html' => $modalContent, + 'message' => $this->l('Connected room removed successfully.') + ])); + } + die(json_encode([ + 'success' => false, + 'message' => $this->l('Failed to remove connected room.') + ])); + } + die(json_encode([ + 'success' => false, + 'message' => $this->l('Invalid action.') + ])); + } } From 7756fb70713579f270679d8b42b31f81ac579f92 Mon Sep 17 00:00:00 2001 From: azhar bhat Date: Sat, 4 Apr 2026 17:10:32 +0530 Subject: [PATCH 06/78] BO: harden connected rooms (permissions, escaping, safe DB handling) --- .../controllers/products/configuration.tpl | 9 +- .../products/modal-connected-rooms.tpl | 26 +-- controllers/admin/AdminOrdersController.php | 10 +- controllers/admin/AdminProductsController.php | 149 +++++++++++++----- .../classes/HotelReservationSystemDb.php | 7 +- .../classes/HotelRoomConnected.php | 93 ++++++++--- 6 files changed, 218 insertions(+), 76 deletions(-) diff --git a/admin/themes/default/template/controllers/products/configuration.tpl b/admin/themes/default/template/controllers/products/configuration.tpl index c960e3f53..77f0e2b37 100644 --- a/admin/themes/default/template/controllers/products/configuration.tpl +++ b/admin/themes/default/template/controllers/products/configuration.tpl @@ -119,9 +119,9 @@ {if isset($room_info['id'])} + data-target="#connectedRoomModal" data-id-room="{$room_info['id']|intval}" + data-id-hotel="{$room_info['id_hotel']|intval}" data-room-num="{$room_info['room_num']|escape:'html':'UTF-8'}" + data-room-type="{$room_info['id_product']|intval}"> {/if} @@ -603,6 +603,7 @@ var rm_status = {$rm_status|@json_encode}; var confirmText = "{l s='Are you sure?' js=1}"; var removeDisableDateText = "{l s='Are you sure you want to remove the selected date range?' js=1}"; + var selectRoomText = "{l s='Please select a room' js=1}"; var currentRoomRow = 0; $(document).ready(function() { var tooltipCounter = 0; @@ -1972,7 +1973,7 @@ var hotelId = $('#hotel_id').val(); let currentRoomType = $('[name="id_product"]').val(); if (!connectedRoomId) { - alert('Please select a room'); + alert(selectRoomText); return; } $.ajax({ diff --git a/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl b/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl index 38b34e2d8..fe023de40 100644 --- a/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl +++ b/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl @@ -33,7 +33,7 @@
\ No newline at end of file + + diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index d7e024438..eb77bb77e 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -3484,7 +3484,15 @@ class AdminOrdersControllerCore extends AdminController $order_detail_data[$key]['amt_with_qty_tax_incl'] = $value['total_price_tax_incl']; $order_detail_data[$key]['room_type_info'] = $objHotelRoomType->getRoomTypeInfoByIdProduct($value['id_product']); $order_detail_data[$key]['total_room_tax'] = $order_detail_data[$key]['total_room_price_ti'] - $order_detail_data[$key]['total_room_price_te']; - $order_detail_data[$key]['connected_rooms'] = HotelRoomConnected::getConnectedRoomsByHotel($value['id_hotel'], Context::getContext()->language->id, $value['id_room'], true); + $order_detail_data[$key]['connected_rooms'] = array(); + if (class_exists('HotelRoomConnected')) { + $order_detail_data[$key]['connected_rooms'] = HotelRoomConnected::getConnectedRoomsByHotel( + (int) $value['id_hotel'], + (int) Context::getContext()->language->id, + (int) $value['id_room'], + true + ); + } if (isset($value['refund_info']) && $value['refund_info']['refunded'] diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 113547c93..ddd932a4d 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -5647,8 +5647,39 @@ class AdminProductsControllerCore extends AdminController return $tpl->fetch(); } + /** + * Render connected rooms modal HTML for a given room/hotel. + * + * @param int $hotelId + * @param int $roomId + * @param int $currentRoomType + * + * @return string + */ + protected function getConnectedRoomsModalHtml($hotelId, $roomId, $currentRoomType) + { + $connectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, true); + $notConnectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, false); + $this->context->smarty->assign(array( + 'htl_connected_rooms' => $connectedRooms, + 'htl_not_connected_rooms' => $notConnectedRooms, + 'main_room_id' => (int) $roomId, + 'hotel_id' => (int) $hotelId, + 'current_roomtype' => (int) $currentRoomType, + )); + + return $this->context->smarty->fetch('controllers/products/modal-connected-rooms.tpl'); + } + public function ajaxProcessGetModalConnectedRooms() { + if ($this->tabAccess['edit'] !== 1) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Permission denied.') + ])); + } + $roomId = (int) Tools::getValue('room_id'); $hotelId = (int) Tools::getValue('hotel_id'); if (!$roomId || !$hotelId) { @@ -5657,19 +5688,25 @@ class AdminProductsControllerCore extends AdminController 'message' => $this->l('Invalid data.') ])); } - $objRoomType = new HotelRoomType(); - $connectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, true); - $notConnectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, false); - $this->context->smarty->assign(array( - 'htl_connected_rooms' => $connectedRooms, - 'htl_not_connected_rooms' => $notConnectedRooms, - 'main_room_id' => $roomId, - 'hotel_id' => $hotelId, - 'current_roomtype' => Tools::getValue('current_roomtype') - )); - $modalContent = $this->context->smarty->fetch( - 'controllers/products/modal-connected-rooms.tpl' + + if (!class_exists('HotelRoomConnected') || !HotelRoomConnected::isConnectedRoomTableAvailable()) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Connected rooms feature is not available. Please upgrade the Hotel Reservation System module.') + ])); + } + + $mainRoomHotelId = (int) Db::getInstance()->getValue( + 'SELECT `id_hotel` FROM `' . _DB_PREFIX_ . 'htl_room_information` WHERE `id` = ' . (int) $roomId ); + if ($mainRoomHotelId !== (int) $hotelId) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Invalid room data.') + ])); + } + + $modalContent = $this->getConnectedRoomsModalHtml($hotelId, $roomId, (int) Tools::getValue('current_roomtype')); die(json_encode([ 'success' => true, 'html' => $modalContent @@ -5678,40 +5715,72 @@ class AdminProductsControllerCore extends AdminController public function ajaxProcessManageConnectedRoom() { + if ($this->tabAccess['edit'] !== 1) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Permission denied.') + ])); + } + $mode = Tools::getValue('mode'); $roomId = (int) Tools::getValue('room_id'); $connectedRoomId = (int) Tools::getValue('connected_room_id'); $connectedId = (int) Tools::getValue('connected_id'); - $hotelId = Tools::getValue('hotel_id'); + $hotelId = (int) Tools::getValue('hotel_id'); if (!$roomId || !$connectedRoomId) { die(json_encode([ 'success' => false, 'message' => $this->l('Invalid room data.') ])); } + + if (!class_exists('HotelRoomConnected') || !HotelRoomConnected::isConnectedRoomTableAvailable()) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Connected rooms feature is not available. Please upgrade the Hotel Reservation System module.') + ])); + } + if ($roomId == $connectedRoomId) { die(json_encode([ 'success' => false, 'message' => $this->l('You cannot connect a room to itself.') ])); } + + $mainRoomHotelId = (int) Db::getInstance()->getValue( + 'SELECT `id_hotel` FROM `' . _DB_PREFIX_ . 'htl_room_information` WHERE `id` = ' . (int) $roomId + ); + $connectedRoomHotelId = (int) Db::getInstance()->getValue( + 'SELECT `id_hotel` FROM `' . _DB_PREFIX_ . 'htl_room_information` WHERE `id` = ' . (int) $connectedRoomId + ); + if (!$hotelId || $mainRoomHotelId !== $hotelId || $connectedRoomHotelId !== $hotelId) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Invalid room data.') + ])); + } + + $currentRoomType = (int) Tools::getValue('current_roomtype'); + if ($mode === 'add') { + $existingConnectedId = (int) Db::getInstance()->getValue( + 'SELECT `id_connected_room` FROM `' . _DB_PREFIX_ . 'htl_connected_room` WHERE `id_room_information` = ' . (int) $roomId . ' AND `id_room` = ' . (int) $connectedRoomId + ); + if ($existingConnectedId) { + $modalContent = $this->getConnectedRoomsModalHtml($hotelId, $roomId, $currentRoomType); + die(json_encode([ + 'html' => $modalContent, + 'success' => true, + 'message' => $this->l('Room is already connected.') + ])); + } + $connection = new HotelRoomConnected(); $connection->id_room_information = $roomId; $connection->id_room = $connectedRoomId; if ($connection->add()) { - $connectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, true); - $notConnectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, false); - $this->context->smarty->assign(array( - 'htl_connected_rooms' => $connectedRooms, - 'htl_not_connected_rooms' => $notConnectedRooms, - 'main_room_id' => $roomId, - 'hotel_id' => $hotelId, - 'current_roomtype' => Tools::getValue('current_roomtype') - )); - $modalContent = $this->context->smarty->fetch( - 'controllers/products/modal-connected-rooms.tpl' - ); + $modalContent = $this->getConnectedRoomsModalHtml($hotelId, $roomId, $currentRoomType); die(json_encode([ 'html' => $modalContent, 'success' => true, @@ -5726,20 +5795,26 @@ class AdminProductsControllerCore extends AdminController } //remove room if ($mode === 'delete') { + if (!$connectedId) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Invalid data.') + ])); + } + + $matchesConnection = (int) Db::getInstance()->getValue( + 'SELECT `id_connected_room` FROM `' . _DB_PREFIX_ . 'htl_connected_room` WHERE `id_connected_room` = ' . (int) $connectedId . ' AND `id_room_information` = ' . (int) $roomId . ' AND `id_room` = ' . (int) $connectedRoomId + ); + if (!$matchesConnection) { + die(json_encode([ + 'success' => false, + 'message' => $this->l('Invalid data.') + ])); + } + $objHotelRoomConnected = new HotelRoomConnected($connectedId); if ($objHotelRoomConnected->delete()) { - $connectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, true); - $notConnectedRooms = HotelRoomConnected::getConnectedRoomsByHotel($hotelId, $this->context->language->id, $roomId, false); - $this->context->smarty->assign(array( - 'htl_connected_rooms' => $connectedRooms, - 'htl_not_connected_rooms' => $notConnectedRooms, - 'main_room_id' => $roomId, - 'hotel_id' => $hotelId, - 'current_roomtype' => Tools::getValue('current_roomtype') - )); - $modalContent = $this->context->smarty->fetch( - 'controllers/products/modal-connected-rooms.tpl' - ); + $modalContent = $this->getConnectedRoomsModalHtml($hotelId, $roomId, $currentRoomType); die(json_encode([ 'success' => true, 'html' => $modalContent, diff --git a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php index 1260200cd..f907c111a 100644 --- a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php +++ b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php @@ -558,7 +558,10 @@ class HotelReservationSystemDb `id_room` int(11) NOT NULL, `date_add` datetime NOT NULL, `date_upd` datetime NOT NULL, - PRIMARY KEY (`id_connected_room`) + PRIMARY KEY (`id_connected_room`), + UNIQUE KEY `uniq_room_connection` (`id_room_information`, `id_room`), + KEY `idx_id_room_information` (`id_room_information`), + KEY `idx_id_room` (`id_room`) ) ENGINE="._MYSQL_ENGINE_." DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;", ); } @@ -623,7 +626,7 @@ class HotelReservationSystemDb `'._DB_PREFIX_.'htl_room_type_bed_type`, `'._DB_PREFIX_.'htl_access`, `'._DB_PREFIX_.'htl_settings_link`, - `'._DB_PREFIX_.'htl_settings_link_lang` + `'._DB_PREFIX_.'htl_settings_link_lang`, `'._DB_PREFIX_.'htl_connected_room`' ); } diff --git a/modules/hotelreservationsystem/classes/HotelRoomConnected.php b/modules/hotelreservationsystem/classes/HotelRoomConnected.php index be9ccaf6b..0bc358b55 100644 --- a/modules/hotelreservationsystem/classes/HotelRoomConnected.php +++ b/modules/hotelreservationsystem/classes/HotelRoomConnected.php @@ -23,6 +23,9 @@ class HotelRoomConnected extends ObjectModel { + /** @var bool|null */ + protected static $connectedRoomTableAvailable = null; + public $id_connected_room; public $id_room_information; public $id_room; @@ -39,48 +42,100 @@ class HotelRoomConnected extends ObjectModel 'date_upd' => array('type' => self::TYPE_DATE), ), ); + + /** + * Check whether the connected room table exists and is queryable. + * + * @return bool + */ + public static function isConnectedRoomTableAvailable() + { + if (self::$connectedRoomTableAvailable !== null) { + return (bool) self::$connectedRoomTableAvailable; + } + + $result = Db::getInstance()->executeS('SELECT 1 FROM `' . _DB_PREFIX_ . 'htl_connected_room` LIMIT 1'); + self::$connectedRoomTableAvailable = ($result !== false); + + return (bool) self::$connectedRoomTableAvailable; + } + + /** + * Fetch connected/not-connected rooms for a hotel. + * + * @param int $idHotel + * @param int $idLang + * @param int|null $roomId + * @param bool $isConnected + * + * @return array + */ public static function getConnectedRoomsByHotel($idHotel, $idLang, $roomId = null, $isConnected = true) { + $idHotel = (int) $idHotel; + $idLang = (int) $idLang; + $roomId = (int) $roomId; + if ($isConnected) { + if (!self::isConnectedRoomTableAvailable()) { + return array(); + } + $sql = 'SELECT hcr.id_connected_room,hcr.id_room_information,hcr.id_room,main_room.id_hotel,main_room.room_num AS main_room_num,connected_room.room_num AS connected_room_num, main_pl.name AS main_room_type,conn_pl.name AS connected_room_type FROM `' . _DB_PREFIX_ . 'htl_connected_room` hcr INNER JOIN `' . _DB_PREFIX_ . 'htl_room_information` main_room ON main_room.id = hcr.id_room_information INNER JOIN `' . _DB_PREFIX_ . 'htl_room_information` connected_room ON connected_room.id = hcr.id_room - LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` main_pl ON (main_pl.id_product = main_room.id_product AND main_pl.id_lang = ' . $idLang . ') - LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` conn_pl ON (conn_pl.id_product = connected_room.id_product AND conn_pl.id_lang = ' . $idLang . ') - WHERE main_room.id_hotel = ' . $idHotel . ' - AND connected_room.id_hotel = ' . $idHotel; - if (!empty($roomId)) { + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` main_pl ON (main_pl.id_product = main_room.id_product AND main_pl.id_lang = ' . (int) $idLang . ') + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` conn_pl ON (conn_pl.id_product = connected_room.id_product AND conn_pl.id_lang = ' . (int) $idLang . ') + WHERE main_room.id_hotel = ' . (int) $idHotel . ' + AND connected_room.id_hotel = ' . (int) $idHotel; + if ($roomId > 0) { $sql .= ' AND main_room.id = ' . (int) $roomId; - $results = Db::getInstance()->executeS($sql); - } else { - $results = Db::getInstance()->executeS($sql); } - $grouped = []; + + $results = Db::getInstance()->executeS($sql); + if ($results === false) { + return array(); + } + + $grouped = array(); foreach ($results as $row) { - $roomId = $row['id_room_information']; - $connType = $row['connected_room_type']; - if (!isset($grouped[$roomId])) { - $grouped[$roomId] = []; + $mainRoomId = (int) $row['id_room_information']; + $connType = (string) $row['connected_room_type']; + if (!isset($grouped[$mainRoomId])) { + $grouped[$mainRoomId] = array(); } - if (!isset($grouped[$roomId][$connType])) { - $grouped[$roomId][$connType] = []; + if (!isset($grouped[$mainRoomId][$connType])) { + $grouped[$mainRoomId][$connType] = array(); } - $grouped[$roomId][$connType][] = $row; + $grouped[$mainRoomId][$connType][] = $row; } return $grouped; } else { + // If the connected room table is not yet available (e.g., older installs), + // fall back to returning all rooms except the main room. + if (!self::isConnectedRoomTableAvailable()) { + $sql = 'SELECT hri.*, pl.name AS room_type + FROM `' . _DB_PREFIX_ . 'htl_room_information` hri + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (pl.id_product = hri.id_product AND pl.id_lang = ' . (int) $idLang . ') + WHERE hri.id_hotel = ' . (int) $idHotel . ' + AND hri.id != ' . (int) $roomId . ' + ORDER BY hri.room_num ASC'; + $results = Db::getInstance()->executeS($sql); + return ($results === false) ? array() : $results; + } + $sql = 'SELECT hri.*, pl.name AS room_type FROM `' . _DB_PREFIX_ . 'htl_room_information` hri - LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (pl.id_product = hri.id_product AND pl.id_lang = ' . $idLang . ') + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (pl.id_product = hri.id_product AND pl.id_lang = ' . (int) $idLang . ') WHERE hri.id_hotel = ' . (int) $idHotel . ' AND hri.id != ' . (int) $roomId . ' AND NOT EXISTS (SELECT 1 FROM `' . _DB_PREFIX_ . 'htl_connected_room` cr WHERE cr.id_room_information = ' . (int) $roomId . ' AND cr.id_room = hri.id) ORDER BY hri.room_num ASC'; - return Db::getInstance()->executeS($sql); + $results = Db::getInstance()->executeS($sql); + return ($results === false) ? array() : $results; } } } - From 8d2c1294750ee0c558197cf19130500f3291c2ff Mon Sep 17 00:00:00 2001 From: azhar bhat Date: Wed, 8 Apr 2026 19:51:23 +0530 Subject: [PATCH 07/78] ui updated --- admin/themes/default/sass/admin-theme.sass | 1 + .../default/sass/partials/_qlotooltip.sass | 100 +++++++++ .../controllers/products/configuration.tpl | 125 ++++++++++-- .../controllers/products/connected-rooms.tpl | 103 +++++----- .../products/modal-connected-rooms.tpl | 193 ++++++++++-------- controllers/admin/AdminProductsController.php | 30 +-- .../classes/HotelRoomConnected.php | 47 +++++ 7 files changed, 418 insertions(+), 181 deletions(-) create mode 100644 admin/themes/default/sass/partials/_qlotooltip.sass diff --git a/admin/themes/default/sass/admin-theme.sass b/admin/themes/default/sass/admin-theme.sass index 33b4084b0..92f9e4282 100644 --- a/admin/themes/default/sass/admin-theme.sass +++ b/admin/themes/default/sass/admin-theme.sass @@ -85,6 +85,7 @@ @import "partials/multistore" @import "partials/product" @import "partials/skeleton-loading" + @import "partials/qlotooltip" //Controllers @import "controllers/carrier-wizard" diff --git a/admin/themes/default/sass/partials/_qlotooltip.sass b/admin/themes/default/sass/partials/_qlotooltip.sass new file mode 100644 index 000000000..369a3c790 --- /dev/null +++ b/admin/themes/default/sass/partials/_qlotooltip.sass @@ -0,0 +1,100 @@ +.qlo-tooltip + display: none + position: absolute + top: 130% + left: 50% + transform: translateX(-50%) + z-index: 99999 + font-size: 11px !important + line-height: 1.35 !important + font-family: "Open Sans", Arial, sans-serif !important + text-align: left + color: #666 !important + background: #ffffff !important + border: 1px solid #e5e5e5 !important + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.12) !important + padding: 10px 12px !important + border-radius: 4px !important + width: fit-content + min-width: 0 + max-width: none + +.qlo-tooltip-wrapper + position: relative + display: inline-block + cursor: pointer + color: #333 + +.qlo-tooltip-wrapper:hover .qlo-tooltip + display: block + +.qlo-tooltip.align-right + left: auto + right: 0 + transform: none + +.qlo-tooltip.align-left + left: 0 + transform: none + +.qlo-tooltip .qlo_tooltip_content, +.qlo-tooltip .qlo_tooltip_cont + width: 100% + +.qlo-tooltip .qlo_header + margin-bottom: 6px + +.qlo-tooltip .qlo_date + font-weight: 700 + font-size: 12px + color: #333 + white-space: nowrap + +.qlo-tooltip .qlo_body.grid + display: grid + grid-template-columns: repeat(2, minmax(0, max-content)) + gap: 10px 18px + justify-content: start + justify-items: start + width: max-content + +.qlo-tooltip .qlo_body.grid.single-col + grid-template-columns: 1fr + +.qlo-tooltip .qlo_body.grid.single-col .qlo_element + display: block + width: auto + +.qlo-tooltip.single-col + min-width: 0 + max-width: 240px + width: fit-content + +.qlo-tooltip .qlo_element_value + color: #666 + font-weight: 600 + +.qlo_tooltip_list + list-style: none !important + padding: 0 !important + margin: 0 !important + +.qlo_tooltip_list li + margin: 0 !important + padding: 0 !important + font-weight: 600 !important + color: #666 !important + +@media (max-width: 768px) + .qlo-tooltip + left: 0 + right: auto + transform: none + min-width: 0 + max-width: calc(100vw - 24px) + +.qlo-tooltip .qlo_element_heading + font-weight: 700 + color: #333 + margin-bottom: 2px + font-size: 11px diff --git a/admin/themes/default/template/controllers/products/configuration.tpl b/admin/themes/default/template/controllers/products/configuration.tpl index 77f0e2b37..884fa5a80 100644 --- a/admin/themes/default/template/controllers/products/configuration.tpl +++ b/admin/themes/default/template/controllers/products/configuration.tpl @@ -122,7 +122,12 @@ data-target="#connectedRoomModal" data-id-room="{$room_info['id']|intval}" data-id-hotel="{$room_info['id_hotel']|intval}" data-room-num="{$room_info['room_num']|escape:'html':'UTF-8'}" data-room-type="{$room_info['id_product']|intval}"> - + + + + {if isset($room_info['connected_rooms_count'])}{$room_info['connected_rooms_count']|intval}{else}0{/if} + + {/if} @@ -596,6 +601,26 @@ border: 1px solid #f2f2f2; margin-top: 10px; } + .connected-room-icon-wrapper { + display: inline-flex; + align-items: center; + gap: 4px; + justify-content: center; + } + .connected-room-count { + min-width: 14px; + height: 14px; + padding: 0 3px; + border-radius: 9px; + background: #f5f5f5; + color: #666; + border: 1px solid #d5d5d5; + font-size: 9px; + line-height: 12px; + font-weight: 600; + text-align: center; + box-shadow: none; + } diff --git a/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl b/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl index fe023de40..66548ac80 100644 --- a/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl +++ b/admin/themes/default/template/controllers/products/modal-connected-rooms.tpl @@ -20,95 +20,75 @@ * @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 *} +
+
{l s='Booking Voucher'}
+ +
+
{l s='Status'}
@@ -647,6 +657,16 @@
+
+
{l s='Booking Voucher'}
+ +
+
{l s='Status'}
From 1df415e822b37fbcd6ba8ca5f0e7001fc83dda65 Mon Sep 17 00:00:00 2001 From: azhar bhat Date: Fri, 12 Jun 2026 12:24:08 +0530 Subject: [PATCH 40/78] fix: correct price aggregation for grouped rooms in OrderConfirmationController --- controllers/front/OrderConfirmationController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/controllers/front/OrderConfirmationController.php b/controllers/front/OrderConfirmationController.php index f83b1fd7e..f00addd43 100644 --- a/controllers/front/OrderConfirmationController.php +++ b/controllers/front/OrderConfirmationController.php @@ -201,8 +201,8 @@ class OrderConfirmationControllerCore extends FrontController //// By webkul New way to calculate product prices with feature Prices $cart_htl_data[$type_key]['date_diff'][$date_join]['paid_unit_price_tax_excl'] = $data_v['total_price_tax_excl']/$num_days; $cart_htl_data[$type_key]['date_diff'][$date_join]['paid_unit_price_tax_incl'] = $data_v['total_price_tax_incl']/$num_days; - $cart_htl_data[$type_key]['date_diff'][$date_join]['amount_tax_incl'] = $data_v['total_price_tax_incl']*$var_quant; - $cart_htl_data[$type_key]['date_diff'][$date_join]['amount_tax_excl'] = $data_v['total_price_tax_excl']*$var_quant; + $cart_htl_data[$type_key]['date_diff'][$date_join]['amount_tax_incl'] += $data_v['total_price_tax_incl']; + $cart_htl_data[$type_key]['date_diff'][$date_join]['amount_tax_excl'] += $data_v['total_price_tax_excl']; $cart_htl_data[$type_key]['date_diff'][$date_join]['is_backorder'] = $data_v['is_back_order']; if ($data_v['is_back_order']) { $any_back_order = 1; From 63c72f8c5c7ec6256643fc34610115db436fdda6 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Fri, 12 Jun 2026 20:00:53 +0530 Subject: [PATCH 41/78] Fixed: fix testing issue and code review changes --- classes/PaymentModule.php | 4 ++-- controllers/admin/AdminOrdersController.php | 19 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index fe1ce4392..091da9f9f 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -677,8 +677,8 @@ abstract class PaymentModuleCore extends Module $orderTotals[$order->id]['excl'] -= $used['excl']; $cart_rules[$key]['remaining'] -= $used['excl']; } - - $order->addCartRule($cart_rule['obj']->id, $cart_rule['obj']->name, $values, 0, $cart_rule['obj']->free_shipping); + $discount_amount = array('tax_incl' => $used['incl'], 'tax_excl' => $used['excl']); + $order->addCartRule($cart_rule['obj']->id, $cart_rule['obj']->name, $discount_amount, 0, $cart_rule['obj']->free_shipping); if ($id_order_state != Configuration::get('PS_OS_ERROR') && $id_order_state != Configuration::get('PS_OS_CANCELED') && !in_array($cart_rule['obj']->id, $cart_rule_used)) { $cart_rule_used[] = $cart_rule['obj']->id; diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 9b1a0ecb1..5eadb7588 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -5861,19 +5861,18 @@ class AdminOrdersControllerCore extends AdminController $objOrderHistory->add(); } else { $currentOrderState = $objOrder->getCurrentOrderState(); - if ($currentOrderState->paid == 1) { - $psOsPartialPaymentAccepted = Configuration::get('PS_OS_PARTIAL_PAYMENT_ACCEPTED'); - $psOSPaymentComplete = Configuration::get('PS_OS_PAYMENT_ACCEPTED'); - - if ($currentOrderState->id == $psOSPaymentComplete && $objOrder->module == 'free_order') { - $targetState = Configuration::get('PS_OS_AWAITING_PAYMENT'); - } elseif ($currentOrderState->id != $psOsPartialPaymentAccepted) { - $targetState = $psOsPartialPaymentAccepted; - } - + if ($currentOrderState->paid == 1) { // calculate due amount $dueAmount = $objOrder->total_paid_tax_incl - $objOrder->total_paid_real; if ($dueAmount > 0) { + $psOsPartialPaymentAccepted = Configuration::get('PS_OS_PARTIAL_PAYMENT_ACCEPTED'); + $psOSPaymentComplete = Configuration::get('PS_OS_PAYMENT_ACCEPTED'); + + if ($currentOrderState->id == $psOSPaymentComplete && $objOrder->total_paid_real == 0) { + $targetState = Configuration::get('PS_OS_AWAITING_PAYMENT'); + } elseif ($currentOrderState->id != $psOsPartialPaymentAccepted) { + $targetState = $psOsPartialPaymentAccepted; + } $objOrderHistory = new OrderHistory(); $objOrderHistory->id_order = $objOrder->id; $objOrderHistory->id_employee = (int) $this->context->employee->id; From 09bf489029e23e322d8f5620f5febf1c50681e3b Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Mon, 15 Jun 2026 11:37:23 +0530 Subject: [PATCH 42/78] Fixed: fix code review changes --- config/xml/themes/default.xml | 5 ++++- install/data/xml/meta.xml | 30 +++++++++++++++++++++++++ install/langs/bg/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/bn/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/br/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/cs/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/de/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/en/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/es/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/fa/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/fr/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/he/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/hr/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/hu/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/id/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/it/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/lt/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/mk/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/nl/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/no/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/pl/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/pt/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/qc/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/ro/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/ru/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/si/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/sr/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/sv/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/tw/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/vn/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ install/langs/zh/data/meta.xml | 40 ++++++++++++++++++++++++++++++++++ 31 files changed, 1194 insertions(+), 1 deletion(-) diff --git a/config/xml/themes/default.xml b/config/xml/themes/default.xml index c74cf3769..b8d22534f 100644 --- a/config/xml/themes/default.xml +++ b/config/xml/themes/default.xml @@ -18,7 +18,8 @@ - + + @@ -31,6 +32,8 @@ + + diff --git a/install/data/xml/meta.xml b/install/data/xml/meta.xml index 3519290ba..581bd5ca3 100644 --- a/install/data/xml/meta.xml +++ b/install/data/xml/meta.xml @@ -32,6 +32,18 @@ password 1 + + supplier 1 @@ -84,6 +96,18 @@ order 1 + + order-opc 1 @@ -128,6 +152,12 @@ module-cashondelivery-validation 0 + our-properties 1 diff --git a/install/langs/bg/data/meta.xml b/install/langs/bg/data/meta.xml index f3eadd944..35366414b 100644 --- a/install/langs/bg/data/meta.xml +++ b/install/langs/bg/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/bn/data/meta.xml b/install/langs/bn/data/meta.xml index dec8b6567..c36cc6c5c 100644 --- a/install/langs/bn/data/meta.xml +++ b/install/langs/bn/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + সরবরাহকারী সরবরাহকারির তালিকা @@ -126,6 +142,22 @@ order + + অর্ডার @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/br/data/meta.xml b/install/langs/br/data/meta.xml index be2fc7692..e99e59b87 100644 --- a/install/langs/br/data/meta.xml +++ b/install/langs/br/data/meta.xml @@ -42,6 +42,22 @@ forgot, password, e-mail, new, reset recuperar-senha + + Fornecedores Lista de fornecedores @@ -126,6 +142,22 @@ pedido + + Pedido @@ -144,4 +176,12 @@ confirmação-do-pedido + diff --git a/install/langs/cs/data/meta.xml b/install/langs/cs/data/meta.xml index 5623a57e4..13fe54a74 100644 --- a/install/langs/cs/data/meta.xml +++ b/install/langs/cs/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Dodavatelé Suppliers list @@ -126,6 +142,22 @@ objednavka + + Rychlá Objednávka @@ -144,4 +176,12 @@ potvrzeni-objednavky + diff --git a/install/langs/de/data/meta.xml b/install/langs/de/data/meta.xml index 61db3a75c..cc4f3e0ec 100644 --- a/install/langs/de/data/meta.xml +++ b/install/langs/de/data/meta.xml @@ -42,6 +42,22 @@ vergessen, Kennwort, E-Mail, neu, Reset kennwort-wiederherstellung + + Zulieferer Zuliefererliste @@ -126,6 +142,22 @@ bestellung + + Bestellung @@ -144,4 +176,12 @@ bestellbestatigung + diff --git a/install/langs/en/data/meta.xml b/install/langs/en/data/meta.xml index 98e1b351e..19c71c6bf 100644 --- a/install/langs/en/data/meta.xml +++ b/install/langs/en/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/es/data/meta.xml b/install/langs/es/data/meta.xml index 858c4eda2..b0f170201 100644 --- a/install/langs/es/data/meta.xml +++ b/install/langs/es/data/meta.xml @@ -42,6 +42,22 @@ contraseña, has olvidado, e-mail, nuevo, regeneración recuperacion-contraseña + + Proveedores Lista de proveedores @@ -126,6 +142,22 @@ pedido + + Pedido @@ -144,4 +176,12 @@ confirmacion-pedido + diff --git a/install/langs/fa/data/meta.xml b/install/langs/fa/data/meta.xml index 80769dc05..9ff6f6774 100644 --- a/install/langs/fa/data/meta.xml +++ b/install/langs/fa/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + تامین کننده ها لیست تامین کننده ها @@ -126,6 +142,22 @@ order + + سفارش @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/fr/data/meta.xml b/install/langs/fr/data/meta.xml index b95f731d7..755045dd1 100644 --- a/install/langs/fr/data/meta.xml +++ b/install/langs/fr/data/meta.xml @@ -42,6 +42,22 @@ recuperation-mot-de-passe + + Fournisseurs Liste des fournisseurs @@ -126,6 +142,22 @@ commande + + Commande @@ -144,4 +176,12 @@ confirmation-commande + diff --git a/install/langs/he/data/meta.xml b/install/langs/he/data/meta.xml index cf8801f3a..cd6d44beb 100644 --- a/install/langs/he/data/meta.xml +++ b/install/langs/he/data/meta.xml @@ -42,6 +42,22 @@ שחזור-סיסמה + + ספקים רשימת ספקים @@ -126,6 +142,22 @@ הזמנה + + הזמנה @@ -144,4 +176,12 @@ אימות-הזמנה + diff --git a/install/langs/hr/data/meta.xml b/install/langs/hr/data/meta.xml index 275eeed8b..3e406b0b3 100644 --- a/install/langs/hr/data/meta.xml +++ b/install/langs/hr/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/hu/data/meta.xml b/install/langs/hu/data/meta.xml index 0dc8c285c..75054f6a7 100644 --- a/install/langs/hu/data/meta.xml +++ b/install/langs/hu/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/id/data/meta.xml b/install/langs/id/data/meta.xml index e22203b6d..e7a22b0ed 100644 --- a/install/langs/id/data/meta.xml +++ b/install/langs/id/data/meta.xml @@ -42,6 +42,22 @@ forgot, password, e-mail, new, reset lupa-password + + Supplier Daftar supplier @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ konfirmasi-pembelian + diff --git a/install/langs/it/data/meta.xml b/install/langs/it/data/meta.xml index 044bd937d..4ccd255b9 100644 --- a/install/langs/it/data/meta.xml +++ b/install/langs/it/data/meta.xml @@ -42,6 +42,22 @@ dimenticato, password, e-mail, nuovo, reset recupero-password + + Fornitori Elenco fornitori @@ -126,6 +142,22 @@ ordine + + Ordine @@ -144,4 +176,12 @@ conferma-ordine + diff --git a/install/langs/lt/data/meta.xml b/install/langs/lt/data/meta.xml index 041490860..a62f4440e 100644 --- a/install/langs/lt/data/meta.xml +++ b/install/langs/lt/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/mk/data/meta.xml b/install/langs/mk/data/meta.xml index 39ebda5a3..8d02519e0 100644 --- a/install/langs/mk/data/meta.xml +++ b/install/langs/mk/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/nl/data/meta.xml b/install/langs/nl/data/meta.xml index adf55b8ce..b64127e6f 100644 --- a/install/langs/nl/data/meta.xml +++ b/install/langs/nl/data/meta.xml @@ -42,6 +42,22 @@ forgot, password, e-mail, new, reset wachtwoord-opvragen + + Leveranciers Lijst met leveranciers @@ -120,6 +136,22 @@ bestelling + + Bestelling @@ -138,4 +170,12 @@ order-bevestiging + diff --git a/install/langs/no/data/meta.xml b/install/langs/no/data/meta.xml index d4f85f905..bb473a4e4 100644 --- a/install/langs/no/data/meta.xml +++ b/install/langs/no/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/pl/data/meta.xml b/install/langs/pl/data/meta.xml index fccedea68..4f539409a 100644 --- a/install/langs/pl/data/meta.xml +++ b/install/langs/pl/data/meta.xml @@ -42,6 +42,22 @@ przypomnienie, hasło, e-mail, nowy odzyskiwanie-hasla + + Dostawcy Lista dostawców @@ -126,6 +142,22 @@ zamowienie + + Zamówienie @@ -144,4 +176,12 @@ potwierdzenie-zamowienia + diff --git a/install/langs/pt/data/meta.xml b/install/langs/pt/data/meta.xml index 3a82e7250..fc089e1e0 100644 --- a/install/langs/pt/data/meta.xml +++ b/install/langs/pt/data/meta.xml @@ -42,6 +42,22 @@ esqueci-me, recuperar, palavra-passe, e-mail, nova, reset recuperar-palavra-passe + + Fornecedores Lista de Fornecedores @@ -126,6 +142,22 @@ encomenda + + Encomenda Rápida @@ -144,4 +176,12 @@ confirmacao-encomenda + diff --git a/install/langs/qc/data/meta.xml b/install/langs/qc/data/meta.xml index c5e4f323d..423574869 100644 --- a/install/langs/qc/data/meta.xml +++ b/install/langs/qc/data/meta.xml @@ -42,6 +42,22 @@ recuperation-mot-de-passe + + Fournisseurs Liste des fournisseurs @@ -120,6 +136,22 @@ commande + + Commande @@ -138,4 +170,12 @@ confirmation-commande + diff --git a/install/langs/ro/data/meta.xml b/install/langs/ro/data/meta.xml index 1faf6943c..afbcca172 100644 --- a/install/langs/ro/data/meta.xml +++ b/install/langs/ro/data/meta.xml @@ -42,6 +42,22 @@ recuperare-parola + + Furnizori Lista furnizorilor @@ -126,6 +142,22 @@ comanda + + Comandă @@ -144,4 +176,12 @@ confirmare-comanda + diff --git a/install/langs/ru/data/meta.xml b/install/langs/ru/data/meta.xml index 25f2a6b64..fd4f1c2f2 100644 --- a/install/langs/ru/data/meta.xml +++ b/install/langs/ru/data/meta.xml @@ -42,6 +42,22 @@ забыли пароль, e-mail, новый пароль,восстановить пароль password-recovery + + Поставщики Список поставщиков @@ -126,6 +142,22 @@ order + + Быстрый заказ @@ -138,4 +170,12 @@ guest-tracking + diff --git a/install/langs/si/data/meta.xml b/install/langs/si/data/meta.xml index bb067c138..63d8f6f8f 100644 --- a/install/langs/si/data/meta.xml +++ b/install/langs/si/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/sr/data/meta.xml b/install/langs/sr/data/meta.xml index ae62b76e7..93574ae9a 100644 --- a/install/langs/sr/data/meta.xml +++ b/install/langs/sr/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/sv/data/meta.xml b/install/langs/sv/data/meta.xml index bb253ffbb..3130e1914 100644 --- a/install/langs/sv/data/meta.xml +++ b/install/langs/sv/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/tw/data/meta.xml b/install/langs/tw/data/meta.xml index 6c56ca046..2577ed92b 100644 --- a/install/langs/tw/data/meta.xml +++ b/install/langs/tw/data/meta.xml @@ -42,6 +42,22 @@ forgot, password, e-mail, new, reset password-recovery + + 供應商 供應商列表 @@ -126,6 +142,22 @@ order + + 訂單 @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/vn/data/meta.xml b/install/langs/vn/data/meta.xml index 0f6befb3e..bfd7ac415 100644 --- a/install/langs/vn/data/meta.xml +++ b/install/langs/vn/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Nhà cung cấp Suppliers list @@ -126,6 +142,22 @@ order + + Đơn hàng @@ -144,4 +176,12 @@ order-confirmation + diff --git a/install/langs/zh/data/meta.xml b/install/langs/zh/data/meta.xml index 8b17d648f..a69432dd7 100644 --- a/install/langs/zh/data/meta.xml +++ b/install/langs/zh/data/meta.xml @@ -42,6 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -126,6 +142,22 @@ order + + Order @@ -144,4 +176,12 @@ order-confirmation + From 2933be21e2fc8ac1395f446e173c90f8df624b55 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Tue, 16 Jun 2026 12:36:09 +0530 Subject: [PATCH 43/78] fix: replace deprecated tags with CSS styling in .tpl, .html, and .txt files --- .../languages/helpers/form/form.tpl | 4 +-- mails/en/account.html | 16 ++++----- mails/en/awaiting_payment.html | 16 ++++----- mails/en/backoffice_order.html | 8 ++--- mails/en/booking_extra_demands.tpl | 28 +++++++-------- mails/en/booking_extra_demands.txt | 12 +++---- mails/en/contact.html | 8 ++--- mails/en/contact_form.html | 12 +++---- mails/en/credit_slip.html | 12 +++---- mails/en/credit_slip_voucher.html | 8 ++--- mails/en/download_product.html | 16 ++++----- mails/en/employee_password.html | 8 ++--- mails/en/forward_msg.html | 8 ++--- mails/en/guest_to_customer.html | 16 ++++----- mails/en/in_transit.html | 16 ++++----- mails/en/log_alert.html | 8 ++--- mails/en/order_canceled.html | 20 +++++------ mails/en/order_changed.html | 16 ++++----- mails/en/order_conf.html | 16 ++++----- mails/en/order_conf_admin.html | 12 +++---- mails/en/order_conf_cart_rules.tpl | 8 ++--- mails/en/order_conf_product_list.tpl | 36 +++++++++---------- mails/en/order_customer_comment.html | 8 ++--- mails/en/order_hotel_detail.tpl | 4 +-- mails/en/order_merchant_comment.html | 8 ++--- mails/en/order_refund_completed_admin.html | 12 +++---- mails/en/order_refund_completed_customer.html | 12 +++---- mails/en/order_refund_denied_admin.html | 12 +++---- mails/en/order_refund_denied_customer.html | 12 +++---- mails/en/order_refund_pending_admin.html | 12 +++---- mails/en/order_refund_pending_customer.html | 12 +++---- mails/en/order_return_state.html | 12 +++---- mails/en/overbooking.html | 16 ++++----- mails/en/overbooking_admin.html | 12 +++---- mails/en/partial_payment_accepted.html | 16 ++++----- mails/en/password.html | 16 ++++----- mails/en/password_query.html | 8 ++--- mails/en/payment_accepted.html | 16 ++++----- mails/en/payment_error.html | 16 ++++----- mails/en/processing.html | 16 ++++----- mails/en/refund.html | 16 ++++----- mails/en/reply_msg.html | 2 +- mails/en/shipped.html | 8 ++--- mails/en/voucher.html | 8 ++--- mails/en/voucher_new.html | 8 ++--- .../templates/mail/mail_template_html.tpl | 4 +-- .../mails/en/newsletter_conf.html | 8 ++--- .../mails/en/newsletter_verif.html | 8 ++--- .../mails/en/newsletter_voucher.html | 8 ++--- .../templates/mail/mail_template_html.tpl | 4 +-- .../mails/en/review_approve.html | 16 ++++----- .../mails/en/review_reply_with_link.html | 16 ++++----- .../mails/en/review_reply_without_link.html | 16 ++++----- .../mails/en/review_request.html | 16 ++++----- themes/debug.tpl | 6 +++- 55 files changed, 336 insertions(+), 332 deletions(-) diff --git a/admin/themes/default/template/controllers/languages/helpers/form/form.tpl b/admin/themes/default/template/controllers/languages/helpers/form/form.tpl index 8d1dc403e..77baa0e70 100644 --- a/admin/themes/default/template/controllers/languages/helpers/form/form.tpl +++ b/admin/themes/default/template/controllers/languages/helpers/form/form.tpl @@ -69,11 +69,11 @@
{foreach $list.files as $key => $file} {if !file_exists($key)} - + {/if} {$key} {if !file_exists($key)} - + {/if}
{/foreach} diff --git a/mails/en/account.html b/mails/en/account.html index c80631219..d5e047532 100644 --- a/mails/en/account.html +++ b/mails/en/account.html @@ -68,10 +68,10 @@ - + Hi {firstname} {lastname},
Thank you for creating a customer account at {shop_name}. -
+ @@ -83,14 +83,14 @@   - +

Your {shop_name} login details

Here are your login details:
E-mail address: {email}
-
+   @@ -106,7 +106,7 @@   - +

Important Security Tips:

  1. Always keep your account details safe.
  2. @@ -114,7 +114,7 @@
  3. Change your password regularly.
  4. Should you suspect someone is using your account illegally, please notify us immediately.
-
+   @@ -126,9 +126,9 @@ - + You can now place orders on our website: {shop_name} - + diff --git a/mails/en/awaiting_payment.html b/mails/en/awaiting_payment.html index c6bc613c6..d83fbe902 100644 --- a/mails/en/awaiting_payment.html +++ b/mails/en/awaiting_payment.html @@ -69,10 +69,10 @@ - + Hi {firstname} {lastname},
{order_header_line_html} -
+ @@ -84,13 +84,13 @@   - +

Order {order_name} - Awaiting payment

Order reference: {order_name}
Payment method: {payment_method}
-
+   @@ -103,18 +103,18 @@ {extra_mail_content_html} - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/backoffice_order.html b/mails/en/backoffice_order.html index 0b40f8b35..f779ea6ef 100644 --- a/mails/en/backoffice_order.html +++ b/mails/en/backoffice_order.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,12 +83,12 @@   - +

A new order has been generated on your behalf.

Please go on {order_link} to finalize the payment. -
+   diff --git a/mails/en/booking_extra_demands.tpl b/mails/en/booking_extra_demands.tpl index b43ac4bed..fe38cdadd 100644 --- a/mails/en/booking_extra_demands.tpl +++ b/mails/en/booking_extra_demands.tpl @@ -23,22 +23,22 @@ {if $smarty.foreach.demandRow.first} - + {$data_v['name']}
{$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}
{l s='Room'} - {$roomCount} -
+ {/if} - + {$demand['name']} - + - + {convertPrice price=$demand['total_price_tax_excl']} - + {/foreach} @@ -81,31 +81,31 @@ {if $smarty.foreach.serviceRow.first} - + {$data_v['name']}
{$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}
{l s='Room'} - {$roomCount} -
+ {/if} - + {$service['name']} - + - + {if $service['allow_multiple_quantity']} {$service['quantity']} {else} {l s='--'} {/if} - + - + {convertPrice price=$service['total_price_tax_excl']} - + {/foreach} diff --git a/mails/en/booking_extra_demands.txt b/mails/en/booking_extra_demands.txt index 3139f8ce3..21f96098b 100644 --- a/mails/en/booking_extra_demands.txt +++ b/mails/en/booking_extra_demands.txt @@ -13,22 +13,22 @@ {foreach name=demandRow from=$roomDemand['extra_demands'] item=demand} {if $smarty.foreach.demandRow.first} - + {$data_v['name']}
{$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}
{l s='Room'} - {$roomCount} -
+ {/if} - + {$demand['name']} - + - + {convertPrice price=$demand['total_price_tax_excl']} - + {/foreach} diff --git a/mails/en/contact.html b/mails/en/contact.html index 5c5aa9d53..210b11f5d 100644 --- a/mails/en/contact.html +++ b/mails/en/contact.html @@ -68,9 +68,9 @@ - + Message from a {shop_name} customer - + @@ -82,11 +82,11 @@   - + {contact_content_html} - +   diff --git a/mails/en/contact_form.html b/mails/en/contact_form.html index 73a8a7143..2a6cc0301 100644 --- a/mails/en/contact_form.html +++ b/mails/en/contact_form.html @@ -69,9 +69,9 @@ - + Your message to {shop_name} Customer Service - + @@ -83,7 +83,7 @@   - + Your message has been sent successfully.

Message: {message}

@@ -91,7 +91,7 @@ Product: {product_name}
Attached file: {attached_file}
-
+   @@ -103,10 +103,10 @@ - + We will answer as soon as possible. - + diff --git a/mails/en/credit_slip.html b/mails/en/credit_slip.html index 6aee0c304..40928b0e2 100644 --- a/mails/en/credit_slip.html +++ b/mails/en/credit_slip.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,12 +83,12 @@   - +

Order {order_name} - Credit slip created

We have generated a credit slip in your name for order with the reference {order_name}. -
+   @@ -100,10 +100,10 @@ - + You can review this credit slip and download your invoice from the "My credit slips" section of your account by clicking "My account" on our website. - + diff --git a/mails/en/credit_slip_voucher.html b/mails/en/credit_slip_voucher.html index e864fd62b..6f5ba20a6 100644 --- a/mails/en/credit_slip_voucher.html +++ b/mails/en/credit_slip_voucher.html @@ -71,9 +71,9 @@ - + Hi {firstname} {lastname},
-
+ @@ -85,7 +85,7 @@   - +

VOUCHER GENERATED

@@ -95,7 +95,7 @@ Voucher Code: {voucher_code} for an amount of {voucher_amount}.

To use this voucher just copy and paste this code during payment process for your next order.
-
+   diff --git a/mails/en/download_product.html b/mails/en/download_product.html index a9d6b6e9a..a42775e85 100644 --- a/mails/en/download_product.html +++ b/mails/en/download_product.html @@ -69,10 +69,10 @@ - + Hi {firstname} {lastname},
Thank you for your order with the reference {order_name} from {shop_name} -
+ @@ -84,14 +84,14 @@   - +

Product(s) now available for download

You have {nbProducts} product(s) now available for download using the following link(s):

{virtualProducts}
-
+   @@ -103,18 +103,18 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/employee_password.html b/mails/en/employee_password.html index 7b1b059c9..d17759824 100644 --- a/mails/en/employee_password.html +++ b/mails/en/employee_password.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,7 +83,7 @@   - +

Your {shop_name} login information

@@ -93,7 +93,7 @@ Password: {passwd}
E-mail address: {email}
-
+   diff --git a/mails/en/forward_msg.html b/mails/en/forward_msg.html index 07728db09..f9d56a845 100644 --- a/mails/en/forward_msg.html +++ b/mails/en/forward_msg.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,7 +83,7 @@   - +

Customer service - Forwarded discussion

@@ -91,7 +91,7 @@ Discussion history: {messages}

{employee} added "{comment}"
-
+   diff --git a/mails/en/guest_to_customer.html b/mails/en/guest_to_customer.html index 0dc1e5c9a..fbed53b8a 100644 --- a/mails/en/guest_to_customer.html +++ b/mails/en/guest_to_customer.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,7 +83,7 @@   - +

Your customer account creation

@@ -91,7 +91,7 @@ E-mail address: {email}

Password: {passwd}
-
+   @@ -103,19 +103,19 @@ - + Please be careful when sharing these login details with others. - + - + You can access your customer account on our website: {shop_url} - + diff --git a/mails/en/in_transit.html b/mails/en/in_transit.html index 6c5318515..56b82dd3e 100644 --- a/mails/en/in_transit.html +++ b/mails/en/in_transit.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,14 +83,14 @@   - +

Order {order_name} - In transit

Your order with the reference {order_name} is currently in transit.

You can track your package using the following link: {followup}
-
+   @@ -102,18 +102,18 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/log_alert.html b/mails/en/log_alert.html index 13766029f..66299ede6 100644 --- a/mails/en/log_alert.html +++ b/mails/en/log_alert.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,13 +83,13 @@   - +

You have received a new log alert

Warning: you have received a new log alert in your Back Office.

You can check for it in the "Tools" > "Logs" section of your Back Office.
-
+   diff --git a/mails/en/order_canceled.html b/mails/en/order_canceled.html index 5271ab209..52f2eb3f4 100644 --- a/mails/en/order_canceled.html +++ b/mails/en/order_canceled.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,12 +83,12 @@   - +

Order canceled - {order_name}

Your order with the reference {order_name} has been canceled. -
+   @@ -104,7 +104,7 @@   - +

Here are your order details:

@@ -112,7 +112,7 @@ Order reference: {order_name}
Order total: {total_paid}

-
+
{order_hotel_detail_html} @@ -127,18 +127,18 @@ {extra_mail_content_html} - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/order_changed.html b/mails/en/order_changed.html index c224bc3ff..4e700defb 100644 --- a/mails/en/order_changed.html +++ b/mails/en/order_changed.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,12 +83,12 @@   - +

Order {order_name} - Order changed

Your order with the reference {order_name} from {hotel_hotel_name} has been changed by the merchant. -
+   @@ -100,18 +100,18 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/order_conf.html b/mails/en/order_conf.html index 5e58397d2..dc29689fd 100755 --- a/mails/en/order_conf.html +++ b/mails/en/order_conf.html @@ -71,10 +71,10 @@ - + Hi {firstname} {lastname},
{order_header_line_html} -
+ @@ -86,14 +86,14 @@   - +

Order details

Order: {order_name} Placed on {date}

Payment: {payment}
-
+   @@ -123,18 +123,18 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/order_conf_admin.html b/mails/en/order_conf_admin.html index 28729c428..a5117aa9e 100755 --- a/mails/en/order_conf_admin.html +++ b/mails/en/order_conf_admin.html @@ -70,10 +70,10 @@ - + Hi {firstname} {lastname},
{order_header_line_html} -
+ @@ -85,14 +85,14 @@   - +

Customer details

Name: {customer_name}

Email: {customer_email}
-
+   @@ -108,14 +108,14 @@   - +

Order details

Order: {order_name} Placed on {date}

Payment: {payment}
-
+   diff --git a/mails/en/order_conf_cart_rules.tpl b/mails/en/order_conf_cart_rules.tpl index 7a1a683b0..bf4468f07 100644 --- a/mails/en/order_conf_cart_rules.tpl +++ b/mails/en/order_conf_cart_rules.tpl @@ -5,9 +5,9 @@ - + {$cart_rule['voucher_name']} - + @@ -18,9 +18,9 @@ - + {$cart_rule['voucher_reduction']} - + diff --git a/mails/en/order_conf_product_list.tpl b/mails/en/order_conf_product_list.tpl index 525e38b70..ba0127f33 100644 --- a/mails/en/order_conf_product_list.tpl +++ b/mails/en/order_conf_product_list.tpl @@ -5,9 +5,9 @@   - + {$product['reference']} - +   @@ -18,9 +18,9 @@   - + {$product['name']} - +   @@ -31,9 +31,9 @@   - + {$product['unit_price']} - +   @@ -44,9 +44,9 @@   - + {$product['quantity']} - +   @@ -57,9 +57,9 @@   - + {$product['price']} - +   @@ -73,10 +73,10 @@   - + {$product['name']}
{$customization['customization_text']} -
+   @@ -87,9 +87,9 @@   - + {$product['unit_price']} - +   @@ -100,9 +100,9 @@   - + {$customization['customization_quantity']} - +   @@ -113,9 +113,9 @@   - + {$customization['quantity']} - +   diff --git a/mails/en/order_customer_comment.html b/mails/en/order_customer_comment.html index 6dd6fedcf..c9c18b7f1 100644 --- a/mails/en/order_customer_comment.html +++ b/mails/en/order_customer_comment.html @@ -68,9 +68,9 @@ - + Message from a customer - + @@ -82,14 +82,14 @@   - + You have received a new message regarding booking with the reference {order_name}.

Name: {firstname} {lastname}

E-mail: {email}

Customer message:
{message}

-
+   diff --git a/mails/en/order_hotel_detail.tpl b/mails/en/order_hotel_detail.tpl index 710025127..a6d98eb90 100644 --- a/mails/en/order_hotel_detail.tpl +++ b/mails/en/order_hotel_detail.tpl @@ -1,5 +1,5 @@ {if isset($list['hotel_name']) && $list['hotel_name']} - +

{l s='Hotel details'}:

@@ -9,5 +9,5 @@ {l s='Hotel Email'}: {$list['hotel_email']}
{l s='Total Rooms'}: {$list['num_rooms']}

-
+
{/if} \ No newline at end of file diff --git a/mails/en/order_merchant_comment.html b/mails/en/order_merchant_comment.html index 4cbc9d7b8..e57e34375 100644 --- a/mails/en/order_merchant_comment.html +++ b/mails/en/order_merchant_comment.html @@ -68,9 +68,9 @@ - + Hi {firstname} {lastname}, - + @@ -82,7 +82,7 @@   - +

Message from {shop_name}

@@ -90,7 +90,7 @@ You have received a new message from {shop_name} regarding booking with the reference {order_name}.

Message:
{message}
-
+   diff --git a/mails/en/order_refund_completed_admin.html b/mails/en/order_refund_completed_admin.html index 0c1baf06c..d1647d8fc 100755 --- a/mails/en/order_refund_completed_admin.html +++ b/mails/en/order_refund_completed_admin.html @@ -71,10 +71,10 @@ - + Hi {firstname} {lastname},
A request has been completed for the {refund_for_txt} cancellation. -
+ @@ -87,7 +87,7 @@   - +

Order details

Order: {order_reference} Placed on {order_date}

@@ -96,7 +96,7 @@ Payment Mode: {payment_mode}

Transaction Id: {id_transaction}

-
+   @@ -119,12 +119,12 @@   - +

Customer details

Customer name: {customer_name}

Customer email: {customer_email}

-
+   diff --git a/mails/en/order_refund_completed_customer.html b/mails/en/order_refund_completed_customer.html index 211a19f11..0cb997673 100755 --- a/mails/en/order_refund_completed_customer.html +++ b/mails/en/order_refund_completed_customer.html @@ -71,10 +71,10 @@ - + Hi {firstname} {lastname},
Your request for {refund_for_txt} cancellation has been completed. -
+ @@ -86,7 +86,7 @@   - +

Order details

Order: {order_reference} Placed on {order_date}

@@ -95,7 +95,7 @@ Payment Mode: {payment_mode}

Transaction Id: {id_transaction}

-
+   @@ -117,10 +117,10 @@ - + You can review your booking cancelation requests from the "Booking Refund Requests" section of your customer account by clicking "My account". - + diff --git a/mails/en/order_refund_denied_admin.html b/mails/en/order_refund_denied_admin.html index 2a1ef1624..ddb75a8d2 100755 --- a/mails/en/order_refund_denied_admin.html +++ b/mails/en/order_refund_denied_admin.html @@ -71,10 +71,10 @@ - + Hi {firstname} {lastname},
A request has been denied for the {refund_for_txt} cancellation. -
+ @@ -87,13 +87,13 @@   - +

Order details

Order: {order_reference} Placed on {order_date}

Refund Status: {status_name}

-
+   @@ -116,12 +116,12 @@   - +

Customer details

Customer name: {customer_name}

Customer email: {customer_email}

-
+   diff --git a/mails/en/order_refund_denied_customer.html b/mails/en/order_refund_denied_customer.html index c997eb0a3..67ea54f76 100755 --- a/mails/en/order_refund_denied_customer.html +++ b/mails/en/order_refund_denied_customer.html @@ -71,10 +71,10 @@ - + Hi {firstname} {lastname},
Your request for {refund_for_txt} cancellation has been denied. -
+ @@ -86,13 +86,13 @@   - +

Order details

Order: {order_reference} Placed on {order_date}

Refund Status: {status_name}

-
+   @@ -114,10 +114,10 @@ - + You can review your booking cancelation requests from the "Booking Refund Requests" section of your customer account by clicking "My account". - + diff --git a/mails/en/order_refund_pending_admin.html b/mails/en/order_refund_pending_admin.html index 36d245469..e85a274c7 100755 --- a/mails/en/order_refund_pending_admin.html +++ b/mails/en/order_refund_pending_admin.html @@ -71,10 +71,10 @@ - + Hi {firstname} {lastname},
A request has been generated for {refund_for_txt} cancellations. -
+ @@ -87,14 +87,14 @@   - +

Order details

Order: {order_reference} Placed on {order_date}

Refund Status: {status_name}

Cancelation Reason: {cancelation_reason}

-
+   @@ -117,12 +117,12 @@   - +

Customer details

Customer name: {customer_name}

Customer email: {customer_email}

-
+   diff --git a/mails/en/order_refund_pending_customer.html b/mails/en/order_refund_pending_customer.html index 2b439d093..6e885fa96 100755 --- a/mails/en/order_refund_pending_customer.html +++ b/mails/en/order_refund_pending_customer.html @@ -71,10 +71,10 @@ - + Hi {firstname} {lastname},
Your request for {refund_for_txt} cancellation has been submitted successfully. -
+ @@ -86,13 +86,13 @@   - +

Order details

Order: {order_reference} Placed on {order_date}

Refund Status: {status_name}

-
+   @@ -114,10 +114,10 @@ - + You can review your booking cancelation requests from the "Booking Refund Requests" section of your customer account by clicking "My account". - + diff --git a/mails/en/order_return_state.html b/mails/en/order_return_state.html index fd3de585a..104104849 100644 --- a/mails/en/order_return_state.html +++ b/mails/en/order_return_state.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,13 +83,13 @@   - +

Return #{id_order_return} - update

We have updated the progress on your return #{id_order_return}, the new status is: "{state_order_return}"
-
+   @@ -102,10 +102,10 @@ {extra_mail_content_html} - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + diff --git a/mails/en/overbooking.html b/mails/en/overbooking.html index b58f70c8b..8ca343851 100755 --- a/mails/en/overbooking.html +++ b/mails/en/overbooking.html @@ -71,12 +71,12 @@ - + Hi {firstname} {lastname},

Thank you for booking with {hotel_hotel_name}!

Bookings in this order are Not Confirmed yet !!
We are sorry for your inconvenience. Please contact hotel to get final confirmation for your bookings. -
+ @@ -88,14 +88,14 @@   - +

Order details

Order: {order_name} Placed on {date}

Payment: {payment}

Status: {order_status}
-
+   @@ -127,18 +127,18 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our shop. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our shop. - + diff --git a/mails/en/overbooking_admin.html b/mails/en/overbooking_admin.html index a19795a02..c64acd1ec 100755 --- a/mails/en/overbooking_admin.html +++ b/mails/en/overbooking_admin.html @@ -70,12 +70,12 @@ - + Hi {firstname} {lastname},

New bookings are created on {hotel_hotel_name}!

Bookings in this order have Overbookings !!
This order is not confirmed yet. Please check the order details to resolve overbookings. -
+ @@ -87,14 +87,14 @@   - +

Customer details

Name: {customer_name}

Email: {customer_email}
-
+   @@ -110,7 +110,7 @@   - +

Order details

@@ -118,7 +118,7 @@ Payment: {payment}

Status: {order_status}
-
+   diff --git a/mails/en/partial_payment_accepted.html b/mails/en/partial_payment_accepted.html index 61b578477..953846164 100644 --- a/mails/en/partial_payment_accepted.html +++ b/mails/en/partial_payment_accepted.html @@ -69,10 +69,10 @@ - + Hi {firstname} {lastname},
{order_header_line_html} -
+ @@ -84,7 +84,7 @@   - +

Order {order_name} - Payment processed

@@ -93,7 +93,7 @@ Total Booking Amount: {total_paid}

Partial Payment Amount: {advance_paid_amount}

Total Paid Amount: {total_paid_real}

-
+   @@ -106,18 +106,18 @@ {extra_mail_content_html} - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/password.html b/mails/en/password.html index e6fd5726b..803a94c72 100644 --- a/mails/en/password.html +++ b/mails/en/password.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,14 +83,14 @@   - +

Your new {shop_name} login details

E-mail address: {email}
Password: {passwd}
-
+   @@ -102,18 +102,18 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/password_query.html b/mails/en/password_query.html index 3a9071826..3825facc8 100644 --- a/mails/en/password_query.html +++ b/mails/en/password_query.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,7 +83,7 @@   - +

Password reset request for {shop_name}

@@ -91,7 +91,7 @@ Please note that this will change your current password.

To confirm this action, please use the following link:
{url}
-
+   diff --git a/mails/en/payment_accepted.html b/mails/en/payment_accepted.html index 97d84f255..b99974481 100644 --- a/mails/en/payment_accepted.html +++ b/mails/en/payment_accepted.html @@ -69,10 +69,10 @@ - + Hi {firstname} {lastname},
{order_header_line_html} -
+ @@ -84,12 +84,12 @@   - +

Order {order_name} - Payment processed

Your payment for order with the reference {order_name} was successfully processed. -
+   @@ -102,18 +102,18 @@ {extra_mail_content_html} - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/payment_error.html b/mails/en/payment_error.html index ba3a129d7..af3d28bb5 100644 --- a/mails/en/payment_error.html +++ b/mails/en/payment_error.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,13 +83,13 @@   - +

Order {order_name} - Payment processing error

There is a problem with your payment for {shop_name} order with the reference {order_name}. Please contact us at your earliest convenience.
-
+   @@ -102,18 +102,18 @@ {extra_mail_content_html} - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/processing.html b/mails/en/processing.html index de01bd0ab..cc1fabbe7 100644 --- a/mails/en/processing.html +++ b/mails/en/processing.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,12 +83,12 @@   - +

Order {order_name} - Processing

We are currently processing your {shop_name} order with the reference {order_name}. -
+   @@ -101,18 +101,18 @@ {extra_mail_content_html} - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/refund.html b/mails/en/refund.html index 5004f8183..b0f59304a 100644 --- a/mails/en/refund.html +++ b/mails/en/refund.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,12 +83,12 @@   - +

Order {order_name} - Refund processed

We have processed your {shop_name} refund for order with the reference {order_name}. -
+   @@ -101,18 +101,18 @@ {extra_mail_content_html} - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/mails/en/reply_msg.html b/mails/en/reply_msg.html index 7eafe00e4..de24a620d 100644 --- a/mails/en/reply_msg.html +++ b/mails/en/reply_msg.html @@ -80,7 +80,7 @@   - +

Message from {contact_name}


Title: {subject}


diff --git a/mails/en/shipped.html b/mails/en/shipped.html index f0e3c9a5e..815ce0a3b 100644 --- a/mails/en/shipped.html +++ b/mails/en/shipped.html @@ -69,10 +69,10 @@ - + Hi {firstname} {lastname},
Your order has been shipped -
+ @@ -84,13 +84,13 @@   - +

Order {order_name} - Shipped

Your order with the reference {order_name} has been shipped.
Thank you for booking with {shop_name}!
-
+   diff --git a/mails/en/voucher.html b/mails/en/voucher.html index 5be2a4031..471eebe48 100644 --- a/mails/en/voucher.html +++ b/mails/en/voucher.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,14 +83,14 @@   - +

Order {order_name} - Voucher created

A voucher has been created in your name as a result of your order with the reference {order_name}.

Voucher code: {voucher_num} in the amount of {voucher_amount}

Simply copy/paste this code during the payment process for your next order.
-
+   diff --git a/mails/en/voucher_new.html b/mails/en/voucher_new.html index 634666db7..6bc02205d 100644 --- a/mails/en/voucher_new.html +++ b/mails/en/voucher_new.html @@ -69,9 +69,9 @@ - + Hi {firstname} {lastname}, - + @@ -83,13 +83,13 @@   - +

This is to inform you about the creation of a voucher.

Here is the code of your voucher: {voucher_num}

Simply copy/paste this code during the payment process for your next order.
-
+   diff --git a/modules/bankwire/views/templates/mail/mail_template_html.tpl b/modules/bankwire/views/templates/mail/mail_template_html.tpl index 7d1634d33..012591c35 100644 --- a/modules/bankwire/views/templates/mail/mail_template_html.tpl +++ b/modules/bankwire/views/templates/mail/mail_template_html.tpl @@ -25,7 +25,7 @@   - +

{l s='Here are the bank details for your transfer:' mod='bankwire' lang=$lang}

@@ -35,7 +35,7 @@ {l s='Account details:' mod='bankwire' lang=$lang} {$bankwire_details}
{l s='Bank address:' mod='bankwire' lang=$lang} {$bankwire_address} -
+
  diff --git a/modules/blocknewsletter/mails/en/newsletter_conf.html b/modules/blocknewsletter/mails/en/newsletter_conf.html index cff837649..2c5f51f75 100644 --- a/modules/blocknewsletter/mails/en/newsletter_conf.html +++ b/modules/blocknewsletter/mails/en/newsletter_conf.html @@ -68,9 +68,9 @@ - + Hi, - + @@ -82,13 +82,13 @@   - + Thank you for subscribing to our newsletter! If you wish to unsubscribe, please click here. - +   diff --git a/modules/blocknewsletter/mails/en/newsletter_verif.html b/modules/blocknewsletter/mails/en/newsletter_verif.html index 1c55f012e..9ec521952 100644 --- a/modules/blocknewsletter/mails/en/newsletter_verif.html +++ b/modules/blocknewsletter/mails/en/newsletter_verif.html @@ -68,9 +68,9 @@ - + Hi, - + @@ -82,11 +82,11 @@   - + Thank you for subscribing to our newsletter, please confirm your request by clicking here. - +   diff --git a/modules/blocknewsletter/mails/en/newsletter_voucher.html b/modules/blocknewsletter/mails/en/newsletter_voucher.html index 457b8a35e..89cbaa5e7 100644 --- a/modules/blocknewsletter/mails/en/newsletter_voucher.html +++ b/modules/blocknewsletter/mails/en/newsletter_voucher.html @@ -69,9 +69,9 @@ - + Hi, - + @@ -83,7 +83,7 @@   - +

Newsletter subscription

@@ -94,7 +94,7 @@ Please note that the voucher will be valid on your first order. -
+   diff --git a/modules/cheque/views/templates/mail/mail_template_html.tpl b/modules/cheque/views/templates/mail/mail_template_html.tpl index 8b33da90c..607e4fe81 100644 --- a/modules/cheque/views/templates/mail/mail_template_html.tpl +++ b/modules/cheque/views/templates/mail/mail_template_html.tpl @@ -25,7 +25,7 @@   - +

{l s='Here are the bank details for your check:' mod='cheque' lang=$lang}

@@ -34,7 +34,7 @@ {l s='Payable to the order of:' mod='cheque' lang=$lang} {$cheque_name}
{l s='Please mail your check to:' mod='cheque' lang=$lang} {$cheque_address_html} -
+
  diff --git a/modules/qlohotelreview/mails/en/review_approve.html b/modules/qlohotelreview/mails/en/review_approve.html index eff0f4fa4..582dc6d3f 100644 --- a/modules/qlohotelreview/mails/en/review_approve.html +++ b/modules/qlohotelreview/mails/en/review_approve.html @@ -194,7 +194,7 @@ - + Dear {firstname} {lastname}, @@ -202,7 +202,7 @@ Your review has been approved - + @@ -214,7 +214,7 @@   - +

Review approved

@@ -237,7 +237,7 @@ You can view your review from here. -
+   @@ -249,20 +249,20 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/modules/qlohotelreview/mails/en/review_reply_with_link.html b/modules/qlohotelreview/mails/en/review_reply_with_link.html index 56de1edbc..634157f71 100644 --- a/modules/qlohotelreview/mails/en/review_reply_with_link.html +++ b/modules/qlohotelreview/mails/en/review_reply_with_link.html @@ -194,7 +194,7 @@ - + Dear {firstname} {lastname}, @@ -202,7 +202,7 @@ Hotel management has replied to your review - + @@ -214,7 +214,7 @@   - +

Management reply

@@ -244,7 +244,7 @@ You can view your review from here. -
+   @@ -256,20 +256,20 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/modules/qlohotelreview/mails/en/review_reply_without_link.html b/modules/qlohotelreview/mails/en/review_reply_without_link.html index 5c3b9a84a..7011057a9 100644 --- a/modules/qlohotelreview/mails/en/review_reply_without_link.html +++ b/modules/qlohotelreview/mails/en/review_reply_without_link.html @@ -194,7 +194,7 @@ - + Dear {firstname} {lastname}, @@ -202,7 +202,7 @@ Hotel management has replied to your review - + @@ -214,7 +214,7 @@   - +

Management reply

@@ -238,7 +238,7 @@ Management reply: {management_reply}
-
+   @@ -250,20 +250,20 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/modules/qlohotelreview/mails/en/review_request.html b/modules/qlohotelreview/mails/en/review_request.html index 60d1c5269..cfb573262 100644 --- a/modules/qlohotelreview/mails/en/review_request.html +++ b/modules/qlohotelreview/mails/en/review_request.html @@ -194,7 +194,7 @@ - + Dear {firstname} {lastname}, @@ -202,7 +202,7 @@ Thank you for choosing our hotel for your recent stay! - + @@ -214,7 +214,7 @@   - +

Please review us!

@@ -222,7 +222,7 @@ Could you please take a moment to review us? Please review your stay at {hotel_name} by clicking here. We would love to hear your feedback and use it to improve our services!
-
+   @@ -234,20 +234,20 @@ - + You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our website. - + - + If you have a guest account, you can follow your order via the "Guest Tracking" section on our website. - + diff --git a/themes/debug.tpl b/themes/debug.tpl index 87fef347d..ebe7b79f4 100644 --- a/themes/debug.tpl +++ b/themes/debug.tpl @@ -103,6 +103,10 @@ font-style: italic; } + .template-name { + color: brown; + } + #table_assigned_vars th { color: blue; } @@ -123,7 +127,7 @@

included templates & config files (load time in seconds)

{foreach $template_data as $template} - {$template.name} + {$template.name} (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"} ) From e72ce6f754615c85eccef928ff0373c599ef8e2d Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Tue, 16 Jun 2026 15:13:56 +0530 Subject: [PATCH 44/78] Fix incorrect refund rules returned by HotelOrderRefundRules::getApplicableRefundRules for orders --- .../hotelreservationsystem/classes/HotelOrderRefundRules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php b/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php index bc5372a90..5ce9d376d 100644 --- a/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php +++ b/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php @@ -262,7 +262,7 @@ class HotelOrderRefundRules extends ObjectModel ON (horr.`id_refund_rule` = hbrr.`id_refund_rule`) LEFT JOIN `'._DB_PREFIX_.'htl_order_refund_rules_lang` horrl ON (horrl.`id_refund_rule` = horr.`id_refund_rule` AND horrl.`id_lang` = '.(int) $idLang.') - LEFT JOIN `'._DB_PREFIX_.'htl_booking_detail` hbd + INNER JOIN `'._DB_PREFIX_.'htl_booking_detail` hbd ON (hbd.`id_hotel` = hbrr.`id_hotel` AND hbd.`id_order` = '.(int) $idOrder.') WHERE horr.`days` <= '.(int) $days.' GROUP BY hbrr.`id_refund_rule` From a7417ff5ca1ba0f39094565f77bde95f71a1a3d2 Mon Sep 17 00:00:00 2001 From: aradhana kumari Date: Wed, 17 Jun 2026 11:05:03 +0530 Subject: [PATCH 45/78] Fixed: Translation Server Unreachable - While Adding ISO code of a Language Co-authored-by: Name --- controllers/admin/AdminLanguagesController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/admin/AdminLanguagesController.php b/controllers/admin/AdminLanguagesController.php index f655284a7..f176f3517 100644 --- a/controllers/admin/AdminLanguagesController.php +++ b/controllers/admin/AdminLanguagesController.php @@ -552,7 +552,7 @@ class AdminLanguagesControllerCore extends AdminController } // Get all iso code available - if ($lang_packs = Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='.Tools::getValue('ps_version').'&iso_lang='.Tools::strtolower(Tools::getValue('iso_lang')))) { + if ($lang_packs = Tools::file_get_contents(_QLO_API_URL_.'/lang_pack/get_lang_pack.php?version='.Tools::getValue('ps_version').'&iso_lang='.Tools::strtolower(Tools::getValue('iso_lang')))) { $result = json_decode($lang_packs); if ($lang_packs !== '' && $result && !isset($result->error)) { $this->status = 'ok'; From cde7d4b7f8db46ee11cf4f7961e8051b5f16bda4 Mon Sep 17 00:00:00 2001 From: azhar bhat Date: Wed, 17 Jun 2026 15:36:56 +0530 Subject: [PATCH 46/78] Tooltip UI updated Co-authored-by: Name --- admin/themes/default/sass/admin-theme.sass | 2 + .../themes/default/sass/admin-theme_rtl.sass | 2 + .../default/sass/partials/_tooltip.sass | 30 +++++++++++++ .../controllers/products/connected-rooms.tpl | 2 +- controllers/admin/AdminOrdersController.php | 7 +-- controllers/admin/AdminProductsController.php | 1 - .../views/css/HotelReservationAdmin.css | 43 ------------------- 7 files changed, 37 insertions(+), 50 deletions(-) create mode 100644 admin/themes/default/sass/partials/_tooltip.sass diff --git a/admin/themes/default/sass/admin-theme.sass b/admin/themes/default/sass/admin-theme.sass index 33b4084b0..1e196b8df 100644 --- a/admin/themes/default/sass/admin-theme.sass +++ b/admin/themes/default/sass/admin-theme.sass @@ -108,6 +108,8 @@ @import "partials/select2" @import "partials/ndv3" +@import "partials/tooltip" + //Backward compatibility @import "partials/backward" diff --git a/admin/themes/default/sass/admin-theme_rtl.sass b/admin/themes/default/sass/admin-theme_rtl.sass index 712d08aa9..63af964be 100644 --- a/admin/themes/default/sass/admin-theme_rtl.sass +++ b/admin/themes/default/sass/admin-theme_rtl.sass @@ -112,6 +112,8 @@ //RTL @import "partials/rtl" +@import "partials/tooltip" + //Backward compatibility @import "partials/backward" diff --git a/admin/themes/default/sass/partials/_tooltip.sass b/admin/themes/default/sass/partials/_tooltip.sass new file mode 100644 index 000000000..049c15291 --- /dev/null +++ b/admin/themes/default/sass/partials/_tooltip.sass @@ -0,0 +1,30 @@ +.tooltip_cont + min-width: 280px + width: 100% + font-size: 14px + font-weight: 600 + .tip_header + margin-bottom: 10px + .tip-body > div + margin-bottom: 6px + +.tip_element_head + font-size: 12px + +.tip_element_value + font-size: 14px + font-weight: 400 + opacity: 0.8 + +.tip-body + display: grid + grid-template-columns: auto auto + &.connected-tip-body + grid-template-columns: 1fr 1fr + gap: 8px 16px + +.ui-tooltip, +.ui-tooltip.ui-widget-content + border: none + padding: 10px + box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.15) diff --git a/admin/themes/default/template/controllers/products/connected-rooms.tpl b/admin/themes/default/template/controllers/products/connected-rooms.tpl index 819a86d5a..19bb6f20e 100644 --- a/admin/themes/default/template/controllers/products/connected-rooms.tpl +++ b/admin/themes/default/template/controllers/products/connected-rooms.tpl @@ -22,7 +22,7 @@ {if isset($htl_connected_rooms) && $htl_connected_rooms|@count > 0} - + {/if}