]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/apidirectmessagenew.php
Fix Direct Message functionality.
[quix0rs-gnu-social.git] / actions / apidirectmessagenew.php
index e6c39ce4ac6e6950e34d45abd00abbf2884fb44d..653fa3a9ed0ce88c045d996d509393a5fd64faa7 100644 (file)
@@ -34,8 +34,6 @@ if (!defined('STATUSNET')) {
     exit(1);
 }
 
-require_once INSTALLDIR . '/lib/apiauth.php';
-
 /**
  * Creates a new direct message from the authenticating user to
  * the user specified by id.
@@ -49,11 +47,11 @@ require_once INSTALLDIR . '/lib/apiauth.php';
  * @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 $source  = null;
-    var $other   = null;
+    protected $needPost = true;
+
+    var $other   = null;    // Profile we're sending to
     var $content = null;
 
     /**
@@ -62,37 +60,24 @@ class ApiDirectMessageNewAction extends ApiAuthAction
      * @param array $args $_REQUEST args
      *
      * @return boolean success flag
-     *
      */
-
-    function prepare($args)
+    protected function prepare(array $args=array())
     {
         parent::prepare($args);
 
-        $this->user = $this->auth_user;
-
         if (empty($this->user)) {
-            $this->clientError(_('No such user.'), 404, $this->format);
-            return;
-        }
-
-        $this->source = $this->trimmed('source'); // Not supported by Twitter.
-
-        $reserved_sources = array('web', 'omb', 'mail', 'xmpp', 'api');
-        if (empty($this->source) || in_array($this->source, $reserved_sources)) {
-            $source = 'api';
+            // TRANS: Client error when user not found for an API direct message action.
+            $this->clientError(_('No such user.'), 404);
         }
 
         $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);
+            $this->other = $this->getTargetProfile($user_param);
         }
 
         return true;
@@ -103,64 +88,38 @@ class ApiDirectMessageNewAction extends ApiAuthAction
      *
      * Save the new message
      *
-     * @param array $args $_REQUEST data (unused)
-     *
      * @return void
      */
-
-    function handle($args)
+    protected function handle()
     {
-        parent::handle($args);
-
-        if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-            $this->clientError(
-                _('This method requires a POST.'),
-                400,
-                $this->format
-            );
-            return;
-        }
+        parent::handle();
 
         if (empty($this->content)) {
-            $this->clientError(
-                _('No message text!'),
-                406,
-                $this->format
-            );
+            // TRANS: Client error displayed when no message text was submitted (406).
+            $this->clientError(_('No message text!'), 406);
         } else {
-            $content_shortened = common_shorten_links($this->content);
+            $content_shortened = $this->auth_user->shortenLinks($this->content);
             if (Message::contentTooLong($content_shortened)) {
+                // TRANS: Client error displayed when message content is too long.
+                // TRANS: %d is the maximum number of characters for a message.
                 $this->clientError(
-                    sprintf(
-                        _('That\'s too long. Max message size is %d chars.'),
-                        Message::maxContent()
-                    ),
-                    406,
-                    $this->format
-                );
-                return;
+                    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);
             }
         }
 
-        if (empty($this->other)) {
-            $this->clientError(_('Recipient user not found.'), 403, $this->format);
-            return;
+        if (!$this->other instanceof Profile) {
+            // TRANS: Client error displayed if a recipient user could not be found (403).
+            $this->clientError(_('Recipient user not found.'), 403);
         } else if (!$this->user->mutuallySubscribed($this->other)) {
-            $this->clientError(
-                _('Can\'t send direct messages to users who aren\'t your friend.'),
-                403,
-                $this->format
-            );
-            return;
+            // 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);
         } else if ($this->user->id == $this->other->id) {
 
             // Note: sending msgs to yourself is allowed by Twitter
 
-            $errmsg = 'Don\'t send a message to yourself; ' .
-                   'just say it to yourself quietly instead.';
-
-            $this->clientError(_($errmsg), 403, $this->format);
-            return;
+            // 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);
         }
 
         $message = Message::saveNew(
@@ -170,12 +129,7 @@ class ApiDirectMessageNewAction extends ApiAuthAction
             $this->source
         );
 
-        if (is_string($message)) {
-            $this->serverError($message);
-            return;
-        }
-
-        mail_notify_message($message, $this->user, $this->other);
+        $message->notify();
 
         if ($this->format == 'xml') {
             $this->showSingleXmlDirectMessage($message);
@@ -183,6 +137,4 @@ class ApiDirectMessageNewAction extends ApiAuthAction
             $this->showSingleJsondirectMessage($message);
         }
     }
-
 }
-