loaded()) { Router::$controller = "{$item->type}s"; Router::$controller_path = MODPATH . "gallery/controllers/{$item->type}s.php"; Router::$method = "show"; Router::$arguments = array($item); } } /** * Locate an item using the URI. We assume that the uri is in the form /a/b/c where each * component matches up with an item slug. * @param string $uri the uri fragment * @return Item_Model */ static function get_item_from_uri($uri) { $current_uri = html_entity_decode($uri, ENT_QUOTES); // In most cases, we'll have an exact match in the relative_url_cache item field. // but failing that, walk down the tree until we find it. The fallback code will fix caches // as it goes, so it'll never be run frequently. $item = ORM::factory("item")->where("relative_url_cache", "=", $current_uri)->find(); if (!$item->loaded()) { $count = count(Router::$segments); foreach (ORM::factory("item") ->where("slug", "=", html_entity_decode(Router::$segments[$count - 1], ENT_QUOTES)) ->where("level", "=", $count + 1) ->find_all() as $match) { if ($match->relative_url() == $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)); } /** * Just like url::merge except that it escapes any XSS in the path. */ static function merge(array $arguments) { return htmlspecialchars(parent::merge($arguments)); } /** * Just like url::current except that it escapes any XSS in the path. */ static function current($qs=false, $suffix=false) { return htmlspecialchars(parent::current($qs, $suffix)); } }