X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Fshowgroup.php;h=512ca6a0ee262d71d89d49c1899164d0ce84bf8a;hb=fec3edee45b67205f7d6cebd33b35594d73525f7;hp=eb12389029a096dd0373ae7ed523ddc517092d62;hpb=122c8677b7004bae4cfe7e2bd49fc1bc3187c72c;p=quix0rs-gnu-social.git diff --git a/actions/showgroup.php b/actions/showgroup.php index eb12389029..512ca6a0ee 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -46,10 +46,8 @@ 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 GroupDesignAction { - /** page we're viewing. */ var $page = null; @@ -58,7 +56,6 @@ class ShowgroupAction extends GroupDesignAction * * @return boolean true */ - function isReadOnly($args) { return true; @@ -69,18 +66,16 @@ class ShowgroupAction extends GroupDesignAction * * @return string page title, with page number */ - function title() { - if (!empty($this->group->fullname)) { - $base = $this->group->fullname . ' (' . $this->group->nickname . ')'; - } else { - $base = $this->group->nickname; - } + $base = $this->group->getFancyName(); if ($this->page == 1) { + // TRANS: Page title for first group page. %s is a group name. return sprintf(_('%s group'), $base); } else { + // TRANS: Page title for any but first group page. + // TRANS: %1$s is a group name, $2$s is a page number. return sprintf(_('%1$s group, page %2$d'), $base, $this->page); @@ -96,7 +91,6 @@ class ShowgroupAction extends GroupDesignAction * * @return boolean success flag */ - function prepare($args) { parent::prepare($args); @@ -118,13 +112,14 @@ class ShowgroupAction extends GroupDesignAction } if (!$nickname) { + // TRANS: Client error displayed if no nickname argument was given requesting a group page. $this->clientError(_('No nickname.'), 404); return false; } - $this->group = User_group::staticGet('nickname', $nickname); + $local = Local_group::staticGet('nickname', $nickname); - if (!$this->group) { + if (!$local) { $alias = Group_alias::staticGet('alias', $nickname); if ($alias) { $args = array('id' => $alias->group_id); @@ -134,11 +129,21 @@ class ShowgroupAction extends GroupDesignAction 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; + } + common_set_returnto($this->selfUrl()); return true; @@ -152,7 +157,6 @@ class ShowgroupAction extends GroupDesignAction * * @return void */ - function handle($args) { $this->showPage(); @@ -163,8 +167,7 @@ class ShowgroupAction extends GroupDesignAction * * @return void */ - - function showLocalNav() + function showObjectNav() { $nav = new GroupNav($this, $this->group); $nav->show(); @@ -175,10 +178,8 @@ class ShowgroupAction extends GroupDesignAction * * Shows a group profile and a list of group notices */ - function showContent() { - $this->showGroupProfile(); $this->showGroupNotices(); } @@ -187,13 +188,12 @@ class ShowgroupAction extends GroupDesignAction * * @return void */ - function showGroupNotices() { $notice = $this->group->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); - $nl = new NoticeList($notice, $this); + $nl = new ThreadedNoticeList($notice, $this); $cnt = $nl->show(); $this->pagination($this->page > 1, @@ -203,119 +203,11 @@ class ShowgroupAction extends GroupDesignAction array('nickname' => $this->group->nickname)); } - /** - * Show the group profile - * - * Information about the group - * - * @return void - */ - - function showGroupProfile() - { - $this->elementStart('div', 'entity_profile vcard author'); - - $this->element('h2', null, _('Group profile')); - - $this->elementStart('dl', 'entity_depiction'); - $this->element('dt', null, _('Avatar')); - $this->elementStart('dd'); - - $logo = ($this->group->homepage_logo) ? - $this->group->homepage_logo : User_group::defaultLogo(AVATAR_PROFILE_SIZE); - - $this->element('img', array('src' => $logo, - 'class' => 'photo avatar', - 'width' => AVATAR_PROFILE_SIZE, - 'height' => AVATAR_PROFILE_SIZE, - 'alt' => $this->group->nickname)); - $this->elementEnd('dd'); - $this->elementEnd('dl'); - - $this->elementStart('dl', 'entity_nickname'); - $this->element('dt', null, _('Nickname')); - $this->elementStart('dd'); - $hasFN = ($this->group->fullname) ? 'nickname url uid' : 'fn org nickname url uid'; - $this->element('a', array('href' => $this->group->homeUrl(), - 'rel' => 'me', 'class' => $hasFN), - $this->group->nickname); - $this->elementEnd('dd'); - $this->elementEnd('dl'); - - if ($this->group->fullname) { - $this->elementStart('dl', 'entity_fn'); - $this->element('dt', null, _('Full name')); - $this->elementStart('dd'); - $this->element('span', 'fn org', $this->group->fullname); - $this->elementEnd('dd'); - $this->elementEnd('dl'); - } - - if ($this->group->location) { - $this->elementStart('dl', 'entity_location'); - $this->element('dt', null, _('Location')); - $this->element('dd', 'label', $this->group->location); - $this->elementEnd('dl'); - } - - if ($this->group->homepage) { - $this->elementStart('dl', 'entity_url'); - $this->element('dt', null, _('URL')); - $this->elementStart('dd'); - $this->element('a', array('href' => $this->group->homepage, - 'rel' => 'me', 'class' => 'url'), - $this->group->homepage); - $this->elementEnd('dd'); - $this->elementEnd('dl'); - } - - if ($this->group->description) { - $this->elementStart('dl', 'entity_note'); - $this->element('dt', null, _('Note')); - $this->element('dd', 'note', $this->group->description); - $this->elementEnd('dl'); - } - - if (common_config('group', 'maxaliases') > 0) { - $aliases = $this->group->getAliases(); - - if (!empty($aliases)) { - $this->elementStart('dl', 'entity_aliases'); - $this->element('dt', null, _('Aliases')); - $this->element('dd', 'aliases', implode(' ', $aliases)); - $this->elementEnd('dl'); - } - } - - $this->elementEnd('div'); - - $this->elementStart('div', 'entity_actions'); - $this->element('h2', null, _('Group actions')); - $this->elementStart('ul'); - $this->elementStart('li', 'entity_subscribe'); - $cur = common_current_user(); - if ($cur) { - if ($cur->isMember($this->group)) { - $lf = new LeaveForm($this, $this->group); - $lf->show(); - } else if (!Group_block::isBlocked($this->group, $cur->getProfile())) { - $jf = new JoinForm($this, $this->group); - $jf->show(); - } - } - - $this->elementEnd('li'); - - $this->elementEnd('ul'); - $this->elementEnd('div'); - } - /** * Get a list of the feeds for this page * * @return void */ - function getFeeds() { $url = @@ -325,23 +217,27 @@ class ShowgroupAction extends GroupDesignAction return array(new Feed(Feed::RSS1, common_local_url('grouprss', array('nickname' => $this->group->nickname)), + // TRANS: Tooltip for feed link. %s is a group nickname. sprintf(_('Notice feed for %s group (RSS 1.0)'), $this->group->nickname)), new Feed(Feed::RSS2, common_local_url('ApiTimelineGroup', array('format' => 'rss', 'id' => $this->group->id)), + // TRANS: Tooltip for feed link. %s is a group nickname. sprintf(_('Notice feed for %s group (RSS 2.0)'), $this->group->nickname)), new Feed(Feed::ATOM, common_local_url('ApiTimelineGroup', array('format' => 'atom', 'id' => $this->group->id)), + // TRANS: Tooltip for feed link. %s is a group nickname. sprintf(_('Notice feed for %s group (Atom)'), $this->group->nickname)), new Feed(Feed::FOAF, common_local_url('foafgroup', array('nickname' => $this->group->nickname)), + // TRANS: Tooltip for feed link. %s is a group nickname. sprintf(_('FOAF for %s group'), $this->group->nickname))); } @@ -351,7 +247,6 @@ class ShowgroupAction extends GroupDesignAction * * @return void */ - function showSections() { $this->showMembers(); @@ -366,7 +261,6 @@ class ShowgroupAction extends GroupDesignAction * * @return void */ - function showMembers() { $member = $this->group->getMembers(0, MEMBERS_PER_SECTION); @@ -378,18 +272,28 @@ class ShowgroupAction extends GroupDesignAction $this->elementStart('div', array('id' => 'entity_members', 'class' => 'section')); - $this->element('h2', null, _('Members')); + if (Event::handle('StartShowGroupMembersMiniList', array($this))) { - $pml = new ProfileMiniList($member, $this); - $cnt = $pml->show(); - if ($cnt == 0) { - $this->element('p', null, _('(None)')); - } + // 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')); + } - if ($cnt > MEMBERS_PER_SECTION) { - $this->element('a', array('href' => common_local_url('groupmembers', - array('nickname' => $this->group->nickname))), - _('All members')); + Event::handle('EndShowGroupMembersMiniList', array($this)); } $this->elementEnd('div'); @@ -400,7 +304,6 @@ class ShowgroupAction extends GroupDesignAction * * @return void */ - function showAdmins() { $adminSection = new GroupAdminSection($this, $this->group); @@ -412,31 +315,24 @@ class ShowgroupAction extends GroupDesignAction * * @return void */ - function showStatistics() { - // XXX: WORM cache this - $members = $this->group->getMembers(); - $members_count = 0; - /** $member->count() doesn't work. */ - while ($members->fetch()) { - $members_count++; - } - $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', 'entity_created'); - $this->element('dt', null, _('Created')); - $this->element('dd', null, date('j M Y', - strtotime($this->group->created))); - $this->elementEnd('dl'); + $this->elementStart('dl'); - $this->elementStart('dl', 'entity_members'); - $this->element('dt', null, _('Members')); - $this->element('dd', null, (is_int($members_count)) ? $members_count : '0'); + // 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'); @@ -445,12 +341,21 @@ class ShowgroupAction extends GroupDesignAction function showAnonymousMessage() { if (!(common_config('site','closed') || common_config('site','inviteonly'))) { + // @todo FIXME: use group full name here if available instead of (uglier) primary alias. + // TRANS: Notice on group pages for anonymous users for StatusNet sites that accept new registrations. + // TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, + // TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. + // TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). $m = sprintf(_('**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . 'based on the Free Software [StatusNet](http://status.net/) tool. Its members share ' . 'short messages about their life and interests. '. '[Join now](%%%%action.register%%%%) to become part of this group and many more! ([Read more](%%%%doc.help%%%%))'), $this->group->nickname); } else { + // @todo FIXME: use group full name here if available instead of (uglier) primary alias. + // TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. + // TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, + // TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). $m = sprintf(_('**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . 'based on the Free Software [StatusNet](http://status.net/) tool. Its members share ' . 'short messages about their life and interests. '), @@ -460,6 +365,18 @@ class ShowgroupAction extends GroupDesignAction $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 @@ -479,7 +396,8 @@ class GroupAdminSection extends ProfileSection function title() { - return _('Admins'); + // TRANS: Title for list of group administrators on a group page. + return _m('TITLE','Admins'); } function divId() @@ -492,3 +410,25 @@ class GroupAdminSection extends ProfileSection 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; + } +}