From 046d070ad46bb58096664dabb6f7c13a062d847d Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Fri, 7 Nov 2014 16:23:34 +0100 Subject: [PATCH] MessageCommand moved to DirectMessage plugin --- actions/apistatusesupdate.php | 2 +- lib/command.php | 73 ------------------- lib/commandinterpreter.php | 50 +++++-------- plugins/DirectMessage/DirectMessagePlugin.php | 35 +++++++++ 4 files changed, 55 insertions(+), 105 deletions(-) diff --git a/actions/apistatusesupdate.php b/actions/apistatusesupdate.php index 7bc5d899ef..b9c229ed4e 100644 --- a/actions/apistatusesupdate.php +++ b/actions/apistatusesupdate.php @@ -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; diff --git a/lib/command.php b/lib/command.php index 02324280ba..efbcf91bfe 100644 --- a/lib/command.php +++ b/lib/command.php @@ -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; diff --git a/lib/commandinterpreter.php b/lib/commandinterpreter.php index 20e7ae1acf..e7d98da025 100644 --- a/lib/commandinterpreter.php +++ b/lib/commandinterpreter.php @@ -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) { diff --git a/plugins/DirectMessage/DirectMessagePlugin.php b/plugins/DirectMessage/DirectMessagePlugin.php index 190246de3d..f24c043065 100644 --- a/plugins/DirectMessage/DirectMessagePlugin.php +++ b/plugins/DirectMessage/DirectMessagePlugin.php @@ -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