Example #1
0
 /**
  * @param string $source
  * @param City $destination
  * @return mixed
  */
 public function map($source, $destination)
 {
     $destination->setName($source);
     $translations = array('fr' => $source);
     if (!$destination->getName()) {
         $translations = array('en' => $source);
     }
     $this->translateProperty($destination, 'name', $translations);
     if ($destination->getLatitude() == null || $destination->getLongitude() == null) {
         $tabCoord = $this->google->getGoogleXmlCoords($source, 'fr');
         if (isset($tabCoord[0]) && !empty($tabCoord[0]) && isset($tabCoord[1]) && !empty($tabCoord[1])) {
             $destination->setLatitude($tabCoord[0]);
             $destination->setLongitude($tabCoord[1]);
         }
     }
     return $destination;
 }
Example #2
0
 /**
  * @param $codeAdherent
  */
 public function import($codeAdherent)
 {
     set_time_limit(0);
     $detailsClient = $this->getArtsysClient();
     $xmlMapper = $this->getXmlMapper();
     $em = $this->em;
     /** @var TranslationRepository $translationRepository */
     $translationRepository = $em->getRepository('Gedmo\\Translatable\\Entity\\Translation');
     $artsysInfos = $detailsClient->get('flux/hotel?codeAdherent=' . $codeAdherent, false);
     $serializer = SerializerBuilder::create()->build();
     $hotel = $serializer->deserialize($artsysInfos, 'Seh\\Bundle\\ArtsysBundle\\Model\\Hotel', 'xml');
     $artsysHotelXml = simplexml_load_string($artsysInfos);
     if ($artsysHotelXml) {
         $artsysHotel = $xmlMapper->map($artsysHotelXml);
         if ($artsysHotel != null && $artsysHotel instanceof Hotel) {
             foreach ($artsysHotel->getTransports() as $transport) {
                 $em->remove($transport);
             }
             $transportsXml = $artsysHotelXml->xpath('transports/transport');
             $labels = array('fr' => 'labelFR', 'en' => 'labelEN', 'de' => 'labelDE', 'es' => 'labelES', 'it' => 'labelIT', 'nl' => 'labelNL');
             /** @var \SimpleXMLElement $transportXml */
             foreach ($transportsXml as $transportXml) {
                 /** @var \SimpleXMLElement $transportCategoryXml */
                 $transportCategoryXml = $transportXml->xpath('categorie')[0];
                 $transportCategoryId = $transportCategoryXml->xpath('@id');
                 $transportCategoryId = (string) $transportCategoryId[0];
                 if (!($transportCategory = $em->getRepository('SehBundle:HotelTransportCategory')->findOneBy(array('artsysId' => $transportCategoryId)))) {
                     $transportCategory = new HotelTransportCategory();
                     $transportCategory->setArtsysId($transportCategoryId);
                     foreach ($labels as $locale => $label) {
                         $translationRepository->translate($transportCategory, 'label', $locale, (string) $transportCategoryXml->xpath($label)[0]);
                     }
                 }
                 $transport = new HotelTransport();
                 if ($distance = $transportXml->xpath('distance')) {
                     $transport->setDistance((string) $distance[0]);
                 }
                 if ($comments = $transportXml->xpath('commentaires')) {
                     $transport->setComments((string) $comments[0]);
                 }
                 if ($label = $transportXml->xpath('libelle')) {
                     $transport->setLabel((string) $label[0]);
                 }
                 $transport->setPublish($transportXml->xpath('publiable')[0] == 'true');
                 $transport->setCategory($transportCategory);
                 $transport->setHotel($artsysHotel);
                 $transportCategory->addTransport($transport);
                 $artsysHotel->addTransport($transport);
                 $em->persist($transportCategory);
                 $em->persist($transport);
                 $em->flush();
             }
             $hotelPois = array();
             /** @var HotelPoi $poi */
             foreach ($artsysHotel->getHotelPois() as $poi) {
                 if (in_array($poi->getPoi()->getArtsysID(), $hotelPois)) {
                     $em->remove($poi);
                 } else {
                     $hotelPois[] = $poi->getPoi()->getArtsysID();
                 }
             }
             $poisXml = $artsysHotelXml->xpath('pois/poi');
             /** @var \SimpleXMLElement $poiXml */
             foreach ($poisXml as $poiXml) {
                 /** @var \SimpleXMLElement $poiCategoryXml */
                 $poiCategoryXml = $poiXml->xpath('categoriePOI')[0];
                 $poiCategoryId = $poiCategoryXml->xpath('@id');
                 $poiCategoryId = (string) $poiCategoryId[0];
                 if (!($poiCategory = $em->getRepository('SehBundle:PoiCategory')->findOneBy(array('artsysID' => $poiCategoryId)))) {
                     $poiCategory = new PoiCategory();
                     $poiCategory->setArtsysID($poiCategoryId);
                     foreach ($labels as $locale => $label) {
                         $translationRepository->translate($poiCategory, 'name', $locale, (string) $poiCategoryXml->xpath($label)[0]);
                     }
                 }
                 $poiId = $poiXml->xpath('id');
                 $poiId = (string) $poiId[0];
                 /** @var Poi $poi */
                 if (!($poi = $em->getRepository('SehBundle:Poi')->findOneBy(array('artsysID' => $poiId)))) {
                     $poi = new Poi();
                     $poi->setArtsysID($poiId);
                     $poi->setName((string) $poiXml->xpath('precisions')[0]);
                 }
                 if (!($hotelPoi = $em->getRepository('SehBundle:HotelPoi')->findOneBy(array('hotel' => $artsysHotel, 'poi' => $poi)))) {
                     $hotelPoi = new HotelPoi();
                     if ($distance = $poiXml->xpath('distance')) {
                         $hotelPoi->setDistance((string) $distance[0]);
                     }
                 }
                 $poi->setPoiCategory($poiCategory);
                 $hotelPoi->setHotel($artsysHotel);
                 $hotelPoi->setPoi($poi);
                 $artsysHotel->addHotelPoi($hotelPoi);
                 $em->persist($poiCategory);
                 $em->persist($poi);
                 $em->persist($hotelPoi);
                 $em->flush();
             }
             $city = $artsysHotel->getCity();
             if ($city instanceof City) {
                 if ($city->getLatitude() == null || $city->getLongitude() == null) {
                     $tabCoord = $this->google->getGoogleXmlCoords($city->getName(), 'fr');
                     if (isset($tabCoord[0]) && !empty($tabCoord[0]) && isset($tabCoord[1]) && !empty($tabCoord[1])) {
                         $city->setLatitude($tabCoord[0]);
                         $city->setLongitude($tabCoord[1]);
                         $em->persist($city);
                     }
                 }
                 unset($city);
             }
             $cities = $artsysHotel->getLinkedCities();
             foreach ($cities as $city) {
                 if ($city instanceof City) {
                     if ($city->getLatitude() == null || $city->getLongitude() == null) {
                         $tabCoord = $this->google->getGoogleXmlCoords($city->getName(), 'fr');
                         if (isset($tabCoord[0]) && !empty($tabCoord[0]) && isset($tabCoord[1]) && !empty($tabCoord[1])) {
                             $city->setLatitude($tabCoord[0]);
                             $city->setLongitude($tabCoord[1]);
                             $em->persist($city);
                         }
                     }
                     unset($city);
                 }
             }
             $em->flush();
             $em->clear();
             $artsysHotel = null;
             $artsysHotelXml = null;
             unset($artsysHotel);
             unset($artsysHotelXml);
         }
     }
 }