Commit 51ecd6be authored by mmn's avatar mmn

Fix some ProfileAction stuff, add function profileActionPreparation

Split up files with multiple classes to multiple files for autoload, sorry
for baking this into this commit.
parent 7601e10b
......@@ -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()
......
......@@ -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');
}
}
......
......@@ -19,8 +19,6 @@
if (!defined('GNUSOCIAL')) { exit(1); }
require_once INSTALLDIR . '/lib/peopletags.php';
class TagprofileAction extends FormAction
{
var $error = null;
......
......@@ -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
......
......@@ -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');
}
}
......@@ -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)
......
......@@ -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');
}
}
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Widget to show a list of profiles
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Public
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @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?