1+ <?php
2+ /**
3+ * Created by PhpStorm.
4+ * User: Евгений Емельянов <e9139905539@gmail.com>
5+ */
6+
7+ namespace uranum \location \components ;
8+
9+
10+ use uranum \location \models \UserIp ;
11+ use uranum \location \Module ;
12+ use Yii ;
13+ use yii \base \Component ;
14+ use yii \base \Event ;
15+ use yii \helpers \VarDumper ;
16+ use yii \web \Session ;
17+
18+ class LocationSetter extends Component
19+ {
20+ const EVENT_SET_LOCATION = 'setLocation ' ;
21+ const EVENT_USER_LOGIN = 'userLogin ' ;
22+ const EVENT_USER_SIGNUP = 'userSignup ' ;
23+
24+ private $ session ;
25+ private $ module ;
26+
27+ public function __construct (Module $ module , Session $ session , array $ config = [])
28+ {
29+ parent ::__construct ($ config );
30+ $ this ->session = \Yii::$ app ->session ;
31+ $ this ->module = $ module ;
32+ }
33+
34+ /**
35+ * @param $event Event
36+ */
37+ public function handleLoginEvent ($ event )
38+ {
39+ // проверить базу и записать в сессию из базы
40+ // оставить то, что в сессии
41+ // записать в сессию из гео
42+
43+ // VarDumper::dump($event->sender,5, true);
44+ // die();
45+
46+ $ storage = $ this ->hasUserCityInStorage ($ event ->sender ->id );
47+
48+ if (null !== $ storage ) {
49+ $ this ->session ->set (Module::USER_CITY , $ storage );
50+ } else {
51+ $ this ->setUserCityFromGeo ();
52+ }
53+ }
54+
55+ protected function hasUserCityInStorage ($ id )
56+ {
57+ return UserIp::findOne (['user_id ' => $ id ]);
58+ }
59+
60+ protected function setUserCityFromGeo ()
61+ {
62+ if (!$ this ->session ->has (Module::USER_CITY )) {
63+ $ this ->session ->set (Module::USER_CITY , $ this ->module ->ipGeoComponent ->getLocation (Yii::$ app ->request ->userIP ));
64+ }
65+ }
66+ }
0 commit comments