From dd5da6c9e871037be342b9bb5f49bb8f1d5da099 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 27 Aug 2011 11:28:32 -0400 Subject: [PATCH] Move common nav stuff to GroupAction --- actions/groupmembers.php | 43 +------ actions/showgroup.php | 231 +------------------------------------ lib/groupaction.php | 243 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 244 insertions(+), 273 deletions(-) diff --git a/actions/groupmembers.php b/actions/groupmembers.php index df949206e7..088b171956 100644 --- a/actions/groupmembers.php +++ b/actions/groupmembers.php @@ -55,43 +55,8 @@ class GroupmembersAction extends GroupAction function prepare($args) { parent::prepare($args); - $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; - - $nickname_arg = $this->arg('nickname'); - $nickname = common_canonical_nickname($nickname_arg); - - // Permanent redirect on non-canonical nickname - - if ($nickname_arg != $nickname) { - $args = array('nickname' => $nickname); - if ($this->page != 1) { - $args['page'] = $this->page; - } - common_redirect(common_local_url('groupmembers', $args), 301); - return false; - } - - if (!$nickname) { - // TRANS: Client error displayed when trying to view group members without providing a group nickname. - $this->clientError(_('No nickname.'), 404); - return false; - } - - $local = Local_group::staticGet('nickname', $nickname); - if (!$local) { - // TRANS: Client error displayed when trying to view group members for a non-existing group. - $this->clientError(_('No such group.'), 404); - return false; - } - - $this->group = User_group::staticGet('id', $local->group_id); - - if (!$this->group) { - // TRANS: Client error displayed when trying to view group members for an object that is not a group. - $this->clientError(_('No such group.'), 404); - return false; - } + $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; return true; } @@ -125,12 +90,6 @@ class GroupmembersAction extends GroupAction _('A list of the users in this group.')); } - function showObjectNav() - { - $nav = new GroupNav($this, $this->group); - $nav->show(); - } - function showContent() { $offset = ($this->page-1) * PROFILES_PER_PAGE; diff --git a/actions/showgroup.php b/actions/showgroup.php index d4f65a8059..9d4051bd89 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -35,8 +35,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { require_once INSTALLDIR.'/lib/noticelist.php'; require_once INSTALLDIR.'/lib/feedlist.php'; -define('MEMBERS_PER_SECTION', 27); - /** * Group main page * @@ -46,7 +44,7 @@ define('MEMBERS_PER_SECTION', 27); * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ -class ShowgroupAction extends Action +class ShowgroupAction extends GroupAction { /** page we're viewing. */ var $page = null; @@ -99,52 +97,6 @@ class ShowgroupAction extends Action $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; - $nickname_arg = $this->arg('nickname'); - $nickname = common_canonical_nickname($nickname_arg); - - // Permanent redirect on non-canonical nickname - - if ($nickname_arg != $nickname) { - $args = array('nickname' => $nickname); - if ($this->page != 1) { - $args['page'] = $this->page; - } - common_redirect(common_local_url('showgroup', $args), 301); - return false; - } - - if (!$nickname) { - // TRANS: Client error displayed if no nickname argument was given requesting a group page. - $this->clientError(_('No nickname.'), 404); - return false; - } - - $local = Local_group::staticGet('nickname', $nickname); - - if (!$local) { - $alias = Group_alias::staticGet('alias', $nickname); - if ($alias) { - $args = array('id' => $alias->group_id); - if ($this->page != 1) { - $args['page'] = $this->page; - } - common_redirect(common_local_url('groupbyid', $args), 301); - return false; - } else { - common_log(LOG_NOTICE, "Couldn't find local group for nickname '$nickname'"); - // TRANS: Client error displayed if no remote group with a given name was found requesting group page. - $this->clientError(_('No such group.'), 404); - return false; - } - } - - $this->group = User_group::staticGet('id', $local->group_id); - - if (!$this->group) { - // TRANS: Client error displayed if no local group with a given name was found requesting group page. - $this->clientError(_('No such group.'), 404); - return false; - } $this->userProfile = Profile::current(); @@ -171,17 +123,6 @@ class ShowgroupAction extends Action $this->showPage(); } - /** - * Local menu - * - * @return void - */ - function showObjectNav() - { - $nav = new GroupNav($this, $this->group); - $nav->show(); - } - /** * Show the page content * @@ -255,102 +196,6 @@ class ShowgroupAction extends Action $this->group->nickname))); } - /** - * Fill in the sidebar. - * - * @return void - */ - function showSections() - { - $this->showMembers(); - $this->showStatistics(); - $this->showAdmins(); - $cloud = new GroupTagCloudSection($this, $this->group); - $cloud->show(); - } - - /** - * Show mini-list of members - * - * @return void - */ - function showMembers() - { - $member = $this->group->getMembers(0, MEMBERS_PER_SECTION); - - if (!$member) { - return; - } - - $this->elementStart('div', array('id' => 'entity_members', - 'class' => 'section')); - - if (Event::handle('StartShowGroupMembersMiniList', array($this))) { - - // TRANS: Header for mini list of group members on a group page (h2). - $this->element('h2', null, _('Members')); - - $gmml = new GroupMembersMiniList($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('groupmembers', - 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('EndShowGroupMembersMiniList', array($this)); - } - - $this->elementEnd('div'); - } - - /** - * Show list of admins - * - * @return void - */ - function showAdmins() - { - $adminSection = new GroupAdminSection($this, $this->group); - $adminSection->show(); - } - - /** - * Show some statistics - * - * @return void - */ - function showStatistics() - { - $this->elementStart('div', array('id' => 'entity_statistics', - 'class' => 'section')); - - // TRANS: Header for group statistics on a group page (h2). - $this->element('h2', null, _('Statistics')); - - $this->elementStart('dl'); - - // TRANS: Label for group creation date. - $this->element('dt', null, _m('LABEL','Created')); - $this->element('dd', 'entity_created', date('j M Y', - strtotime($this->group->created))); - // @todo FIXME: i18n issue. This label gets a colon added from somewhere. Should be part of the message. - // TRANS: Label for member count in statistics on group page. - $this->element('dt', null, _m('LABEL','Members')); - $this->element('dd', null, $this->group->getMemberCount()); - $this->elementEnd('dl'); - - $this->elementEnd('div'); - } - function showAnonymousMessage() { if (!(common_config('site','closed') || common_config('site','inviteonly'))) { @@ -378,78 +223,4 @@ class ShowgroupAction extends Action $this->raw(common_markup_to_html($m)); $this->elementEnd('div'); } - - function noticeFormOptions() - { - $options = parent::noticeFormOptions(); - $cur = common_current_user(); - - if (!empty($cur) && $cur->isMember($this->group)) { - $options['to_group'] = $this->group; - } - - return $options; - } -} - -class GroupAdminSection extends ProfileSection -{ - var $group; - - function __construct($out, $group) - { - parent::__construct($out); - $this->group = $group; - } - - function getProfiles() - { - return $this->group->getAdmins(); - } - - function title() - { - // TRANS: Title for list of group administrators on a group page. - return _m('TITLE','Admins'); - } - - function divId() - { - return 'group_admins'; - } - - function moreUrl() - { - return null; - } -} - -class GroupMembersMiniList extends ProfileMiniList -{ - function newListItem($profile) - { - return new GroupMembersMiniListItem($profile, $this->action); - } } - -class GroupMembersMiniListItem 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) - { - parent::__construct(new GroupNoticeStream($group, $profile)); - } -} \ No newline at end of file diff --git a/lib/groupaction.php b/lib/groupaction.php index d9eea4414c..96d38ebab5 100644 --- a/lib/groupaction.php +++ b/lib/groupaction.php @@ -31,6 +31,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } +define('MEMBERS_PER_SECTION', 27); + /** * Base class for group actions, similar to ProfileAction * @@ -41,11 +43,250 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { * @link http://status.net/ * */ -class GroupAction extends Action { +class GroupAction extends Action +{ + protected $group; + + function prepare($args) + { + parent::prepare($args); + + $nickname_arg = $this->arg('nickname'); + $nickname = common_canonical_nickname($nickname_arg); + + // Permanent redirect on non-canonical nickname + + if ($nickname_arg != $nickname) { + $args = array('nickname' => $nickname); + if ($this->page != 1) { + $args['page'] = $this->page; + } + common_redirect(common_local_url('showgroup', $args), 301); + return false; + } + + if (!$nickname) { + // TRANS: Client error displayed if no nickname argument was given requesting a group page. + $this->clientError(_('No nickname.'), 404); + return false; + } + + $local = Local_group::staticGet('nickname', $nickname); + + if (!$local) { + $alias = Group_alias::staticGet('alias', $nickname); + if ($alias) { + $args = array('id' => $alias->group_id); + if ($this->page != 1) { + $args['page'] = $this->page; + } + common_redirect(common_local_url('groupbyid', $args), 301); + return false; + } else { + common_log(LOG_NOTICE, "Couldn't find local group for nickname '$nickname'"); + // TRANS: Client error displayed if no remote group with a given name was found requesting group page. + $this->clientError(_('No such group.'), 404); + return false; + } + } + + $this->group = User_group::staticGet('id', $local->group_id); + + if (!$this->group) { + // TRANS: Client error displayed if no local group with a given name was found requesting group page. + $this->clientError(_('No such group.'), 404); + return false; + } + } function showProfileBlock() { $block = new GroupProfileBlock($this, $this->group); $block->show(); } + + /** + * Local menu + * + * @return void + */ + + function showObjectNav() + { + $nav = new GroupNav($this, $this->group); + $nav->show(); + } + + + /** + * Fill in the sidebar. + * + * @return void + */ + function showSections() + { + $this->showMembers(); + $this->showStatistics(); + $this->showAdmins(); + $cloud = new GroupTagCloudSection($this, $this->group); + $cloud->show(); + } + + /** + * Show mini-list of members + * + * @return void + */ + function showMembers() + { + $member = $this->group->getMembers(0, MEMBERS_PER_SECTION); + + if (!$member) { + return; + } + + $this->elementStart('div', array('id' => 'entity_members', + 'class' => 'section')); + + if (Event::handle('StartShowGroupMembersMiniList', array($this))) { + + // TRANS: Header for mini list of group members on a group page (h2). + $this->element('h2', null, _('Members')); + + $gmml = new GroupMembersMiniList($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('groupmembers', + 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('EndShowGroupMembersMiniList', array($this)); + } + + $this->elementEnd('div'); + } + + /** + * Show list of admins + * + * @return void + */ + function showAdmins() + { + $adminSection = new GroupAdminSection($this, $this->group); + $adminSection->show(); + } + + /** + * Show some statistics + * + * @return void + */ + function showStatistics() + { + $this->elementStart('div', array('id' => 'entity_statistics', + 'class' => 'section')); + + // TRANS: Header for group statistics on a group page (h2). + $this->element('h2', null, _('Statistics')); + + $this->elementStart('dl'); + + // TRANS: Label for group creation date. + $this->element('dt', null, _m('LABEL','Created')); + $this->element('dd', 'entity_created', date('j M Y', + strtotime($this->group->created))); + // @todo FIXME: i18n issue. This label gets a colon added from somewhere. Should be part of the message. + // TRANS: Label for member count in statistics on group page. + $this->element('dt', null, _m('LABEL','Members')); + $this->element('dd', null, $this->group->getMemberCount()); + $this->elementEnd('dl'); + + $this->elementEnd('div'); + } + + + function noticeFormOptions() + { + $options = parent::noticeFormOptions(); + $cur = common_current_user(); + + if (!empty($cur) && $cur->isMember($this->group)) { + $options['to_group'] = $this->group; + } + + return $options; + } } + +class GroupAdminSection extends ProfileSection +{ + var $group; + + function __construct($out, $group) + { + parent::__construct($out); + $this->group = $group; + } + + function getProfiles() + { + return $this->group->getAdmins(); + } + + function title() + { + // TRANS: Title for list of group administrators on a group page. + return _m('TITLE','Admins'); + } + + function divId() + { + return 'group_admins'; + } + + function moreUrl() + { + return null; + } +} + +class GroupMembersMiniList extends ProfileMiniList +{ + function newListItem($profile) + { + return new GroupMembersMiniListItem($profile, $this->action); + } +} + +class GroupMembersMiniListItem 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) + { + parent::__construct(new GroupNoticeStream($group, $profile)); + } +} + -- 2.39.5