diff options
-rw-r--r-- | core/helpers/core_menu.php | 13 | ||||
-rw-r--r-- | core/js/menu.js | 3 | ||||
-rw-r--r-- | core/libraries/Menu.php | 108 | ||||
-rw-r--r-- | core/tests/Menu_Test.php | 57 | ||||
-rw-r--r-- | modules/user/helpers/user_menu.php | 2 |
5 files changed, 111 insertions, 72 deletions
diff --git a/core/helpers/core_menu.php b/core/helpers/core_menu.php index dc807a36..af309eb4 100644 --- a/core/helpers/core_menu.php +++ b/core/helpers/core_menu.php @@ -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); diff --git a/core/js/menu.js b/core/js/menu.js index 57484f3f..7ca166e7 100644 --- a/core/js/menu.js +++ b/core/js/menu.js @@ -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; }); diff --git a/core/libraries/Menu.php b/core/libraries/Menu.php index feac95e2..2ec85963 100644 --- a/core/libraries/Menu.php +++ b/core/libraries/Menu.php @@ -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="#") { + 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="#") { - $this->_text = $text; - $this->_url = $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); diff --git a/core/tests/Menu_Test.php b/core/tests/Menu_Test.php index 978e5555..c2d68c03 100644 --- a/core/tests/Menu_Test.php +++ b/core/tests/Menu_Test.php @@ -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); } - }
\ No newline at end of file diff --git a/modules/user/helpers/user_menu.php b/modules/user/helpers/user_menu.php index 381e5eb2..d6769513 100644 --- a/modules/user/helpers/user_menu.php +++ b/modules/user/helpers/user_menu.php @@ -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}")); } } |