diff --git a/actions/all.php b/actions/all.php index fb0b63577a..9cab91264f 100644 --- a/actions/all.php +++ b/actions/all.php @@ -41,13 +41,9 @@ class AllAction extends ProfileAction { var $notice; - protected function prepare(array $args=array()) + protected function profileActionPreparation() { - parent::prepare($args); - - $user = common_current_user(); - - if (!empty($user) && $user->streamModeOnly()) { + if ($this->scoped instanceof Profile && $this->scoped->isLocal() && $this->scoped->getUser()->streamModeOnly()) { $stream = new InboxNoticeStream($this->target, $this->scoped); } else { $stream = new ThreadingInboxNoticeStream($this->target, $this->scoped); @@ -60,8 +56,6 @@ class AllAction extends ProfileAction // TRANS: Client error when page not found (404). $this->clientError(_('No such page.'), 404); } - - return true; } function title() diff --git a/actions/showstream.php b/actions/showstream.php index 7c38eca14a..b1271dea54 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -57,14 +57,12 @@ class ShowstreamAction extends ProfileAction { var $notice; - protected function prepare(array $args=array()) + protected function profileActionPreparation() { - parent::prepare($args); - if (empty($this->tag)) { - $stream = new ProfileNoticeStream($this->profile, $this->scoped); + $stream = new ProfileNoticeStream($this->target, $this->scoped); } else { - $stream = new TaggedProfileNoticeStream($this->profile, $this->tag, $this->scoped); + $stream = new TaggedProfileNoticeStream($this->target, $this->tag, $this->scoped); } $this->notice = $stream->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); @@ -75,7 +73,7 @@ class ShowstreamAction extends ProfileAction function title() { - $base = $this->profile->getFancyName(); + $base = $this->target->getFancyName(); if (!empty($this->tag)) { if ($this->page == 1) { // TRANS: Page title showing tagged notices in one user's timeline. @@ -106,7 +104,7 @@ class ShowstreamAction extends ProfileAction function showProfileBlock() { - $block = new AccountProfileBlock($this, $this->profile); + $block = new AccountProfileBlock($this, $this->target); $block->show(); } @@ -120,12 +118,12 @@ class ShowstreamAction extends ProfileAction if (!empty($this->tag)) { return array(new Feed(Feed::RSS1, common_local_url('userrss', - array('nickname' => $this->target->nickname, + array('nickname' => $this->target->getNickname(), 'tag' => $this->tag)), // TRANS: Title for link to notice feed. // TRANS: %1$s is a user nickname, %2$s is a hashtag. sprintf(_('Notice feed for %1$s tagged %2$s (RSS 1.0)'), - $this->target->nickname, $this->tag))); + $this->target->getNickname(), $this->tag))); } return array(new Feed(Feed::JSON, @@ -136,14 +134,14 @@ class ShowstreamAction extends ProfileAction // TRANS: Title for link to notice feed. // TRANS: %s is a user nickname. sprintf(_('Notice feed for %s (Activity Streams JSON)'), - $this->target->nickname)), + $this->target->getNickname())), new Feed(Feed::RSS1, common_local_url('userrss', - array('nickname' => $this->target->nickname)), + array('nickname' => $this->target->getNickname())), // TRANS: Title for link to notice feed. // TRANS: %s is a user nickname. sprintf(_('Notice feed for %s (RSS 1.0)'), - $this->target->nickname)), + $this->target->getNickname())), new Feed(Feed::RSS2, common_local_url('ApiTimelineUser', array( @@ -152,7 +150,7 @@ class ShowstreamAction extends ProfileAction // TRANS: Title for link to notice feed. // TRANS: %s is a user nickname. sprintf(_('Notice feed for %s (RSS 2.0)'), - $this->target->nickname)), + $this->target->getNickname())), new Feed(Feed::ATOM, common_local_url('ApiTimelineUser', array( @@ -161,24 +159,24 @@ class ShowstreamAction extends ProfileAction // TRANS: Title for link to notice feed. // TRANS: %s is a user nickname. sprintf(_('Notice feed for %s (Atom)'), - $this->target->nickname)), + $this->target->getNickname())), new Feed(Feed::FOAF, common_local_url('foaf', array('nickname' => - $this->target->nickname)), + $this->target->getNickname())), // TRANS: Title for link to notice feed. FOAF stands for Friend of a Friend. // TRANS: More information at http://www.foaf-project.org. %s is a user nickname. - sprintf(_('FOAF for %s'), $this->target->nickname))); + sprintf(_('FOAF for %s'), $this->target->getNickname()))); } function extraHead() { - if ($this->profile->bio) { + if ($this->target->bio) { $this->element('meta', array('name' => 'description', - 'content' => $this->profile->bio)); + 'content' => $this->target->getDescription())); } - if ($this->user->emailmicroid && $this->user->email && $this->profile->profileurl) { - $id = new Microid('mailto:'.$this->user->email, + if ($this->target->isLocal() && $this->target->getUser()->emailmicroid && $this->target->getUser()->email && $this->target->getUrl()) { + $id = new Microid('mailto:'.$this->target->getUser()->email, $this->selfUrl()); $this->element('meta', array('name' => 'microid', 'content' => $id->toString())); @@ -188,10 +186,10 @@ class ShowstreamAction extends ProfileAction $this->element('link', array('rel' => 'microsummary', 'href' => common_local_url('microsummary', - array('nickname' => $this->profile->nickname)))); + array('nickname' => $this->target->getNickname())))); $rsd = common_local_url('rsd', - array('nickname' => $this->profile->nickname)); + array('nickname' => $this->target->getNickname())); // RSD, http://tales.phrasewise.com/rfc/rsd $this->element('link', array('rel' => 'EditURI', @@ -200,7 +198,7 @@ class ShowstreamAction extends ProfileAction if ($this->page != 1) { $this->element('link', array('rel' => 'canonical', - 'href' => $this->profile->profileurl)); + 'href' => $this->target->getUrl())); } } @@ -284,10 +282,9 @@ class ShowstreamAction extends ProfileAction function noticeFormOptions() { $options = parent::noticeFormOptions(); - $cur = common_current_user(); - if (empty($cur) || $cur->id != $this->profile->id) { - $options['to_profile'] = $this->profile; + if (!$this->scoped instanceof Profile || $this->scoped->id != $this->target->id) { + $options['to_profile'] = $this->target; } return $options; @@ -329,20 +326,23 @@ class ProfileNoticeListItem extends DoFollowListItem // FIXME: this code is almost identical to default; need to refactor - $attrs = array('href' => $this->profile->profileurl, - 'class' => 'url'); + $attrs = array(); + if (!empty($this->target->fullname)) { + $attrs['title'] = $this->target->getFullname(); + } - if (!empty($this->profile->fullname)) { - $attrs['title'] = $this->profile->getFancyName(); + try { + $attrs = array('href' => $this->target->getUrl(), + 'class' => 'url'); + $text_tag = 'a'; + } catch (InvalidUrlException $e) { + $text_tag = 'abbr'; } $this->out->elementStart('span', 'repeat'); - - $text_link = XMLStringer::estring('a', $attrs, $this->profile->nickname); - + $text_link = XMLStringer::estring($text_tag, $attrs, $this->target->getNickname()); // TRANS: Link to the author of a repeated notice. %s is a linked nickname. $this->out->raw(sprintf(_('Repeat of %s'), $text_link)); - $this->out->elementEnd('span'); } } diff --git a/actions/tagprofile.php b/actions/tagprofile.php index 79a401c6a9..47a66d0be4 100644 --- a/actions/tagprofile.php +++ b/actions/tagprofile.php @@ -19,8 +19,6 @@ if (!defined('GNUSOCIAL')) { exit(1); } -require_once INSTALLDIR . '/lib/peopletags.php'; - class TagprofileAction extends FormAction { var $error = null; diff --git a/lib/accountprofileblock.php b/lib/accountprofileblock.php index fe11a0fc15..875acbb59c 100644 --- a/lib/accountprofileblock.php +++ b/lib/accountprofileblock.php @@ -28,13 +28,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET')) { - // This check helps protect against security problems; - // your code file can't be executed directly from the web. - exit(1); -} - -require_once INSTALLDIR.'/lib/peopletags.php'; +if (!defined('GNUSOCIAL')) { exit(1); } /** * Profile block to show for an account diff --git a/lib/peopletags.php b/lib/peopletagswidget.php similarity index 92% rename from lib/peopletags.php rename to lib/peopletagswidget.php index 40f07c06b7..1da153c85f 100644 --- a/lib/peopletags.php +++ b/lib/peopletagswidget.php @@ -25,11 +25,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once INSTALLDIR.'/lib/widget.php'; +if (!defined('GNUSOCIAL')) { exit(1); } /* * Show a bunch of peopletags @@ -178,18 +174,3 @@ class PeopletagsWidget extends Widget return !empty($this->user) && $this->tagger->id == $this->user->id; } } - -class SelftagsWidget extends PeopletagsWidget -{ - function url($tag) - { - // link to self tag page - return common_local_url('selftag', array('tag' => $tag)); - } - - function label() - { - // TRANS: Label in self tags widget. - return _m('LABEL','Tags'); - } -} diff --git a/lib/profileaction.php b/lib/profileaction.php index 83b3170bed..5923640097 100644 --- a/lib/profileaction.php +++ b/lib/profileaction.php @@ -28,12 +28,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once INSTALLDIR.'/lib/profileminilist.php'; -require_once INSTALLDIR.'/lib/groupminilist.php'; +if (!defined('GNUSOCIAL')) { exit(1); } /** * Profile action common superclass @@ -46,17 +41,15 @@ require_once INSTALLDIR.'/lib/groupminilist.php'; * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ -class ProfileAction extends ManagedAction +abstract class ProfileAction extends ManagedAction { var $page = null; var $tag = null; protected $target = null; // Profile that we're showing - protected function prepare(array $args=array()) + protected function doPreparation() { - parent::prepare($args); - try { $nickname_arg = $this->arg('nickname'); $nickname = common_canonical_nickname($nickname_arg); @@ -106,7 +99,13 @@ class ProfileAction extends ManagedAction $this->tag = $this->trimmed('tag'); $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; common_set_returnto($this->selfUrl()); - return true; + + return $this->profileActionPreparation(); + } + + protected function profileActionPreparation() + { + // No-op by default. } function isReadOnly($args) diff --git a/lib/profilelist.php b/lib/profilelist.php index 767e12bc25..177560cdf5 100644 --- a/lib/profilelist.php +++ b/lib/profilelist.php @@ -27,11 +27,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once INSTALLDIR.'/lib/peopletags.php'; +if (!defined('GNUSOCIAL')) { exit(1); } /** * Widget to show a list of profiles @@ -107,215 +103,3 @@ class ProfileList extends Widget return PROFILES_PER_PAGE; } } - -class ProfileListItem extends Widget -{ - /** Current profile. */ - var $profile = null; - /** Action object using us. */ - var $action = null; - - function __construct($profile, $action) - { - parent::__construct($action); - - $this->profile = $profile; - $this->action = $action; - } - - function show() - { - if (Event::handle('StartProfileListItem', array($this))) { - $this->startItem(); - if (Event::handle('StartProfileListItemProfile', array($this))) { - $this->showProfile(); - Event::handle('EndProfileListItemProfile', array($this)); - } - if (Event::handle('StartProfileListItemActions', array($this))) { - $this->showActions(); - Event::handle('EndProfileListItemActions', array($this)); - } - $this->endItem(); - Event::handle('EndProfileListItem', array($this)); - } - } - - function startItem() - { - $this->out->elementStart('li', array('class' => 'profile', - 'id' => 'profile-' . $this->profile->id)); - } - - function showProfile() - { - $this->startProfile(); - if (Event::handle('StartProfileListItemProfileElements', array($this))) { - if (Event::handle('StartProfileListItemAvatar', array($this))) { - $aAttrs = $this->linkAttributes(); - $this->out->elementStart('a', $aAttrs); - $this->showAvatar($this->profile); - $this->out->elementEnd('a'); - Event::handle('EndProfileListItemAvatar', array($this)); - } - if (Event::handle('StartProfileListItemNickname', array($this))) { - $this->showNickname(); - Event::handle('EndProfileListItemNickname', array($this)); - } - if (Event::handle('StartProfileListItemFullName', array($this))) { - $this->showFullName(); - Event::handle('EndProfileListItemFullName', array($this)); - } - if (Event::handle('StartProfileListItemLocation', array($this))) { - $this->showLocation(); - Event::handle('EndProfileListItemLocation', array($this)); - } - if (Event::handle('StartProfileListItemHomepage', array($this))) { - $this->showHomepage(); - Event::handle('EndProfileListItemHomepage', array($this)); - } - if (Event::handle('StartProfileListItemBio', array($this))) { - $this->showBio(); - Event::handle('EndProfileListItemBio', array($this)); - } - if (Event::handle('StartProfileListItemTags', array($this))) { - $this->showTags(); - Event::handle('EndProfileListItemTags', array($this)); - } - Event::handle('EndProfileListItemProfileElements', array($this)); - } - $this->endProfile(); - } - - function startProfile() - { - $this->out->elementStart('div', 'entity_profile h-card'); - } - - function showNickname() - { - $this->out->element('a', array('href'=>$this->profile->getUrl(), - 'class'=>'p-nickname'), - $this->profile->getNickname()); - } - - function showFullName() - { - if (!empty($this->profile->fullname)) { - $this->out->element('span', 'p-name', $this->profile->fullname); - } - } - - function showLocation() - { - if (!empty($this->profile->location)) { - $this->out->element('span', 'label p-locality', $this->profile->location); - } - } - - function showHomepage() - { - if (!empty($this->profile->homepage)) { - $this->out->text(' '); - $aAttrs = $this->homepageAttributes(); - $this->out->elementStart('a', $aAttrs); - $this->out->raw($this->highlight($this->profile->homepage)); - $this->out->elementEnd('a'); - } - } - - function showBio() - { - if (!empty($this->profile->bio)) { - $this->out->elementStart('p', 'note'); - $this->out->raw($this->highlight($this->profile->bio)); - $this->out->elementEnd('p'); - } - } - - function showTags() - { - $user = common_current_user(); - if (!empty($user)) { - if ($user->id == $this->profile->id) { - $tags = new SelftagsWidget($this->out, $user, $this->profile); - $tags->show(); - } else if ($user->getProfile()->canTag($this->profile)) { - $tags = new PeopletagsWidget($this->out, $user, $this->profile); - $tags->show(); - } - } - } - - function endProfile() - { - $this->out->elementEnd('div'); - } - - function showActions() - { - $this->startActions(); - if (Event::handle('StartProfileListItemActionElements', array($this))) { - $this->showSubscribeButton(); - Event::handle('EndProfileListItemActionElements', array($this)); - } - $this->endActions(); - } - - function startActions() - { - $this->out->elementStart('div', 'entity_actions'); - $this->out->elementStart('ul'); - } - - function showSubscribeButton() - { - // Is this a logged-in user, looking at someone else's - // profile? - - $user = common_current_user(); - - if (!empty($user) && $this->profile->id != $user->id) { - $this->out->elementStart('li', 'entity_subscribe'); - if ($user->isSubscribed($this->profile)) { - $usf = new UnsubscribeForm($this->out, $this->profile); - $usf->show(); - } else { - if (Event::handle('StartShowProfileListSubscribeButton', array($this))) { - $sf = new SubscribeForm($this->out, $this->profile); - $sf->show(); - Event::handle('EndShowProfileListSubscribeButton', array($this)); - } - } - $this->out->elementEnd('li'); - } - } - - function endActions() - { - $this->out->elementEnd('ul'); - $this->out->elementEnd('div'); - } - - function endItem() - { - $this->out->elementEnd('li'); - } - - function highlight($text) - { - return htmlspecialchars($text); - } - - function linkAttributes() - { - return array('href' => $this->profile->profileurl, - 'class' => 'u-url', - 'rel' => 'contact'); - } - - function homepageAttributes() - { - return array('href' => $this->profile->homepage, - 'class' => 'u-url'); - } -} diff --git a/lib/profilelistitem.php b/lib/profilelistitem.php new file mode 100644 index 0000000000..e0b94ac76a --- /dev/null +++ b/lib/profilelistitem.php @@ -0,0 +1,242 @@ +. + * + * @category Public + * @package StatusNet + * @author Evan Prodromou + * @copyright 2008-2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('GNUSOCIAL')) { exit(1); } + +class ProfileListItem extends Widget +{ + /** Current profile. */ + var $profile = null; + /** Action object using us. */ + var $action = null; + + function __construct($profile, $action) + { + parent::__construct($action); + + $this->profile = $profile; + $this->action = $action; + } + + function show() + { + if (Event::handle('StartProfileListItem', array($this))) { + $this->startItem(); + if (Event::handle('StartProfileListItemProfile', array($this))) { + $this->showProfile(); + Event::handle('EndProfileListItemProfile', array($this)); + } + if (Event::handle('StartProfileListItemActions', array($this))) { + $this->showActions(); + Event::handle('EndProfileListItemActions', array($this)); + } + $this->endItem(); + Event::handle('EndProfileListItem', array($this)); + } + } + + function startItem() + { + $this->out->elementStart('li', array('class' => 'profile', + 'id' => 'profile-' . $this->profile->id)); + } + + function showProfile() + { + $this->startProfile(); + if (Event::handle('StartProfileListItemProfileElements', array($this))) { + if (Event::handle('StartProfileListItemAvatar', array($this))) { + $aAttrs = $this->linkAttributes(); + $this->out->elementStart('a', $aAttrs); + $this->showAvatar($this->profile); + $this->out->elementEnd('a'); + Event::handle('EndProfileListItemAvatar', array($this)); + } + if (Event::handle('StartProfileListItemNickname', array($this))) { + $this->showNickname(); + Event::handle('EndProfileListItemNickname', array($this)); + } + if (Event::handle('StartProfileListItemFullName', array($this))) { + $this->showFullName(); + Event::handle('EndProfileListItemFullName', array($this)); + } + if (Event::handle('StartProfileListItemLocation', array($this))) { + $this->showLocation(); + Event::handle('EndProfileListItemLocation', array($this)); + } + if (Event::handle('StartProfileListItemHomepage', array($this))) { + $this->showHomepage(); + Event::handle('EndProfileListItemHomepage', array($this)); + } + if (Event::handle('StartProfileListItemBio', array($this))) { + $this->showBio(); + Event::handle('EndProfileListItemBio', array($this)); + } + if (Event::handle('StartProfileListItemTags', array($this))) { + $this->showTags(); + Event::handle('EndProfileListItemTags', array($this)); + } + Event::handle('EndProfileListItemProfileElements', array($this)); + } + $this->endProfile(); + } + + function startProfile() + { + $this->out->elementStart('div', 'entity_profile h-card'); + } + + function showNickname() + { + $this->out->element('a', array('href'=>$this->profile->getUrl(), + 'class'=>'p-nickname'), + $this->profile->getNickname()); + } + + function showFullName() + { + if (!empty($this->profile->fullname)) { + $this->out->element('span', 'p-name', $this->profile->fullname); + } + } + + function showLocation() + { + if (!empty($this->profile->location)) { + $this->out->element('span', 'label p-locality', $this->profile->location); + } + } + + function showHomepage() + { + if (!empty($this->profile->homepage)) { + $this->out->text(' '); + $aAttrs = $this->homepageAttributes(); + $this->out->elementStart('a', $aAttrs); + $this->out->raw($this->highlight($this->profile->homepage)); + $this->out->elementEnd('a'); + } + } + + function showBio() + { + if (!empty($this->profile->bio)) { + $this->out->elementStart('p', 'note'); + $this->out->raw($this->highlight($this->profile->bio)); + $this->out->elementEnd('p'); + } + } + + function showTags() + { + $user = common_current_user(); + if (!empty($user)) { + if ($user->id == $this->profile->id) { + $tags = new SelftagsWidget($this->out, $user, $this->profile); + $tags->show(); + } else if ($user->getProfile()->canTag($this->profile)) { + $tags = new PeopletagsWidget($this->out, $user, $this->profile); + $tags->show(); + } + } + } + + function endProfile() + { + $this->out->elementEnd('div'); + } + + function showActions() + { + $this->startActions(); + if (Event::handle('StartProfileListItemActionElements', array($this))) { + $this->showSubscribeButton(); + Event::handle('EndProfileListItemActionElements', array($this)); + } + $this->endActions(); + } + + function startActions() + { + $this->out->elementStart('div', 'entity_actions'); + $this->out->elementStart('ul'); + } + + function showSubscribeButton() + { + // Is this a logged-in user, looking at someone else's + // profile? + + $user = common_current_user(); + + if (!empty($user) && $this->profile->id != $user->id) { + $this->out->elementStart('li', 'entity_subscribe'); + if ($user->isSubscribed($this->profile)) { + $usf = new UnsubscribeForm($this->out, $this->profile); + $usf->show(); + } else { + if (Event::handle('StartShowProfileListSubscribeButton', array($this))) { + $sf = new SubscribeForm($this->out, $this->profile); + $sf->show(); + Event::handle('EndShowProfileListSubscribeButton', array($this)); + } + } + $this->out->elementEnd('li'); + } + } + + function endActions() + { + $this->out->elementEnd('ul'); + $this->out->elementEnd('div'); + } + + function endItem() + { + $this->out->elementEnd('li'); + } + + function highlight($text) + { + return htmlspecialchars($text); + } + + function linkAttributes() + { + return array('href' => $this->profile->profileurl, + 'class' => 'u-url', + 'rel' => 'contact'); + } + + function homepageAttributes() + { + return array('href' => $this->profile->homepage, + 'class' => 'u-url'); + } +} diff --git a/lib/profileminilist.php b/lib/profileminilist.php index 33624a3c70..4f47487220 100644 --- a/lib/profileminilist.php +++ b/lib/profileminilist.php @@ -27,11 +27,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once INSTALLDIR.'/lib/profilelist.php'; +if (!defined('GNUSOCIAL')) { exit(1); } define('PROFILES_PER_MINILIST', 8); @@ -69,39 +65,3 @@ class ProfileMiniList extends ProfileList return AVATAR_MINI_SIZE; } } - -class ProfileMiniListItem extends ProfileListItem -{ - function show() - { - $this->out->elementStart('li', 'h-card'); - if (Event::handle('StartProfileListItemProfileElements', array($this))) { - if (Event::handle('StartProfileListItemAvatar', array($this))) { - $aAttrs = $this->linkAttributes(); - $this->out->elementStart('a', $aAttrs); - $avatarUrl = $this->profile->avatarUrl(AVATAR_MINI_SIZE); - $this->out->element('img', array('src' => $avatarUrl, - 'width' => AVATAR_MINI_SIZE, - 'height' => AVATAR_MINI_SIZE, - 'class' => 'avatar u-photo', - 'alt' => $this->profile->getBestName())); - $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'] = 'u-url p-name'; - - return $aAttrs; - } -} diff --git a/lib/profileminilistitem.php b/lib/profileminilistitem.php new file mode 100644 index 0000000000..c0121262eb --- /dev/null +++ b/lib/profileminilistitem.php @@ -0,0 +1,76 @@ +. + * + * @category Public + * @package StatusNet + * @author Evan Prodromou + * @copyright 2008-2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('GNUSOCIAL')) { exit(1); } + +/** + * Widget to show a list of profiles, good for sidebar + * + * @category Public + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class ProfileMiniListItem extends ProfileListItem +{ + function show() + { + $this->out->elementStart('li', 'h-card'); + if (Event::handle('StartProfileListItemProfileElements', array($this))) { + if (Event::handle('StartProfileListItemAvatar', array($this))) { + $aAttrs = $this->linkAttributes(); + $this->out->elementStart('a', $aAttrs); + $avatarUrl = $this->profile->avatarUrl(AVATAR_MINI_SIZE); + $this->out->element('img', array('src' => $avatarUrl, + 'width' => AVATAR_MINI_SIZE, + 'height' => AVATAR_MINI_SIZE, + 'class' => 'avatar u-photo', + 'alt' => $this->profile->getBestName())); + $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'] = 'u-url p-name'; + + return $aAttrs; + } +} diff --git a/lib/selftagswidget.php b/lib/selftagswidget.php new file mode 100644 index 0000000000..e2530769df --- /dev/null +++ b/lib/selftagswidget.php @@ -0,0 +1,43 @@ +. + * + * @category Action + * @package StatusNet + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('GNUSOCIAL')) { exit(1); } + +class SelftagsWidget extends PeopletagsWidget +{ + function url($tag) + { + // link to self tag page + return common_local_url('selftag', array('tag' => $tag)); + } + + function label() + { + // TRANS: Label in self tags widget. + return _m('LABEL','Tags'); + } +}