2009-10-03 01:23:48 +01:00
< ? php
/**
* StatusNet , the distributed open - source microblogging tool
*
* Send a direct message via the API
*
* 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 API
* @ package StatusNet
2009-10-13 00:36:00 +01:00
* @ author Adrian Lang < mail @ adrianlang . de >
* @ author Evan Prodromou < evan @ status . net >
* @ author Robin Millette < robin @ millette . info >
2009-10-03 01:23:48 +01:00
* @ author Zach Copley < zach @ status . net >
* @ copyright 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 /
*/
2015-07-07 18:18:45 +01:00
if ( ! defined ( 'GNUSOCIAL' )) { exit ( 1 ); }
2009-10-03 01:23:48 +01:00
/**
* Creates a new direct message from the authenticating user to
* the user specified by id .
*
* @ category API
* @ package StatusNet
2009-10-13 00:36:00 +01:00
* @ author Adrian Lang < mail @ adrianlang . de >
* @ author Evan Prodromou < evan @ status . net >
* @ author Robin Millette < robin @ millette . info >
2009-10-03 01:23:48 +01:00
* @ author Zach Copley < zach @ status . net >
* @ license http :// www . fsf . org / licensing / licenses / agpl - 3.0 . html GNU Affero General Public License version 3.0
* @ link http :// status . net /
*/
class ApiDirectMessageNewAction extends ApiAuthAction
{
2013-10-15 01:54:10 +01:00
protected $needPost = true ;
2014-04-29 19:37:58 +01:00
var $other = null ; // Profile we're sending to
2009-10-03 01:23:48 +01:00
var $content = null ;
/**
* Take arguments for running
*
* @ param array $args $_REQUEST args
*
* @ return boolean success flag
*/
2013-10-29 09:26:46 +00:00
protected function prepare ( array $args = array ())
2009-10-03 01:23:48 +01:00
{
parent :: prepare ( $args );
2015-07-07 18:18:45 +01:00
if ( ! $this -> scoped instanceof Profile ) {
2010-10-25 22:51:00 +01:00
// TRANS: Client error when user not found for an API direct message action.
2013-10-15 01:54:10 +01:00
$this -> clientError ( _ ( 'No such user.' ), 404 );
2009-10-03 01:23:48 +01:00
}
$this -> content = $this -> trimmed ( 'text' );
$user_param = $this -> trimmed ( 'user' );
$user_id = $this -> arg ( 'user_id' );
$screen_name = $this -> trimmed ( 'screen_name' );
if ( isset ( $user_param ) || isset ( $user_id ) || isset ( $screen_name )) {
2014-04-29 19:37:58 +01:00
$this -> other = $this -> getTargetProfile ( $user_param );
2009-10-03 01:23:48 +01:00
}
return true ;
}
/**
* Handle the request
*
* Save the new message
*
* @ return void
*/
2013-10-15 01:54:10 +01:00
protected function handle ()
2009-10-03 01:23:48 +01:00
{
2013-10-15 01:54:10 +01:00
parent :: handle ();
2009-10-03 01:23:48 +01:00
if ( empty ( $this -> content )) {
2013-10-15 01:54:10 +01:00
// TRANS: Client error displayed when no message text was submitted (406).
$this -> clientError ( _ ( 'No message text!' ), 406 );
2009-10-03 01:23:48 +01:00
} else {
2010-12-02 18:56:44 +00:00
$content_shortened = $this -> auth_user -> shortenLinks ( $this -> content );
2009-10-03 01:23:48 +01:00
if ( Message :: contentTooLong ( $content_shortened )) {
2013-10-15 01:54:10 +01:00
// TRANS: Client error displayed when message content is too long.
// TRANS: %d is the maximum number of characters for a message.
2009-10-03 01:23:48 +01:00
$this -> clientError (
2013-10-15 01:54:10 +01:00
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 ()),
406 );
2009-10-03 01:23:48 +01:00
}
}
2014-04-29 19:37:58 +01:00
if ( ! $this -> other instanceof Profile ) {
2010-10-16 13:38:12 +01:00
// TRANS: Client error displayed if a recipient user could not be found (403).
2013-10-15 01:54:10 +01:00
$this -> clientError ( _ ( 'Recipient user not found.' ), 403 );
2015-07-07 18:18:45 +01:00
} else if ( ! $this -> scoped -> mutuallySubscribed ( $this -> other )) {
2013-10-15 01:54:10 +01:00
// TRANS: Client error displayed trying to direct message another user who's not a friend (403).
$this -> clientError ( _ ( 'Cannot send direct messages to users who aren\'t your friend.' ), 403 );
2015-07-07 18:18:45 +01:00
} else if ( $this -> scoped -> getID () === $this -> other -> getID ()) {
2009-10-03 01:23:48 +01:00
// Note: sending msgs to yourself is allowed by Twitter
2010-10-16 13:38:12 +01:00
// TRANS: Client error displayed trying to direct message self (403).
2013-10-15 01:54:10 +01:00
$this -> clientError ( _ ( 'Do not send a message to yourself; just say it to yourself quietly instead.' ), 403 );
2009-10-03 01:23:48 +01:00
}
$message = Message :: saveNew (
2015-07-07 18:18:45 +01:00
$this -> scoped -> getID (),
$this -> other -> getID (),
2009-10-03 01:23:48 +01:00
html_entity_decode ( $this -> content , ENT_NOQUOTES , 'UTF-8' ),
$this -> source
);
2009-12-15 15:31:25 +00:00
$message -> notify ();
2009-10-03 01:23:48 +01:00
if ( $this -> format == 'xml' ) {
$this -> showSingleXmlDirectMessage ( $message );
} elseif ( $this -> format == 'json' ) {
$this -> showSingleJsondirectMessage ( $message );
}
}
}