Ejemplo n.º 1
0
 protected function _parseUrl()
 {
     $iaView =& $this->iaView;
     $domain = $_SERVER['HTTP_HOST'];
     $requestPath = preg_replace('#^\\/#', '', $_SERVER['REQUEST_URI']);
     if (!preg_match('#^www\\.#', $domain) && preg_match('#:\\/\\/www\\.#', $this->get('baseurl'))) {
         $domain = preg_replace('#^#', 'www.', $domain);
         $this->factory('util')->go_to('http://' . $domain . IA_URL_DELIMITER . $requestPath);
     } elseif (preg_match('#^www\\.#', $domain) && !preg_match('#:\\/\\/www\\.#', $this->get('baseurl'))) {
         $domain = preg_replace('#^www\\.#', '', $domain);
         $this->factory('util')->go_to('http://' . $domain . IA_URL_DELIMITER . $requestPath);
     }
     $iaView->assetsUrl = '//' . $domain . IA_URL_DELIMITER . FOLDER_URL;
     $iaView->domain = $domain;
     $iaView->domainUrl = 'http' . (isset($_SERVER['HTTPS']) && 'on' == $_SERVER['HTTPS'] ? 's' : '') . ':' . $iaView->assetsUrl;
     $iaView->language = $this->get('lang');
     $doExit = false;
     $changeLang = false;
     if (isset($_GET['_p'])) {
         $url = $_GET['_p'];
         unset($_GET['_p']);
     } else {
         $url = !isset($_SERVER['REDIRECT_URL']) || $_SERVER['REQUEST_URI'] != $_SERVER['REDIRECT_URL'] ? $_SERVER['REQUEST_URI'] : $_SERVER['REDIRECT_URL'];
         $url = substr($url, strlen(FOLDER) + 1);
     }
     $extension = IA_URL_DELIMITER;
     $url = explode('?', $url);
     $url = array_shift($url);
     $url = explode(IA_URL_DELIMITER, iaSanitize::urlInjectionFilter(trim($url, IA_URL_DELIMITER)));
     $lastChunk = end($url);
     if ($pos = strrpos($lastChunk, '.')) {
         $extension = substr($lastChunk, $pos + 1);
         switch ($extension) {
             case self::EXTENSION_JSON:
                 $iaView->setRequestType(iaView::REQUEST_JSON);
                 break;
             case self::EXTENSION_XML:
                 $iaView->setRequestType(iaView::REQUEST_XML);
         }
         $extension = '.' . $extension;
         $url = str_replace($extension, '', $url);
     }
     $iaView->set('extension', $extension);
     if (isset($_POST['_lang']) && isset($this->languages[$_POST['_lang']])) {
         $iaView->language = $_POST['_lang'];
         $changeLang = true;
     }
     $isSystemChunk = true;
     $array = array();
     foreach ($url as $value) {
         if (!$isSystemChunk) {
             $array[] = $value;
             continue;
         }
         switch (true) {
             case $this->get('admin_page') == $value:
                 // admin panel
                 $this->_accessType = self::ACCESS_ADMIN;
                 continue 2;
             case 'logout' == $value:
                 // logging out
                 $doExit = true;
                 continue 2;
             case 2 == strlen($value):
                 // current language
                 if (isset($this->languages[$value])) {
                     $changeLang || ($iaView->language = $value);
                     array_shift($url);
                     // #1715
                     continue 2;
                 }
             default:
                 $iaView->name(empty($value) && 1 == count($url) ? $this->get('home_page') : $value);
                 $isSystemChunk = false;
         }
     }
     if (self::ACCESS_ADMIN == $this->getAccessType()) {
         if ($isSystemChunk && $this->get('home_page') == $iaView->name()) {
             $iaView->name(iaView::DEFAULT_HOMEPAGE);
         }
     }
     $iaView->url = empty($url[0]) ? array() : $url;
     $this->requestPath = $array;
     // set system language
     $this->language = $this->languages[$iaView->language];
     // set dynamic config
     $this->set('date_format', $this->language['date_format']);
     $this->set('locale', $this->language['locale']);
     define('IA_EXIT', $doExit);
 }