newmessage (and Message class) fixed for FormAction
Also added a needLogin function to the Action class, which will do redirect to login page with proper returnto setting.
This commit is contained in:
parent
89b10666bb
commit
e5e3aeb4e6
|
@ -163,11 +163,6 @@ class ApiDirectMessageNewAction extends ApiAuthAction
|
|||
$this->source
|
||||
);
|
||||
|
||||
if (is_string($message)) {
|
||||
$this->serverError($message);
|
||||
return;
|
||||
}
|
||||
|
||||
$message->notify();
|
||||
|
||||
if ($this->format == 'xml') {
|
||||
|
|
|
@ -45,15 +45,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class NewmessageAction extends Action
|
||||
class NewmessageAction extends FormAction
|
||||
{
|
||||
|
||||
/**
|
||||
* Error message, if any
|
||||
*/
|
||||
|
||||
var $msg = null;
|
||||
|
||||
var $content = null;
|
||||
var $to = null;
|
||||
var $other = null;
|
||||
|
@ -80,33 +73,16 @@ class NewmessageAction extends Action
|
|||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
parent::handle($args);
|
||||
|
||||
if (!common_logged_in()) {
|
||||
// TRANS: Error message displayed when trying to perform an action that requires a logged in user.
|
||||
$this->clientError(_('Not logged in.'), 403);
|
||||
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||
$this->saveNewMessage();
|
||||
} else {
|
||||
$this->showForm();
|
||||
}
|
||||
}
|
||||
|
||||
function prepare($args)
|
||||
protected function prepare($args)
|
||||
{
|
||||
parent::prepare($args);
|
||||
|
||||
$user = common_current_user();
|
||||
|
||||
if (!$user) {
|
||||
/* Go log in, and then come back. */
|
||||
common_set_returnto($_SERVER['REQUEST_URI']);
|
||||
common_redirect(common_local_url('login'));
|
||||
return false;
|
||||
if (!common_logged_in()) {
|
||||
$this->needLogin();
|
||||
}
|
||||
|
||||
$user = $this->scoped->getUser();
|
||||
|
||||
$this->content = $this->trimmed('content');
|
||||
$this->to = $this->trimmed('to');
|
||||
|
||||
|
@ -117,76 +93,55 @@ class NewmessageAction extends Action
|
|||
if (!$this->other) {
|
||||
// TRANS: Client error displayed trying to send a direct message to a non-existing user.
|
||||
$this->clientError(_('No such user.'), 404);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$user->mutuallySubscribed($this->other)) {
|
||||
// TRANS: Client error displayed trying to send a direct message to a user while sender and
|
||||
// TRANS: receiver are not subscribed to each other.
|
||||
$this->clientError(_('You cannot send a message to this user.'), 404);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function saveNewMessage()
|
||||
protected function handlePost()
|
||||
{
|
||||
// CSRF protection
|
||||
parent::handlePost();
|
||||
|
||||
$token = $this->trimmed('token');
|
||||
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;
|
||||
}
|
||||
|
||||
$user = common_current_user();
|
||||
assert($user); // XXX: maybe an error instead...
|
||||
assert($this->scoped); // XXX: maybe an error instead...
|
||||
$user = $this->scoped->getUser();
|
||||
|
||||
if (!$this->content) {
|
||||
// TRANS: Form validator error displayed trying to send a direct message without content.
|
||||
$this->showForm(_('No content!'));
|
||||
return;
|
||||
$this->clientError(_('No content!'));
|
||||
} else {
|
||||
$content_shortened = $user->shortenLinks($this->content);
|
||||
|
||||
if (Message::contentTooLong($content_shortened)) {
|
||||
// TRANS: Form validation error displayed when message content is too long.
|
||||
// TRANS: %d is the maximum number of characters for a message.
|
||||
$this->showForm(sprintf(_m('That\'s too long. Maximum message size is %d character.',
|
||||
$this->clientError(sprintf(_m('That\'s too long. Maximum message size is %d character.',
|
||||
'That\'s too long. Maximum message size is %d characters.',
|
||||
Message::maxContent()),
|
||||
Message::maxContent()));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$this->other) {
|
||||
// TRANS: Form validation error displayed trying to send a direct message without specifying a recipient.
|
||||
$this->showForm(_('No recipient specified.'));
|
||||
return;
|
||||
$this->clientError(_('No recipient specified.'));
|
||||
} else if (!$user->mutuallySubscribed($this->other)) {
|
||||
// TRANS: Client error displayed trying to send a direct message to a user while sender and
|
||||
// TRANS: receiver are not subscribed to each other.
|
||||
$this->clientError(_('You cannot send a message to this user.'), 404);
|
||||
return;
|
||||
} else if ($user->id == $this->other->id) {
|
||||
// TRANS: Client error displayed trying to send a direct message to self.
|
||||
$this->clientError(_('Do not send a message to yourself; ' .
|
||||
'just say it to yourself quietly instead.'), 403);
|
||||
return;
|
||||
}
|
||||
|
||||
$message = Message::saveNew($user->id, $this->other->id, $this->content, 'web');
|
||||
|
||||
if (is_string($message)) {
|
||||
$this->showForm($message);
|
||||
return;
|
||||
}
|
||||
|
||||
$message->notify();
|
||||
|
||||
if ($this->boolean('ajax')) {
|
||||
|
|
|
@ -96,7 +96,7 @@ class Message extends Managed_DataObject
|
|||
if (!$result) {
|
||||
common_log_db_error($msg, 'INSERT', __FILE__);
|
||||
// TRANS: Message given when a message could not be stored on the server.
|
||||
return _('Could not insert message.');
|
||||
throw new ServerException(_('Could not insert message.'));
|
||||
}
|
||||
|
||||
$orig = clone($msg);
|
||||
|
@ -107,7 +107,7 @@ class Message extends Managed_DataObject
|
|||
if (!$result) {
|
||||
common_log_db_error($msg, 'UPDATE', __FILE__);
|
||||
// TRANS: Message given when a message could not be updated on the server.
|
||||
return _('Could not update message with new URI.');
|
||||
throw new ServerException(_('Could not update message with new URI.'));
|
||||
}
|
||||
|
||||
return $msg;
|
||||
|
|
|
@ -1376,6 +1376,18 @@ class Action extends HTMLOutputter // lawsuit
|
|||
throw new ClientException($msg, $code);
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirect to login page (with returnto)
|
||||
*
|
||||
* @return nothing
|
||||
*/
|
||||
function needLogin()
|
||||
{
|
||||
// this might be updated with a login check before redirecting
|
||||
common_set_returnto($_SERVER['REQUEST_URI']);
|
||||
common_redirect(common_local_url('login'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current URL
|
||||
*
|
||||
|
|
|
@ -632,15 +632,15 @@ class MessageCommand extends Command
|
|||
$channel->error($this->user, _('Do not send a message to yourself; just say it to yourself quietly instead.'));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
$message = Message::saveNew($this->user->id, $other->id, $this->text, $channel->source());
|
||||
if ($message) {
|
||||
$message->notify();
|
||||
// TRANS: Message given have sent a direct message to another user.
|
||||
// TRANS: %s is the name of the other user.
|
||||
$channel->output($this->user, sprintf(_('Direct message to %s sent.'), $this->other));
|
||||
} else {
|
||||
} catch (Exception $e) {
|
||||
// TRANS: Error text shown sending a direct message fails with an unknown reason.
|
||||
$channel->error($this->user, _('Error sending direct message.'));
|
||||
$channel->error($this->user, $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user