public function process($fh)
 {
     // skip und check header
     $line = trim(fgets($fh));
     if ($line != "rating,name,locality,url,country,name_alt,address,lat,lng,postal,address_ext") {
         $this->logError("Wrong fingerprint \n");
         echo $this->getHelp();
         Yii::app()->end();
     }
     while (!feof($fh)) {
         $data = fgetcsv($fh);
         if ($data !== false) {
             $rating = $this->parseRating($data[0]);
             //! Use english for canonical names
             $name = $data[5] == "" ? $data[1] : $data[5];
             //mihan007: just minor thing.. what is 5 and 1? don't like magic numbers.
             $cityName = $data[2];
             $city = City::model()->guess($cityName);
             if (count($city) == 0) {
                 $this->logError("Problem mapping city " . $data[2]);
                 continue;
             }
             $city = $city[0];
             $canonicalName = UtilsHelper::canonizeHotelName($name, $city->localEn);
             $this->saveRow($city->id, $canonicalName, $rating, $name);
         }
     }
 }
Exemple #2
0
 /**
  * Method to find rating for given hotels in given city
  *
  * @param array $hotel_names Names of hotels we want to lookup rating for
  * @param City $city City model instance for given hotel
  * @return array HotelName => rating
  */
 public function findByNames($hotel_names, $city)
 {
     $canonized_names = array();
     foreach ($hotel_names as $name) {
         $canonical_name = UtilsHelper::canonizeHotelName($name, $city->localEn);
         $canonized_names[$name] = $canonical_name;
     }
     $criteria = new CDbCriteria();
     $criteria->addInCondition("canonical_name", $canonized_names);
     $criteria->addColumnCondition(array("city_id" => $city->id));
     $rows = $this->findAll($criteria);
     $canonical_name_to_rating = array();
     foreach ($rows as $row) {
         $canonical_name_to_rating[$row->canonical_name] = $row->rating;
     }
     $name_to_rating = array();
     foreach ($canonized_names as $name => $canonical_name) {
         if (isset($canonical_name_to_rating[$canonical_name])) {
             $name_to_rating[$name] = $canonical_name_to_rating[$canonical_name];
         }
     }
     return $name_to_rating;
 }