relative_path(); } return parent::site($uri . $query, $protocol); } static function parse_url() { if (Router::$controller) { return; } // Work around problems with the CGI sapi by enforcing our default path if ($_SERVER["SCRIPT_NAME"] && "/" . Router::$current_uri == $_SERVER["SCRIPT_NAME"]) { Router::$controller_path = MODPATH . "gallery/controllers/albums.php"; Router::$controller = "albums"; Router::$method = 1; return; } $item = self::get_item_from_uri(Router::$current_uri); if ($item && $item->loaded) { Router::$controller = "{$item->type}s"; Router::$controller_path = MODPATH . "gallery/controllers/{$item->type}s.php"; Router::$method = $item->id; } } /** * Return the item that the uri is referencing */ static function get_item_from_uri($uri) { $current_uri = html_entity_decode($uri, ENT_QUOTES); $item = ORM::factory("item")->where("relative_path_cache", $current_uri)->find(); if (!$item->loaded) { // It's possible that the relative path cache for the item we're looking for is out of date, // so find it the hard way. $count = count(Router::$segments); foreach (ORM::factory("item") ->where("name", html_entity_decode(Router::$segments[$count - 1], ENT_QUOTES)) ->where("level", $count + 1) ->find_all() as $match) { if ($match->relative_path() == $current_uri) { $item = $match; } } } return $item; } /** * Just like url::file() except that it returns an absolute URI */ static function abs_file($path) { return url::base( false, (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === 'off') ? 'http' : 'https') . $path; } /** * Just like url::site() except that it returns an absolute URI and * doesn't take a protocol parameter. */ static function abs_site($path) { return url::site( $path, (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === 'off') ? 'http' : 'https'); } /** * Just like url::current except that it returns an absolute URI */ static function abs_current($qs=false) { return self::abs_site(url::current($qs)); } }