aboutsummaryrefslogtreecommitdiff
path: root/engine/classes/ElggMenuItem.php
diff options
context:
space:
mode:
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-12-17 11:33:17 +0000
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-12-17 11:33:17 +0000
commit7420e77cdd5018235423bb065c41c5d8b0de7875 (patch)
treed22f7a66c82f8afb543bd8eea1b0427154caaf4c /engine/classes/ElggMenuItem.php
parent30738f48bf92bd7b30a724232277b9c867174ae1 (diff)
downloadelgg-7420e77cdd5018235423bb065c41c5d8b0de7875.tar.gz
elgg-7420e77cdd5018235423bb065c41c5d8b0de7875.tar.bz2
Refs #2320 added new menu functions and classes
git-svn-id: http://code.elgg.org/elgg/trunk@7655 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'engine/classes/ElggMenuItem.php')
-rw-r--r--engine/classes/ElggMenuItem.php329
1 files changed, 329 insertions, 0 deletions
diff --git a/engine/classes/ElggMenuItem.php b/engine/classes/ElggMenuItem.php
new file mode 100644
index 000000000..97dabe62a
--- /dev/null
+++ b/engine/classes/ElggMenuItem.php
@@ -0,0 +1,329 @@
+<?php
+/**
+ * Elgg Menu Item
+ *
+ * @package Elgg.Core
+ * @subpackage Navigation
+ *
+ * @since 1.8.0
+ */
+class ElggMenuItem {
+ /**
+ * @var string Identifier of the menu
+ */
+ protected $name;
+
+ /**
+ * @var string The menu display string
+ */
+ protected $title;
+
+ /**
+ * @var string The menu url
+ */
+ protected $url;
+
+ /**
+ * @var array Page context array
+ */
+ protected $contexts = array('all');
+
+ /**
+ * @var string Menu section identifier
+ */
+ protected $section = 'default';
+
+ /**
+ * @var string Tooltip
+ */
+ protected $tooltip = '';
+
+ /**
+ * @var bool Is this the currently selected menu item
+ */
+ protected $selected = false;
+
+ /**
+ * @var string Identifier of this item's parent
+ */
+ protected $parent_name = '';
+
+ /**
+ * @var ElggMenuItem The parent object or null
+ */
+ protected $parent = null;
+
+ /**
+ * @var array Array of children objects or empty array
+ */
+ protected $children = array();
+
+ /**
+ * ElggMenuItem constructor
+ *
+ * @param string $name Identifier of the menu item
+ * @param string $title Title of the menu item
+ * @param string $url URL of the menu item
+ */
+ public function __construct($name, $title, $url) {
+ $this->name = $name;
+ $this->title = $title;
+ $this->url = $url;
+ }
+
+ /**
+ * ElggMenuItem factory method
+ *
+ * This static method creates an ElggMenuItem from an associative array.
+ * Required keys are name, title, and url.
+ *
+ * @param array $options Option array of key value pairs
+ *
+ * @return ElggMenuItem or NULL on error
+ */
+ public static function factory($options) {
+ if (!isset($options['name']) || !isset($options['title']) || !isset($options['url'])) {
+ return NULL;
+ }
+
+ $item = new ElggMenuItem($options['name'], $options['title'], $options['url']);
+
+ // special catch in case someone uses context rather than contexts
+ if (isset($options['context'])) {
+ $options['contexts'] = $options['context'];
+ unset($options['context']);
+ }
+
+ foreach ($options as $key => $value) {
+ $item->$key = $value;
+ }
+
+ // make sure contexts is set correctly
+ if (isset($options['contexts'])) {
+ $item->setContext($options['contexts']);
+ }
+
+ return $item;
+ }
+
+ /**
+ * Get the identifier of the menu item
+ *
+ * @return string
+ */
+ public function getName() {
+ return $this->name;
+ }
+
+ /**
+ * Get the display title of the menu
+ *
+ * @return string
+ */
+ public function getTitle() {
+ return $this->title;
+ }
+
+ /**
+ * Get the URL of the menu item
+ *
+ * @return string
+ */
+ public function getURL() {
+ return $this->url;
+ }
+
+ /**
+ * Set the contexts that this menu item is available for
+ *
+ * @param array $contexts An array of context strings
+ *
+ * @return void
+ */
+ public function setContext($contexts) {
+ if (is_string($contexts)) {
+ $contexts = array($contexts);
+ }
+ $this->contexts = $contexts;
+ }
+
+ /**
+ * Get an array of context strings
+ *
+ * @return array
+ */
+ public function getContext() {
+ return $this->contexts;
+ }
+
+ /**
+ * Should this menu item be used given the current context
+ *
+ * @param string $context A context string (default is empty string for
+ * current context stack.
+ *
+ * @return bool
+ */
+ public function inContext($context = '') {
+ if ($context) {
+ return in_array($context, $this->contexts);
+ }
+
+ if (in_array('all', $this->contexts)) {
+ return true;
+ }
+
+ foreach ($this->contexts as $context) {
+ if (elgg_in_context($context)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Set the selected flag
+ *
+ * @param bool $state Selected state (default is true)
+ *
+ * @return void
+ */
+ public function setSelected($state = true) {
+ $this->selected = $state;
+ }
+
+ /**
+ * Get selected state
+ *
+ * @return bool
+ */
+ public function getSelected() {
+ return $this->selected;
+ }
+
+ /**
+ * Set the tool tip text
+ *
+ * @param string $text The text of the tool tip
+ *
+ * @return void
+ */
+ public function setTooltip($text) {
+ $this->tooltip = $text;
+ }
+
+ /**
+ * Get the tool tip text
+ *
+ * @return string
+ */
+ public function getTooltip() {
+ return $this->tooltip;
+ }
+
+ /**
+ * Set the section identifier
+ *
+ * @param string $section The identifier of the section
+ *
+ * @return void
+ */
+ public function setSection($section) {
+ $this->section = $section;
+ }
+
+ /**
+ * Get the section identifier
+ *
+ * @return string
+ */
+ public function getSection() {
+ return $this->section;
+ }
+
+ /**
+ * Set the parent identifier
+ *
+ * @param string $parent_name The identifier of the parent ElggMenuItem
+ *
+ * @return void
+ */
+ public function setParentName($parent_name) {
+ $this->parent_name = $parent_name;
+ }
+
+ /**
+ * Get the parent identifier
+ *
+ * @return string
+ */
+ public function getParentName() {
+ return $this->parent_name;
+ }
+
+ /**
+ * Set the parent menu item
+ *
+ * @param ElggMenuItem $parent
+ *
+ * @return void
+ */
+ public function setParent($parent) {
+ $this->parent = $parent;
+ }
+
+ /**
+ * Get the parent menu item
+ *
+ * @return ElggMenuItem or null
+ */
+ public function getParent() {
+ return $this->parent;
+ }
+
+ /**
+ * Add a child menu item
+ *
+ * @param ElggMenuItem $item
+ *
+ * @return void
+ */
+ public function addChild($item) {
+ $this->children[] = $item;
+ }
+
+ /**
+ * Get the children menu items
+ *
+ * @return array
+ */
+ public function getChildren() {
+ return $this->children;
+ }
+
+ /**
+ * Sort the children
+ *
+ * @param string $sort_function
+ *
+ * @return void
+ */
+ public function sortChildren($sort_function) {
+ usort($this->children, $sort_function);
+ }
+
+ /**
+ * Get the menu link
+ *
+ * @todo add styling
+ *
+ * @return string
+ */
+ public function getLink() {
+ $vars = array(
+ 'href' => $this->url,
+ 'text' => $this->title
+ );
+ return elgg_view('output/url', $vars);
+ }
+}