Beispiel #1
0
 /**
  * Parses the string and returns the {@link Uri}.
  * 
  * Parses the string and returns the {@link Uri}. If parsing fails, null is returned.
  * 
  * @param String $string The url.
  * 
  * @return \Bumble\Uri\Uri The Uri object.
  */
 public function parse($string)
 {
     $data = parse_url($string);
     //helper function gets $a[$k], checks if exists
     function get($a, $k)
     {
         if (array_key_exists($k, $a)) {
             return empty($a[$k]) ? null : $a[$k];
         }
         return null;
     }
     if ($data === null) {
         return null;
     }
     $uri = new Uri();
     $uri->setProtocol(get($data, 'scheme'));
     $uri->setUsername(get($data, 'user'));
     $uri->setPassword(get($data, 'pass'));
     $uri->setHost(get($data, 'host'));
     $uri->setPort(get($data, 'port'));
     $uri->setPath(get($data, 'path'));
     $uri->setQuery(get($data, 'query'));
     $uri->setAnchor(get($data, 'anchor'));
     return $uri;
 }
 /**
  * @covers MediaCore\Uri::setPath
  */
 public function testSetPath()
 {
     $url = 'http://example.com/path/to/directory';
     $uri = new Uri($url);
     $uri->setPath('/subdirectory');
     $expectedValue = '/subdirectory';
     $this->assertEquals($expectedValue, $uri->getPath());
 }
Beispiel #3
0
 public function testSetGetPath()
 {
     $path = 'this/is/another/path/with-file.other';
     $this->uri->setPath($path);
     $this->assertEquals($path, $this->uri->getPath());
     $this->assertEquals('this/is/another/path', $this->uri->getDirname());
     $this->assertEquals('with-file.other', $this->uri->getBasename());
     $this->assertEquals('with-file', $this->uri->getFilename());
     $this->assertEquals('other', $this->uri->getExtension());
     $this->uri->setPath('');
     $this->assertEquals('', $this->uri->getDirname());
     $this->assertEquals('', $this->uri->getBasename());
     $this->assertEquals('', $this->uri->getFilename());
     $this->assertEquals('', $this->uri->getExtension());
 }
Beispiel #4
0
 public function parse($str)
 {
     $uri = new Uri();
     $matched = preg_match('/^(?:([a-z\\.-]+):\\/\\/)?' . '(?:([^:]+)(?::(\\S+))?@)?' . '(' . '(?:[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})' . '|(?:(?:(?:[^\\.:\\/\\s-]+)(?:-[^\\.:\\/\\s-]+)*\\.)+)(?:[^?\\/:\\.]+)' . ')' . '(?::([0-9]+))?' . '(' . '\\/(?:[^#?\\/\\s.]+\\/?)*' . '(?:[^\\.\\s]*\\.[^#?\\s]+)?' . ')?' . '(\\?(?:[a-z0-9%-]+(?:=[a-z0-9%-]+)?)(?:&(?:[a-z0-9%-]+(?:=[a-z0-9%-]+)?))*)?' . '(?:\\#([a-z0-9&=-]+))?' . '$/ixSs', $str, $data);
     if (!$matched) {
         return null;
     }
     $protocol = isset($data[1]) && !empty($data[1]) ? $data[1] : null;
     $username = isset($data[2]) && !empty($data[2]) ? $data[2] : null;
     $password = isset($data[3]) && !empty($data[3]) ? $data[3] : null;
     $domain = trim($data[4], '.');
     //domain always exists
     $port = isset($data[6]) && !empty($data[6]) ? $data[6] : null;
     $path = isset($data[7]) && !empty($data[7]) ? $data[7] : null;
     $query = isset($data[8]) && !empty($data[8]) ? ltrim($data[8], '?') : null;
     $anchor = isset($data[9]) && !empty($data[9]) ? $data[9] : null;
     //the entire ip/domain is caught as one piece.. was easier than regexing it
     //so we tld is null for ip
     //and we separate tld/domain for the domain version
     if (is_numeric(str_replace('.', '', $domain))) {
         //ip is not the right length
         if (count(explode('.', $domain)) != 4) {
             return null;
         }
         $tld = null;
     } else {
         $tld = end(explode('.', $domain));
         $domain = implode('.', explode('.', $domain, -1));
     }
     $uri->setProtocol($protocol);
     $uri->setUsername($username);
     $uri->setPassword($password);
     $uri->setDomain($domain);
     $uri->setTld($tld);
     $uri->setPort($port);
     $uri->setPath($path);
     $uri->setQuery($query);
     $uri->setAnchor($anchor);
     return $uri;
 }
