]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Refs #2895 entity menu uses new menu system
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Mon, 7 Mar 2011 12:15:38 +0000 (12:15 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Mon, 7 Mar 2011 12:15:38 +0000 (12:15 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@8622 36083f99-b078-4883-b0ff-0f9b5a30f544

12 files changed:
engine/lib/navigation.php
engine/lib/river.php
mod/blog/start.php
mod/blog/views/default/object/blog.php
mod/bookmarks/views/default/object/bookmarks.php
mod/file/views/default/object/file.php
mod/groups/start.php
mod/groups/views/default/group/default.php
mod/groups/views/default/object/groupforumtopic.php
mod/pages/start.php
mod/pages/views/default/object/page_top.php
views/default/css/elements/navigation.php

index 4affc9c308e271a1a14c3d24aff6772565ab6d08..b79156986aabc408e914640e5bffcde03b0e9798 100644 (file)
@@ -206,11 +206,122 @@ function elgg_site_menu_setup($hook, $type, $return, $params) {
        return $return;
 }
 
+/**
+ * Add the comment and like links to river actions menu
+ */
+function elgg_river_menu_setup($hook, $type, $return, $params) {
+       if (elgg_is_logged_in()) {
+               $item = $params['item'];
+               $object = $item->getObjectEntity();
+               // comments and non-objects cannot be commented on or liked
+               if (!elgg_in_context('widgets') && $item->annotation_id == 0) {
+                       // comments
+                       if ($object->canComment()) {
+                               $options = array(
+                                       'name' => 'comment',
+                                       'href' => "#comments-add-$object->guid",
+                                       'text' => elgg_echo('generic_comments:text'),
+                                       'class' => "elgg-toggler",
+                                       'priority' => 50,
+                               );
+                               $return[] = ElggMenuItem::factory($options);
+                       }
+
+                       // like this
+                       if ($object->canAnnotate(0, 'likes')) {
+                               if (!elgg_annotation_exists($object->getGUID(), 'likes')) {
+                                       $url = "action/likes/add?guid={$object->getGUID()}";
+                                       $options = array(
+                                               'name' => 'like',
+                                               'href' => $url,
+                                               'text' => elgg_echo('likes:likethis'),
+                                               'is_action' => true,
+                                               'priority' => 100,
+                                       );
+                               } else {
+                                       $likes = elgg_get_annotations(array(
+                                               'guid' => $guid,
+                                               'annotation_name' => 'likes',
+                                               'owner_guid' => elgg_get_logged_in_user_guid()
+                                       ));
+                                       $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}";
+                                       $options = array(
+                                               'name' => 'like',
+                                               'href' => $url,
+                                               'text' => elgg_echo('likes:remove'),
+                                               'is_action' => true,
+                                               'priority' => 100,
+                                       );
+                               }
+                               $return[] = ElggMenuItem::factory($options);
+                       }
+               }
+       }
+
+       return $return;
+}
+
+/**
+ * Entity menu is list of links and info on any entity
+ */
+function elgg_entity_menu_setup($hook, $type, $return, $params) {
+       if (elgg_in_context('widgets')) {
+               return $return;
+       }
+       
+       $entity = $params['entity'];
+       $handler = elgg_extract('handler', $params, false);
+
+       // access
+       $access = elgg_view('output/access', array('entity' => $entity));
+       $options = array(
+               'name' => 'access',
+               'text' => $access,
+               'href' => false,
+               'priority' => 100,
+       );
+       $return[] = ElggMenuItem::factory($options);
+
+       if ($entity->canEdit() && $handler) {
+               // edit link
+               $options = array(
+                       'name' => 'edit',
+                       'text' => elgg_echo('edit'),
+                       'href' => "pg/$handler/edit/{$entity->getGUID()}",
+                       'priority' => 200,
+               );
+               $return[] = ElggMenuItem::factory($options);
+
+               // delete link
+               $options = array(
+                       'name' => 'delete',
+                       'text' => elgg_view_icon('delete'),
+                       'href' => "action/$handler/delete?guid={$entity->getGUID()}",
+                       'confirm' => elgg_echo('deleteconfirm'),
+                       'priority' => 300,
+               );
+               $return[] = ElggMenuItem::factory($options);
+       }
+
+       // likes
+       $options = array(
+               'name' => 'likes',
+               'text' => elgg_view_likes($entity),
+               'href' => false,
+               'priority' => 1000,
+       );
+       $return[] = ElggMenuItem::factory($options);
+
+       return $return;
+}
+
 /**
  * Navigation initialization
  */
 function elgg_nav_init() {
        elgg_register_plugin_hook_handler('prepare', 'menu:site', 'elgg_site_menu_setup');
+       elgg_register_plugin_hook_handler('register', 'menu:river', 'elgg_river_menu_setup');
+       elgg_register_plugin_hook_handler('register', 'menu:entity', 'elgg_entity_menu_setup');
 }
 
 elgg_register_event_handler('init', 'system', 'elgg_nav_init');
index 6bc0645a9fad1928e6efd526490892332ae6b1eb..3a351805e25b73779b02a370273ede5bad615eaf 100644 (file)
@@ -505,61 +505,6 @@ function update_river_access_by_object($object_guid, $access_id) {
        return update_data($query);
 }
 
-/**
- * Add the comment and like links to river actions menu
- */
-function elgg_river_add_menu_items($hook, $type, $return, $params) {
-       if (elgg_is_logged_in()) {
-               $item = $params['item'];
-               $object = $item->getObjectEntity();
-               // comments and non-objects cannot be commented on or liked
-               if (!elgg_in_context('widgets') && $item->annotation_id == 0) {
-                       // comments
-                       if ($object->canComment()) {
-                               $options = array(
-                                       'name' => 'comment',
-                                       'href' => "#comments-add-$object->guid",
-                                       'text' => elgg_echo('generic_comments:text'),
-                                       'class' => "elgg-toggler",
-                                       'priority' => 50,
-                               );
-                               $return[] = ElggMenuItem::factory($options);
-                       }
-
-                       // like this
-                       if ($object->canAnnotate(0, 'likes')) {
-                               if (!elgg_annotation_exists($object->getGUID(), 'likes')) {
-                                       $url = "action/likes/add?guid={$object->getGUID()}";
-                                       $options = array(
-                                               'name' => 'like',
-                                               'href' => $url,
-                                               'text' => elgg_echo('likes:likethis'),
-                                               'is_action' => true,
-                                               'priority' => 100,
-                                       );
-                               } else {
-                                       $likes = elgg_get_annotations(array(
-                                               'guid' => $guid,
-                                               'annotation_name' => 'likes',
-                                               'owner_guid' => elgg_get_logged_in_user_guid()
-                                       ));
-                                       $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}";
-                                       $options = array(
-                                               'name' => 'like',
-                                               'href' => $url,
-                                               'text' => elgg_echo('likes:remove'),
-                                               'is_action' => true,
-                                               'priority' => 100,
-                                       );
-                               }
-                               $return[] = ElggMenuItem::factory($options);
-                       }
-               }
-       }
-       
-       return $return;
-}
-
 /**
  * Page handler for activiy
  *
@@ -589,8 +534,6 @@ function elgg_river_init() {
        elgg_register_page_handler('activity', 'elgg_river_page_handler');
        $item = new ElggMenuItem('activity', elgg_echo('activity'), 'pg/activity');
        elgg_register_menu_item('site', $item);
-
-       elgg_register_plugin_hook_handler('register', 'menu:river', 'elgg_river_add_menu_items');
 }
 
 elgg_register_event_handler('init', 'system', 'elgg_river_init');
index 437970de420ffb051129c1fa452c9a18cec910d2..344da21d4181934c264e2a012ef43451d6bdc23d 100644 (file)
@@ -63,6 +63,9 @@ function blog_init() {
        elgg_register_action('blog/auto_save_revision', "$action_path/auto_save_revision.php");
        elgg_register_action('blog/delete', "$action_path/delete.php");
 
+       // entity menu
+       elgg_register_plugin_hook_handler('register', 'menu:entity', 'blog_entity_menu_setup');
+
        // ecml
        elgg_register_plugin_hook_handler('get_views', 'ecml', 'blog_ecml_views_hook');
 }
@@ -180,6 +183,34 @@ function blog_owner_block_menu($hook, $type, $return, $params) {
        return $return;
 }
 
+/**
+ * Add particular blog links/info to entity menu
+ */
+function blog_entity_menu_setup($hook, $type, $return, $params) {
+       if (elgg_in_context('widgets')) {
+               return $return;
+       }
+
+       $entity = $params['entity'];
+       $handler = elgg_extract('handler', $params, false);
+       if ($handler != 'blog') {
+               return $return;
+       }
+
+       if ($entity->canEdit() && $entity->status != 'published') {
+               $status_text = elgg_echo("blog:status:{$entity->status}");
+               $options = array(
+                       'name' => 'published_status',
+                       'text' => $status_text,
+                       'href' => false,
+                       'priority' => 150,
+               );
+               $return[] = ElggMenuItem::factory($options);
+       }
+
+       return $return;
+}
+
 /**
  * Register blogs with ECML.
  */
