PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/frontend/components/GetRregionGroup.php

https://bitbucket.org/jeka_deadline/cosmetics-store
PHP | 55 lines | 41 code | 9 blank | 5 comment | 5 complexity | 6b6c14f937d12b122ebdacd0faca4448 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. namespace frontend\components;
  3. use common\models\price_book\RegionGroup;
  4. use yii;
  5. use yii\base\Behavior;
  6. class GetRregionGroup extends Behavior
  7. {
  8. public function events()
  9. {
  10. return [
  11. \yii\web\Application::EVENT_BEFORE_REQUEST => 'getRegionGroup',
  12. ];
  13. }
  14. public function getRegionGroup()
  15. {
  16. //проверяем назначена ли пользователю группа
  17. $session = Yii::$app->session;
  18. $session->open();
  19. if(empty($session['region_group_id']) ){
  20. //проверяем действительно ли запрос к какому либо модулю
  21. $url =Yii::$app->request->getUrl();
  22. $request_module = explode('/', $url)[0];
  23. $modules = include (\Yii::getAlias('@frontend/config/main.php'));
  24. if (array_key_exists($request_module, $modules['modules'])) {
  25. $ip = Yii::$app->request->getUserIP();
  26. $ip = ($ip == '127.0.0.1') ? '31.129.115.107' : $ip;
  27. //внешний сервис 10000 запросов в час
  28. //@return регион
  29. $url = "http://www.freegeoip.net/json/" . $ip;
  30. $is_bot = preg_match("~(Google|Yahoo|Rambler|Bot|Yandex|Spider|Snoopy|Crawler|Finder|Mail|curl)~i", $_SERVER['HTTP_USER_AGENT']);
  31. $response = !$is_bot ? json_decode(file_get_contents($url)) : [];
  32. $region = $response->region_name;
  33. //ищем в базе id региона
  34. $region = RegionGroup::find()
  35. ->where(['region' => $region])
  36. ->one();
  37. if ($region) {
  38. $region_id = $region['group_id'];
  39. } else {
  40. $region_id = null;
  41. }
  42. $session->set('region_group_id', $region_id);
  43. }
  44. }
  45. }
  46. }