]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Show blocked users from group in section
authorEvan Prodromou <evan@status.net>
Sat, 27 Aug 2011 19:46:05 +0000 (15:46 -0400)
committerEvan Prodromou <evan@status.net>
Sat, 27 Aug 2011 19:46:05 +0000 (15:46 -0400)
classes/User_group.php
lib/groupaction.php
lib/groupnav.php

index 4870e39a15a768399d201c22fb188ee4e818411f..80a0d209b4791533c5f70990421fbb5bfa89d776 100644 (file)
@@ -209,6 +209,16 @@ class User_group extends Managed_DataObject
         return $member_count;
     }
 
+    function getBlockedCount()
+    {
+        // XXX: WORM cache this
+
+        $block = new Group_block();
+        $block->group_id = $this->id;
+
+        return $block->count();
+    }
+
     function getAdmins($offset=0, $limit=null)
     {
         $qry =
index 3b5cd528751d26840dd52b18035642b1ee17e4ca..50ecd107c0bee00c113dab2f38bdbff676e25687 100644 (file)
@@ -126,6 +126,10 @@ class GroupAction extends Action
     function showSections()
     {
         $this->showMembers();
+        $cur = common_current_user();
+        if ($cur && $cur->isAdmin($this->group)) {
+            $this->showBlocked();
+        }
         $this->showAdmins();
         $cloud = new GroupTagCloudSection($this, $this->group);
         $cloud->show();
@@ -184,6 +188,53 @@ class GroupAction extends Action
         $this->elementEnd('div');
     }
 
+    function showBlocked()
+    {
+        $member = $this->group->getBlocked(0, MEMBERS_PER_SECTION);
+
+        if (!$member) {
+            return;
+        }
+
+        $this->elementStart('div', array('id' => 'entity_blocked',
+                                         'class' => 'section'));
+
+        if (Event::handle('StartShowGroupBlockedMiniList', array($this))) {
+             
+            $this->elementStart('h2');
+
+            $this->element('a', array('href' => common_local_url('blockedfromgroup', array('nickname' =>
+                                                                                           $this->group->nickname))),
+                           _('Blocked'));
+
+            $this->text(' ');
+
+            $this->text($this->group->getBlockedCount());
+            
+            $this->elementEnd('h2');
+
+            $gmml = new GroupBlockedMiniList($member, $this);
+            $cnt = $gmml->show();
+            if ($cnt == 0) {
+                // TRANS: Description for mini list of group members on a group page when the group has no members.
+                $this->element('p', null, _('(None)'));
+            }
+
+            // @todo FIXME: Should be shown if a group has more than 27 members, but I do not see it displayed at
+            //              for example http://identi.ca/group/statusnet. Broken?
+            if ($cnt > MEMBERS_PER_SECTION) {
+                $this->element('a', array('href' => common_local_url('blockedfromgroup',
+                                                                     array('nickname' => $this->group->nickname))),
+                               // TRANS: Link to all group members from mini list of group members if group has more than n members.
+                               _('All members'));
+            }
+
+            Event::handle('EndShowGroupBlockedMiniList', array($this));
+        }
+
+        $this->elementEnd('div');
+    }
+
     /**
      * Show list of admins
      *
@@ -263,6 +314,28 @@ class GroupMembersMiniListItem extends ProfileMiniListItem
     }
 }
 
+class GroupBlockedMiniList extends ProfileMiniList
+{
+    function newListItem($profile)
+    {
+        return new GroupBlockedMiniListItem($profile, $this->action);
+    }
+}
+
+class GroupBlockedMiniListItem extends ProfileMiniListItem
+{
+    function linkAttributes()
+    {
+        $aAttrs = parent::linkAttributes();
+
+        if (common_config('nofollow', 'members')) {
+            $aAttrs['rel'] .= ' nofollow';
+        }
+
+        return $aAttrs;
+    }
+}
+
 class ThreadingGroupNoticeStream extends ThreadingNoticeStream
 {
     function __construct($group, $profile)
index 61d3cfbd744ba3ddfc227590bb763dc015afb857..50e29d40b612c26e11dae74013cf6fe0240e172f 100644 (file)
@@ -92,15 +92,6 @@ class GroupNav extends Menu
                                          $action_name == 'groupqueue',
                                          'nav_group_pending');
                 }
-                $this->out->menuItem(common_local_url('blockedfromgroup', array('nickname' =>
-                                                                                $nickname)),
-                                     // TRANS: Menu item in the group navigation page. Only shown for group administrators.
-                                     _m('MENU','Blocked'),
-                                     // TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
-                                     // TRANS: %s is the nickname of the group.
-                                     sprintf(_m('TOOLTIP','%s blocked users'), $nickname),
-                                     $action_name == 'blockedfromgroup',
-                                     'nav_group_blocked');
                 $this->out->menuItem(common_local_url('grouplogo', array('nickname' =>
                                                                          $nickname)),
                                      // TRANS: Menu item in the group navigation page. Only shown for group administrators.