summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-01-03 20:14:06 +0000
committerBharat Mediratta <bharat@menalto.com>2009-01-03 20:14:06 +0000
commit3d9e5e439e63404159c1ef763c8b07dd15a367ec (patch)
treefe7483df1a468f1443f60bc154edeb3fecd29a1f /core
parent8ed5200101ac6feb48795b2fd8b2fb4a3462d45e (diff)
Stay on the right page when we navigate up in the breadcrumb.
Introduce a "show" parameter which contains the id of the item that we want to show when we go to the parent's page.
Diffstat (limited to 'core')
-rw-r--r--core/controllers/albums.php12
-rw-r--r--core/models/item.php13
2 files changed, 25 insertions, 0 deletions
diff --git a/core/controllers/albums.php b/core/controllers/albums.php
index 668e868a..7f78303e 100644
--- a/core/controllers/albums.php
+++ b/core/controllers/albums.php
@@ -26,6 +26,18 @@ class Albums_Controller extends Items_Controller {
access::required("view", $album);
$page_size = module::get_var("core", "page_size", 9);
+ $show = $this->input->get("show");
+
+ if ($show) {
+ $index = $album->get_position($show);
+ $page = ceil($index / $page_size);
+ if ($page == 1) {
+ url::redirect("albums/$album->id");
+ } else {
+ url::redirect("albums/$album->id?page=$page");
+ }
+ }
+
$page = $this->input->get("page", "1");
$children_count = $album->viewable()->children_count();
$offset = ($page-1) * $page_size;
diff --git a/core/models/item.php b/core/models/item.php
index ffdaa7e9..6f56e726 100644
--- a/core/models/item.php
+++ b/core/models/item.php
@@ -234,4 +234,17 @@ class Item_Model extends ORM_MPTT {
return model_cache::get("item", $this->album_cover_item_id);
}
+
+ /**
+ * Find the position of the given child id in this album. The resulting value is 1-indexed, so
+ * the first child in the album is at position 1.
+ */
+ public function get_position($child_id) {
+ // Right now we only sort by id ascending, so bake that assumption in here.
+ // @todo fix this when we introduce sort orders.
+ return ORM::factory("item")
+ ->where("parent_id", $this->id)
+ ->where("id <=", $child_id)
+ ->count_all();
+ }
}