]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/groupsnav.php
add a 'more' button for groups menu
[quix0rs-gnu-social.git] / lib / groupsnav.php
index 26058c2b7ef8ae5656dba4f246d79a6549481394..c023481a491ef6f14c021d86660693292142bc36 100644 (file)
@@ -46,6 +46,8 @@ if (!defined('STATUSNET')) {
  */
 class GroupsNav extends Menu
 {
+       const TOP_GROUPS = 5;
+       
     protected $user;
     protected $groups;
 
@@ -53,7 +55,7 @@ class GroupsNav extends Menu
     {
         parent::__construct($action);
         $this->user = $user;
-        $this->groups = $user->getGroups();
+        $this->groups = $this->getTopGroups($user);
     }
 
     function haveGroups()
@@ -61,6 +63,21 @@ class GroupsNav extends Menu
         return (!empty($this->groups) && ($this->groups->N > 0));
     }
 
+       function getTopGroups($user)
+       {
+        $memberships = Group_member::byMember($user->id,
+                                              0,
+                                              self::TOP_GROUPS + 1);
+
+        $g = array();
+
+        while ($memberships->fetch()) {
+            $g[] = User_group::staticGet('id', $memberships->group_id);
+        }
+        
+        return new ArrayWrapper($g);
+       }
+
     /**
      * Show the menu
      *
@@ -70,11 +87,21 @@ class GroupsNav extends Menu
     {
         $action = $this->actionName;
 
-        $this->out->elementStart('ul', array('class' => 'nav'));
+        $this->out->elementStart('ul', array('class' => 'nav',
+                                             'id' => 'nav_group'));
 
         if (Event::handle('StartGroupsNav', array($this))) {
 
+                       $cnt = 0;
+                       
             while ($this->groups->fetch()) {
+               
+               $cnt++;
+               
+               if ($cnt > self::TOP_GROUPS) {
+                       break;
+               }
+               
                 $this->out->menuItem(($this->groups->mainpage) ?
                                      $this->groups->mainpage :
                                      common_local_url('showgroup',
@@ -85,6 +112,16 @@ class GroupsNav extends Menu
                                      $this->action->arg('nickname') == $this->groups->nickname,
                                      'nav_timeline_group_'.$this->groups->nickname);
             }
+            
+            if ($cnt > self::TOP_GROUPS) {
+               $this->out->menuItem(sprintf('javascript:SN.U.showMoreGroupMenuItems("%s")', 
+                                             common_local_url('AtomPubMembershipFeed', array('profile' => $this->user->id))),
+                                     _('More ▼'),
+                                     _('More groups'),
+                                     false,
+                                     'nav_timeline_more_group_menu_items');
+            }
+            
             Event::handle('EndGroupsNav', array($this));
         }