/** * Returns default city * * @return GeoCity|null * @throws \RuntimeException */ public function getDefaultCity() { if (empty($this->config['default_city'])) { return null; } if (is_null($this->default_city)) { $this->default_city = GeoCityQuery::create()->findPk($this->config['default_city']); if (!$this->default_city instanceof GeoCity) { throw new \RuntimeException('The default city is not found'); } } return $this->default_city; }
/** * Updates cities * * @param $resource * @param $progress */ protected function updateCities($resource, $progress) { while (($buffer = fgets($resource, 4096)) !== false) { $raw_city = mb_split("\t+", mb_convert_encoding(trim($buffer), 'UTF-8', 'CP-1251')); if (count($raw_city) != static::FILE_CITIES_COLUMNS) { continue; } /** @var GeoCity $city */ $city = GeoCityQuery::create()->filterByid($raw_city[static::CITY_COLUMN_INDEX_ID])->findOneOrCreate(); $city->setName($raw_city[static::CITY_COLUMN_INDEX_NAME]); $city->setRegion($raw_city[static::CITY_COLUMN_INDEX_REGION]); $city->setDistrict($raw_city[static::CITY_COLUMN_INDEX_DISTRICT]); $city->setLatitude($raw_city[static::CITY_COLUMN_INDEX_LATITUDE]); $city->setLongitude($raw_city[static::CITY_COLUMN_INDEX_LONGITUDE]); $city->save(); $city->clearAllReferences(true); $progress->advance(mb_strlen($buffer)); $city = null; $rawCity = null; $buffer = null; unset($city); unset($rawCity); unset($buffer); } }