diff --git a/actions/tagprofile.php b/actions/tagprofile.php index a79ebf1d25..871626ef19 100644 --- a/actions/tagprofile.php +++ b/actions/tagprofile.php @@ -17,175 +17,119 @@ * along with this program. If not, see . */ -if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } +if (!defined('GNUSOCIAL')) { exit(1); } require_once INSTALLDIR . '/lib/settingsaction.php'; require_once INSTALLDIR . '/lib/peopletags.php'; -class TagprofileAction extends Action +class TagprofileAction extends FormAction { - var $profile = null; var $error = null; - function prepare($args) + protected $target = null; + protected $form = 'TagProfile'; + + protected function prepare(array $args=array()) { parent::prepare($args); - if (!common_logged_in()) { - common_set_returnto($_SERVER['REQUEST_URI']); - if (Event::handle('RedirectToLogin', array($this, null))) { - common_redirect(common_local_url('login'), 303); - } - } $id = $this->trimmed('id'); if (!$id) { - $this->profile = false; + $this->target = null; } else { - $this->profile = Profile::getKV('id', $id); + $this->target = Profile::getKV('id', $id); - if (!$this->profile) { + if (!$this->target instanceof Profile) { // TRANS: Client error displayed when referring to non-existing profile ID. $this->clientError(_('No profile with that ID.')); } } - $current = common_current_user()->getProfile(); - if ($this->profile && !$current->canTag($this->profile)) { + if ($this->target instanceof Profile && !$this->scoped->canTag($this->target)) { // TRANS: Client error displayed when trying to tag a user that cannot be tagged. $this->clientError(_('You cannot tag this user.')); } + + return true; } - function handle($args) + protected function handle() { - parent::handle($args); - if (Event::handle('StartTagProfileAction', array($this, $this->profile))) { - if ($_SERVER['REQUEST_METHOD'] == 'POST') { - $this->saveTags(); - } else { - $this->showForm(); - } - Event::handle('EndTagProfileAction', array($this, $this->profile)); + if (Event::handle('StartTagProfileAction', array($this, $this->target))) { + parent::handle(); + Event::handle('EndTagProfileAction', array($this, $this->target)); } } function title() { - if (!$this->profile) { + if (!$this->target instanceof Profile) { // TRANS: Title for list form when not on a profile page. return _('List a profile'); } // TRANS: Title for list form when on a profile page. // TRANS: %s is a profile nickname. - return sprintf(_m('ADDTOLIST','List %s'), $this->profile->nickname); - } - - function showForm($error=null) - { - $this->error = $error; - if ($this->boolean('ajax')) { - $this->startHTML('text/xml;charset=utf-8'); - $this->elementStart('head'); - // TRANS: Title for list form when an error has occurred. - $this->element('title', null, _m('TITLE','Error')); - $this->elementEnd('head'); - $this->elementStart('body'); - $this->element('p', 'error', $error); - $this->elementEnd('body'); - $this->endHTML(); - } else { - $this->showPage(); - } + return sprintf(_m('ADDTOLIST','List %s'), $this->target->getNickname()); } function showContent() { - if (Event::handle('StartShowTagProfileForm', array($this, $this->profile)) && $this->profile) { - $this->elementStart('div', 'entity_profile h-card p-author'); - // TRANS: Header in list form. - $this->element('h2', null, _('User profile')); + $this->elementStart('div', 'entity_profile h-card'); + // TRANS: Header in list form. + $this->element('h2', null, _('User profile')); - $avatarUrl = $this->profile->avatarUrl(AVATAR_PROFILE_SIZE); - $this->element('img', array('src' => $avatarUrl, - 'class' => 'photo avatar entity_depiction', - 'width' => AVATAR_PROFILE_SIZE, - 'height' => AVATAR_PROFILE_SIZE, - 'alt' => - ($this->profile->fullname) ? $this->profile->fullname : - $this->profile->nickname)); + $avatarUrl = $this->target->avatarUrl(AVATAR_PROFILE_SIZE); + $this->element('img', array('src' => $avatarUrl, + 'class' => 'u-photo avatar entity_depiction', + 'width' => AVATAR_PROFILE_SIZE, + 'height' => AVATAR_PROFILE_SIZE, + 'alt' => $this->target->getBestName())); - $this->element('a', array('href' => $this->profile->profileurl, - 'class' => 'entity_nickname nickname'), - $this->profile->nickname); - if ($this->profile->fullname) { - $this->element('div', 'p-name entity_fn', $this->profile->fullname); - } + $this->element('a', array('href' => $this->target->getUrl(), + 'class' => 'entity_nickname p-nickname'), + $this->target->getNickname()); + if ($this->target->fullname) { + $this->element('div', 'p-name entity_fn', $this->target->fullname); + } - if ($this->profile->location) { - $this->element('div', 'label entity_location', $this->profile->location); - } + if ($this->target->location) { + $this->element('div', 'p-locality label entity_location', $this->target->location); + } - if ($this->profile->homepage) { - $this->element('a', array('href' => $this->profile->homepage, - 'rel' => 'me', - 'class' => 'u-url entity_url'), - $this->profile->homepage); - } + if ($this->target->homepage) { + $this->element('a', array('href' => $this->target->homepage, + 'rel' => 'me', + 'class' => 'u-url entity_url'), + $this->target->homepage); + } - if ($this->profile->bio) { - $this->element('div', 'note entity_note', $this->profile->bio); - } + if ($this->target->bio) { + $this->element('div', 'p-note entity_note', $this->target->bio); + } - $this->elementEnd('div'); + $this->elementEnd('div'); - $this->elementStart('form', array('method' => 'post', - 'id' => 'form_tag_user', - 'class' => 'form_settings', - 'name' => 'tagprofile', - 'action' => common_local_url('tagprofile', array('id' => $this->profile->id)))); - - $this->elementStart('fieldset'); - // TRANS: Fieldset legend for list form. - $this->element('legend', null, _('List user')); - $this->hidden('token', common_session_token()); - $this->hidden('id', $this->profile->id); - - $user = common_current_user(); - - $this->elementStart('ul', 'form_data'); - $this->elementStart('li'); - - $tags = Profile_tag::getTagsArray($user->id, $this->profile->id, $user->id); - // TRANS: Field label on list form. - $this->input('tags', _m('LABEL','Lists'), - ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $tags), - // TRANS: Field title on list form. - _('Lists for this user (letters, numbers, -, ., and _), comma- or space- separated.')); - $this->elementEnd('li'); - $this->elementEnd('ul'); - // TRANS: Button text to save lists. - $this->submit('save', _m('BUTTON','Save')); - $this->elementEnd('fieldset'); - $this->elementEnd('form'); - - Event::handle('EndShowTagProfileForm', array($this, $this->profile)); + if (Event::handle('StartShowTagProfileForm', array($this, $this->target))) { + parent::showContent(); + Event::handle('EndShowTagProfileForm', array($this, $this->target)); } } - function saveTags() + protected function getForm() { - $id = $this->trimmed('id'); + $class = $this->form.'Form'; + $form = new $class($this, $this->target); + return $form; + } + + protected function handlePost() + { + parent::handlePost(); // Does nothing for now + $tagstring = $this->trimmed('tags'); $token = $this->trimmed('token'); if (Event::handle('StartSavePeopletags', array($this, $tagstring))) { - if (!$token || $token != common_session_token()) { - // TRANS: Client error displayed when the session token does not match or is not given. - $this->showForm(_('There was a problem with your session token. '. - 'Try again, please.')); - return; - } - $tags = array(); $tag_priv = array(); @@ -208,10 +152,8 @@ class TagprofileAction extends Action } } - $user = common_current_user(); - try { - $result = Profile_tag::setTags($user->id, $this->profile->id, $tags, $tag_priv); + $result = Profile_tag::setTags($this->scoped->id, $this->target->id, $tags, $tag_priv); if (!$result) { throw new Exception('The tags could not be saved.'); } @@ -227,11 +169,11 @@ class TagprofileAction extends Action $this->elementEnd('head'); $this->elementStart('body'); - if ($user->id == $this->profile->id) { - $widget = new SelftagsWidget($this, $user, $this->profile); + if ($this->scoped->id == $this->target->id) { + $widget = new SelftagsWidget($this, $this->scoped, $this->target); $widget->show(); } else { - $widget = new PeopletagsWidget($this, $user, $this->profile); + $widget = new PeopletagsWidget($this, $this->scoped, $this->target); $widget->show(); } @@ -239,7 +181,7 @@ class TagprofileAction extends Action $this->endHTML(); } else { // TRANS: Success message if lists are saved. - $this->error = _('Lists saved.'); + $this->msg = _('Lists saved.'); $this->showForm(); } diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 7b19e386e6..c242afbd78 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -233,36 +233,6 @@ class OStatusPlugin extends Plugin return true; } - function onStartShowTagProfileForm($action, $profile) - { - $action->elementStart('form', array('method' => 'post', - 'id' => 'form_tag_user', - 'class' => 'form_settings', - 'name' => 'tagprofile', - 'action' => common_local_url('tagprofile', array('id' => @$profile->id)))); - - $action->elementStart('fieldset'); - // TRANS: Fieldset legend. - $action->element('legend', null, _m('List remote profile')); - $action->hidden('token', common_session_token()); - - $user = common_current_user(); - - $action->elementStart('ul', 'form_data'); - $action->elementStart('li'); - - // TRANS: Field label. - $action->input('uri', _m('LABEL','Remote profile'), $action->trimmed('uri'), - // TRANS: Field title. - _m('OStatus user\'s address, like nickname@example.com or http://example.net/nickname.')); - $action->elementEnd('li'); - $action->elementEnd('ul'); - // TRANS: Button text to fetch remote profile. - $action->submit('fetch', _m('BUTTON','Fetch')); - $action->elementEnd('fieldset'); - $action->elementEnd('form'); - } - function onStartTagProfileAction($action, $profile) { $err = null;