diff options
Diffstat (limited to 'modules/gallery')
-rw-r--r-- | modules/gallery/controllers/albums.php | 24 | ||||
-rw-r--r-- | modules/gallery/controllers/movies.php | 10 | ||||
-rw-r--r-- | modules/gallery/controllers/photos.php | 10 | ||||
-rw-r--r-- | modules/gallery/helpers/item.php | 17 | ||||
-rw-r--r-- | modules/gallery/libraries/Display_Context.php | 71 | ||||
-rw-r--r-- | modules/gallery/libraries/Item_Display_Context.php | 44 |
6 files changed, 45 insertions, 131 deletions
diff --git a/modules/gallery/controllers/albums.php b/modules/gallery/controllers/albums.php index 9bf7b9bf..8aa3bb35 100644 --- a/modules/gallery/controllers/albums.php +++ b/modules/gallery/controllers/albums.php @@ -60,9 +60,6 @@ class Albums_Controller extends Items_Controller { url::redirect($album->abs_url("page=$max_pages")); } - Display_Context::factory("item") - ->save(); - $template = new Theme_View("page.html", "collection", "album"); $template->set_global( array("page" => $page, @@ -75,10 +72,29 @@ class Albums_Controller extends Items_Controller { "breadcrumbs" => Breadcrumb::array_from_item_parents($album), "children_count" => $children_count)); $template->content = new View("album.html"); - $album->increment_view_count(); print $template; + item::set_display_context_callback("Albums_Controller::get_display_context"); + } + + static function get_display_context($item) { + $where = array(array("type", "!=", "album")); + $position = item::get_position($item, $where); + if ($position > 1) { + list ($previous_item, $ignore, $next_item) = + $item->parent()->viewable()->children(3, $position - 2, $where); + } else { + $previous_item = null; + list ($next_item) = $item->parent()->viewable()->children(1, $position, $where); + } + + return array("position" => $position, + "previous_item" => $previous_item, + "next_item" => $next_item, + "sibling_count" => $item->parent()->viewable()->children_count($where), + "parents" => $item->parents()->as_array(), + "breadcrumbs" => Breadcrumb::array_from_item_parents($item)); } public function create($parent_id) { diff --git a/modules/gallery/controllers/movies.php b/modules/gallery/controllers/movies.php index bbf89f17..76263dc0 100644 --- a/modules/gallery/controllers/movies.php +++ b/modules/gallery/controllers/movies.php @@ -28,12 +28,10 @@ class Movies_Controller extends Items_Controller { access::required("view", $movie); $template = new Theme_View("page.html", "item", "movie"); - $template->set_global( - array_merge(array("item" => $movie, - "children" => array(), - "children_count" => 0), - Display_Context::factory()->display_context($movie))); - + $template->set_global(array("item" => $movie, + "children" => array(), + "children_count" => 0)); + $template->set_global(item::get_display_context($movie)); $template->content = new View("movie.html"); $movie->increment_view_count(); diff --git a/modules/gallery/controllers/photos.php b/modules/gallery/controllers/photos.php index 49bb5a25..7e78b205 100644 --- a/modules/gallery/controllers/photos.php +++ b/modules/gallery/controllers/photos.php @@ -28,12 +28,10 @@ class Photos_Controller extends Items_Controller { access::required("view", $photo); $template = new Theme_View("page.html", "item", "photo"); - $template->set_global( - array_merge(array("item" => $photo, - "children" => array(), - "children_count" => 0), - Display_Context::factory()->display_context($photo))); - + $template->set_global(array("item" => $photo, + "children" => array(), + "children_count" => 0)); + $template->set_global(item::get_display_context($photo)); $template->content = new View("photo.html"); $photo->increment_view_count(); diff --git a/modules/gallery/helpers/item.php b/modules/gallery/helpers/item.php index 7e779544..494c6db4 100644 --- a/modules/gallery/helpers/item.php +++ b/modules/gallery/helpers/item.php @@ -402,4 +402,21 @@ class item_Core { return $position; } + + /** + * Set the display context callback for any future item renders. + */ + static function set_display_context_callback() { + Cache::instance()->set("display_context_" . $sid = Session::instance()->id(), func_get_args()); + } + + /** + * Call the display context callback for the given item + */ + static function get_display_context($item) { + $args = Cache::instance()->get("display_context_" . $sid = Session::instance()->id()); + $callback = $args[0]; + $args[0] = $item; + return call_user_func_array($callback, $args); + } }
\ No newline at end of file diff --git a/modules/gallery/libraries/Display_Context.php b/modules/gallery/libraries/Display_Context.php deleted file mode 100644 index 5054cffb..00000000 --- a/modules/gallery/libraries/Display_Context.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php defined("SYSPATH") or die("No direct script access."); -/** - * Gallery - a web based photo album viewer and editor - * Copyright (C) 2000-2011 Bharat Mediratta - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ - -abstract class Display_Context_Core { - private $_display_context_name; - private $_data; - - static function factory($display_context_name=null) { - if (empty($display_context_name)) { - $display_context_id = Session::instance()->get("display_context_id", ""); - $context = Cache::instance()->get($display_context_id, null); - $context = empty($context) ? new Item_Display_Context() : unserialize($context); - } else { - $class_prefix = ucfirst(strtolower($display_context_name)); - $class_name = "{$class_prefix}_Display_Context"; - $context = new $class_name(); - } - - return $context; - } - - protected function __construct($display_context_name) { - // $this->reset($display_context_name); - $this->_data = array(); - $this->_display_context_name = $display_context_name; - } - - final function get($key) { - return empty($this->_data[$key]) ? null : $this->_data[$key]; - } - - final function set($key, $value=null) { - if (is_array($key)) { - if ((array)$key == $key) { - $this->_data = array_merge($this->_data, $key); - } else { - $this->_data = array_merge($this->_data, array_fill_keys($key, $value)); - } - } else { - $this->_data[$key] = $value; - } - return $this; - } - - final function save() { - $context_data = serialize($this); - $display_context_id = "display_context_" . md5($context_data); - Session::instance()->set("display_context_id", $display_context_id); - Cache::instance()->set($display_context_id, $context_data); - return $this; - } - - abstract function display_context($item); -} diff --git a/modules/gallery/libraries/Item_Display_Context.php b/modules/gallery/libraries/Item_Display_Context.php deleted file mode 100644 index d0562790..00000000 --- a/modules/gallery/libraries/Item_Display_Context.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php defined("SYSPATH") or die("No direct script access."); -/** - * Gallery - a web based photo album viewer and editor - * Copyright (C) 2000-2011 Bharat Mediratta - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ - -class Item_Display_Context_Core extends Display_Context { - protected function __construct() { - parent::__construct("item"); - } - - function display_context($item) { - $where = array(array("type", "!=", "album")); - $position = item::get_position($item, $where); - if ($position > 1) { - list ($previous_item, $ignore, $next_item) = - $item->parent()->viewable()->children(3, $position - 2, $where); - } else { - $previous_item = null; - list ($next_item) = $item->parent()->viewable()->children(1, $position, $where); - } - - return array("position" =>$position, - "previous_item" => $previous_item, - "next_item" =>$next_item, - "sibling_count" => $item->parent()->viewable()->children_count($where), - "parents" => $item->parents()->as_array(), - "breadcrumbs" => Breadcrumb::array_from_item_parents($item)); - } -} |