]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
MessageCommand moved to DirectMessage plugin
authorMikael Nordfeldth <mmn@hethane.se>
Fri, 7 Nov 2014 15:23:34 +0000 (16:23 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Fri, 7 Nov 2014 15:23:34 +0000 (16:23 +0100)
actions/apistatusesupdate.php
lib/command.php
lib/commandinterpreter.php
plugins/DirectMessage/DirectMessagePlugin.php

index 7bc5d899ef96a57e5f0348c9758531509c97fd21..b9c229ed4ecddf5ca8fd767d4c2a73ddf0250de5 100644 (file)
@@ -336,7 +336,7 @@ class ApiStatusesUpdateAction extends ApiAuthAction
      */
     function supported($cmd)
     {
-        static $cmdlist = array('MessageCommand', 'SubCommand', 'UnsubCommand',
+        static $cmdlist = array('SubCommand', 'UnsubCommand',
             'OnCommand', 'OffCommand', 'JoinCommand', 'LeaveCommand');
 
         $supported = null;
index 02324280baec871a361c7700e591cb6d1c3f931b..efbcf91bfe881f8c50bcc62116d32218164024c0 100644 (file)
@@ -523,79 +523,6 @@ class WhoisCommand extends Command
     }
 }
 
-class MessageCommand extends Command
-{
-    var $other = null;
-    var $text = null;
-    function __construct($user, $other, $text)
-    {
-        parent::__construct($user);
-        $this->other = $other;
-        $this->text = $text;
-    }
-
-    function handle($channel)
-    {
-        try {
-            $other = $this->getUser($this->other)->getProfile();
-        } catch (CommandException $e) {
-            try {
-                $profile = $this->getProfile($this->other);
-            } catch (CommandException $f) {
-                throw $e;
-            }
-            // TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
-            // TRANS: %s is a remote profile.
-            throw new CommandException(sprintf(_('%s is a remote profile; you can only send direct messages to users on the same server.'), $this->other));
-        }
-
-        $len = mb_strlen($this->text);
-
-        if ($len == 0) {
-            // TRANS: Command exception text shown when trying to send a direct message to another user without content.
-            $channel->error($this->user, _('No content!'));
-            return;
-        }
-
-        $this->text = $this->user->shortenLinks($this->text);
-
-        if (Message::contentTooLong($this->text)) {
-            // XXX: i18n. Needs plural support.
-            // TRANS: Message given if content is too long. %1$sd is used for plural.
-            // TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-            $channel->error($this->user, sprintf(_m('Message too long - maximum is %1$d character, you sent %2$d.',
-                                                    'Message too long - maximum is %1$d characters, you sent %2$d.',
-                                                    Message::maxContent()),
-                                                 Message::maxContent(), mb_strlen($this->text)));
-            return;
-        }
-
-        if (!$other instanceof Profile) {
-            // TRANS: Error text shown when trying to send a direct message to a user that does not exist.
-            $channel->error($this->user, _('No such user.'));
-            return;
-        } else if (!$this->user->mutuallySubscribed($other)) {
-            // TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
-            $channel->error($this->user, _('You can\'t send a message to this user.'));
-            return;
-        } else if ($this->user->id == $other->id) {
-            // TRANS: Error text shown when trying to send a direct message to self.
-            $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());
-            $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));
-        } catch (Exception $e) {
-            // TRANS: Error text shown sending a direct message fails with an unknown reason.
-            $channel->error($this->user, $e->getMessage());
-        }
-    }
-}
-
 class RepeatCommand extends Command
 {
     var $other = null;
index 20e7ae1acf99cbc3e32219e394b5559713e064ae..e7d98da0255048b9786acc8506f72620f1a3aba2 100644 (file)
@@ -28,7 +28,7 @@ class CommandInterpreter
         // XXX: localise
 
         $text = preg_replace('/\s+/', ' ', trim($text));
-        list($cmd, $arg) = $this->split_arg($text);
+        list($cmd, $arg) = self::split_arg($text);
 
         // We try to support all the same commands as Twitter, see
         // http://getsatisfaction.com/twitter/topics/what_are_the_twitter_commands
@@ -55,7 +55,7 @@ class CommandInterpreter
                 break;
             case 'lose':
                 if ($arg) {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -88,7 +88,7 @@ class CommandInterpreter
                 break;
             case 'on':
                 if ($arg) {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -100,7 +100,7 @@ class CommandInterpreter
                 break;
             case 'off':
                 if ($arg) {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -122,7 +122,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -134,7 +134,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -147,7 +147,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -160,7 +160,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -173,31 +173,19 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 }
-                list($other, $extra) = $this->split_arg($arg);
+                list($other, $extra) = self::split_arg($arg);
                 if ($extra) {
                     $result = null;
                 } else {
                     $result = new GetCommand($user, $other);
                 }
                 break;
-            case 'd':
-            case 'dm':
-                if (!$arg) {
-                    $result = null;
-                }
-                list($other, $extra) = $this->split_arg($arg);
-                if (!$extra) {
-                    $result = null;
-                } else {
-                    $result = new MessageCommand($user, $other, $extra);
-                }
-                break;
             case 'r':
             case 'reply':
                 if (!$arg) {
                     $result = null;
                 }
-                list($other, $extra) = $this->split_arg($arg);
+                list($other, $extra) = self::split_arg($arg);
                 if (!$extra) {
                     $result = null;
                 } else {
@@ -211,7 +199,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -223,7 +211,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -235,7 +223,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -254,7 +242,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($other, $extra) = $this->split_arg($arg);
+                    list($other, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else {
@@ -268,7 +256,7 @@ class CommandInterpreter
                     $result = null;
                     break;
                 }
-                list($other, $tags) = $this->split_arg($arg);
+                list($other, $tags) = self::split_arg($arg);
                 if (!$tags) {
                     $result = null;
                 } else {
@@ -281,7 +269,7 @@ class CommandInterpreter
                     $result = null;
                     break;
                 }
-                list($other, $tags) = $this->split_arg($arg);
+                list($other, $tags) = self::split_arg($arg);
                 if (!$tags) {
                     $result = null;
                 } else {
@@ -292,7 +280,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($word, $extra) = $this->split_arg($arg);
+                    list($word, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else if ($word == 'off') {
@@ -306,7 +294,7 @@ class CommandInterpreter
                 if (!$arg) {
                     $result = null;
                 } else {
-                    list($word, $extra) = $this->split_arg($arg);
+                    list($word, $extra) = self::split_arg($arg);
                     if ($extra) {
                         $result = null;
                     } else if ($word == 'all') {
@@ -337,7 +325,7 @@ class CommandInterpreter
     /**
      * Split arguments without triggering a PHP notice warning
      */
-    function split_arg($text)
+    static function split_arg($text)
     {
         $pieces = explode(' ', $text, 2);
         if (count($pieces) == 1) {
index 190246de3df325a28130a70b6a8f073b39484139..f24c043065a9eb5d2853af5535f1636db9d6ca67 100644 (file)
@@ -76,6 +76,41 @@ class DirectMessagePlugin extends Plugin
         return true;
     }
 
+    /**
+     * Are we allowed to perform a certain command over the API?
+     */
+    public function onCommandSupportedAPI(Command $cmd, &$supported)
+    {
+        $supported = $supported || $cmd instanceof MessageCommand;
+        return true;
+    }
+
+    /**
+     * EndInterpretCommand will handle the 'd' and 'dm' commands.
+     *
+     * @param string  $cmd     Command being run
+     * @param string  $arg     Rest of the message (including address)
+     * @param User    $user    User sending the message
+     * @param Command &$result The resulting command object to be run.
+     *
+     * @return boolean hook value
+     */
+    public function onStartInterpretCommand($cmd, $arg, $user, &$result)
+    {
+        $dm_cmds = array('d', 'dm');
+
+        if ($result === false && in_array($cmd, $dm_cmds)) {
+            if (!empty($arg)) {
+                list($other, $extra) = CommandInterpreter::split_arg($arg);
+                if (!empty($extra)) {
+                    $result = new MessageCommand($user, $other, $extra);
+                }
+            }
+            return false;
+        }
+        return true;
+    }
+
     public function onEndPersonalGroupNav(Menu $menu, Profile $target, Profile $scoped=null)
     {
         if ($scoped instanceof Profile && $scoped->id == $target->id