Exemplo n.º 1
0
 public function action()
 {
     if ($this->hasErrors()) {
         echo '<pre>';
         print_r($this->errors);
     } else {
         //определяем город юзера по его IP
         $this->city = YiiBase::app()->sypexgeo->action($this->ip);
         //не удалось определить город по IP юзера
         if (empty($this->city)) {
             //тогда выбираем город-Москва и отдаём данные по этому городу
             $city = $this->getMoscow();
         } else {
             //поиск города в справочнике
             $city_row = City::findTownByName($this->city);
             //Не нашли город в справочнике
             if (empty($city_row)) {
                 //не удалось найти город в нашем списке - тогда город - Москва для этого сайта
                 $city = $this->getMoscow();
             } else {
                 //поиск соответствия = город+сайт+активность
                 $query = YiiBase::app()->db->cache(3600)->createCommand('SELECT * FROM {{city_site_phone}} WHERE city_id=:city_id AND site_id=:site_id AND active=1');
                 $query->bindValue(':city_id', $city_row['id'], PDO::PARAM_INT);
                 $query->bindValue(':site_id', $this->site_id, PDO::PARAM_INT);
                 $city = $query->queryRow();
                 //не нашли совпадения по АКТИВНОСТИ_города+совпадению_по_сайту+названию_города
                 if (empty($city)) {
                     $city = $this->getMoscow();
                     //учитываем метку рекламы и если есть метка рекламы-  выводим номер для рекламы
                     $this->phones[self::getPhoneUtm($city)] = 'Москва';
                 }
             }
         }
         //формируем список активных регионов по сайту, для отображения
         if (empty($this->regions)) {
             $this->regions = CHtml::listData($this->findActiveRegions(), 'city', 'phone');
         }
         //если город - АКТИВЕН - используем его телефон
         if (!empty($city) && empty($this->phones)) {
             //получим массив всей информаци о городе
             $row_info_city = City::findById($city['city_id']);
             //определяем сколько строчек телефонов будет
             if ($row_info_city['main_city'] == City::NOT_ACTIVE) {
                 //(3 номера)
                 //добавили номер города
                 $this->phones[self::getPhoneUtm($city)] = $row_info_city['city'];
             }
             ////если есть привязки к шаблонам - ищем телефон подвязанный к шаблону(если НЕ находим то возвращаем по дефолту номер)
             $phone_from_template = Phone::getPhoneByTemplateANDCity($this->template, $row_info_city['parent_id'], $this->site_id);
             $region_city_name = City::findNameTownById($row_info_city['parent_id']);
             // нашли номер телефона подвязанного к шаблону
             //к шаблону не будет подвязок номеров рекламы, поэтому не проверяем и не подвязываем доп. номера
             if (!empty($phone_from_template)) {
                 $this->phones[$phone_from_template] = $region_city_name;
                 $this->regions[$region_city_name] = $phone_from_template;
             } else {
                 $query_region = YiiBase::app()->db->createCommand('SELECT phone, google_phone, direct_phone FROM {{city_site_phone}} WHERE city_id=:city_id AND site_id=:site_id');
                 $query_region->bindValue(':site_id', $this->site_id, PDO::PARAM_INT);
                 $query_region->bindValue(':city_id', $row_info_city['parent_id'], PDO::PARAM_INT);
                 $region_default_phone = $query_region->queryRow();
                 //используем номер телефона региона по-умолчанию
                 $this->phones[self::getPhoneUtm($region_default_phone)] = $region_city_name;
             }
         }
     }
 }
 public function actionSypexAdvanced()
 {
     if (isset($_GET['ip']) && isset($_GET['site_id'])) {
         //определяем город по Айпи
         $city = YiiBase::app()->sypexgeo->action($_GET['ip']);
         //не удалось определить город по IP
         if (empty($city)) {
             echo '8-800-333-85-07';
             die;
         }
         $city_name = City::findTownByName(trim($city));
         if (empty($city_name)) {
             echo '8-800-333-85-07';
             die;
         }
         //на основании города/сайта - находим номер телефона
         $phone_query = YiiBase::app()->db->cache(3600)->createCommand('SELECT phone FROM {{city_site_phone}}  WHERE site_id=:site_id AND city_id=:city_id');
         $phone_query->bindValue(':city_id', $city_name['id'], PDO::PARAM_INT);
         $phone_query->bindValue(':site_id', $_GET['site_id'], PDO::PARAM_INT);
         $phone = $phone_query->queryScalar();
         //если нашли номер телефона по городу, изменим город на Москву и найдём номер
         if ($phone) {
             echo $city_name['city'] . ' ' . $phone;
             die;
         } else {
             //НЕ нашли совпадение по городу и сайту
             //ищем совпадение по Московском области, если город попадает в МО
             $city_moscow = City::findTownByName('Москва');
             //есть совпадение по МО
             if ($city_name['parent_id'] == $city_moscow['id']) {
                 $phone_query = YiiBase::app()->db->cache(3600)->createCommand('SELECT phone FROM {{city_site_phone}}  WHERE site_id=:site_id AND city_id=:city_id');
                 $phone_query->bindValue(':city_id', $city_moscow['id'], PDO::PARAM_INT);
                 $phone_query->bindValue(':site_id', $_GET['site_id'], PDO::PARAM_INT);
                 $phone = $phone_query->queryScalar();
                 echo 'Москва ' . $phone;
                 die;
             } else {
                 echo '8-800-333-85-07';
                 die;
             }
         }
     }
     die;
 }