index a24d8758e23450432d6e13e673f187da4add6615..8c339236cc50fd3d7c11b1f0aeaa8fc3ba78e9c3 100644 (file)
@@ -43,16 +43,11 @@ if ($blog->comments_on != 'Off') {
        $comments_link = '';
 }
 
-$extra_links = false;
-if ($blog->canEdit() && $blog->status != 'published') {
-       $status_text = elgg_echo("blog:status:{$blog->status}");
-       $extra_links = array($status_text);
-}
-
-$metadata = elgg_view('navigation/menu/metadata', array(
-       'entity' => $blog,
+$metadata = elgg_view_menu('entity', array(
+       'entity' => $vars['entity'],
        'handler' => 'blog',
-       'links' => $extra_links,
+       'sort_by' => 'priority',
+       'class' => 'elgg-menu-hz',
 ));
 
 $subtitle = "<p>$author_text $date $comments_link</p>";
index 71a75731f5c9ce540ebcc1d70879ef023530ae29..8a4b982e1e5c6d422d33cc50553fe13a53feb5bf 100644 (file)
@@ -41,9 +41,11 @@ if ($comments_count != 0) {
        $comments_link = '';
 }
 
-$metadata = elgg_view('navigation/menu/metadata', array(
-       'entity' => $bookmark,
+$metadata = elgg_view_menu('entity', array(
+       'entity' => $vars['entity'],
        'handler' => 'bookmarks',
+       'sort_by' => 'priority',
+       'class' => 'elgg-menu-hz',
 ));
 
 $subtitle = "$author_text $date $categories $comments_link";
index c5773600b3e566299d84a5d4d25796c73eaee4a5..75c72e2b51763949d9cb1f2ba336f03bed78a431 100644 (file)
@@ -44,9 +44,11 @@ if ($comments_count != 0) {
        $comments_link = '';
 }
 
-$metadata = elgg_view('navigation/menu/metadata', array(
-       'entity' => $file,
+$metadata = elgg_view_menu('entity', array(
+       'entity' => $vars['entity'],
        'handler' => 'file',
+       'sort_by' => 'priority',
+       'class' => 'elgg-menu-hz',
 ));
 
 $subtitle = "$author_text $date $categories $comments_link";
index 08c0d1966cb89a212b910a57c1516b1ca116f1c9..9a80fd3660accc649afb4e99e297476504e83f98 100644 (file)
@@ -58,6 +58,8 @@ function groups_init() {
        // add link to owner block
        elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'groups_activity_owner_block_menu');
 
+       // group entity menu
+       elgg_register_plugin_hook_handler('register', 'menu:entity', 'groups_entity_menu_setup');
 
        //extend some views
        elgg_extend_view('css/elgg', 'groups/css');
@@ -277,6 +279,73 @@ function groups_activity_owner_block_menu($hook, $type, $return, $params) {
        return $return;
 }
 
+/**
+ * Add links/info to entity menu particular to group entities
+ */
+function groups_entity_menu_setup($hook, $type, $return, $params) {
+       if (elgg_in_context('widgets')) {
+               return $return;
+       }
+
+       $entity = $params['entity'];
+       $handler = elgg_extract('handler', $params, false);
+       if ($handler != 'groups') {
+               return $return;
+       }
+
+       foreach ($return as $index => $item) {
+               if (in_array($item->getName(), array('access', 'likes', 'edit', 'delete'))) {
+                       unset($return[$index]);
+               }
+       }
+
+       // membership type
+       $membership = $entity->membership;
+       if ($membership == ACCESS_PUBLIC) {
+               $mem = elgg_echo("groups:open");
+       } else {
+               $mem = elgg_echo("groups:closed");
+       }
+       $options = array(
+               'name' => 'membership',
+               'text' => $mem,
+               'href' => false,
+               'priority' => 100,
+       );
+       $return[] = ElggMenuItem::factory($options);
+
+       // number of members
+       $num_members = get_group_members($entity->guid, 10, 0, 0, true);
+       $members_string = elgg_echo('groups:member');
+       $options = array(
+               'name' => 'members',
+               'text' => $num_members . ' ' . $members_string,
+               'href' => false,
+               'priority' => 200,
+       );
+       $return[] = ElggMenuItem::factory($options);
+
+       // feature link
+       if (elgg_is_admin_logged_in()) {
+               if ($group->featured_group == "yes") {
+                       $url = "action/groups/featured?group_guid={$group->guid}&action_type=unfeature";
+                       $wording = elgg_echo("groups:makeunfeatured");
+               } else {
+                       $url = "action/groups/featured?group_guid={$group->guid}&action_type=feature";
+                       $wording = elgg_echo("groups:makefeatured");
+               }
+               $options = array(
+                       'name' => 'feature',
+                       'text' => $wording,
+                       'href' => $url,
+                       'priority' => 300,
+               );
+               $return[] = ElggMenuItem::factory($options);
+       }
+
+       return $return;
+}
+
 /**
  * Groups created so create an access list for it
  */
index 77b17402b93274a4df6690359f1fc8eb894d63f7..14bdc7aa392addfe9835b0f79f752a950b48cd01 100644 (file)
@@ -9,41 +9,12 @@ $group = $vars['entity'];
 
 $icon = elgg_view_entity_icon($group, 'tiny');
 
-//get the membership type
-$membership = $group->membership;
-if ($membership == ACCESS_PUBLIC) {
-       $mem = elgg_echo("groups:open");
-} else {
-       $mem = elgg_echo("groups:closed");
-}
-
-// number of members
-$num_members = get_group_members($group->guid, 10, 0, 0, true);
-$members_string = elgg_echo('groups:member');
-
-$metadata = "<ul class=\"elgg-menu elgg-menu-metadata\"><li>$mem</li>";
-$metadata .= "<li>$num_members $members_string</li>";
-
-// feature link
-if (elgg_is_admin_logged_in()) {
-       if ($group->featured_group == "yes") {
-               $url = "action/groups/featured?group_guid={$group->guid}&action_type=unfeature";
-               $wording = elgg_echo("groups:makeunfeatured");
-       } else {
-               $url = "action/groups/featured?group_guid={$group->guid}&action_type=feature";
-               $wording = elgg_echo("groups:makefeatured");
-       }
-       $feature_link = elgg_view('output/url', array(
-               'href' => $url,
-               'text' => $wording,
-               'is_action' => true,
-       ));
-       $metadata .= "<li>$feature_link</li>";
-}
-
-$metadata .= elgg_view("entity/metadata", array('entity' => $group));
-
-$metadata .= "</ul>";
+$metadata = elgg_view_menu('entity', array(
+       'entity' => $group,
+       'handler' => 'groups',
+       'sort_by' => 'priority',
+       'class' => 'elgg-menu-hz',
+));
 
 if (elgg_in_context('owner_block') || elgg_in_context('widgets')) {
        $metadata = '';
index b5efa0e6cffef7aa25eeb2377740390b7cba5303..1b972c77fe7d815b02d4b3096d703006454f95ab 100644 (file)
@@ -45,9 +45,11 @@ if ($num_replies != 0) {
        ));
 }
 
-$metadata = elgg_view('navigation/menu/metadata', array(
-       'entity' => $topic,
+$metadata = elgg_view_menu('entity', array(
+       'entity' => $vars['entity'],
        'handler' => 'discussion',
+       'sort_by' => 'priority',
+       'class' => 'elgg-menu-hz',
 ));
 
 // do not show the metadata and controls in widget view
index 82f3a2ba9634ffcf299242ee6356cd2e23e327a3..8c2645f050f8af4ee144f56dcda3acf51ef61a12 100644 (file)
@@ -71,6 +71,9 @@ function pages_init() {
        // icon url override
        elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'pages_icon_url_override');
 
+       // entity menu
+       elgg_register_plugin_hook_handler('register', 'menu:entity', 'pages_entity_menu_setup');
+
        // register ecml views to parse
        elgg_register_plugin_hook_handler('get_views', 'ecml', 'pages_ecml_views_hook');
 }
@@ -210,6 +213,31 @@ function pages_owner_block_menu($hook, $type, $return, $params) {
        return $return;
 }
 
+/**
+ * Add links/info to entity menu particular to pages plugin
+ */
+function pages_entity_menu_setup($hook, $type, $return, $params) {
+       if (elgg_in_context('widgets')) {
+               return $return;
+       }
+
+       $entity = $params['entity'];
+       $handler = elgg_extract('handler', $params, false);
+       if ($handler != 'pages') {
+               return $return;
+       }
+
+       $options = array(
+               'name' => 'history',
+               'text' => elgg_echo('pages:history'),
+               'href' => "pg/pages/history/$entity->guid",
+               'priority' => 150,
+       );
+       $return[] = ElggMenuItem::factory($options);
+
+       return $return;
+}
+
 /**
 * Returns a more meaningful message
 *
index aca75b6250ea39f8ff037abd452b37e8c3d390f4..72d9720ef1003f49d51336033d38b3c57a1737f5 100644 (file)
@@ -51,15 +51,11 @@ if ($comments_count != 0 && !$revision) {
        $comments_link = '';
 }
 
-$history_link = elgg_view('output/url', array(
-       'href' => "pg/pages/history/$page->guid",
-       'text' => elgg_echo('pages:history'),
-));
-
-$metadata = elgg_view('navigation/menu/metadata', array(
-       'entity' => $page,
+$metadata = elgg_view_menu('entity', array(
+       'entity' => $vars['entity'],
        'handler' => 'pages',
-       'links' => array($history_link),
+       'sort_by' => 'priority',
+       'class' => 'elgg-menu-hz',
 ));
 
 $subtitle = "$editor_text $categories $comments_link";
index de63a5ce6bb32905bc3eccc6244912ece81bde18..1f3be3539a113d4ef85c2e21fb62d4f83a03bafc 100644 (file)
@@ -422,19 +422,19 @@ li:hover > .elgg-menu-site-more {
 }
 
 /* ***************************************
-       ENTITY METADATA
+       ENTITY
 *************************************** */
-.elgg-menu-metadata {
+.elgg-menu-entity {
        float: right;
        margin-left: 15px;
        font-size: 90%;
        color: #aaa;
 }
-.elgg-menu-metadata > li {
+.elgg-menu-entity > li {
        display: inline-block;
        margin-left: 15px;
 }
-.elgg-menu-metadata > li > a {
+.elgg-menu-entity > li > a {
        color: #aaa;
 }