Beispiel #1
0
 /**
  *
  * @return array
  */
 public function getOptions()
 {
     //search options
     $searchService = $this->getServiceLocator()->get('service_website_search');
     $options = $searchService->getOptionsForSearch();
     //location options
     $cacheService = $this->getServiceLocator()->get('service_website_cache');
     $keyLocationsCache = 'locations_for_home_en';
     $router = $this->getServiceLocator()->get('router');
     if ($rowsLocations = $cacheService->get($keyLocationsCache)) {
         $options['locations'] = $rowsLocations;
     } else {
         $cityDao = new CityDao($this->getServiceLocator(), 'ArrayObject');
         $citiesList = $cityDao->getCityListForIndex();
         $cities = [];
         foreach ($citiesList as $city) {
             $cityProvince = $city['city_slug'] . '--' . $city['province_slug'];
             $img = Helper::getImgByWith('/locations/' . $city['detail_id'] . '/' . $city['cover_image'], WebSite::IMG_WIDTH_LOCATION_MEDIUM);
             $cities[$city['ordering']] = ['city_id' => $city['city_id'], 'country_id' => $city['country_id'], 'capacity' => $city['capacity'], 'spent_nights' => $city['spent_nights'], 'sold_future_nights' => $city['sold_future_nights'], 'img' => $img, 'url' => $router->assemble(['action' => 'location', 'cityProvince' => $cityProvince], ['name' => 'location/child'])];
         }
         ksort($cities);
         $options['locations'] = $cities;
         $cacheService->set($keyLocationsCache, $cities);
     }
     //country count
     $keyCountryCashe = 'country_count_for_home';
     if ($countryCount = $cacheService->get($keyCountryCashe)) {
         $options['countryCount'] = $countryCount;
     } else {
         $bookingDao = $this->getBookingWebDao();
         $countries = $bookingDao->getBookingCountryEmailCount('guest_country_id');
         $options['countryCount'] = $countries ? $countries['count'] : 0;
         $cacheService->set($keyCountryCashe, $options['countryCount']);
     }
     //people count
     $keyPeopleCache = 'people_count_for_home';
     if ($peopleCount = $cacheService->get($keyPeopleCache)) {
         $options['peopleCount'] = $peopleCount;
     } else {
         $bookingDao = $this->getBookingWebDao();
         $peoples = $bookingDao->getBookingCountryEmailCount('guest_email');
         $options['peopleCount'] = $peoples ? $peoples['count'] : 0;
         $cacheService->set($keyPeopleCache, $options['peopleCount']);
     }
     //blog list
     $blogDao = new Blog($this->getServiceLocator(), 'ArrayObject');
     $bloges = $blogDao->getBlogForWebIndex();
     $options['bloges'] = $bloges;
     $router = $this->getServiceLocator()->get('router');
     $url = $router->assemble([], ['name' => 'search']);
     $options['action'] = $url;
     return $options;
 }