Beispiel #5
0
 public function rewrite($link)
 {
     $url = '';
     $is_home = false;
     $uri = new Uri($link);
     if ($uri->getVar('route')) {
         $seo = new Seo($this->registry);
         switch ($uri->getVar('route')) {
             case 'common/home':
                 $is_home = true;
                 break;
             case 'product/product':
                 if ($this->config->get('config_seo_category')) {
                     if ($uri->getVar('path') and $this->config->get('config_seo_category') == 'last') {
                         $categories = explode('_', $uri->getVar('path'));
                         $categories = array(end($categories));
                     } else {
                         $categories = array();
                         $category_id = $seo->getCategoryIdBySortOrder($uri->getVar('product_id'));
                         if (!is_null($category_id)) {
                             $categories = $seo->getParentCategoriesIds($category_id);
                             $categories[] = $category_id;
                             if ($this->config->get('config_seo_category') == 'last') {
                                 $categories = array(end($categories));
                             }
                         }
                     }
                     foreach ($categories as $category) {
                         $alias = $seo->getAlias($category, 'category');
                         if ($alias) {
                             $url .= '/' . $alias;
                         }
                     }
                     $uri->delVar('path');
                 }
                 if ($uri->getVar('product_id')) {
                     $alias = $seo->getAlias($uri->getVar('product_id'), 'product');
                     if ($alias) {
                         $url .= '/' . $alias;
                     }
                     $uri->delVar('product_id');
                     $uri->delVar('manufacturer_id');
                     $uri->delVar('path');
                     $uri->delVar('search');
                 }
                 break;
             case 'product/category':
                 if ($uri->getVar('path')) {
                     $categories = explode('_', $uri->getVar('path'));
                     foreach ($categories as $category) {
                         $alias = $seo->getAlias($category, 'category');
                         if ($alias) {
                             $url .= '/' . $alias;
                         }
                     }
                     $uri->delVar('path');
                 }
                 break;
             case 'information/information':
                 if ($uri->getVar('information_id')) {
                     $alias = $seo->getAlias($uri->getVar('information_id'), 'information');
                     if ($alias) {
                         $url .= '/' . $alias;
                     }
                     $uri->delVar('information_id');
                 }
                 break;
             case 'product/manufacturer/info':
                 if ($uri->getVar('manufacturer_id')) {
                     $alias = $seo->getAlias($uri->getVar('manufacturer_id'), 'manufacturer');
                     if ($alias) {
                         $url .= '/' . $alias;
                     }
                     $uri->delVar('manufacturer_id');
                 }
                 break;
             default:
                 if (!$this->seoDisabled($uri->getVar('route'))) {
                     $url = '/' . $uri->getVar('route');
                 }
                 break;
         }
         $uri->delVar('route');
     }
     if ($url or $is_home) {
         // Add language code to URL
         if ($this->config->get('config_seo_lang_code')) {
             $url = '/' . $this->session->data['language'] . $url;
         }
         $uri->delVar('lang');
         // Append the suffix if enabled
         if ($this->config->get('config_seo_suffix') && !$is_home) {
             $url .= '.html';
         }
         $path = $uri->getPath();
         if ($is_home or $this->config->get('config_seo_rewrite')) {
             $path = str_replace('index.php/', '', $path);
             $path = str_replace('index.php', '', $path);
         }
         $path .= $url;
         $uri->setPath($path);
         return $uri->toString();
     } else {
         return $link;
     }
 }