<?php
-
/**
* Disfavor action.
*
* PHP version 5
*
* @category Action
- * @package Laconica
- * @author Evan Prodromou <evan@controlyourself.ca>
- * @author Robin Millette <millette@controlyourself.ca>
+ * @package GNUsocial
+ * @author Evan Prodromou <evan@status.net>
+ * @author Robin Millette <millette@status.net>
+ * @author Mikael Nordfeldth <mmn@hethane.se>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link http://laconi.ca/
+ * @link http://www.gnu.org/software/social/
*
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, Controlez-Vous, Inc.
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-if (!defined('LACONICA')) {
- exit(1);
-}
-
-require_once INSTALLDIR.'/lib/favorform.php';
+if (!defined('GNUSOCIAL')) { exit(1); }
/**
- * Disfavor class.
+ * DisfavorAction class.
*
* @category Action
- * @package Laconica
- * @author Evan Prodromou <evan@controlyourself.ca>
- * @author Robin Millette <millette@controlyourself.ca>
+ * @package GNUsocial
+ * @author Evan Prodromou <evan@status.net>
+ * @author Robin Millette <millette@status.net>
+ * @author Mikael Nordfeldth <mmn@hethane.se>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link http://laconi.ca/
+ * @link http://www.gnu.org/software/social/
*/
-class DisfavorAction extends Action
+class DisfavorAction extends FormAction
{
- /**
- * Class handler.
- *
- * @param array $args query arguments
- *
- * @return void
- */
- function handle($args)
+ public function showForm($msg=null, $success=false)
{
- parent::handle($args);
- if (!common_logged_in()) {
- $this->clientError(_('Not logged in.'));
- return;
- }
- $user = common_current_user();
- if ($_SERVER['REQUEST_METHOD'] != 'POST') {
+ if ($success) {
common_redirect(common_local_url('showfavorites',
- array('nickname' => $user->nickname)));
- return;
+ array('nickname' => $this->scoped->nickname)), 303);
}
+ parent::showForm($msg, $success);
+ }
+
+ protected function handlePost()
+ {
$id = $this->trimmed('notice');
- $notice = Notice::staticGet($id);
- $token = $this->trimmed('token-'.$notice->id);
- if (!$token || $token != common_session_token()) {
- $this->clientError(_("There was a problem with your session token. Try again, please."));
- return;
+ $notice = Notice::getKV($id);
+ if (!$notice instanceof Notice) {
+ $this->serverError(_('Notice not found'));
}
+
$fave = new Fave();
- $fave->user_id = $this->id;
+ $fave->user_id = $this->scoped->id;
$fave->notice_id = $notice->id;
if (!$fave->find(true)) {
- $this->clientError(_('This notice is not a favorite!'));
- return;
+ throw new NoResultException($fave);
}
$result = $fave->delete();
if (!$result) {
common_log_db_error($fave, 'DELETE', __FILE__);
+ // TRANS: Server error displayed when removing a favorite from the database fails.
$this->serverError(_('Could not delete favorite.'));
- return;
}
- $user->blowFavesCache();
- if ($this->boolean('ajax')) {
+ $this->scoped->blowFavesCache();
+ if (StatusNet::isAjax()) {
$this->startHTML('text/xml;charset=utf-8');
$this->elementStart('head');
+ // TRANS: Title for page on which favorites can be added.
$this->element('title', null, _('Add to favorites'));
$this->elementEnd('head');
$this->elementStart('body');
$favor = new FavorForm($this, $notice);
$favor->show();
$this->elementEnd('body');
- $this->elementEnd('html');
- } else {
- common_redirect(common_local_url('showfavorites',
- array('nickname' => $user->nickname)),
- 303);
+ $this->endHTML();
+ exit;
}
}
}
-