Beispiel #2
0
 /**
  * @param array $data
  * @return array
  */
 public function bookingDataByCCPassword($data)
 {
     /**
      * @var \DDD\Service\Website\Apartment $apartmentService
      * @var \DDD\Service\Booking\Charge $chargeService
      */
     $apartmentService = $this->getServiceLocator()->get('service_website_apartment');
     $chargeService = $this->getServiceLocator()->get('service_booking_charge');
     if (!isset($data['code']) || !ClassicValidator::checkCCPdateCode($data['code'])) {
         return false;
     }
     /**
      * @var \DDD\Dao\Booking\Booking $bookingDao
      */
     $bookingDao = $this->getServiceLocator()->get('dao_booking_booking');
     $bookingDao->setEntity(new \ArrayObject());
     $resData = $bookingDao->getResDataByCCUpdateCode($data['code']);
     if (!$resData) {
         return false;
     }
     $img = Helper::getImgByWith($resData['img1'], WebSite::IMG_WIDTH_SEARCH, true, true);
     if ($img) {
         $resData['image'] = $img;
     }
     $resData['user_currency'] = $resData['guest_currency_code'];
     $bookNightCount = Helper::getDaysFromTwoDate($resData['date_from'], $resData['date_to']);
     $resData['night_count'] = $bookNightCount;
     $resData['totalNigthCount'] = $bookNightCount;
     // Cancelation Policy
     $cancelationDate = $resData;
     $cancelationDate['penalty_percent'] = $cancelationDate['penalty_fixed_amount'] = $cancelationDate['penalty_nights'] = $resData['penalty_val'];
     $cancelationDate['night_count'] = $bookNightCount;
     $cancelationDate['code'] = $resData['apartment_currency_code'];
     $cancelationPolicy = $apartmentService->cancelationPolicy($cancelationDate);
     $resData['cancelation_type'] = $cancelationPolicy['type'];
     $resData['cancelation_policy'] = $cancelationPolicy['description'];
     $paymentDetails = $chargeService->getCharges($resData['id']);
     // When showing to customers we don't really want to show base and additional parts of taxes separately
     // This part of code runs through payment details and combines same type of taxes for same day into a single unit
     $floatPattern = '/-?(?:\\d+|\\d*\\.\\d+)/';
     $smarterPaymentDetails = [];
     if ($paymentDetails) {
         foreach ($paymentDetails as $payment) {
             if ($payment['type'] != 'tax') {
                 array_push($smarterPaymentDetails, $payment);
             } else {
                 $paymentKey = $payment['type_id'] . '-' . $payment['date'];
                 if (!isset($smarterPaymentDetails[$paymentKey])) {
                     $smarterPaymentDetails[$paymentKey] = $payment;
                 } else {
                     preg_match($floatPattern, $smarterPaymentDetails[$paymentKey]['label'], $match);
                     $currValue = $match[0];
                     $currPrice = $smarterPaymentDetails[$paymentKey]['price'];
                     preg_match($floatPattern, $payment['label'], $match);
                     $additionalValue = $match[0];
                     $additionalPrice = $payment['price'];
                     $smarterPaymentDetails[$paymentKey]['label'] = str_replace($currValue, $currValue + $additionalValue, $smarterPaymentDetails[$paymentKey]['label']);
                     $smarterPaymentDetails[$paymentKey]['price'] = str_replace($currPrice, $currPrice + $additionalPrice, $smarterPaymentDetails[$paymentKey]['price']);
                     $smarterPaymentDetails[$paymentKey]['price_view'] = str_replace($currPrice, $currPrice + $additionalPrice, $smarterPaymentDetails[$paymentKey]['price_view']);
                 }
             }
         }
     }
     $resData['paymentDetails']['payments'] = $smarterPaymentDetails;
     return $resData;
 }
