l('Please enter a location', 'WkRoomSearchHelper'); } if ($checkIn == '' || !Validate::isDate($checkIn)) { $errors[] = $objModule->l('Please select a valid Check-In', 'WkRoomSearchHelper'); } if ($checkOut == '' || !Validate::isDate($checkOut)) { $errors[] = $objModule->l('Please select a valid Check-Out', 'WkRoomSearchHelper'); } if ($checkIn && $checkOut) { if (($checkIn < $currentDate) || ($checkOut <= $checkIn) || ($maxOrderDate < $checkIn || $maxOrderDate < $checkOut) ) { $errors[] = $objModule->l('Please select a valid date range', 'WkRoomSearchHelper'); } } // Lets validate guest occupancy fields // Get guest occupancy variable if (Configuration::get('PS_FRONT_SEARCH_TYPE') == HotelBookingDetail::SEARCH_TYPE_OWS) { $guestOccupancy = Tools::getValue('occupancy'); if (!count($guestOccupancy)) { $errors[] = $objModule->l('Invalid occupancy', 'WkRoomSearchHelper'); } else { $adultTypeErr = 0; $childTypeErr = 0; $childAgeErr = 0; foreach ($guestOccupancy as $occupancy) { if (!isset($occupancy['adults']) || !Validate::isUnsignedInt($occupancy['adults'])) { $adultTypeErr = 1; } if (!isset($occupancy['children']) || !Validate::isUnsignedInt($occupancy['children'])) { $childTypeErr = 1; } elseif ($occupancy['children']) { if (!isset($occupancy['child_ages']) || ($occupancy['children'] != count($occupancy['child_ages']))) { $childAgeErr = 1; } else { foreach ($occupancy['child_ages'] as $childAge) { if (!Validate::isUnsignedInt($childAge)) { $childAgeErr = 1; } } } } } if ($adultTypeErr) { $errors[] = $objModule->l('Invalid adults', 'WkRoomSearchHelper'); } if ($childTypeErr) { $errors[] = $objModule->l('Invalid children', 'WkRoomSearchHelper'); } if ($childAgeErr) { $errors[] = $objModule->l('Invalid children ages', 'WkRoomSearchHelper'); } } } return $errors; } public function assignSearchPanelVariables() { $smartyVars = array(); $context = Context::getContext(); // send if page is landing or not $smartyVars['is_index_page'] = 0; if (Tools::getValue('controller') == 'index') { $smartyVars['is_index_page'] = 1; } $idHotel = 0; $objHotelInfo = new HotelBranchInformation(); $hotelsInfo = $objHotelInfo->hotelBranchesInfo(0, 1); $locationEnabled = Configuration::get('WK_HOTEL_LOCATION_ENABLE'); $occupancyEnabled = false; if (Configuration::get('PS_FRONT_SEARCH_TYPE') == HotelBookingDetail::SEARCH_TYPE_OWS) { $occupancyEnabled = true; } // if room type page if ($idProduct = Tools::getValue('id_product')) { $objHtlRoomType = new HotelRoomType(); if ($roomTypeInfo = $objHtlRoomType->getRoomTypeInfoByIdProduct($idProduct)) { if (Validate::isLoadedObject($objHotelInfo = new HotelBranchInformation((int) $roomTypeInfo['id_hotel']))) { $idHotelCategory = $objHotelInfo->id_category; } } else { $idHotelCategory = false; } } else { // if category page $idHotelCategory = Tools::getValue('id_category'); } $locationCategoryId = Tools::getValue('location'); if ($idHotelCategory) { if (Validate::isLoadedObject($objCategory = new Category((int) $idHotelCategory))) { if ($objCategory->hasParent(Configuration::get('PS_LOCATIONS_CATEGORY'))) { if (!$dateFrom = Tools::getValue('date_from')) { $dateFrom = date('Y-m-d'); $dateTo = date('Y-m-d', strtotime('+1 day', strtotime($dateFrom))); } if (!$dateTo = Tools::getValue('date_to')) { $dateTo = date('Y-m-d', strtotime('+1 day', strtotime($dateFrom))); } $idHotel = HotelBranchInformation::getHotelIdByIdCategory($idHotelCategory); $htlCategoryInfo = $objHotelInfo->getCategoryDataByIdCategory((int) $objCategory->id_parent); $searchedData['htl_dtl'] = $objHotelInfo->hotelBranchesInfo(0, 1, 1, $idHotel); $minBookingOffset = (int) HotelOrderRestrictDate::getMinimumBookingOffset($idHotel); if ($minBookingOffset && strtotime(date('Y-m-d', strtotime('+'. ($minBookingOffset) .' days'))) > strtotime($dateFrom) ) { $dateFrom = date('Y-m-d', strtotime(date('Y-m-d', strtotime('+'. ($minBookingOffset) .' days')))); if (strtotime($dateFrom) >= strtotime($dateTo)) { $controller = Tools::getValue('controller'); if ($controller == 'product' && ($idProduct = Tools::getValue('id_product')) ) { $objHotelRoomTypeRestrictionDateRange = new HotelRoomTypeRestrictionDateRange(); $los = $objHotelRoomTypeRestrictionDateRange->getRoomTypeLengthOfStay($idProduct, $dateFrom); $dateTo = date('Y-m-d', strtotime('+'.$los['min_los'].' day', strtotime($dateFrom))); } else { $dateTo = date('Y-m-d', strtotime('+1 day', strtotime($dateFrom))); } } } $searchedData['num_days'] = HotelHelper::getNumberOfDays($dateFrom, $dateTo); $searchedData['parent_data'] = $htlCategoryInfo; if (Tools::getValue('date_from') && Tools::getValue('date_to')) { $searchedData['date_from'] = $dateFrom; $searchedData['date_to'] = $dateTo; } if ($locationCategoryId) { $objLocationCategory = new Category($locationCategoryId, $context->language->id); if ($objLocationCategory->hasParent(Configuration::get('PS_LOCATIONS_CATEGORY'))) { $searchedData['location'] = $objLocationCategory->name; $searchedData['location_category_id'] = $locationCategoryId; } else { $locationCategoryId = false; } } $searchedData['order_date_restrict'] = false; $max_order_date = HotelOrderRestrictDate::getMaxOrderDate($idHotel); $searchedData['max_order_date'] = date('Y-m-d', strtotime($max_order_date)); if ($max_order_date) { if (strtotime('-1 day', strtotime($max_order_date)) < strtotime($dateFrom) || strtotime($max_order_date) < strtotime($dateTo) ) { $searchedData['order_date_restrict'] = true; } } } if ($occupancyEnabled) { // send occupancy information searched by the user if ($occupancies = Tools::getvalue('occupancy')) { if (Validate::isOccupancy($occupancies)) { if ($searchedData['occupancies'] = $occupancies) { $searchedData['occupancy_adults'] = array_sum( array_column($searchedData['occupancies'], 'adults') ); $searchedData['occupancy_children'] = array_sum( array_column($searchedData['occupancies'], 'children') ); } } } } $smartyVars['search_data'] = $searchedData; } // if location is enabled the send hotels of the selected location only if ($locationEnabled && $locationCategoryId) { $hotelsInfo = Category::getAllCategoriesName($locationCategoryId); } } $totalActiveHotels = count($hotelsInfo); // set hotels order restrict date on all hotels foreach ($hotelsInfo as $key => $hotel) { if ($hotel_info = $objHotelInfo->hotelBranchInfoByCategoryId($hotel['id_category'])) { $maxOrderDate = HotelOrderRestrictDate::getMaxOrderDate($hotel_info['id']); $hotelsInfo[$key]['id'] = $hotel_info['id']; $hotelsInfo[$key]['hotel_name'] = $hotel_info['hotel_name']; $hotelsInfo[$key]['max_order_date'] = date('Y-m-d', strtotime($maxOrderDate)); $hotelsInfo[$key]['min_booking_offset'] = (int) HotelOrderRestrictDate::getMinimumBookingOffset($hotel_info['id']); } else { unset($hotelsInfo[$key]); } } $smartyVars['location_enabled'] = $locationEnabled; $smartyVars['total_active_hotels'] = $totalActiveHotels; $smartyVars['hotels_info'] = $hotelsInfo; $smartyVars['show_hotel_name'] = Configuration::get('WK_HOTEL_NAME_ENABLE'); $smartyVars['max_child_age'] = Configuration::get('WK_GLOBAL_CHILD_MAX_AGE'); $smartyVars['hotel_name_search_threshold'] = (int) Configuration::get('WK_HOTEL_NAME_SEARCH_THRESHOLD'); $maxOrderDate = HotelOrderRestrictDate::getMaxOrderDate($idHotel); $smartyVars['max_order_date'] = date('Y-m-d', strtotime($maxOrderDate)); $smartyVars['min_booking_offset'] = (int) HotelOrderRestrictDate::getMinimumBookingOffset($idHotel); if (!$locationEnabled && !$smartyVars['show_hotel_name'] && count($hotelsInfo) <= 1 && !$occupancyEnabled ) { $smartyVars['multiple_dates_input'] = true; Media::addJSDef(array( 'multiple_dates_input' => true )); } $totalColumns = 9;// min value if ($locationEnabled) { $totalColumns += 4; } if (!(count($hotelsInfo) <= 1 && !$smartyVars['show_hotel_name'])) { $totalColumns += 5; } if (Configuration::get('PS_FRONT_SEARCH_TYPE') == HotelBookingDetail::SEARCH_TYPE_OWS) { $totalColumns += 4; } $smartyVars['total_columns'] = $totalColumns; Hook::exec('actionSearchPanelParamsModifier', array('params' => &$smartyVars)); Context::getContext()->smarty->assign($smartyVars); } }