diff --git a/classes/User_group.php b/classes/User_group.php index 4870e39a15..80a0d209b4 100644 --- a/classes/User_group.php +++ b/classes/User_group.php @@ -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 = diff --git a/lib/groupaction.php b/lib/groupaction.php index 3b5cd52875..50ecd107c0 100644 --- a/lib/groupaction.php +++ b/lib/groupaction.php @@ -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) diff --git a/lib/groupnav.php b/lib/groupnav.php index 61d3cfbd74..50e29d40b6 100644 --- a/lib/groupnav.php +++ b/lib/groupnav.php @@ -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.