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 = item::find_by_relative_url(html_entity_decode(Router::$current_uri, ENT_QUOTES)); if ($item && $item->loaded()) { Router::$controller = "{$item->type}s"; Router::$controller_path = MODPATH . "gallery/controllers/{$item->type}s.php"; Router::$method = "show"; Router::$arguments = array($item); } }
public function find_by_relative_url_test() { $level1 = test::random_album(); $level2 = test::random_album($level1); $level3 = test::random_photo_unsaved($level2); $level3->slug = "same"; $level3->save()->reload(); $level2b = test::random_album($level1); $level3b = test::random_photo_unsaved($level2b); $level3b->slug = "same"; $level3b->save()->reload(); // Item in album $this->assert_same($level3->id, item::find_by_relative_url("{$level1->slug}/{$level2->slug}/{$level3->slug}")->id); // Album, ends without a slash $this->assert_same($level2->id, item::find_by_relative_url("{$level1->slug}/{$level2->slug}")->id); // Return root if "" is passed $this->assert_same(item::root()->id, item::find_by_relative_url("")->id); // Verify that we don't get confused by the part slugs, using the fallback code. db::build()->update("items")->set(array("relative_url_cache" => null))->where("id", "IN", array($level3->id, $level3b->id))->execute(); $this->assert_same($level3->id, item::find_by_relative_url("{$level1->slug}/{$level2->slug}/{$level3->slug}")->id); $this->assert_same($level3b->id, item::find_by_relative_url("{$level1->slug}/{$level2b->slug}/{$level3b->slug}")->id); // Verify that we don't get false positives $this->assert_false(item::find_by_relative_url("foo/bar/baz")->loaded()); // Verify that the fallback code works $this->assert_same($level3b->id, item::find_by_relative_url("{$level1->slug}/{$level2b->slug}/{$level3b->slug}")->id); }