Blame view

common/modules/language/components/LanguageRequest.php 2.76 KB
4ca21c3e   Alexey Boroda   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
71
72
73
74
75
76
  <?php
      
      namespace common\modules\language\components;
      
      use common\modules\language\models\Language;
      use yii\base\InvalidConfigException;
      use yii\web\Request;
      
      class LanguageRequest extends Request
      {
          
          private $_language_url;
          
          public function getLanguageUrl()
          {
              if($this->_language_url === NULL) {
                  $this->_language_url = $this->getUrl();
                  
                  $url_list = explode('/', $this->_language_url);
                  
                  $language_url = isset( $url_list[ 1 ] ) ? $url_list[ 1 ] : NULL;
                  Language::setCurrent($language_url);
                  
                  if($language_url !== NULL && $language_url === Language::getCurrent()->url && strpos($this->_language_url, Language::getCurrent()->url) === 1) {
                      $this->_language_url = substr($this->_language_url, strlen(Language::getCurrent()->url) + 1);
                  }
              }
         
              
              return $this->_language_url;
          }
          
          protected function resolvePathInfo()
          {
              $pathInfo = $this->getLanguageUrl();
              
              if(( $pos = strpos($pathInfo, '?') ) !== false) {
                  $pathInfo = substr($pathInfo, 0, $pos);
              }
              
              $pathInfo = urldecode($pathInfo);
              
              if(!preg_match('%^(?:
              [\x09\x0A\x0D\x20-\x7E]              
              | [\xC2-\xDF][\x80-\xBF]             
              | \xE0[\xA0-\xBF][\x80-\xBF]       
              | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
              | \xED[\x80-\x9F][\x80-\xBF]       
              | \xF0[\x90-\xBF][\x80-\xBF]{2}    
              | [\xF1-\xF3][\x80-\xBF]{3}        
              | \xF4[\x80-\x8F][\x80-\xBF]{2}    
              )*$%xs', $pathInfo)
              ) {
                  $pathInfo = utf8_encode($pathInfo);
              }
              
              $scriptUrl = $this->getScriptUrl();
              $baseUrl = $this->getBaseUrl();
              
              if(strpos($pathInfo, $scriptUrl) === 0) {
                  $pathInfo = substr($pathInfo, strlen($scriptUrl));
              } elseif($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 === '/') {
                  $pathInfo = substr($pathInfo, 1);
              }
              
              return (string) $pathInfo;
          }
      }