Beispiel #3
0
 /**
  * @param array $data
  * @return array
  */
 public function searchApartmentList($data, $getAll = false)
 {
     /**
      * @var \DDD\Dao\Currency\Currency $currencyDao
      */
     $currencyDao = $this->getServiceLocator()->get('dao_currency_currency');
     $filterData = $this->filterSearchData($data);
     $apartelList = $apartels = $options = [];
     $error = false;
     $totalPages = 1;
     $queryString = '';
     if ($filterData) {
         return ['status' => 'error', 'msg' => $filterData];
     }
     $correcrData = $this->correctData($data);
     $bedrooms = $this->defineBedrooms($data);
     $guest = $correcrData['guest'];
     $page = $correcrData['page'];
     $arrival = $correcrData['arrival'];
     $departure = $correcrData['departure'];
     $apartelGeneralDao = $this->getApartelGeneralDao();
     $pageItemCount = WebSite::PAGINTAION_ITEM_COUNT;
     $offset = (int) ($page - 1) * $pageItemCount;
     if (isset($data['city'])) {
         $city = $data['city'];
         // Has date
         if ($arrival && $departure) {
             $apartelsResult = $apartelGeneralDao->getApartmentsByCityDate($city, $arrival, $departure, $guest, $pageItemCount, $offset, $bedrooms);
             $options['price_text'] = $this->getTextLineSite(1210);
         } else {
             $apartelsResult = $apartelGeneralDao->getApartmentsCity($city, $guest, $pageItemCount, $offset, $getAll, $bedrooms);
             $options['price_text'] = $this->getTextLineSite(1333);
         }
     } elseif (isset($data['apartel'])) {
         $apartel = $data['apartel'];
         // Has date
         if ($arrival && $departure) {
             $apartelsResult = $apartelGeneralDao->getApartmentsByApartelDate($apartel, $arrival, $departure, $guest, $pageItemCount, $offset, $bedrooms);
             $options['price_text'] = $this->getTextLineSite(1210);
         } else {
             $apartelsResult = $apartelGeneralDao->getApartmentsApartel($apartel, $guest, $pageItemCount, $offset, $getAll, $bedrooms);
             $options['price_text'] = $this->getTextLineSite(1333);
         }
     } else {
         return ['status' => 'error'];
     }
     $apartmentList = $apartelsResult['result'];
     $total = $apartelsResult['total'];
     $totalPages = $total > 0 ? ceil($total / $pageItemCount) : 1;
     if (!$apartmentList->count()) {
         return ['status' => 'no_av', 'msg' => $this->getTextLineSite(1218)];
     }
     $visitorLoc = $this->getVisitorCountry();
     // Change currency
     $userCurrency = $this->getCurrencySite();
     $currencySymbol = WebSite::DEFAULT_CURRENCY;
     $currencyResult = $currencyDao->fetchOne(['code' => $userCurrency]);
     if ($currencyResult) {
         $currencySymbol = $currencyResult->getSymbol();
     }
     $currencyUtility = new Currency($currencyDao);
     $query_array = [];
     if ($arrival && $departure) {
         array_push($query_array, 'arrival=' . Helper::dateForUrl($arrival));
         array_push($query_array, 'departure=' . Helper::dateForUrl($departure));
         array_push($query_array, 'guest=' . $guest);
         $queryString = '?' . implode('&', $query_array);
     } elseif ($guest >= 1) {
         $queryString = '?guest=' . $guest;
     } elseif ($getAll) {
         $queryString = '?show=reviews';
     }
     $apartmentList = iterator_to_array($apartmentList);
     // add apartel id if apartel reservation
     if (isset($data['apartel'])) {
         $queryString .= ($queryString ? '&' : '?') . 'apartel_id=' . current($apartmentList)['apartment_group_id'];
     }
     foreach ($apartmentList as $al) {
         // Generate image
         $noImg = false;
         if ($al['img1']) {
             if ($img = Helper::getImgByWith($al['img1'], WebSite::IMG_WIDTH_SEARCH)) {
                 $noImg = true;
                 $al['image'] = $img;
             }
         }
         if (!$noImg) {
             $al['image'] = Constants::VERSION . 'img/no_image.png';
         }
         // Calculate percent
         if ($arrival && $departure) {
             $al['percent'] = round(($al['price_max'] - $al['price_min']) / $al['price_max'] * 100);
         } else {
             $al['percent'] = rand(10, 13);
             $al['rate_name'] = 'Non refundable';
         }
         // User currency price
         if ($userCurrency != $al['code']) {
             $price = $currencyUtility->convert($al['price_min'], $al['code'], $userCurrency);
             $al['price_min'] = $price;
             $al['symbol'] = $currencySymbol;
         }
         $al['url_to_search'] = 'apartment/' . $al['url'] . '--' . $al['slug'] . $queryString;
         // Sale percent
         array_push($apartels, $al);
     }
     // Pagination view
     $paginatinView = $this->paginationViewItem($total, $page, $pageItemCount);
     return ['apartelList' => $apartels, 'totalPages' => $totalPages, 'status' => 'success', 'paginatinView' => $paginatinView, 'options' => $options, 'visitorLoc' => $visitorLoc];
 }
Beispiel #4
0
 /**
  *
  * @return type
  */
 public function getCityForLocation()
 {
     /* @var $cityDao \DDD\Dao\Geolocation\Cities */
     $cityDao = $this->getCityDao();
     $cities = $cityDao->getCityForLocation();
     $cityList = [];
     $router = $this->getServiceLocator()->get('router');
     foreach ($cities as $city) {
         $cityProvince = $city['city_url'] . '--' . $city['province_url'];
         $cityList[] = ['city_id' => $city['id'], 'country_id' => $city['country_id'], 'img' => Helper::getImgByWith('/locations/' . $city['detail_id'] . '/' . $city['cover_image'], WebSite::IMG_WIDTH_LOCATION_MEDIUM, false, false, $city['detail_id']), 'url' => $router->assemble(['action' => 'location', 'cityProvince' => $cityProvince], ['name' => 'location/child']), 'apartment_url' => 'search?city=' . $city['city_url'] . '&show=all'];
     }
     return $cityList;
 }
