diff --git a/admin/ajax_products_list.php b/admin/ajax_products_list.php index 03a5f4999..98f9647cb 100644 --- a/admin/ajax_products_list.php +++ b/admin/ajax_products_list.php @@ -58,6 +58,8 @@ if ($excludeIds && $excludeIds != 'NaN') { $excludeVirtuals = (bool)Tools::getValue('excludeVirtuals', true); $exclude_packs = (bool)Tools::getValue('exclude_packs', true); +$bookingProduct = (int) Tools::getValue('booking_product'); + $context = Context::getContext(); $sql = 'SELECT p.`id_product`, pl.`link_rewrite`, p.`reference`, pl.`name`, image_shop.`id_image` id_image, il.`legend`, p.`cache_default_attribute` @@ -72,6 +74,7 @@ $sql = 'SELECT p.`id_product`, pl.`link_rewrite`, p.`reference`, pl.`name`, imag (!empty($excludePackItself) ? ' AND p.id_product <> '.$excludePackItself.' ' : ' '). ($excludeVirtuals ? 'AND NOT EXISTS (SELECT 1 FROM `'._DB_PREFIX_.'product_download` pd WHERE (pd.id_product = p.id_product))' : ''). ($exclude_packs ? 'AND (p.cache_is_pack IS NULL OR p.cache_is_pack = 0)' : ''). + ($bookingProduct ? 'AND p.`booking_product` = '.(int) $bookingProduct : ''). ' GROUP BY p.id_product'; $items = Db::getInstance()->executeS($sql); diff --git a/admin/themes/default/sass/partials/_chosen.sass b/admin/themes/default/sass/partials/_chosen.sass index 9f5f1f7e7..25ff66ef3 100644 --- a/admin/themes/default/sass/partials/_chosen.sass +++ b/admin/themes/default/sass/partials/_chosen.sass @@ -200,6 +200,8 @@ $chosen-sprite-path: '../img/chosen-sprite.png' input position: absolute @include left(-9000px) + &:before + visibility: hidden .chosen-container-multi .chosen-choices diff --git a/admin/themes/default/sass/partials/_icons.sass b/admin/themes/default/sass/partials/_icons.sass index 6788aad63..d6fdf4f09 100644 --- a/admin/themes/default/sass/partials/_icons.sass +++ b/admin/themes/default/sass/partials/_icons.sass @@ -311,7 +311,7 @@ @extend .icon-cogs .icon-AdminAdmin @extend .icon-cog -.icon-AdminParentStats +.icon-AdminStats @extend .icon-bar-chart .icon-AdminStock @extend .icon-archive diff --git a/admin/themes/default/template/controllers/information/helpers/view/view.tpl b/admin/themes/default/template/controllers/information/helpers/view/view.tpl index d142e68a6..463806b60 100644 --- a/admin/themes/default/template/controllers/information/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/information/helpers/view/view.tpl @@ -84,7 +84,7 @@ {l s='Server information'} - {if count($uname)} + {if Tools::strlen($uname) > 0}

{l s='Server information:'} {$uname|escape:'html':'UTF-8'}

diff --git a/admin/themes/default/template/controllers/modules/content.tpl b/admin/themes/default/template/controllers/modules/content.tpl index ec7610a96..bfc706ef7 100644 --- a/admin/themes/default/template/controllers/modules/content.tpl +++ b/admin/themes/default/template/controllers/modules/content.tpl @@ -36,7 +36,7 @@
- PrestaShop Addons + QloApps Addons
diff --git a/admin/themes/default/template/controllers/modules/page_header_toolbar.tpl b/admin/themes/default/template/controllers/modules/page_header_toolbar.tpl index 8396a808b..f6cfd6740 100644 --- a/admin/themes/default/template/controllers/modules/page_header_toolbar.tpl +++ b/admin/themes/default/template/controllers/modules/page_header_toolbar.tpl @@ -67,20 +67,22 @@
{l s='Recommended Modules and Services'}
- {if $add_permission eq '1' && ($context_mode != Context::MODE_HOST)} -
  • - - -
    {l s='Add a new module'}
    -
    -
  • - {else} -
  • - - -
    {l s='Add a new module'}
    -
    -
  • + {if $add_permission eq '1'} + {if $context_mode != Context::MODE_HOST} +
  • + + +
    {l s='Add a new module'}
    +
    +
  • + {else} +
  • + + +
    {l s='Add a new module'}
    +
    +
  • + {/if} {/if} {if isset($help_link)} {*
  • diff --git a/admin/themes/default/template/controllers/products/helpers/uploader/ajax.tpl b/admin/themes/default/template/controllers/products/helpers/uploader/ajax.tpl index 240e46188..6776306f3 100644 --- a/admin/themes/default/template/controllers/products/helpers/uploader/ajax.tpl +++ b/admin/themes/default/template/controllers/products/helpers/uploader/ajax.tpl @@ -24,7 +24,7 @@ *}
    - + diff --git a/admin/themes/default/template/controllers/products/informations.tpl b/admin/themes/default/template/controllers/products/informations.tpl index 89ff4ac8c..d66b7e120 100644 --- a/admin/themes/default/template/controllers/products/informations.tpl +++ b/admin/themes/default/template/controllers/products/informations.tpl @@ -137,7 +137,7 @@ {l s='Select Hotel'}
    - {foreach from=$htl_info item=htl_dtl} {/foreach} diff --git a/classes/ConfigurationTest.php b/classes/ConfigurationTest.php index 60628b646..98bdaeb44 100644 --- a/classes/ConfigurationTest.php +++ b/classes/ConfigurationTest.php @@ -115,7 +115,6 @@ class ConfigurationTestCore 'register_globals' => false, 'gz' => false, 'mbstring' => false, - 'magicquotes' => false, 'dom' => false, ); } @@ -181,11 +180,6 @@ class ConfigurationTestCore return extension_loaded('simplexml'); } - public static function test_magicquotes() - { - return function_exists('get_magic_quotes_gpc') ? !get_magic_quotes_gpc() : true; - } - public static function test_upload() { return ini_get('file_uploads'); diff --git a/classes/Cookie.php b/classes/Cookie.php index 29b89b697..0edb66672 100644 --- a/classes/Cookie.php +++ b/classes/Cookie.php @@ -93,7 +93,7 @@ class CookieCore $this->_path = str_replace('%7E', '~', $this->_path); $this->_domain = $this->getDomain($shared_urls); $this->_sameSite = Configuration::get('PS_COOKIE_SAMESITE'); - $this->_name = 'PrestaShop-'.md5(($this->_standalone ? '' : _PS_VERSION_).$name.$this->_domain); + $this->_name = 'QloApps-'.md5(($this->_standalone ? '' : _PS_VERSION_).$name.$this->_domain); $this->_allow_writing = true; $this->_salt = $this->_standalone ? str_pad('', 8, md5('ps'.__FILE__)) : _COOKIE_IV_; if ($this->_standalone) { diff --git a/classes/Dispatcher.php b/classes/Dispatcher.php index d4ff80579..b4903c747 100644 --- a/classes/Dispatcher.php +++ b/classes/Dispatcher.php @@ -305,6 +305,11 @@ class DispatcherCore } else { $controllers = Dispatcher::getControllers(_PS_MODULE_DIR_.$tab->module.'/controllers/admin/'); if (!isset($controllers[strtolower($this->controller)])) { + // If this is a parent tab, load the first child + if (Validate::isLoadedObject($tab) && $tab->id_parent == 0 && ($tabs = Tab::getTabs(Context::getContext()->language->id, $tab->id)) && isset($tabs[0])) { + Tools::redirectAdmin(Context::getContext()->link->getAdminLink($tabs[0]['class_name'])); + } + $this->controller = $this->controller_not_found; $controller_class = 'AdminNotFoundController'; } else { diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index 3e89319f2..5e5fb6f52 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -646,17 +646,17 @@ abstract class PaymentModuleCore extends Module // THEN // The voucher is cloned with a new value corresponding to the remainder $reduction_amount_converted = $cart_rule['obj']->reduction_amount; - if ((int) $cart_rule['obj']->reduction_currency !== (int) $cart->id_currency) { + if ((int) $cart_rule['obj']->reduction_currency !== (int) $this->context->cart->id_currency) { $reduction_amount_converted = Tools::convertPriceFull( $cart_rule['obj']->reduction_amount, new Currency($cart_rule['obj']->reduction_currency), - new Currency($cart->id_currency) + new Currency($this->context->cart->id_currency) ); } if ($cart_rule['obj']->reduction_tax) { - $remaining_amount = $reduction_amount_converted - $values['tax_incl']; + $remaining_amount = $values['tax_incl'] - $order->total_products_wt; } else { - $remaining_amount = $reduction_amount_converted - $values['tax_excl']; + $remaining_amount = $values['tax_excl'] - $order->total_products; } if ($remaining_amount > 0 && $cart_rule['obj']->partial_use == 1 && $reduction_amount_converted > 0) { // Create a new voucher from the original diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index 941439b3a..74b9576bd 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -884,7 +884,7 @@ class AdminControllerCore extends Controller $key = isset($tmp_tab[1]) ? $tmp_tab[0].'.`'.$tmp_tab[1].'`' : '`'.$tmp_tab[0].'`'; // as in database 0 means position 1 in the renderlist - if (isset($field['position'])) { + if (isset($field['position']) && Validate::isInt($value)) { $value -= 1; } diff --git a/classes/controller/FrontController.php b/classes/controller/FrontController.php index 2f19b9f61..80e33e72e 100644 --- a/classes/controller/FrontController.php +++ b/classes/controller/FrontController.php @@ -917,8 +917,16 @@ class FrontControllerCore extends Controller } $excluded_key = array('isolang', 'id_lang', 'controller', 'fc', 'id_product', 'id_category', 'id_manufacturer', 'id_supplier', 'id_cms'); foreach ($_GET as $key => $value) { - if (!in_array($key, $excluded_key) && Validate::isUrl($key) && Validate::isUrl($value)) { - $params[Tools::safeOutput($key)] = Tools::safeOutput($value); + if (!in_array($key, $excluded_key)) { + if (is_array($value)) { + if (Validate::isUrl($key)) { + $params[Tools::safeOutput($key)] = $this->sanitizeQueryOutput($value); + } + } else { + if (Validate::isUrl($key) && Validate::isUrl($value)) { + $params[Tools::safeOutput($key)] = Tools::safeOutput($value); + } + } } } @@ -943,6 +951,24 @@ class FrontControllerCore extends Controller } } + protected function sanitizeQueryOutput($query) + { + $params = array(); + foreach ($query as $key => $value) { + if (Validate::isUrl($key)) { + if (is_array($value)) { + $params[Tools::safeOutput($key)] = $this->sanitizeQueryOutput($value); + } else { + if (Validate::isUrl($value)) { + $params[Tools::safeOutput($key)] = Tools::safeOutput($value); + } + } + } + } + + return $params; + } + /** * Geolocation management * diff --git a/controllers/admin/AdminCustomersController.php b/controllers/admin/AdminCustomersController.php index b7078a0f1..695de6a3b 100644 --- a/controllers/admin/AdminCustomersController.php +++ b/controllers/admin/AdminCustomersController.php @@ -966,6 +966,21 @@ class AdminCustomersControllerCore extends AdminController return parent::processSave(); } + protected function copyFromPost(&$object, $table) + { + parent::copyFromPost($object, $table); + + $years = Tools::getValue('years'); + $months = Tools::getValue('months'); + $days = Tools::getValue('days'); + + if ($years != '' && $months != '' && $days != '') { + $object->birthday = (int) $years.'-'.(int) $months.'-'.(int) $days; + } else { + $object->birthday = '0000-00-00'; + } + } + protected function afterDelete($object, $old_id) { $customer = new Customer($old_id); diff --git a/controllers/admin/AdminGroupsController.php b/controllers/admin/AdminGroupsController.php index 54ea51ffd..c22e02be7 100644 --- a/controllers/admin/AdminGroupsController.php +++ b/controllers/admin/AdminGroupsController.php @@ -175,13 +175,12 @@ class AdminGroupsControllerCore extends AdminController protected function renderCustomersList($group) { - $genders = array(0 => '?'); - $genders_icon = array('default' => 'unknown.gif'); - foreach (Gender::getGenders() as $gender) { - /** @var Gender $gender */ - $genders_icon[$gender->id] = '../genders/'.(int)$gender->id.'.jpg'; - $genders[$gender->id] = $gender->name; + $titles_array = array(); + $genders = Gender::getGenders($this->context->language->id); + foreach ($genders as $gender) { + $titles_array[$gender->id_gender] = $gender->name; } + $this->table = 'customer_group'; $this->lang = false; $this->list_id = 'customer_group'; @@ -194,7 +193,7 @@ class AdminGroupsControllerCore extends AdminController $this->fields_list = (array( 'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'filter_key' => 'c!id_customer', 'class' => 'fixed-width-xs'), - 'id_gender' => array('title' => $this->l('Social title'), 'icon' => $genders_icon, 'list' => $genders), + 'title' => array('title' => $this->l('Social title'), 'filter_key' => 'c!id_gender', 'type' => 'select', 'list' => $titles_array), 'firstname' => array('title' => $this->l('First name')), 'lastname' => array('title' => $this->l('Last name')), 'email' => array('title' => $this->l('Email address'), 'filter_key' => 'c!email', 'orderby' => true), @@ -202,8 +201,9 @@ class AdminGroupsControllerCore extends AdminController 'date_add' => array('title' => $this->l('Registration date'), 'type' => 'date', 'class' => 'fixed-width-md', 'align' => 'center'), 'active' => array('title' => $this->l('Enabled'), 'align' => 'center', 'class' => 'fixed-width-sm', 'type' => 'bool', 'search' => false, 'orderby' => false, 'filter_key' => 'c!active', 'callback' => 'printOptinIcon') )); - $this->_select = 'c.*, a.id_group'; + $this->_select = 'c.*, a.id_group, gl.`name` AS title'; $this->_join = 'LEFT JOIN `'._DB_PREFIX_.'customer` c ON (a.`id_customer` = c.`id_customer`)'; + $this->_join .= ' LEFT JOIN '._DB_PREFIX_.'gender_lang gl ON (gl.`id_gender` = c.`id_gender` AND gl.`id_lang` = '.(int) $this->context->language->id.')'; $this->_where = 'AND a.`id_group` = '.(int)$group->id.' AND c.`deleted` != 1'; $this->_where .= Shop::addSqlRestriction(Shop::SHARE_CUSTOMER, 'c'); self::$currentIndex = self::$currentIndex.'&id_group='.(int)$group->id.'&viewgroup'; diff --git a/controllers/admin/AdminInformationController.php b/controllers/admin/AdminInformationController.php index e21e398c1..0dba7d135 100644 --- a/controllers/admin/AdminInformationController.php +++ b/controllers/admin/AdminInformationController.php @@ -140,7 +140,6 @@ class AdminInformationControllerCore extends AdminController 'upload_max_filesize' => $this->l('In PHP configuration set upload_max_filesize to minimum 16M.'), 'max_execution_time' => $this->l('In PHP configuration set max_execution_time to minimum 500.'), 'mbstring' => $this->l('PHP Mbstring extension is not enabled.'), - 'magicquotes' => $this->l('PHP magic quotes option is enabled.'), 'dom' => $this->l('PHP DOM extension is not loaded.'), ); diff --git a/controllers/admin/AdminPPreferencesController.php b/controllers/admin/AdminPPreferencesController.php index 1ea8b3f50..f021fa9d7 100644 --- a/controllers/admin/AdminPPreferencesController.php +++ b/controllers/admin/AdminPPreferencesController.php @@ -197,7 +197,7 @@ class AdminPPreferencesControllerCore extends AdminController ), 'submit' => array('title' => $this->l('Save')) ), - 'order_by_pagination' => array( + /*'order_by_pagination' => array( 'title' => $this->l('Pagination'), 'fields' => array( 'PS_PRODUCTS_PER_PAGE' => array( @@ -241,7 +241,7 @@ class AdminPPreferencesControllerCore extends AdminController ) ), 'submit' => array('title' => $this->l('Save')) - ), + ),*/ 'fo_product_page' => array( 'title' => $this->l('Room type page'), 'fields' => array( diff --git a/controllers/admin/AdminReferrersController.php b/controllers/admin/AdminReferrersController.php index ee8da2c2b..bed1574e2 100644 --- a/controllers/admin/AdminReferrersController.php +++ b/controllers/admin/AdminReferrersController.php @@ -60,6 +60,9 @@ class AdminReferrersControllerCore extends AdminController { public function __construct() { + // redirect to Dashboard for stats related to Referers + Tools::redirectAdmin(Context::getContext()->link->getAdminLink('AdminDashboard')); + $this->bootstrap = true; $this->table = 'referrer'; $this->className = 'Referrer'; diff --git a/controllers/admin/AdminSearchController.php b/controllers/admin/AdminSearchController.php index 2b9e2b5eb..b0a312832 100644 --- a/controllers/admin/AdminSearchController.php +++ b/controllers/admin/AdminSearchController.php @@ -171,9 +171,36 @@ class AdminSearchControllerCore extends AdminController $this->context = Context::getContext(); if ($this->_list['products'] = Product::searchByName($this->context->language->id, $this->query)) { $objRoomType = new HotelRoomType(); + $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); + $accessibleHotels = HotelBranchInformation::getProfileAccessedHotels( + $this->context->employee->id_profile, + 1, + 1 + ); + foreach ($this->_list['products'] as $key => $product) { - $roomInfo = $objRoomType->getRoomTypeInfoByIdProduct($product['id_product']); - if (!in_array($roomInfo['id_hotel'], HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1))) { + $toUnset = false; + if ($product['booking_product']) { + $roomInfo = $objRoomType->getRoomTypeInfoByIdProduct($product['id_product']); + if (!in_array($roomInfo['id_hotel'], $accessibleHotels)) { + $toUnset = true; + } + } else { + $associations = $objRoomTypeServiceProduct->getAssociatedHotelsAndRoomType($product['id_product']); + // proceed only if access can not be determined from hotels + if (!count(array_intersect($associations['hotels'], $accessibleHotels))) { + $toUnset = true; + foreach ($associations['room_types'] as $idProduct) { + $roomTypeInfo = $objRoomType->getRoomTypeInfoByIdProduct($idProduct); + if (in_array($roomTypeInfo['id_hotel'], $accessibleHotels)) { + $toUnset = false; + break; + } + } + } + } + + if ($toUnset) { unset($this->_list['products'][$key]); } } diff --git a/controllers/admin/AdminSearchEnginesController.php b/controllers/admin/AdminSearchEnginesController.php index 9716e9501..92d4c1929 100644 --- a/controllers/admin/AdminSearchEnginesController.php +++ b/controllers/admin/AdminSearchEnginesController.php @@ -31,6 +31,9 @@ class AdminSearchEnginesControllerCore extends AdminController { public function __construct() { + // redirect to Dashboard for stats related to Search Engines + Tools::redirectAdmin(Context::getContext()->link->getAdminLink('AdminDashboard')); + $this->bootstrap = true; $this->table = 'search_engine'; $this->className = 'SearchEngine'; diff --git a/controllers/admin/AdminSpecificPriceRuleController.php b/controllers/admin/AdminSpecificPriceRuleController.php index a1185a717..fd45236ba 100644 --- a/controllers/admin/AdminSpecificPriceRuleController.php +++ b/controllers/admin/AdminSpecificPriceRuleController.php @@ -286,16 +286,25 @@ class AdminSpecificPriceRuleControllerCore extends AdminController 'title' => $this->l('Save') ), ); - if (($value = $this->getFieldValue($this->object, 'price')) != -1) { - $price = number_format($value, 6); + + $price = $this->getFieldValue($this->object, 'price'); + if ($price != -1 && Validate::isPrice($price)) { + $price = number_format($price, 6); } else { $price = ''; } + $reduction = $this->getFieldValue($this->object, 'reduction'); + if (Validate::isPrice($reduction)) { + $reduction = number_format($reduction, 6); + } else { + $reduction = 0; + } + $this->fields_value = array( 'price' => $price, 'from_quantity' => (($value = $this->getFieldValue($this->object, 'from_quantity')) ? $value : 1), - 'reduction' => number_format((($value = $this->getFieldValue($this->object, 'reduction')) ? $value : 0), 6), + 'reduction' => $reduction, 'leave_bprice_on' => $price ? 0 : 1, 'shop_id' => (($value = $this->getFieldValue($this->object, 'id_shop')) ? $value : 1) ); diff --git a/controllers/admin/AdminWebserviceController.php b/controllers/admin/AdminWebserviceController.php index e2e4a2865..f44c412cb 100644 --- a/controllers/admin/AdminWebserviceController.php +++ b/controllers/admin/AdminWebserviceController.php @@ -118,6 +118,10 @@ class AdminWebserviceControllerCore extends AdminController { parent::processUpdateOptions(); Tools::generateHtaccess(); + + if (!count($this->errors)) { + Tools::redirectAdmin(self::$currentIndex.'&token='.$this->token.'&conf=6'); + } } public function renderForm() diff --git a/controllers/front/AddressController.php b/controllers/front/AddressController.php index 3fd2107ee..29a2ba952 100644 --- a/controllers/front/AddressController.php +++ b/controllers/front/AddressController.php @@ -221,6 +221,8 @@ class AddressControllerCore extends FrontController */ public function initContent() { + $this->show_breadcrump = true; + parent::initContent(); $this->assignCountries(); diff --git a/controllers/front/AuthController.php b/controllers/front/AuthController.php index 320da13dd..d0282b6bb 100644 --- a/controllers/front/AuthController.php +++ b/controllers/front/AuthController.php @@ -294,7 +294,9 @@ class AuthControllerCore extends FrontController $this->errors[] = Tools::displayError('Password is required.'); } elseif (!Validate::isPasswd($passwd)) { $this->errors[] = Tools::displayError('Invalid password.'); - } else { + } + + if (!count($this->errors)) { $customer = new Customer(); $authentication = $customer->getByEmail(trim($email), trim($passwd)); if (isset($authentication->active) && !$authentication->active) { @@ -321,6 +323,7 @@ class AuthControllerCore extends FrontController } } } + if ($this->ajax) { $return = array( 'hasError' => !empty($this->errors), @@ -788,7 +791,6 @@ class AuthControllerCore extends FrontController '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, - '{passwd}' => str_repeat('*', strlen(Tools::getValue('passwd'))), ), $customer->email, $customer->firstname.' '.$customer->lastname diff --git a/controllers/front/CartController.php b/controllers/front/CartController.php index e3a37df06..25ed52255 100644 --- a/controllers/front/CartController.php +++ b/controllers/front/CartController.php @@ -319,25 +319,23 @@ class CartControllerCore extends FrontController $serviceProducts = json_decode(Tools::getValue('serviceProducts'),true); // valdiate occupancy if providede - if ($operator == 'up') { - if ($occupancyRequiredForBooking) { - foreach($occupancy as $key => $roomOccupancy) { - if (!isset($roomOccupancy['adults']) || !$roomOccupancy['adults'] || !Validate::isUnsignedInt($roomOccupancy['adults'])) { - $this->errors[] = sprintf(Tools::displayError('Invalid number of adults for Room %s.'), ($key + 1)); + if ($operator == 'up' && $occupancyRequiredForBooking) { + foreach($occupancy as $key => $roomOccupancy) { + if (!isset($roomOccupancy['adults']) || !$roomOccupancy['adults'] || !Validate::isUnsignedInt($roomOccupancy['adults'])) { + $this->errors[] = sprintf(Tools::displayError('Invalid number of adults for Room %s.'), ($key + 1)); + } + if (isset($roomOccupancy['children'])) { + if (!Validate::isUnsignedInt($roomOccupancy['children'])) { + $this->errors[] = sprintf(Tools::displayError('Invalid number of children for Room %s.'), ($key + 1)); } - if (isset($roomOccupancy['children'])) { - if (!Validate::isUnsignedInt($roomOccupancy['children'])) { - $this->errors[] = sprintf(Tools::displayError('Invalid number of children for Room %s.'), ($key + 1)); - } - if ($roomOccupancy['children'] > 0) { - if (!isset($roomOccupancy['child_ages']) || ($roomOccupancy['children'] != count($roomOccupancy['child_ages'])) || !is_array($roomOccupancy['child_ages'])) { - $this->errors[] = sprintf(Tools::displayError('Please provide all children age for Room %s.'), ($key + 1)); - } else { - if (is_array($roomOccupancy['child_ages'])) { - foreach($roomOccupancy['child_ages'] as $childAge) { - if (!Validate::isUnsignedInt($childAge)) { - $this->errors[] = sprintf(Tools::displayError('Invalid children age for Room %s.'), ($key + 1)); - } + if ($roomOccupancy['children'] > 0) { + if (!isset($roomOccupancy['child_ages']) || ($roomOccupancy['children'] != count($roomOccupancy['child_ages'])) || !is_array($roomOccupancy['child_ages'])) { + $this->errors[] = sprintf(Tools::displayError('Please provide all children age for Room %s.'), ($key + 1)); + } else { + if (is_array($roomOccupancy['child_ages'])) { + foreach($roomOccupancy['child_ages'] as $childAge) { + if (!Validate::isUnsignedInt($childAge)) { + $this->errors[] = sprintf(Tools::displayError('Invalid children age for Room %s.'), ($key + 1)); } } } @@ -345,6 +343,20 @@ class CartControllerCore extends FrontController } } } + + if (!count($this->errors)) { + foreach($occupancy as $key => $roomOccupancy) { + if ($roomOccupancy['adults'] > $roomTypeInfo['max_adults']) { + $this->errors[] = sprintf(Tools::displayError('Room %s cannot have adults more than %s'), $key + 1, $roomTypeInfo['max_adults']); + } + if ($roomOccupancy['children'] > $roomTypeInfo['max_children']) { + $this->errors[] = sprintf(Tools::displayError('Room %s cannot have children more than %s'), $key + 1, $roomTypeInfo['max_children']); + } + if ($roomOccupancy['adults'] + $roomOccupancy['children'] > $roomTypeInfo['max_guests']) { + $this->errors[] = sprintf(Tools::displayError('Room %s cannot have total guests more than %s'), $key + 1, $roomTypeInfo['max_guests']); + } + } + } } if ($id_hotel = $roomTypeInfo['id_hotel']) { @@ -361,19 +373,7 @@ class CartControllerCore extends FrontController $this->errors[] = Tools::displayError('You can\'t book room after date '.$maxOrdDate); } } - if ($occupancyRequiredForBooking) { - foreach($occupancy as $key => $roomOccupancy) { - if ($roomOccupancy['adults'] > $roomTypeInfo['max_adults']) { - $this->errors[] = sprintf(Tools::displayError('Room %s cannot have adults more than %s'), $key + 1, $roomTypeInfo['max_adults']); - } - if ($roomOccupancy['children'] > $roomTypeInfo['max_children']) { - $this->errors[] = sprintf(Tools::displayError('Room %s cannot have children more than %s'), $key + 1, $roomTypeInfo['max_children']); - } - if ($roomOccupancy['adults'] + $roomOccupancy['children'] > $roomTypeInfo['max_guests']) { - $this->errors[] = sprintf(Tools::displayError('Room %s cannot have total guests more than %s'), $key + 1, $roomTypeInfo['max_guests']); - } - } - } + if (!$this->errors) { $objBookingDetail = new HotelBookingDetail(); $num_days = $objBookingDetail->getNumberOfDays($date_from, $date_to); diff --git a/controllers/front/CategoryController.php b/controllers/front/CategoryController.php index 026ae648a..8fdd7d644 100644 --- a/controllers/front/CategoryController.php +++ b/controllers/front/CategoryController.php @@ -211,7 +211,7 @@ class CategoryControllerCore extends FrontController 'order_date_restrict' => $order_date_restrict )); } else { - Tools::redirect($this->context->link->getPageLink('index')); + Tools::redirect($this->context->link->getPageLink('pagenotfound')); } $feat_img_dir = _PS_IMG_.'rf/'; diff --git a/controllers/front/DiscountController.php b/controllers/front/DiscountController.php index f6853470f..89f93a3cb 100644 --- a/controllers/front/DiscountController.php +++ b/controllers/front/DiscountController.php @@ -37,6 +37,8 @@ class DiscountControllerCore extends FrontController */ public function initContent() { + $this->show_breadcrump = true; + parent::initContent(); $cart_rules = CartRule::getCustomerCartRules($this->context->language->id, $this->context->customer->id, true, false, true); diff --git a/controllers/front/HistoryController.php b/controllers/front/HistoryController.php index 397325c41..e3a8210e4 100644 --- a/controllers/front/HistoryController.php +++ b/controllers/front/HistoryController.php @@ -53,6 +53,8 @@ class HistoryControllerCore extends FrontController */ public function initContent() { + $this->show_breadcrump = true; + parent::initContent(); if ($orders = Order::getCustomerOrders($this->context->customer->id)) { foreach ($orders as &$order) { diff --git a/controllers/front/IdentityController.php b/controllers/front/IdentityController.php index ea8c2af16..5da8ccbd9 100644 --- a/controllers/front/IdentityController.php +++ b/controllers/front/IdentityController.php @@ -126,6 +126,8 @@ class IdentityControllerCore extends FrontController */ public function initContent() { + $this->show_breadcrump = true; + parent::initContent(); if ($this->customer->birthday) { diff --git a/controllers/front/OrderConfirmationController.php b/controllers/front/OrderConfirmationController.php index 560e8c444..40955333f 100644 --- a/controllers/front/OrderConfirmationController.php +++ b/controllers/front/OrderConfirmationController.php @@ -67,9 +67,16 @@ class OrderConfirmationControllerCore extends FrontController if (!Validate::isLoadedObject($order) || $order->id_customer != $this->context->customer->id || $this->secure_key != $order->secure_key) { Tools::redirect($redirectLink); } - $module = Module::getInstanceById((int)($this->id_module)); - if ($order->module != $module->name) { - Tools::redirect($redirectLink); + + if ($this->id_module == -1) { + if ($order->module != 'free_order') { + Tools::redirect($redirectLink); + } + } else { + $module = Module::getInstanceById((int)($this->id_module)); + if ($order->module != $module->name) { + Tools::redirect($redirectLink); + } } } @@ -405,6 +412,7 @@ class OrderConfirmationControllerCore extends FrontController $this->context->smarty->assign( array( 'refund_allowed' => (int) $order->isReturnable(), + 'is_free_order' => $this->id_module == -1 && $order->module == 'free_order', 'any_back_order' => $any_back_order, 'shw_bo_msg' => $shw_bo_msg, 'back_ord_msg' => $bo_msg, diff --git a/controllers/front/OrderFollowController.php b/controllers/front/OrderFollowController.php index 9247f7749..7bb79d54d 100644 --- a/controllers/front/OrderFollowController.php +++ b/controllers/front/OrderFollowController.php @@ -37,8 +37,9 @@ class OrderFollowControllerCore extends FrontController */ public function initContent() { - parent::initContent(); $this->show_breadcrump = true; + + parent::initContent(); if (isset($this->context->customer->id) && $this->context->customer->id) { $ordersReturns = OrderReturn::getOrdersReturn($this->context->customer->id, Tools::getValue('id_order')); $this->context->smarty->assign('ordersReturns', $ordersReturns); diff --git a/controllers/front/OrderOpcController.php b/controllers/front/OrderOpcController.php index 17ef02dcb..2b29ef4ce 100644 --- a/controllers/front/OrderOpcController.php +++ b/controllers/front/OrderOpcController.php @@ -121,6 +121,31 @@ class OrderOpcControllerCore extends ParentOrderController $this->context->customer->newsletter = (int)Tools::isSubmit('newsletter'); $this->context->customer->optin = (int)Tools::isSubmit('optin'); $this->context->customer->is_guest = (Tools::isSubmit('is_new_customer') ? !Tools::getValue('is_new_customer', 1) : 0); + + if ($idAddressDelivery = Tools::getValue('opc_id_address_delivery')) { + $objAddress = new Address($idAddressDelivery); + if (Validate::isLoadedObject($objAddress)) { + $phoneMobile = Tools::getValue('phone_mobile'); + + if (Configuration::get('PS_ONE_PHONE_AT_LEAST') && !$phoneMobile) { + $this->errors[] = Tools::displayError('Mobile phone number is a required field.', false); + } + + if (!Validate::isPhoneNumber($phoneMobile)) { + $this->errors[] = Tools::displayError('Please enter a valid Mobile phone number.', false); + } + + if (!count($this->errors)) { + $objAddress->phone_mobile = $phoneMobile; + $objAddress->firstname = $this->context->customer->firstname; + $objAddress->lastname = $this->context->customer->lastname; + if (!$objAddress->save()) { + $this->errors[] = Tools::displayError('Something went wrong while saving phone number. Please try again.', false); + } + } + } + } + $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, @@ -221,10 +246,19 @@ class OrderOpcControllerCore extends ParentOrderController if (($id_order = $this->_checkFreeOrder()) && $id_order) { $order = new Order((int)$id_order); $email = $this->context->customer->email; + $orderConfirmationUrl = $this->context->link->getPageLink('order-confirmation').'?id_cart='.$order->id_cart.'&id_module=-1'.'&id_order='.$id_order.'&key='.$order->secure_key; if ($this->context->customer->is_guest) { $this->context->customer->logout(); } // If guest we clear the cookie for security reason - $this->ajaxDie('freeorder:'.$order->reference.':'.$email); + + $return = array( + 'success' => true, + 'reference' => $order->reference, + 'email' => $email, + 'order_confirmation_url' => $orderConfirmationUrl, + ); + + $this->ajaxDie(json_encode($return)); } exit; break; diff --git a/controllers/front/OrderSlipController.php b/controllers/front/OrderSlipController.php index 2b33b6cad..32e283fbe 100644 --- a/controllers/front/OrderSlipController.php +++ b/controllers/front/OrderSlipController.php @@ -48,6 +48,8 @@ class OrderSlipControllerCore extends FrontController */ public function initContent() { + $this->show_breadcrump = true; + parent::initContent(); $this->context->smarty->assign('ordersSlip', OrderSlip::getOrdersSlip((int)$this->context->cookie->id_customer)); diff --git a/controllers/front/PasswordController.php b/controllers/front/PasswordController.php index f5c8c38fd..317818c87 100644 --- a/controllers/front/PasswordController.php +++ b/controllers/front/PasswordController.php @@ -84,9 +84,6 @@ class PasswordControllerCore extends FrontController '{passwd}' => $password ); if (Mail::Send($this->context->language->id, 'password', Mail::l('Your new password'), $mail_params, $customer->email, $customer->firstname.' '.$customer->lastname)) { - - $this->context->updateCustomer($customer); - $this->context->smarty->assign(array('confirmation' => 1, 'customer_email' => $customer->email)); } else { $this->errors[] = Tools::displayError('An error occurred while sending the email.'); diff --git a/install/controllers/http/configure.php b/install/controllers/http/configure.php index a03dacfcf..a8ef6af3c 100644 --- a/install/controllers/http/configure.php +++ b/install/controllers/http/configure.php @@ -277,11 +277,12 @@ class InstallControllerHttpConfigure extends InstallControllerHttp $this->list_countries = array(); $countries = $this->language->getCountries(); $top_countries = array( - 'fr', 'es', 'us', - 'gb', 'it', 'de', - 'nl', 'pl', 'id', - 'be', 'br', 'se', - 'ca', 'ru', 'cn', + 'in', 'fr', 'es', + 'us', 'gb', 'it', + 'de', 'nl', 'pl', + 'id', 'be', 'br', + 'se', 'ca', 'ru', + 'cn', ); foreach ($top_countries as $iso) { diff --git a/install/controllers/http/system.php b/install/controllers/http/system.php index 950f93247..98019b64e 100644 --- a/install/controllers/http/system.php +++ b/install/controllers/http/system.php @@ -137,7 +137,6 @@ class InstallControllerHttpSystem extends InstallControllerHttp 'register_globals' => $this->l('PHP register_globals option is enabled'), 'gz' => $this->l('GZIP compression is not activated'), 'mbstring' => $this->l('Mbstring extension is not enabled'), - 'magicquotes' => $this->l('PHP magic quotes option is enabled'), 'dom' => $this->l('Dom extension is not loaded'), ) ), diff --git a/install/data/xml/tab.xml b/install/data/xml/tab.xml index a20e6c70e..2cf64422d 100644 --- a/install/data/xml/tab.xml +++ b/install/data/xml/tab.xml @@ -60,9 +60,9 @@ AdminAdmin - + AdminStock @@ -282,15 +282,15 @@ AdminTabs - + AdminStats - + + AdminWarehouses diff --git a/js/admin.js b/js/admin.js index 4d474721a..2c10e2795 100644 --- a/js/admin.js +++ b/js/admin.js @@ -756,7 +756,7 @@ $(document).ready(function() $('select.chosen').each(function(k, item){ - $(item).chosen({disable_search_threshold: 10, search_contains: true}); + $(item).chosen({disable_search_threshold: 5, search_contains: true}); }); // Apply chosen() when modal is loaded $(document).on('shown.bs.modal', function (e) { diff --git a/mails/en/account.html b/mails/en/account.html index 95200ecf8..574320227 100644 --- a/mails/en/account.html +++ b/mails/en/account.html @@ -90,7 +90,6 @@ Here are your login details:
    E-mail address: {email}
    - Password: {passwd}
    diff --git a/mails/en/account.txt b/mails/en/account.txt index 012b219cd..4d081f381 100644 --- a/mails/en/account.txt +++ b/mails/en/account.txt @@ -9,8 +9,6 @@ Here are your login details: E-MAIL ADDRESS: {email} -PASSWORD: {passwd} - Important Security Tips: * Always keep your account details safe. diff --git a/modules/dashguestcycle/views/css/dashguestcycle.css b/modules/dashguestcycle/views/css/dashguestcycle.css index b31121c47..de2301a8c 100644 --- a/modules/dashguestcycle/views/css/dashguestcycle.css +++ b/modules/dashguestcycle/views/css/dashguestcycle.css @@ -17,26 +17,6 @@ * @license LICENSE.txt */ -/* scrollbar design - start */ -#dashguestcycle.dashboard-top ::-webkit-scrollbar { - height: 12px; - margin-bottom: 5px; -} - -#dashguestcycle.dashboard-top ::-webkit-scrollbar-track { - background-color: #DDD; - margin: 0 6px; - border-radius: 10px; -} - -#dashguestcycle.dashboard-top ::-webkit-scrollbar-thumb { - background-color: #BBB; - border-radius: 10px; - margin-bottom: 5px; - -} -/* scrollbar design - end */ - #dashguestcycle { padding-bottom: 5px; } diff --git a/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php b/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php index 0cdc01615..91b472101 100644 --- a/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php +++ b/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php @@ -186,14 +186,6 @@ class HotelOrderRefundRules extends ObjectModel if ($refRule['payment_type'] == HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_PERCENTAGE) { $bookingCancellationDetail['reduction_type'] = HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_PERCENTAGE; $bookingCancellationDetail['cancelation_charge'] = $paidAmount * ($refundValue / 100); - - if ($defaultCurrency != $orderCurrency) { - $bookingCancellationDetail['cancelation_charge'] = Tools::convertPriceFull( - $bookingCancellationDetail['cancelation_charge'], - $objDefaultCurrency, - $objOrderCurrency - ); - } } else { $bookingCancellationDetail['reduction_type'] = HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_FIXED; if ($defaultCurrency != $orderCurrency) { diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php index 6146e43f4..0166e41c0 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php @@ -44,8 +44,11 @@ class AdminHotelRoomsBookingController extends ModuleAdminController $this->context->cookie->id_cart = (int) $objCart->id; } else { // use previous cart - if (!validate::isLoadedObject($objCart = new Cart($this->context->cookie->id_cart))) { + $objCart = new Cart($this->context->cookie->id_cart); + $isCartValid = Validate::isLoadedObject($objCart); + if (!$isCartValid || ($isCartValid && $objCart->orderExists())) { $objCart = $this->createNewCart(); + $this->context->cookie->id_cart = (int) $objCart->id; } } $this->context->cart = $objCart; @@ -418,7 +421,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController $bookingParams['date_from'] = $searchDateFrom; $bookingParams['date_to'] = $searchDateTo; $bookingParams['hotel_id'] = $searchIdHotel; - $bookingParams['room_type'] = $searchIdRoomType; + $bookingParams['id_room_type'] = $searchIdRoomType; $bookingParams['adults'] = $adults; $bookingParams['children'] = $children; $bookingParams['num_rooms'] = $num_rooms; diff --git a/modules/hotelreservationsystem/views/css/HotelReservationAdmin.css b/modules/hotelreservationsystem/views/css/HotelReservationAdmin.css index 028ce74c1..99a26799c 100644 --- a/modules/hotelreservationsystem/views/css/HotelReservationAdmin.css +++ b/modules/hotelreservationsystem/views/css/HotelReservationAdmin.css @@ -472,6 +472,22 @@ p.room_cat_data border-color: #4d90fe; } +.gm-style-iw-d h6 { + font-family: unset; + font-size: 14px; + color: #333; + font-weight: 500; + margin: 0; +} + +.gm-style-iw-d p { + font-family: unset; + font-size: 13px; + color: #333; + font-weight: 400; + margin: 0; +} + /* ==== AdminHotelFeaturePricesSettingsController ==== */ .week_days { display: none; diff --git a/modules/hotelreservationsystem/views/js/HotelReservationAdmin.js b/modules/hotelreservationsystem/views/js/HotelReservationAdmin.js index 66a274406..4f38c48f3 100644 --- a/modules/hotelreservationsystem/views/js/HotelReservationAdmin.js +++ b/modules/hotelreservationsystem/views/js/HotelReservationAdmin.js @@ -69,7 +69,8 @@ var GoogleMapsManager = { var that = this; that.setDefaultLatLng(function() { that.map = new google.maps.Map($(that.mapDiv).get(0), { - zoom: that.defaultZoom + zoom: that.defaultZoom, + clickableIcons: true, }); that.map.setCenter(that.defaultLatLng); if (that.defaultLatLng && that.formattedAddress) { @@ -80,11 +81,78 @@ var GoogleMapsManager = { // register marker events that.map.addListener('click', function (e) { var latLng = e.latLng; - that.geocoder.geocode({ location: latLng }, function (results, status) { - if (status == google.maps.GeocoderStatus.OK && results[0]) { - that.addMarker(latLng, results[0]); - } - }); + + var isInfoWindowNeeded = true; + // if it is a Place Of Interest (POI), event contains the property 'placeId' + if (Object.hasOwn(e, 'placeId')) { + isInfoWindowNeeded = false; + + that.geocoder.geocode({ location: latLng }, function (results, status) { + if (status == google.maps.GeocoderStatus.OK && results[0]) { + var request = { + placeId: e.placeId, + fields: ['name'], + }; + + that.placesService.getDetails(request, function(place, status) { + if (status === google.maps.places.PlacesServiceStatus.OK) { + var content = '
    ' + place.name + '

    ' + + results[0].formatted_address + '

    '; + + var callback = function (latLng) { + that.setFormVars({ + lat: latLng.lat(), + lng: latLng.lng(), + formattedAddress: content, + inputText: $('#pac-input').val(), + }); + } + + that.addMarker( + latLng, + results[0], + null, + isInfoWindowNeeded, + callback(latLng) + ); + } + }); + } + }); + } else { + that.geocoder.geocode({ location: latLng }, function (results, status) { + if (status == google.maps.GeocoderStatus.OK && results[0]) { + var request = { + placeId: results[0].place_id, + fields: ['name'], + }; + + that.placesService.getDetails(request, function(place, status) { + if (status === google.maps.places.PlacesServiceStatus.OK) { + var content = '
    ' + place.name + '

    ' + + results[0].formatted_address + '

    '; + + var callback = function (latLng) { + that.setFormVars({ + lat: latLng.lat(), + lng: latLng.lng(), + formattedAddress: content, + inputText: $('#pac-input').val(), + }); + } + + that.addMarker( + latLng, + results[0], + null, + isInfoWindowNeeded, + callback(latLng) + ); + } + }); + } + }); + } }); if(cb && typeof cb === 'function') { cb(); @@ -122,7 +190,7 @@ var GoogleMapsManager = { }; that.addMarker(latLng, place); - var content = '
    ' + place.name + '
    ' + place.formatted_address; + var content = '
    ' + place.name + '

    ' + place.formatted_address + '

    '; that.setFormVars({ lat: latLng.lat, lng: latLng.lng, @@ -142,7 +210,7 @@ var GoogleMapsManager = { } }); }, - addMarker: function(latLng, address = null, fa = null, cb = null) { + addMarker: function(latLng, address = null, fa = null, addInfoWindow = true, cb = null) { var that = this; that.clearAllMarkers(); var marker = new google.maps.Marker({ @@ -163,23 +231,36 @@ var GoogleMapsManager = { }); }); - if (address === null && fa) { - // open info window - that.addInfoWindow(marker, fa); + if (addInfoWindow) { + if (address === null && fa) { + // open info window + that.addInfoWindow(marker, fa); + } else { + var request = { + placeId: address.place_id, + fields: ['name'], + }; + + that.placesService.getDetails(request, function(place, status) { + if (status === google.maps.places.PlacesServiceStatus.OK) { + // open info window + var content = '
    ' + place.name + '

    ' + address.formatted_address + '

    '; + that.addInfoWindow(marker, content); + + if(cb && typeof cb === 'function') { + cb(); + } + } + }); + } } else { - var request = { - placeId: address.place_id, - fields: ['name'], - }; - that.placesService.getDetails(request, function(place, status) { - if (status === google.maps.places.PlacesServiceStatus.OK) { - // open info window - var content = '
    ' + place.name + '
    ' + - address.formatted_address + '
    '; - that.addInfoWindow(marker, content); - } - }); + if(cb && typeof cb === 'function') { + cb(); + } + + return marker; } + }, clearAllMarkers: function() { for (var i = 0; i < this.markers.length; i++) { @@ -190,13 +271,21 @@ var GoogleMapsManager = { addInfoWindow: function(marker, content) { if (typeof google === 'object') { var that = this; + var infoWindow = new google.maps.InfoWindow({ content: content, + maxWidth: 200, }); + infoWindow.open({ anchor: marker, map: that.map }); + + google.maps.event.addListener(infoWindow, 'closeclick', function () { + that.clearAllMarkers(); + }); + var latLng = marker.getPosition(); that.setFormVars({ lat: latLng.lat(), @@ -214,6 +303,10 @@ var GoogleMapsManager = { }, } +$(document).on('click', 'button.gm-ui-hover-effect', function () { + GoogleMapsManager.clearAllMarkers(); +}); + function initGoogleMaps() { if (typeof enabledDisplayMap != 'undefined' && typeof google === 'object' diff --git a/modules/hotelreservationsystem/views/js/admin/hotel_rooms_booking.js b/modules/hotelreservationsystem/views/js/admin/hotel_rooms_booking.js index d02a0b756..ac723fcac 100644 --- a/modules/hotelreservationsystem/views/js/admin/hotel_rooms_booking.js +++ b/modules/hotelreservationsystem/views/js/admin/hotel_rooms_booking.js @@ -28,6 +28,8 @@ $(document).ready(function() { url: rooms_booking_url, method: 'POST', extraParams: function() { + removeInitializedTooltips(); + return $.extend( { ajax: true, @@ -183,6 +185,14 @@ $(document).ready(function() { calendar.render(); } + function removeInitializedTooltips() { + $('#fullcalendar a.day-info, #fullcalendar .fc-daygrid-event').each(function () { + if ($(this).data('ui-tooltip')) { + $(this).tooltip('destroy'); + } + }); + } + function getSearchData() { return { @@ -869,6 +879,12 @@ $(document).ready(function() { $("#cartModal").html(result.cart_content); } $("#cart_record").html(result.total_products_in_cart); + + if (parseInt(result.total_products_in_cart) > 0) { + $('#cart_record').closest('button').removeClass('disabled'); + } else { + $('#cart_record').closest('button').addClass('disabled'); + } } } }); diff --git a/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl b/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl index 212a25a0e..ee98605c1 100644 --- a/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl @@ -292,7 +292,7 @@ {l s='Upload images' mod='hotelreservationsystem'} :  
    - +

    @@ -497,4 +497,4 @@ }); -{/block} \ No newline at end of file +{/block} diff --git a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl index 936793a14..4c54fdddd 100644 --- a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl @@ -188,7 +188,7 @@
    {if !isset($booking_product) || (isset($booking_product) && $booking_product == 1)}{l s='Booking Calender' mod='hotelreservationsystem'}{else}{l s='Service Products' mod='hotelreservationsystem'}{/if } - +
    {if !isset($booking_product) || (isset($booking_product) && $booking_product == 1)}
    diff --git a/modules/wkhotelfilterblock/wkhotelfilterblock.php b/modules/wkhotelfilterblock/wkhotelfilterblock.php index e2fa40f38..41ad65e6b 100644 --- a/modules/wkhotelfilterblock/wkhotelfilterblock.php +++ b/modules/wkhotelfilterblock/wkhotelfilterblock.php @@ -64,7 +64,9 @@ class wkhotelfilterblock extends Module if ($this->context->controller->php_self == 'category') { $htl_id_category = Tools::getValue('id_category'); - if (Validate::isLoadedObject($objCategory = new Category((int) $htl_id_category))) { + if (Validate::isLoadedObject($objCategory = new Category((int) $htl_id_category)) + && ($id_hotel = HotelBranchInformation::getHotelIdByIdCategory($htl_id_category)) + ) { if ($objCategory->hasParent(Configuration::get('PS_LOCATIONS_CATEGORY'))) { Media::addJsDef(array('noRoomAvailTxt' => $this->l('No room available', false, true))); @@ -73,8 +75,6 @@ class wkhotelfilterblock extends Module $id_lang = $this->context->language->id; $all_feat = FeatureCore::getFeatures($id_lang); - $id_hotel = HotelBranchInformation::getHotelIdByIdCategory($htl_id_category); - $max_adult = HotelRoomType::getMaxAdults($id_hotel); $max_child = HotelRoomType::getMaxChild($id_hotel); diff --git a/modules/wkhotelroom/views/js/WkHotelRoomBlockAdmin.js b/modules/wkhotelroom/views/js/WkHotelRoomBlockAdmin.js index 3bec54859..7aee0d3a2 100644 --- a/modules/wkhotelroom/views/js/WkHotelRoomBlockAdmin.js +++ b/modules/wkhotelroom/views/js/WkHotelRoomBlockAdmin.js @@ -38,6 +38,7 @@ $(document).ready(function() { data: { q: word, _: n, + booking_product: '1', }, success: function(result) { if (result) { diff --git a/modules/wkroomsearchblock/wkroomsearchblock.php b/modules/wkroomsearchblock/wkroomsearchblock.php index f40e7f0f1..dc696e4af 100644 --- a/modules/wkroomsearchblock/wkroomsearchblock.php +++ b/modules/wkroomsearchblock/wkroomsearchblock.php @@ -124,7 +124,9 @@ class WkRoomSearchBlock extends Module { if ('category' == Tools::getValue('controller')) { $idCategory = Tools::getValue('id_category'); - if (Validate::isLoadedObject($objCategory = new Category((int) $idCategory))) { + if (Validate::isLoadedObject($objCategory = new Category((int) $idCategory)) + && HotelBranchInformation::getHotelIdByIdCategory($idCategory) + ) { if ($objCategory->hasParent(Configuration::get('PS_LOCATIONS_CATEGORY'))) { $objSearchHelper = new WkRoomSearchHelper(); $objSearchHelper->assignSearchPanelVariables(); diff --git a/themes/hotel-reservation-theme/address.tpl b/themes/hotel-reservation-theme/address.tpl index 3e3e9da78..e581f5382 100644 --- a/themes/hotel-reservation-theme/address.tpl +++ b/themes/hotel-reservation-theme/address.tpl @@ -22,14 +22,24 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} -{capture name=path}{l s='Your address'}{/capture} +{capture name=path} + + {l s='My account'} + + + {$navigationPipe} + + + {l s='Address'} + +{/capture} {if isset($smarty.get.updated) && $smarty.get.updated}

    {l s='Your address has been successfully updated.'}

    {/if}
    -

    {l s='Your address'}

    +

    {l s='Address'}

    {if isset($id_address) && (isset($smarty.post.alias) || isset($address->alias))} {l s='Modify address'} @@ -215,7 +225,7 @@

    diff --git a/themes/hotel-reservation-theme/css/order-opc.css b/themes/hotel-reservation-theme/css/order-opc.css index 560d3ae92..dd4c0756d 100644 --- a/themes/hotel-reservation-theme/css/order-opc.css +++ b/themes/hotel-reservation-theme/css/order-opc.css @@ -409,11 +409,6 @@ font-size: 14px; color: #0000FF; } -#order-opc .avail_vouchers_block .avail_voucher_des { - font-size: 12px; - color: #777777; - margin-bottom: 2px; -} #order-opc .avail_vouchers_block .seperator { margin-top: 10px; margin-bottom: 10px; diff --git a/themes/hotel-reservation-theme/discount.tpl b/themes/hotel-reservation-theme/discount.tpl index 25440cad7..ea4ba715f 100644 --- a/themes/hotel-reservation-theme/discount.tpl +++ b/themes/hotel-reservation-theme/discount.tpl @@ -22,10 +22,10 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} -{capture name=path}{l s='My account'}{$navigationPipe}{l s='My vouchers'}{/capture} +{capture name=path}{l s='My account'}{$navigationPipe}{l s='Vouchers'}{/capture}

    - {l s='My vouchers'} + {l s='Vouchers'}

    {if isset($cart_rules) && $nb_cart_rules} @@ -33,7 +33,7 @@ {l s='Code'} - {l s='Description'} + {l s='Name'} {l s='Quantity'} {l s='Value'} {l s='Minimum'} @@ -98,7 +98,7 @@
  • - {l s='Back to your account'} + {l s='Back to My account'}
  • diff --git a/themes/hotel-reservation-theme/history.tpl b/themes/hotel-reservation-theme/history.tpl index 8135b8fbc..b6eeee269 100644 --- a/themes/hotel-reservation-theme/history.tpl +++ b/themes/hotel-reservation-theme/history.tpl @@ -27,10 +27,10 @@ {l s='My account'} {$navigationPipe} - {l s='Order history'} + {l s='Bookings'} {/capture} {include file="$tpl_dir./errors.tpl"} -

    {l s='Order history'}

    +

    {l s='Bookings'}

    {l s='Here are the orders you\'ve placed since your account was created.'}

    {if $slowValidation}

    {l s='If you have just placed an order, it may take a few minutes for it to be validated. Please refresh this page if your order is missing.'}

    @@ -127,7 +127,7 @@
  • - {l s='Back to Your Account'} + {l s='Back to My account'}
  • diff --git a/themes/hotel-reservation-theme/identity.tpl b/themes/hotel-reservation-theme/identity.tpl index b84a30800..bba309d88 100644 --- a/themes/hotel-reservation-theme/identity.tpl +++ b/themes/hotel-reservation-theme/identity.tpl @@ -31,12 +31,12 @@ {$navigationPipe} - {l s='Your personal information'} + {l s='Personal information'} {/capture}

    - {l s='Your personal information'} + {l s='Personal information'}

    {include file="$tpl_dir./errors.tpl"} @@ -206,7 +206,7 @@
  • - {l s='Back to your account'} + {l s='Back to My account'}
  • diff --git a/themes/hotel-reservation-theme/js/order-opc.js b/themes/hotel-reservation-theme/js/order-opc.js index 0649a68dd..2a1f0756e 100644 --- a/themes/hotel-reservation-theme/js/order-opc.js +++ b/themes/hotel-reservation-theme/js/order-opc.js @@ -630,8 +630,8 @@ function updatePaymentMethodsDisplay() function updateAddressSelection(is_adv_api) { - var idAddress_delivery = ($('#opc_id_address_delivery').length == 1 ? $('#opc_id_address_delivery').val() : $('#id_address_delivery').val()); - var idAddress_invoice = ($('#opc_id_address_invoice').length == 1 ? $('#opc_id_address_invoice').val() : ($('#addressesAreEquals:checked').length == 1 ? idAddress_delivery : ($('#id_address_invoice').length == 1 ? $('#id_address_invoice').val() : idAddress_delivery))); + var idAddress_delivery = $('#opc_id_address_delivery').val(); + var idAddress_invoice = $('#opc_id_address_invoice').val(); $('#opc_account-overlay').fadeIn('slow'); $('#opc_delivery_methods-overlay').fadeIn('slow'); @@ -912,18 +912,17 @@ function confirmFreeOrder() url: orderOpcUrl + '?rand=' + new Date().getTime(), async: true, cache: false, - dataType : "html", + dataType : 'JSON', data: 'ajax=true&method=makeFreeOrder&token=' + static_token , - success: function(html) + success: function(response) { - $('#confirmOrder').prop('disabled', false); - var array_split = html.split(':'); - if (array_split[0] == 'freeorder') - { - if (isGuest) - document.location.href = guestTrackingUrl+'?id_order='+encodeURIComponent(array_split[1])+'&email='+encodeURIComponent(array_split[2]); - else - document.location.href = historyUrl; + if (response.success) { + $('#confirmOrder').prop('disabled', false); + if (isGuest) { + document.location.href = guestTrackingUrl+'?id_order='+encodeURIComponent(response.reference)+'&email='+encodeURIComponent(response.email); + } else { + document.location.href = response.order_confirmation_url; + } } }, error: function(XMLHttpRequest, textStatus, errorThrown) { diff --git a/themes/hotel-reservation-theme/my-account.tpl b/themes/hotel-reservation-theme/my-account.tpl index 66570d7aa..4bbc44231 100644 --- a/themes/hotel-reservation-theme/my-account.tpl +++ b/themes/hotel-reservation-theme/my-account.tpl @@ -35,20 +35,20 @@
    {if $voucherAllowed || isset($HOOK_CUSTOMER_ACCOUNT) && $HOOK_CUSTOMER_ACCOUNT !=''}
    diff --git a/themes/hotel-reservation-theme/order-confirmation.tpl b/themes/hotel-reservation-theme/order-confirmation.tpl index 23ac2a1fa..093669112 100644 --- a/themes/hotel-reservation-theme/order-confirmation.tpl +++ b/themes/hotel-reservation-theme/order-confirmation.tpl @@ -42,6 +42,9 @@ {l s='Follow my order'}

    {else} + {if isset($is_free_order) && $is_free_order} +

    {l s='Your order on %s is complete.' sprintf=$shop_name}


    + {/if}

    {l s='Order Status :'} {l s='Confirmed'}

    {l s='Order Reference :'} {$order->reference}

    {if $any_back_order} diff --git a/themes/hotel-reservation-theme/order-follow.tpl b/themes/hotel-reservation-theme/order-follow.tpl index ce1fa0f6b..4b0871ab0 100644 --- a/themes/hotel-reservation-theme/order-follow.tpl +++ b/themes/hotel-reservation-theme/order-follow.tpl @@ -31,7 +31,7 @@ {$navigationPipe} - {l s='Booking Refund Requests'} + {l s='Booking refund requests'} {/capture} @@ -86,6 +86,6 @@
    \ No newline at end of file diff --git a/themes/hotel-reservation-theme/order-opc.tpl b/themes/hotel-reservation-theme/order-opc.tpl index 8cdc91e23..817de42dd 100644 --- a/themes/hotel-reservation-theme/order-opc.tpl +++ b/themes/hotel-reservation-theme/order-opc.tpl @@ -46,6 +46,8 @@ {* Accordian for all blocks *}
    + + {if isset($checkout_process_steps) && $checkout_process_steps} {foreach $checkout_process_steps as $step} {if $step->step_key == 'checkout_rooms_summary'} @@ -437,7 +439,6 @@

    {$voucher.code|escape:'html':'UTF-8'} - {$voucher.name}

    -

    {$voucher['description']}

    {if not $smarty.foreach.availVoucher.last}
    {/if} @@ -460,7 +461,6 @@ {addJsDef imgDir=$img_dir} {addJsDef authenticationUrl=$link->getPageLink("authentication", true)|escape:'quotes':'UTF-8'} {addJsDef orderOpcUrl=$link->getPageLink("order-opc", true)|escape:'quotes':'UTF-8'} - {addJsDef historyUrl=$link->getPageLink("history", true)|escape:'quotes':'UTF-8'} {addJsDef guestTrackingUrl=$link->getPageLink("guest-tracking", true)|escape:'quotes':'UTF-8'} {addJsDef addressUrl=$link->getPageLink("address", true, NULL, "back={$back_order_page}")|escape:'quotes':'UTF-8'} {addJsDef orderProcess='order-opc'} diff --git a/themes/hotel-reservation-theme/order-slip.tpl b/themes/hotel-reservation-theme/order-slip.tpl index 846b25e84..1f4cf0c4b 100644 --- a/themes/hotel-reservation-theme/order-slip.tpl +++ b/themes/hotel-reservation-theme/order-slip.tpl @@ -106,7 +106,7 @@
  • - {l s='Back to your account'} + {l s='Back to My account'}
  • diff --git a/tools/smarty/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/tools/smarty/sysplugins/smarty_internal_method_clearcompiledtemplate.php index bf4929807..d1b21ee68 100644 --- a/tools/smarty/sysplugins/smarty_internal_method_clearcompiledtemplate.php +++ b/tools/smarty/sysplugins/smarty_internal_method_clearcompiledtemplate.php @@ -114,6 +114,11 @@ class Smarty_Internal_Method_ClearCompiledTemplate $unlink = true; } } + + if (substr($_filepath, -9) == 'index.php') { + $unlink = false; + } + if ($unlink && is_file($_filepath) && @unlink($_filepath)) { $_count++; if (function_exists('opcache_invalidate')