* @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;
*
* @return boolean true
*/
-
function isReadOnly($args)
{
return true;
*
* @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);
*
* @return boolean success flag
*/
-
function prepare($args)
{
parent::prepare($args);
}
if (!$nickname) {
+ // TRANS: Client error displayed if no nickname argument was given requesting a group page.
$this->clientError(_('No nickname.'), 404);
return false;
}
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;
}
*
* @return void
*/
-
function handle($args)
{
$this->showPage();
*
* @return void
*/
-
function showLocalNav()
{
$nav = new GroupNav($this, $this->group);
*
* Shows a group profile and a list of group notices
*/
-
function showContent()
{
$this->showGroupProfile();
*
* @return void
*/
-
function showGroupNotices()
{
$notice = $this->group->getNotices(($this->page-1)*NOTICES_PER_PAGE,
*
* @return void
*/
-
function showGroupProfile()
{
$this->elementStart('div', array('id' => 'i',
'class' => 'entity_profile vcard author'));
+ // TRANS: Group profile header (h2). Text hidden by default.
$this->element('h2', null, _('Group profile'));
$this->elementStart('dl', 'entity_depiction');
+ // TRANS: Label for group avatar (dt). Text hidden by default.
$this->element('dt', null, _('Avatar'));
$this->elementStart('dd');
$this->elementEnd('dl');
$this->elementStart('dl', 'entity_nickname');
+ // TRANS: Label for group nickname (dt). Text hidden by default.
$this->element('dt', null, _('Nickname'));
$this->elementStart('dd');
$hasFN = ($this->group->fullname) ? 'nickname url uid' : 'fn org nickname url uid';
if ($this->group->fullname) {
$this->elementStart('dl', 'entity_fn');
+ // TRANS: Label for full group name (dt). Text hidden by default.
$this->element('dt', null, _('Full name'));
$this->elementStart('dd');
$this->element('span', 'fn org', $this->group->fullname);
if ($this->group->location) {
$this->elementStart('dl', 'entity_location');
+ // TRANS: Label for group location (dt). Text hidden by default.
$this->element('dt', null, _('Location'));
$this->element('dd', 'label', $this->group->location);
$this->elementEnd('dl');
if ($this->group->homepage) {
$this->elementStart('dl', 'entity_url');
+ // TRANS: Label for group URL (dt). Text hidden by default.
$this->element('dt', null, _('URL'));
$this->elementStart('dd');
$this->element('a', array('href' => $this->group->homepage,
if ($this->group->description) {
$this->elementStart('dl', 'entity_note');
+ // TRANS: Label for group description or group note (dt). Text hidden by default.
$this->element('dt', null, _('Note'));
$this->element('dd', 'note', $this->group->description);
$this->elementEnd('dl');
if (!empty($aliases)) {
$this->elementStart('dl', 'entity_aliases');
+ // TRANS: Label for group aliases (dt). Text hidden by default.
$this->element('dt', null, _('Aliases'));
$this->element('dd', 'aliases', implode(' ', $aliases));
$this->elementEnd('dl');
$this->elementEnd('div');
+ $cur = common_current_user();
$this->elementStart('div', 'entity_actions');
+ // TRANS: Group actions header (h2). Text hidden by default.
$this->element('h2', null, _('Group actions'));
$this->elementStart('ul');
$this->elementStart('li', 'entity_subscribe');
if (Event::handle('StartGroupSubscribe', array($this, $this->group))) {
- $cur = common_current_user();
if ($cur) {
if ($cur->isMember($this->group)) {
$lf = new LeaveForm($this, $this->group);
Event::handle('EndGroupSubscribe', array($this, $this->group));
}
$this->elementEnd('li');
+ if ($cur && $cur->hasRight(Right::DELETEGROUP)) {
+ $this->elementStart('li', 'entity_delete');
+ $df = new DeleteGroupForm($this, $this->group);
+ $df->show();
+ $this->elementEnd('li');
+ }
$this->elementEnd('ul');
$this->elementEnd('div');
}
*
* @return void
*/
-
function getFeeds()
{
$url =
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)));
}
*
* @return void
*/
-
function showSections()
{
$this->showMembers();
*
* @return void
*/
-
function showMembers()
{
$member = $this->group->getMembers(0, MEMBERS_PER_SECTION);
$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)'));
+ }
- if ($cnt > MEMBERS_PER_SECTION) {
- $this->element('a', array('href' => common_local_url('groupmembers',
- array('nickname' => $this->group->nickname))),
- _('All members'));
+ // @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');
*
* @return void
*/
-
function showAdmins()
{
$adminSection = new GroupAdminSection($this, $this->group);
*
* @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'));
+ // @todo FIXME: i18n issue. This label gets a colon added from somewhere. Should be part of the message.
+ // TRANS: Label for creation date in statistics on group page.
+ $this->element('dt', null, _m('LABEL','Created'));
$this->element('dd', null, date('j M Y',
strtotime($this->group->created)));
$this->elementEnd('dl');
$this->elementStart('dl', 'entity_members');
- $this->element('dt', null, _('Members'));
- $this->element('dd', null, (is_int($members_count)) ? $members_count : '0');
+ // @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'))) {
+ // @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. '),
function title()
{
+ // TRANS: Header for list of group administrators on a group page (h2).
return _('Admins');
}
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;
+ }
+}