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 /
*/
if ( ! defined ( 'STATUSNET' )) {
exit ( 1 );
}
2009-10-13 00:36:00 +01:00
require_once INSTALLDIR . '/lib/apiauth.php' ;
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
{
var $other = null ;
var $content = null ;
/**
* Take arguments for running
*
* @ param array $args $_REQUEST args
*
* @ return boolean success flag
*/
function prepare ( $args )
{
parent :: prepare ( $args );
$this -> user = $this -> auth_user ;
if ( empty ( $this -> user )) {
2010-10-25 22:51:00 +01:00
// TRANS: Client error when user not found for an API direct message action.
2009-11-08 22:10:44 +00:00
$this -> clientError ( _ ( 'No such user.' ), 404 , $this -> format );
2009-10-03 01:23:48 +01:00
return ;
}
$this -> content = $this -> trimmed ( 'text' );
$this -> user = $this -> auth_user ;
$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 )) {
$this -> other = $this -> getTargetUser ( $user_param );
}
return true ;
}
/**
* Handle the request
*
* Save the new message
*
* @ param array $args $_REQUEST data ( unused )
*
* @ return void
*/
function handle ( $args )
{
parent :: handle ( $args );
if ( $_SERVER [ 'REQUEST_METHOD' ] != 'POST' ) {
$this -> clientError (
2010-09-12 16:08:49 +01:00
// TRANS: Client error. POST is a HTTP command. It should not be translated.
2009-10-03 01:23:48 +01:00
_ ( 'This method requires a POST.' ),
400 ,
$this -> format
);
return ;
}
if ( empty ( $this -> content )) {
$this -> clientError (
2010-10-25 22:51:00 +01:00
// TRANS: Client error displayed when no message text was submitted (406).
2009-10-03 01:23:48 +01:00
_ ( 'No message text!' ),
406 ,
$this -> format
);
} 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 )) {
$this -> clientError (
2010-10-21 00:53:42 +01:00
// TRANS: Client error displayed when message content is too long.
// TRANS: %d is the maximum number of characters for a message.
2010-10-16 13:38:12 +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 ()),
2009-10-03 01:23:48 +01:00
Message :: maxContent ()
),
406 ,
$this -> format
);
return ;
}
}
if ( empty ( $this -> other )) {
2010-10-16 13:38:12 +01:00
// TRANS: Client error displayed if a recipient user could not be found (403).
2009-10-03 01:23:48 +01:00
$this -> clientError ( _ ( 'Recipient user not found.' ), 403 , $this -> format );
return ;
} else if ( ! $this -> user -> mutuallySubscribed ( $this -> other )) {
$this -> clientError (
2010-10-16 13:38:12 +01:00
// TRANS: Client error displayed trying to direct message another user who's not a friend (403).
2011-02-16 23:39:53 +00:00
_ ( 'Cannot send direct messages to users who aren\'t your friend.' ),
2009-10-03 01:23:48 +01:00
403 ,
$this -> format
);
return ;
} else if ( $this -> user -> id == $this -> other -> id ) {
// 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).
$this -> clientError ( _ ( 'Do not send a message to yourself; ' .
'just say it to yourself quietly instead.' ), 403 , $this -> format );
2009-10-03 01:23:48 +01:00
return ;
}
$message = Message :: saveNew (
$this -> user -> id ,
$this -> other -> id ,
html_entity_decode ( $this -> content , ENT_NOQUOTES , 'UTF-8' ),
$this -> source
);
if ( is_string ( $message )) {
$this -> serverError ( $message );
return ;
}
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 );
}
}
}