예제 #1
0
 public function xmlAction()
 {
     $this->_helper->layout->disableLayout();
     $this->_helper->viewRenderer->setNoRender(true);
     $db = Zend_Registry::get("db");
     $sanitizeM = new Base_Sanitize();
     $directory = "data/zone/XML/";
     if (!($dp = opendir($directory))) {
         die("Cannot open {$directory}.");
     }
     $ctr = 0;
     //truncate tables
     $db->query("TRUNCATE TABLE destination");
     $db->query("TRUNCATE TABLE experiences");
     $db->query("TRUNCATE TABLE practicalities");
     $db->query("TRUNCATE TABLE dont_leave_without");
     $db->query("TRUNCATE TABLE lonely_planet_country");
     $db->query("TRUNCATE TABLE eat_sleep_drink");
     $db->query("TRUNCATE TABLE log");
     $db->query("TRUNCATE TABLE error_log");
     $db->query("TRUNCATE TABLE area");
     $db->query("TRUNCATE TABLE region");
     $db->query("TRUNCATE TABLE continent");
     $db->query("TRUNCATE TABLE country");
     $db->query("TRUNCATE TABLE city");
     $db->query("TRUNCATE TABLE seo_url");
     //------------------------------
     while ($filename = readdir($dp)) {
         $res = $db->fetchAll("select * from log where message='{$filename}'");
         if (is_dir($filename)) {
             continue;
         } else {
             if ($filename != '.' && $filename != '..' && empty($res)) {
                 $file_path = $directory . $filename;
                 $data['message'] = $filename;
                 $data['log_start'] = date("Y-m-d H:i:s");
                 $log_id = $db->insert("log", $data);
                 $xml_parser = new Base_Xml_Parser(null, $file_path);
                 $continentName = "";
                 if (isset($xml_parser->Data['identification']['geoTag1'])) {
                     $continentName = $sanitizeM->clearInputs($xml_parser->Data['identification']['geoTag1']);
                 }
                 $countryName = "";
                 if (isset($xml_parser->Data['identification']['geoTag2'])) {
                     $countryName = $sanitizeM->clearInputs($xml_parser->Data['identification']['geoTag2']);
                 }
                 $cityName = "";
                 if (isset($xml_parser->Data['identification']['geoTag3'])) {
                     $cityName = $sanitizeM->clearInputs($xml_parser->Data['identification']['geoTag3']);
                 }
                 $regionName = $cityName;
                 $areaName = $cityName;
                 //----insert into continent
                 $continent_id = 0;
                 if ($continentName != "") {
                     $continentM = new Application_Model_Continent();
                     $continent = $continentM->fetchRow("name='{$continentName}'");
                     if (false === $continent) {
                         $continentM->setName($continentName);
                         $continent_id = $continentM->save();
                     } else {
                         $continent_id = $continent->getId();
                     }
                 }
                 //--------------------------
                 //----insert into country
                 $country_id = 0;
                 if ($countryName != "") {
                     //if not exists
                     if (!$this->duplicateCountries($countryName)) {
                         $countryM = new Application_Model_Country();
                         $country = $countryM->fetchRow("name='{$countryName}' and continent_id='{$continent_id}'");
                         if (false === $country) {
                             $countryM->setName($countryName);
                             $countryM->setContinentId($continent_id);
                             $country_id = $countryM->save();
                         } else {
                             $country_id = $country->getId();
                         }
                     }
                 }
                 //-------------------------------
                 //------insert into region
                 $region_id = 0;
                 $regionM = new Application_Model_Region();
                 $region = $regionM->fetchRow("name='{$regionName}' and country_id='{$country_id}' AND continent_id='{$continent_id}'");
                 if (false === $region) {
                     $regionM->setName($regionName);
                     $regionM->setCountryId($country_id);
                     $regionM->setContinentId($continent_id);
                     $region_id = $regionM->save();
                 } else {
                     $region_id = $region->getId();
                 }
                 //------insert into city
                 $city_id = 0;
                 if ($cityName != "") {
                     $cityM = new Application_Model_City();
                     $city = $cityM->fetchRow("name='{$cityName}' and region_id='{$region_id}' AND country_id='{$country_id}' AND continent_id='{$continent_id}'");
                     if (false === $city) {
                         if ($country_id != 0) {
                             //echo "<br />File name=".$file_path;
                             $cityM->setName($cityName);
                             $cityM->setRegionId($region_id);
                             $cityM->setCountryId($country_id);
                             $cityM->setContinentId($continent_id);
                             $cityM->setFeaturedTop(0);
                             $cityM->setFeaturedOther(0);
                             $city_id = $cityM->save();
                         }
                     } else {
                         $city_id = $city->getId();
                     }
                 }
                 //------------------------
                 //------insert into area
                 $area_id = 0;
                 $areaM = new Application_Model_Area();
                 $area = $areaM->fetchRow("name='{$areaName}' and city_id='{$city_id}' and region_id='{$region_id}' AND country_id='{$country_id}' AND continent_id='{$continent_id}' ");
                 if (false === $area) {
                     $areaM->setName($areaName);
                     $areaM->setRegionId($region_id);
                     $areaM->setCountryId($country_id);
                     $areaM->setContinentId($continent_id);
                     $areaM->setCityId($city_id);
                     $area_id = $areaM->save();
                 } else {
                     $area_id = $area->getId();
                 }
                 //------------------------
                 if ($continent_id > 0 && $country_id > 0 && $city_id > 0) {
                     //it is city
                     $locationType = "city";
                     $locationId = $city_id;
                 } else {
                     if ($continent_id > 0 && $country_id > 0) {
                         //it is country
                         $locationType = "country";
                         $locationId = $country_id;
                     } else {
                         if ($continent_id > 0) {
                             //it is continent
                             $locationType = "continent";
                             $locationId = $continent_id;
                         }
                     }
                 }
                 if (isset($xml_parser->Data['content'])) {
                     $title = $sanitizeM->clearInputs($xml_parser->Data['content']['title']);
                     $introduction = "";
                     if (isset($xml_parser->Data['content']['introduction'])) {
                         $introduction = $xml_parser->Data['content']['introduction'];
                     }
                     $destinationM = new Application_Model_Destination();
                     $bankBreakerPincher = "";
                     $knowledgeArr = "";
                     //set bank breaker array to save
                     if (isset($xml_parser->Data['content']['costs'])) {
                         $bank_breaker = array();
                         $bankBreaker = array();
                         foreach ($xml_parser->Data['content']['costs'] as $breaker) {
                             $bank_breaker[] = $breaker;
                         }
                         //break into two array
                         $costItem = $bank_breaker[0];
                         $dailyBudget = $bank_breaker[1];
                         for ($cntBr = 0; $cntBr < count($costItem); $cntBr++) {
                             $bankBreaker[$costItem[$cntBr]['name']] = substr($costItem[$cntBr]['rating'], 0, strlen($costItem[$cntBr]['rating']) - 1);
                         }
                         //keep in one array
                         $bankBreakerPincher = array("bankBreaker" => $bankBreaker, "dailyBudget" => $dailyBudget);
                     }
                     if (isset($xml_parser->Data['content']['knowledge'])) {
                         $knowledgeArr = array();
                         $knowledge = $xml_parser->Data['content']['knowledge'];
                         $knowledgeArr = $knowledge['item'];
                     }
                     $destinationM->setTitle($title);
                     $destinationM->setIntroduction($introduction);
                     $destinationM->setLocationId($locationId);
                     $destinationM->setLocationType($locationType);
                     $destinationM->setBankBreaker(serialize($bankBreakerPincher));
                     $destinationM->setKnowledge(serialize($knowledgeArr));
                     $destination_id = $destinationM->save();
                     if (isset($xml_parser->Data['content']['experiences'])) {
                         foreach ($xml_parser->Data['content']['experiences'] as $experiences) {
                             foreach ($experiences as $_item) {
                                 $experiencesM = new Application_Model_Experiences();
                                 $experiencesM->setTitle($_item['title']);
                                 $experiencesM->setDestinationId($destination_id);
                                 $experiencesM->setCopy($_item['copy']);
                                 $experiencesM->save();
                             }
                         }
                     }
                     if (isset($xml_parser->Data['content']['dontLeaveWithout'])) {
                         foreach ($xml_parser->Data['content']['dontLeaveWithout'] as $dontLeaveWithout) {
                             foreach ($dontLeaveWithout as $_item) {
                                 $dontLeaveWithoutM = new Application_Model_DontLeaveWithout();
                                 $dontLeaveWithoutM->setTitle($_item['title']);
                                 $dontLeaveWithoutM->setDestinationId($destination_id);
                                 $dontLeaveWithoutM->setCopy($_item['copy']);
                                 $dontLeaveWithoutM->save();
                             }
                         }
                     }
                     if (isset($xml_parser->Data['content']['practicalities'])) {
                         foreach ($xml_parser->Data['content']['practicalities'] as $practicalities) {
                             foreach ($practicalities as $_item) {
                                 $practicalitiesM = new Application_Model_Practicalities();
                                 $practicalitiesM->setTitle($_item['title']);
                                 $practicalitiesM->setDestinationId($destination_id);
                                 $practicalitiesM->setCopy($_item['copy']);
                                 $practicalitiesM->save();
                             }
                         }
                     }
                     if (isset($xml_parser->Data['content']['eatSleepDrink'])) {
                         foreach ($xml_parser->Data['content']['eatSleepDrink'] as $eatsleepdrink) {
                             foreach ($eatsleepdrink as $_item) {
                                 $EatSleepDrinkM = new Application_Model_EatSleepDrink();
                                 $EatSleepDrinkM->setTitle($_item['title']);
                                 $EatSleepDrinkM->setDestinationId($destination_id);
                                 $EatSleepDrinkM->setBackPackerCopy($_item['backpackerCopy']);
                                 $EatSleepDrinkM->setLocalCopy($_item['localCopy']);
                                 $EatSleepDrinkM->save();
                             }
                         }
                     }
                     $data['log_end'] = date("Y-m-d H:i:s");
                     $res = $db->update("log", $data, "id='{$log_id}'");
                 }
             }
         }
     }
     //end of main while loop
 }