Beispiel #5
0
 public function getApartment($cityApartel)
 {
     $cityApartel = explode('--', $cityApartel);
     if (!isset($cityApartel[1]) || !ClassicValidator::checkApartmentTitle($cityApartel[0]) || !ClassicValidator::checkApartmentTitle($cityApartel[1])) {
         return false;
     }
     $apartel = $otherParams['apartel'] = $cityApartel[0];
     $city = $cityApartel[1];
     $generalDao = $this->getApartmentGeneralDao();
     $descrDao = $this->getDescriptionDao();
     $roomDao = $this->getRoomDao();
     $officeDao = new \DDD\Dao\Office\OfficeManager($this->getServiceLocator());
     $furnitureDao = $this->getFurnitureDao();
     $apartmentAmenitiesDao = $this->getAmenitiesDao();
     $buildingFacilitiesDao = $this->getFacilitiesDao();
     $general = $generalDao->getApartmentGeneralBySlug($apartel, Helper::urlForSearch($city, TRUE));
     if (!$general) {
         return false;
     }
     //change currency
     $userCurrency = $this->getCurrencySite();
     if ($userCurrency != $general['code']) {
         $currencyResult = $this->currencyConvert($general['price_avg'], $userCurrency, $general['code']);
         $general['price_avg'] = $currencyResult[0];
         $general['symbol'] = $currencyResult[1];
     }
     //images
     $imgDomain = DomainConstants::IMG_DOMAIN_NAME;
     $imgPath = Website::IMAGES_PATH;
     $images = [];
     $checkHasImage = false;
     foreach ($general as $key => $img) {
         if (strpos($key, 'img') !== false && $img) {
             $original = Helper::getImgByWith($img);
             $smallImg = Helper::getImgByWith($img, WebSite::IMG_WIDTH_AMARTMENT_SMALL);
             $bigImg = Helper::getImgByWith($img, WebSite::IMG_WIDTH_AMARTMENT_BIG);
             if ($original && $bigImg && $smallImg) {
                 $checkHasImage = true;
                 $images[] = ['domain' => $imgDomain, 'big' => $bigImg, 'small' => $smallImg, 'orig' => $original];
             }
         }
     }
     if (!$checkHasImage) {
         $noImg = Constants::VERSION . 'img/no_image.png';
         $images[] = ['domain' => $noImg, 'big' => $noImg, 'small' => $noImg, 'orig' => $noImg];
     }
     $otherParams['images'] = $images;
     //video
     if (isset($general['video']) && $general['video']) {
         $video = Helper::getVideoUrl($general['video']);
         if ($video) {
             $otherParams['video'] = ['video_screen' => $video, 'src' => $general['video']];
         }
     }
     //facilities
     $tempFacilitiesData = $buildingFacilitiesDao->getApartmentBuildingFacilities($general['aprtment_id']);
     $facilities = [];
     foreach ($tempFacilitiesData as $tempFacility) {
         $facilities[$tempFacility->getFacilityName()] = $tempFacility->getFacilityTextlineId();
     }
     unset($tempFacilitiesData);
     //amenities
     $tempAmenitiesData = $apartmentAmenitiesDao->getApartmentAmenities($general['aprtment_id']);
     $amenities = [];
     foreach ($tempAmenitiesData as $tempAmenity) {
         $amenities[$tempAmenity->getAmenityName()] = $tempAmenity->getAmenityTextlineId();
     }
     unset($tempAmenitiesData);
     if (isset($facilities['Parking']) && $facilities['Parking']) {
         $otherParams['parking'] = true;
     }
     if (isset($amenitiesData['Free Wifi']) && $amenitiesData['Free Wifi']) {
         $otherParams['internet'] = true;
     }
     //furniture
     $furnitureData = $furnitureDao->getFurnitureLits($general['aprtment_id']);
     $otherParams['furnitures'] = $furnitureData;
     /* @var $websiteSearchService \DDD\Service\Website\Search */
     $websiteSearchService = $this->getServiceLocator()->get('service_website_search');
     $diffHours = $websiteSearchService->getDiffHoursForDate();
     $otherParams['current'] = Helper::getCurrenctDateByTimezone($general['timezone'], 'd-m-Y', $diffHours);
     $general['city_name'] = $general['city_name'];
     $general['city_slug'] = $general['city_slug'];
     $otherParams['guestList'] = Objects::getGuestList(['guest' => $this->getTextLineSite(1455), 'guests' => $this->getTextLineSite(1456)], true);
     $params = ['general' => $general, 'amenities' => $amenities, 'facilities' => $facilities, 'otherParams' => $otherParams];
     return $params;
 }
