Blame view

common/components/LangRequest.php 2.88 KB
ab4d7cb1   andryeyev   Page + Языковая в...
1
2
3
4
5
6
7
  <?php
  
  namespace common\components;
  
  use Yii;
  use yii\web\Request;
  use common\models\Language;
1083271e   andryeyev   + идентификатор I...
8
9
  use common\models\Page;
  use yii\helpers\Url;
ab4d7cb1   andryeyev   Page + Языковая в...
10
11
  
  class LangRequest extends Request
1083271e   andryeyev   + идентификатор I...
12
  {  
ab4d7cb1   andryeyev   Page + Языковая в...
13
14
      private $_lang_url;
  
1083271e   andryeyev   + идентификатор I...
15
16
17
18
19
      public function getBaseUrl()
      {   
          return str_replace ((IS_FRONT ? '/frontend/web' : '/backend/web'), '', parent::getBaseUrl()) . (IS_FRONT ? '' : '/admin');
      }
  
ab4d7cb1   andryeyev   Page + Языковая в...
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
      public function getLangUrl()
      {
          if ($this->_lang_url === null) 
          {
  	        $this->_lang_url = $this->getUrl();
  	        
  	    	$url_list = explode ('/', $this->_lang_url);
  
  	    	$lang_url = isset ($url_list[1]) ? $url_list[1] : null;
  
  	    	Language::setCurrent($lang_url);
  
              if ($lang_url !== null && $lang_url === Language::getCurrent()->lang_code 
                  && strpos($this->_lang_url, Language::getCurrent()->lang_code) === 1)
              {
                  $this->_lang_url = substr ($this->_lang_url, strlen (Language::getCurrent()->lang_code) + 1);
              }
          }
  
          return $this->_lang_url;
      }
  
      protected function resolvePathInfo()
      {
          $pathInfo = $this->getLangUrl();
  
          if (($pos = strpos ($pathInfo, '?')) !== false) 
          {
              $pathInfo = substr ($pathInfo, 0, $pos);
          }
  
          $pathInfo = urldecode ($pathInfo);
  
          // try to encode in UTF8 if not so
          // http://w3.org/International/questions/qa-forms-utf-8.html
          if (! preg_match ('%^(?:
              [\x09\x0A\x0D\x20-\x7E]              # ASCII
              | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
              | \xE0[\xA0-\xBF][\x80-\xBF]         # excluding overlongs
              | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
              | \xED[\x80-\x9F][\x80-\xBF]         # excluding surrogates
              | \xF0[\x90-\xBF][\x80-\xBF]{2}      # planes 1-3
              | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
              | \xF4[\x80-\x8F][\x80-\xBF]{2}      # plane 16
              )*$%xs', $pathInfo)
          ) 
          {
              $pathInfo = utf8_encode($pathInfo);
          }
  
          $scriptUrl = $this->getScriptUrl();
1083271e   andryeyev   + идентификатор I...
71
          
ab4d7cb1   andryeyev   Page + Языковая в...
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
          $baseUrl = $this->getBaseUrl();
  
          if (strpos($pathInfo, $scriptUrl) === 0) 
          {
              $pathInfo = substr($pathInfo, strlen($scriptUrl));
          } 
          else if ($baseUrl === '' || strpos($pathInfo, $baseUrl) === 0) 
          {
              $pathInfo = substr($pathInfo, strlen($baseUrl));
          } 
          elseif (isset ($_SERVER['PHP_SELF']) && strpos ($_SERVER['PHP_SELF'], $scriptUrl) === 0) 
          {
              $pathInfo = substr($_SERVER['PHP_SELF'], strlen($scriptUrl));
          } 
          else 
          {
              throw new InvalidConfigException('Unable to determine the path info of the current request.');
          }
  
          if ($pathInfo[0] === '/') 
          {
              $pathInfo = substr ($pathInfo, 1);
          }
1083271e   andryeyev   + идентификатор I...
95
   
ab4d7cb1   andryeyev   Page + Языковая в...
96
97
98
          return (string) $pathInfo;
      }
  }