summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/peopletag.php44
-rw-r--r--actions/showgroup.php48
-rw-r--r--lib/default.php4
-rw-r--r--lib/profileaction.php55
-rw-r--r--lib/profilelist.php12
-rw-r--r--lib/profileminilist.php46
6 files changed, 162 insertions, 47 deletions
diff --git a/actions/peopletag.php b/actions/peopletag.php
index 4ba1dc0f1..af40b9d82 100644
--- a/actions/peopletag.php
+++ b/actions/peopletag.php
@@ -32,8 +32,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
-require_once INSTALLDIR.'/lib/profilelist.php';
-
/**
* This class outputs a paginated list of profiles self-tagged with a given tag
*
@@ -124,8 +122,8 @@ class PeopletagAction extends Action
$profile->query(sprintf($qry, $this->tag, $lim));
- $pl = new ProfileList($profile, $this);
- $cnt = $pl->show();
+ $ptl = new PeopleTagList($profile, $this); // pass the ammunition
+ $cnt = $ptl->show();
$this->pagination($this->page > 1,
$cnt > PROFILES_PER_PAGE,
@@ -146,3 +144,41 @@ class PeopletagAction extends Action
}
}
+
+class PeopleTagList extends ProfileList
+{
+ function newListItem($profile)
+ {
+ return new PeopleTagListItem($profile, $this->action);
+ }
+}
+
+class PeopleTagListItem extends ProfileListItem
+{
+ function linkAttributes()
+ {
+ $aAttrs = parent::linkAttributes();
+
+ if (common_config('nofollow', 'peopletag')) {
+ $aAttrs['rel'] .= ' nofollow';
+ }
+
+ return $aAttrs;
+ }
+
+ function showHomepage()
+ {
+ if (!empty($this->profile->homepage)) {
+ $this->out->text(' ');
+ $aAttrs = array('href' => $this->profile->homepage,
+ 'class' => 'url');
+ if (common_config('nofollow', 'peopletag')) {
+ $aAttrs['rel'] = 'nofollow';
+ }
+ $this->out->elementStart('a', $aAttrs);
+ $this->out->raw($this->highlight($this->profile->homepage));
+ $this->out->elementEnd('a');
+ }
+ }
+}
+
diff --git a/actions/showgroup.php b/actions/showgroup.php
index a0d05ba37..3d369e9eb 100644
--- a/actions/showgroup.php
+++ b/actions/showgroup.php
@@ -388,18 +388,23 @@ 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)'));
- }
+ $this->element('h2', null, _('Members'));
+
+ $gmml = new GroupMembersMiniList($member, $this);
+ $cnt = $gmml->show();
+ if ($cnt == 0) {
+ $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'));
+ }
- 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');
@@ -502,3 +507,26 @@ 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;
+ }
+}
+
diff --git a/lib/default.php b/lib/default.php
index 10f3f1a97..ffeab70b3 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -296,4 +296,8 @@ $default =
),
'api' =>
array('realm' => null),
+ 'nofollow' =>
+ array('subscribers' => true,
+ 'members' => true,
+ 'peopletag' => true),
);
diff --git a/lib/profileaction.php b/lib/profileaction.php
index 029c21845..82e0224af 100644
--- a/lib/profileaction.php
+++ b/lib/profileaction.php
@@ -139,25 +139,30 @@ class ProfileAction extends OwnerDesignAction
$this->elementStart('div', array('id' => 'entity_subscribers',
'class' => 'section'));
- $this->element('h2', null, _('Subscribers'));
+ if (Event::handle('StartShowSubscribersMiniList', array($this))) {
- $cnt = 0;
+ $this->element('h2', null, _('Subscribers'));
- if (!empty($profile)) {
- $pml = new ProfileMiniList($profile, $this);
- $cnt = $pml->show();
- if ($cnt == 0) {
- $this->element('p', null, _('(None)'));
+ $cnt = 0;
+
+ if (!empty($profile)) {
+ $sml = new SubscribersMiniList($profile, $this);
+ $cnt = $sml->show();
+ if ($cnt == 0) {
+ $this->element('p', null, _('(None)'));
+ }
}
- }
- if ($cnt > PROFILES_PER_MINILIST) {
- $this->elementStart('p');
- $this->element('a', array('href' => common_local_url('subscribers',
- array('nickname' => $this->profile->nickname)),
- 'class' => 'more'),
- _('All subscribers'));
- $this->elementEnd('p');
+ if ($cnt > PROFILES_PER_MINILIST) {
+ $this->elementStart('p');
+ $this->element('a', array('href' => common_local_url('subscribers',
+ array('nickname' => $this->profile->nickname)),
+ 'class' => 'more'),
+ _('All subscribers'));
+ $this->elementEnd('p');
+ }
+
+ Event::handle('EndShowSubscribersMiniList', array($this));
}
$this->elementEnd('div');
@@ -254,3 +259,23 @@ class ProfileAction extends OwnerDesignAction
}
}
+class SubscribersMiniList extends ProfileMiniList
+{
+ function newListItem($profile)
+ {
+ return new SubscribersMiniListItem($profile, $this->action);
+ }
+}
+
+class SubscribersMiniListItem extends ProfileMiniListItem
+{
+ function linkAttributes()
+ {
+ $aAttrs = parent::linkAttributes();
+ if (common_config('nofollow', 'subscribers')) {
+ $aAttrs['rel'] .= ' nofollow';
+ }
+ return $aAttrs;
+ }
+}
+
diff --git a/lib/profilelist.php b/lib/profilelist.php
index 3e5513895..934907bc3 100644
--- a/lib/profilelist.php
+++ b/lib/profilelist.php
@@ -181,9 +181,8 @@ class ProfileListItem extends Widget
function showAvatar()
{
$avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
- $this->out->elementStart('a', array('href' => $this->profile->profileurl,
- 'class' => 'url entry-title',
- 'rel' => 'contact'));
+ $aAttrs = $this->linkAttributes();
+ $this->out->elementStart('a', $aAttrs);
$this->out->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE),
'class' => 'photo avatar',
'width' => AVATAR_STREAM_SIZE,
@@ -299,4 +298,11 @@ class ProfileListItem extends Widget
{
return htmlspecialchars($text);
}
+
+ function linkAttributes()
+ {
+ return array('href' => $this->profile->profileurl,
+ 'class' => 'url entry-title',
+ 'rel' => 'contact');
+ }
}
diff --git a/lib/profileminilist.php b/lib/profileminilist.php
index 079170d80..a98953474 100644
--- a/lib/profileminilist.php
+++ b/lib/profileminilist.php
@@ -81,20 +81,36 @@ class ProfileMiniListItem extends ProfileListItem
function show()
{
$this->out->elementStart('li', 'vcard');
- $this->out->elementStart('a', array('title' => $this->profile->getBestName(),
- 'href' => $this->profile->profileurl,
- 'rel' => 'contact member',
- 'class' => 'url'));
- $avatar = $this->profile->getAvatar(AVATAR_MINI_SIZE);
- $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
- 'width' => AVATAR_MINI_SIZE,
- 'height' => AVATAR_MINI_SIZE,
- 'class' => 'avatar photo',
- 'alt' => ($this->profile->fullname) ?
- $this->profile->fullname :
- $this->profile->nickname));
- $this->out->element('span', 'fn nickname', $this->profile->nickname);
- $this->out->elementEnd('a');
- $this->out->elementEnd('li');
+ if (Event::handle('StartProfileListItemProfileElements', array($this))) {
+ if (Event::handle('StartProfileListItemAvatar', array($this))) {
+ $aAttrs = $this->linkAttributes();
+ $this->out->elementStart('a', $aAttrs);
+ $avatar = $this->profile->getAvatar(AVATAR_MINI_SIZE);
+ $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
+ 'width' => AVATAR_MINI_SIZE,
+ 'height' => AVATAR_MINI_SIZE,
+ 'class' => 'avatar photo',
+ 'alt' => ($this->profile->fullname) ?
+ $this->profile->fullname :
+ $this->profile->nickname));
+ $this->out->element('span', 'fn nickname', $this->profile->nickname);
+ $this->out->elementEnd('a');
+ Event::handle('EndProfileListItemAvatar', array($this));
+ }
+ $this->out->elementEnd('li');
+ }
+ }
+
+ // default; overridden for nofollow lists
+
+ function linkAttributes()
+ {
+ $aAttrs = parent::linkAttributes();
+
+ $aAttrs['title'] = $this->profile->getBestName();
+ $aAttrs['rel'] = 'contact member'; // @todo: member? always?
+ $aAttrs['class'] = 'url';
+
+ return $aAttrs;
}
}