Beispiel #6
0
 /**
  * @param $pageSlug
  * @return array|bool
  */
 public function getApartel($pageSlug)
 {
     // explode slug and get apartel name city name
     $pageSlug = explode('--', $pageSlug);
     if (!isset($pageSlug[1]) || !ClassicValidator::checkApartmentTitle($pageSlug[0]) || !ClassicValidator::checkApartmentTitle($pageSlug[1])) {
         return false;
     }
     /**
      * @var $apartelDao \DDD\Dao\Apartel\General
      * @var $serviceLocation \DDD\Service\Website\Location
      * @var $relApartelDao \DDD\Dao\Apartel\RelTypeApartment
      * @var $apartelTypeDao \DDD\Dao\Apartel\Type
      * @var $apartmentService \DDD\Service\Website\Apartment
      */
     $apartelDao = $this->getServiceLocator()->get('dao_apartel_general');
     $serviceLocation = $this->getServiceLocator()->get('service_website_location');
     $apartelTypeDao = $this->getServiceLocator()->get('dao_apartel_type');
     $apartmentService = $this->getServiceLocator()->get('service_website_apartment');
     $router = $this->getServiceLocator()->get('router');
     $apartelSlug = $pageSlug[0];
     $apartelData = $apartelDao->getApartelDataForWebsite($apartelSlug);
     if (!$apartelData) {
         return false;
     }
     $data = [];
     $apartel = $pageSlug[0];
     $city = $pageSlug[1];
     $apartelId = $apartelData['id'];
     $data = $apartelData;
     $data['apartel'] = $apartel;
     $data['city'] = $city;
     $data['img'] = Helper::getImgByWith('/' . DirectoryStructure::FS_IMAGES_APARTEL_BG_IMAGE . $apartelId . '/' . $apartelData['bg_image']);
     $data['apartel_slug'] = $apartelSlug;
     // get options for search
     $dataOption['city_data']['timezone'] = $apartelData['timezone'];
     $options = $serviceLocation->getOptions($dataOption);
     // get review list
     $relApartelDao = $this->getServiceLocator()->get('dao_apartel_rel_type_apartment');
     $reviews = $relApartelDao->getReviewForWebsite($apartelId);
     // review score
     $reviewsScore = $relApartelDao->getReviewAVGScoreForYear($apartelId);
     //change currency
     $userCurrency = $this->getCurrencySite();
     // get room type data
     $roomTypeData = $apartelTypeDao->getRoomTypeForWebsite($apartelId);
     $roomTypes = [];
     foreach ($roomTypeData as $roomtype) {
         if ($userCurrency != $roomtype['code']) {
             $currencyResult = $apartmentService->currencyConvert($roomtype['price'], $userCurrency, $roomtype['code']);
             $roomtype['price'] = $currencyResult[0];
             $roomtype['symbol'] = $currencyResult[1];
         }
         if (strpos(strtolower($roomtype['name']), 'studio') !== false) {
             $roomtype['img'] = 'studio_one_bedroom.png';
             $roomtype['search_name'] = 'studio';
             $roomtype['code'] = $userCurrency;
             $roomtypeName = 'studio';
             $roomTypes[0] = $roomtype;
         } elseif (strpos(strtolower($roomtype['name']), 'one') !== false) {
             $roomtype['img'] = 'studio_one_bedroom.png';
             $roomtype['search_name'] = 'onebedroom';
             $roomtype['code'] = $userCurrency;
             $roomtypeName = 'onebedroom';
             $roomTypes[1] = $roomtype;
         } else {
             $roomtype['img'] = 'two_bedroom.png';
             $roomtype['search_name'] = 'twobedroom';
             $roomtype['code'] = $userCurrency;
             $roomtypeName = 'twobedroom';
             $roomTypes[2] = $roomtype;
         }
         $roomtype['search_url'] = "/search?apartel={$apartel}&guest=2&{$roomtypeName}=1";
     }
     ksort($roomTypes);
     return ['data' => $data, 'options' => $options, 'reviews' => $reviews, 'reviewsScore' => $reviewsScore, 'roomTypes' => $roomTypes];
 }