mirror of
https://github.com/Pathduck/gallery3.git
synced 2026-07-28 02:34:10 -04:00
Restructure Menu processing to respect the differnent types of menu items (Menu's, Menu_Link, Menu_Dialog)
This commit is contained in:
@@ -20,27 +20,28 @@
|
||||
|
||||
class core_menu_Core {
|
||||
public static function items($menus, $theme) {
|
||||
$menus->append(new Menu(_("HOME"), url::base()));
|
||||
$menus->append(new Menu(_("BROWSE"), url::site("albums/1")));
|
||||
$menus->append(new Menu_Link(_("HOME"), url::base()));
|
||||
$menus->append(new Menu_Link(_("BROWSE"), url::site("albums/1")));
|
||||
|
||||
$user = Session::instance()->get('user', null);
|
||||
if ($user) {
|
||||
$upload_menu = new Menu(_("UPLOAD"));
|
||||
$upload_menu->append(
|
||||
new Menu(_("Add Item"), "#form/add/photos/" . $theme->item()->id));
|
||||
new Menu_Dialog(_("Add Item"), url::site("form/add/photos/{$theme->item()->id}")));
|
||||
$upload_menu->append(
|
||||
new Menu(_("Local Upload"), "#photo/form/local_upload/" . $theme->item()->id));
|
||||
new Menu_Dialog(_("Local Upload"),
|
||||
url::site("photo/form/local_upload/{$theme->item()->id}")));
|
||||
$menus->append($upload_menu);
|
||||
|
||||
$admin_menu = new Menu(_("ADMIN"));
|
||||
|
||||
// @todo need to do a permission check here
|
||||
$admin_menu->append(
|
||||
new Menu(_("Edit Item"), "#photo/form/local_upload/" . $theme->item()->id));
|
||||
new Menu_Dialog(_("Edit Item"), url::site("photo/form/local_upload/{$theme->item()->id}")));
|
||||
|
||||
if ($user->admin) {
|
||||
$admin_menu->append(
|
||||
new Menu(_("Site Admin"), url::site("admin")));
|
||||
new Menu_Link(_("Site Admin"), url::site("admin")));
|
||||
}
|
||||
|
||||
$menus->append($admin_menu);
|
||||
|
||||
@@ -15,9 +15,6 @@ $("document").ready(function() {
|
||||
var href = $(this).attr("href");
|
||||
if (href == "#") {
|
||||
return false;
|
||||
// } else if (href.match("^#") == "#") {
|
||||
// alert("Display href: " + href.substring(1) + "in a popup");
|
||||
// return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
+75
-33
@@ -17,24 +17,66 @@
|
||||
* 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 Menu_Item {
|
||||
protected $_data = array();
|
||||
|
||||
class Menu_Core {
|
||||
protected $_text;
|
||||
protected $_url;
|
||||
protected $_items = array();
|
||||
protected function __construct($type, $text, $url) {
|
||||
$this->_data["text"] = $text;
|
||||
$this->_data["type"] = $type;
|
||||
$this->_data["url"] = $url;
|
||||
}
|
||||
|
||||
public function __get($key) {
|
||||
if (array_key_exists($key, $this->_data)) {
|
||||
return $this->_data[$key];
|
||||
}
|
||||
throw new Exception("@todo UNDEFINED PROPERTY");
|
||||
}
|
||||
|
||||
public function __set($key, $value) {
|
||||
$this->_data[$key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
class Menu_Link extends Menu_Item {
|
||||
public function __construct($text="", $url="#") {
|
||||
$this->_text = $text;
|
||||
$this->_url = $url;
|
||||
parent::__construct("link", $text, $url);
|
||||
}
|
||||
|
||||
public function __toString() {
|
||||
return "<li><a href=\"$this->url\">$this->text</a><li>";
|
||||
}
|
||||
}
|
||||
|
||||
class Menu_Dialog extends Menu_Item {
|
||||
public function __construct($text="", $url="#", $class="gDialogLink") {
|
||||
parent::__construct("dialog", $text, $url);
|
||||
$this->dialog_class = $class;
|
||||
$this->title = $text;
|
||||
}
|
||||
|
||||
|
||||
public function __toString() {
|
||||
return "<li><a class=\"$this->dialog_class\" href=\"$this->url\" " .
|
||||
"title=\"$this->title\">$this->text</a></li>";
|
||||
}
|
||||
}
|
||||
|
||||
class Menu_Core extends Menu_Item {
|
||||
public function __construct($text="", $url="#") {
|
||||
parent::__construct("menu", $text, $url);
|
||||
$this->_data['items'] = array();
|
||||
}
|
||||
|
||||
public function append($menu_item) {
|
||||
$this->_items[] = $menu_item;
|
||||
$items = $this->items;
|
||||
$items[] = $menu_item;
|
||||
$this->items = $items;
|
||||
}
|
||||
|
||||
public function get($text) {
|
||||
foreach ($this->_items as $item) {
|
||||
if ($item->_text == $text) {
|
||||
foreach ($this->items as $item) {
|
||||
if ($item->text == $text) {
|
||||
return $item;
|
||||
}
|
||||
}
|
||||
@@ -42,8 +84,8 @@ class Menu_Core {
|
||||
}
|
||||
|
||||
private function _get_index($text) {
|
||||
foreach ($this->_items as $idx => $item) {
|
||||
if ($item->_text == $text) {
|
||||
foreach ($this->items as $idx => $item) {
|
||||
if ($item->text == $text) {
|
||||
return (int)$idx;
|
||||
}
|
||||
}
|
||||
@@ -52,52 +94,52 @@ class Menu_Core {
|
||||
|
||||
public function insert_before($text, $menu_item) {
|
||||
$offset = $this->_get_index($text);
|
||||
Kohana::log("debug", "$offset: $offset");
|
||||
|
||||
$front_part = ($offset == 0) ? array() : array_splice($this->_items, 0, $offset);
|
||||
$back_part = ($offset == 0) ? $this->_items : array_splice($this->_items, $offset - 1);
|
||||
$this->_items = array_merge($front_part, array($menu_item), $back_part);
|
||||
$items = $this->items;
|
||||
|
||||
$front_part = ($offset == 0) ? array() : array_splice($items, 0, $offset);
|
||||
$back_part = ($offset == 0) ? $this->items : array_splice($items, $offset - 1);
|
||||
Kohana::log("debug", print_r($front_part, 1));
|
||||
Kohana::log("debug", print_r($front_part, 1));
|
||||
$this->items = array_merge($front_part, array($menu_item), $back_part);
|
||||
}
|
||||
|
||||
public function insert_after($text, $menu_item) {
|
||||
$offset = $this->_get_index($text);
|
||||
$last_offset = count($this->_items) - 1;
|
||||
$last_offset = count($this->items) - 1;
|
||||
// If not found, then append to the end
|
||||
if ($offset == false) {
|
||||
$offset = $last_offset;
|
||||
}
|
||||
|
||||
$front_part = ($offset == $last_offset) ? $this->_items : array_splice($this->_items, 0, $offset + 1);
|
||||
Kohana::log("debug", print_r($front_part, 1));
|
||||
$back_part = ($offset == $last_offset) ? array() : array_splice($this->_items, $offset - 1);
|
||||
Kohana::log("debug", print_r($back_part, 1));
|
||||
$this->_items = array_merge($front_part, array($menu_item), $back_part);
|
||||
$items = $this->items;
|
||||
|
||||
$front_part = ($offset == $last_offset) ? $this->items : array_splice($items, 0, $offset + 1);
|
||||
$back_part = ($offset == $last_offset) ? array() : array_splice($items, $offset - 1);
|
||||
$this->items = array_merge($front_part, array($menu_item), $back_part);
|
||||
}
|
||||
|
||||
public function __toString() {
|
||||
Kohana::log("debug", print_r($this, 1));
|
||||
$items_html = array();
|
||||
if (!empty($this->_text)) {
|
||||
if ($this->_url != "#" && $this->_url[0] == "#") {
|
||||
$class = "class=\"gDialogLink\"";
|
||||
$url = substr($this->_url, 1);
|
||||
} else {
|
||||
$class = "";
|
||||
$url = $this->_url;
|
||||
}
|
||||
|
||||
$items_html[] = "<li><a $class href=\"$url\">$this->_text</a>";
|
||||
$item_text = $this->text;
|
||||
if (!empty($item_text)) {
|
||||
$items_html[] = "<li><a href=\"#\">$item_text</a>";
|
||||
}
|
||||
|
||||
if (!empty($this->_items)) {
|
||||
$items = $this->items;
|
||||
if (!empty($items)) {
|
||||
$items_html[] = "<ul>";
|
||||
|
||||
foreach ($this->_items as $item) {
|
||||
foreach ($items as $item) {
|
||||
$items_html[] = $item->__toString();
|
||||
}
|
||||
|
||||
$items_html[] = "</ul>";
|
||||
}
|
||||
|
||||
if (!empty($this->_text)) {
|
||||
if (!empty($item_text)) {
|
||||
$items_html[] = "</li>";
|
||||
}
|
||||
return implode("\n", $items_html);
|
||||
|
||||
+28
-29
@@ -20,11 +20,11 @@
|
||||
class Menu_Test extends Unit_Test_Case {
|
||||
public function find_menu_item_test() {
|
||||
$test_menu = new Menu();
|
||||
$test_menu->append(new Menu("test1"));
|
||||
$test_menu->append(new Menu("test2"));
|
||||
$expected = new Menu("test3");
|
||||
$test_menu->append(new Menu_Link("test1"));
|
||||
$test_menu->append(new Menu_Link("test2"));
|
||||
$expected = new Menu_Link("test3");
|
||||
$test_menu->append($expected);
|
||||
$test_menu->append(new Menu("test4"));
|
||||
$test_menu->append(new Menu_Link("test4"));
|
||||
|
||||
$menu_item = $test_menu->get("test3");
|
||||
$this->assert_equal($expected, $menu_item);
|
||||
@@ -32,42 +32,41 @@ class Menu_Test extends Unit_Test_Case {
|
||||
|
||||
public function insert_before_test() {
|
||||
$expected = new Menu();
|
||||
$expected->append(new Menu("test-2"));
|
||||
$expected->append(new Menu("test0"));
|
||||
$expected->append(new Menu("test1"));
|
||||
$expected->append(new Menu("test1b"));
|
||||
$expected->append(new Menu("test2"));
|
||||
$expected->append(new Menu("test4"));
|
||||
$expected->append(new Menu_Link("test-2"));
|
||||
$expected->append(new Menu_Link("test0"));
|
||||
$expected->append(new Menu_Link("test1"));
|
||||
$expected->append(new Menu_Link("test1b"));
|
||||
$expected->append(new Menu_Link("test2"));
|
||||
$expected->append(new Menu_Link("test4"));
|
||||
|
||||
$test_menu = new Menu();
|
||||
$test_menu->append(new Menu("test1"));
|
||||
$test_menu->append(new Menu("test2"));
|
||||
$test_menu->append(new Menu("test4"));
|
||||
$test_menu->insert_before("test2", new Menu("test1b"));
|
||||
$test_menu->insert_before("test1", new Menu("test0"));
|
||||
$test_menu->insert_before("test-1", new Menu("test-2"));
|
||||
$test_menu->append(new Menu_Link("test1"));
|
||||
$test_menu->append(new Menu_Link("test2"));
|
||||
$test_menu->append(new Menu_Link("test4"));
|
||||
$test_menu->insert_before("test2", new Menu_Link("test1b"));
|
||||
$test_menu->insert_before("test1", new Menu_Link("test0"));
|
||||
$test_menu->insert_before("test-1", new Menu_Link("test-2"));
|
||||
|
||||
$this->assert_equal($expected, $test_menu);
|
||||
}
|
||||
|
||||
public function insert_after_test() {
|
||||
$expected = new Menu();
|
||||
$expected->append(new Menu("test1"));
|
||||
$expected->append(new Menu("test2"));
|
||||
$expected->append(new Menu("test3"));
|
||||
$expected->append(new Menu("test4"));
|
||||
$expected->append(new Menu("test5"));
|
||||
$expected->append(new Menu("test7"));
|
||||
$expected->append(new Menu_Link("test1"));
|
||||
$expected->append(new Menu_Link("test2"));
|
||||
$expected->append(new Menu_Link("test3"));
|
||||
$expected->append(new Menu_Link("test4"));
|
||||
$expected->append(new Menu_Link("test5"));
|
||||
$expected->append(new Menu_Link("test7"));
|
||||
|
||||
$test_menu = new Menu();
|
||||
$test_menu->append(new Menu("test1"));
|
||||
$test_menu->append(new Menu("test2"));
|
||||
$test_menu->append(new Menu("test4"));
|
||||
$test_menu->insert_after("test2", new Menu("test3"));
|
||||
$test_menu->insert_after("test4", new Menu("test5"));
|
||||
$test_menu->insert_after("test6", new Menu("test7"));
|
||||
$test_menu->append(new Menu_Link("test1"));
|
||||
$test_menu->append(new Menu_Link("test2"));
|
||||
$test_menu->append(new Menu_Link("test4"));
|
||||
$test_menu->insert_after("test2", new Menu_Link("test3"));
|
||||
$test_menu->insert_after("test4", new Menu_Link("test5"));
|
||||
$test_menu->insert_after("test6", new Menu_Link("test7"));
|
||||
|
||||
$this->assert_equal($expected, $test_menu);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -23,7 +23,7 @@ class user_menu_Core {
|
||||
$user = Session::instance()->get('user', null);
|
||||
if ($user) {
|
||||
$admin_menu = $menus->get(_("ADMIN"));
|
||||
$admin_menu->append( new Menu(_("Edit Profile"), "#users/form/edit/" . $user->id));
|
||||
$admin_menu->append( new Menu_Dialog(_("Edit Profile"), "users/form/edit/{$user->id}"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user