*/
function supported($cmd)
{
- static $cmdlist = array('MessageCommand', 'SubCommand', 'UnsubCommand',
+ static $cmdlist = array('SubCommand', 'UnsubCommand',
'OnCommand', 'OffCommand', 'JoinCommand', 'LeaveCommand');
$supported = null;
}
}
-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;
// 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
break;
case 'lose':
if ($arg) {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
break;
case 'on':
if ($arg) {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
break;
case 'off':
if ($arg) {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
if (!$arg) {
$result = null;
} else {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
if (!$arg) {
$result = null;
} else {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
if (!$arg) {
$result = null;
} else {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
if (!$arg) {
$result = null;
} else {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
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 {
if (!$arg) {
$result = null;
} else {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
if (!$arg) {
$result = null;
} else {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
if (!$arg) {
$result = null;
} else {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
if (!$arg) {
$result = null;
} else {
- list($other, $extra) = $this->split_arg($arg);
+ list($other, $extra) = self::split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = null;
break;
}
- list($other, $tags) = $this->split_arg($arg);
+ list($other, $tags) = self::split_arg($arg);
if (!$tags) {
$result = null;
} else {
$result = null;
break;
}
- list($other, $tags) = $this->split_arg($arg);
+ list($other, $tags) = self::split_arg($arg);
if (!$tags) {
$result = null;
} else {
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') {
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') {
/**
* 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) {
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