summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/default.php4
-rw-r--r--lib/profileaction.php55
-rw-r--r--lib/profilelist.php22
-rw-r--r--lib/profileminilist.php46
4 files changed, 92 insertions, 35 deletions
diff --git a/lib/default.php b/lib/default.php
index 7d9a37174..fa4ece10a 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -299,4 +299,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 072c024c7..504b77566 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');
@@ -266,3 +271,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..b010fb724 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,
@@ -223,8 +222,8 @@ class ProfileListItem extends Widget
{
if (!empty($this->profile->homepage)) {
$this->out->text(' ');
- $this->out->elementStart('a', array('href' => $this->profile->homepage,
- 'class' => 'url'));
+ $aAttrs = $this->homepageAttributes();
+ $this->out->elementStart('a', $aAttrs);
$this->out->raw($this->highlight($this->profile->homepage));
$this->out->elementEnd('a');
}
@@ -299,4 +298,17 @@ class ProfileListItem extends Widget
{
return htmlspecialchars($text);
}
+
+ function linkAttributes()
+ {
+ return array('href' => $this->profile->profileurl,
+ 'class' => 'url entry-title',
+ 'rel' => 'contact');
+ }
+
+ function homepageAttributes()
+ {
+ return array('href' => $this->profile->homepage,
+ 'class' => 'url');
+ }
}
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;
}
}