Merge branch 'master' into 0.9.x

This commit is contained in:
Brion Vibber 2011-02-21 12:33:47 -08:00
commit 2e1c7c779d
5 changed files with 296 additions and 81 deletions

View File

@ -1333,7 +1333,7 @@ class Notice extends Memcached_DataObject
$groups = $this->getGroups();
foreach ($groups as $group) {
$ctx->attention[] = $group->uri;
$ctx->attention[] = $group->getUri();
}
// XXX: deprecated; use ActivityVerb::SHARE instead

View File

@ -752,6 +752,10 @@ class Profile extends Memcached_DataObject
throw new Exception("Can't save role '$name' for profile '{$this->id}'");
}
if ($name == 'owner') {
User::blow('user:site_owner');
}
Event::handle('EndGrantRole', array($this, $name));
}
@ -780,6 +784,10 @@ class Profile extends Memcached_DataObject
throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; database error.'),$name, $this->id));
}
if ($name == 'owner') {
User::blow('user:site_owner');
}
Event::handle('EndRevokeRole', array($this, $name));
return true;

View File

@ -32,19 +32,40 @@ Commands
You can do some minor management of your account through Jabber. These are the
currently-implemented commands:
* **on**: Turn on notifications. You'll receive copies of messages by people
you subscribe to.
* **off**: Turn off notifications. You'll no longer receive Jabber
notifications.
* **stop**: Same as 'off'
* **quit**: Same as 'off'
* **help**: Show this help. List available Jabber/XMPP commands
* **follow <nickname>**: Subscribe to <nickname>
* **sub <nickname>**: Same as follow
* **leave <nickname>**: Unsubscribe from <nickname>
* **unsub <nickname>**: Same as leave
* **d <nickname> <text>**: Send direct message to <nickname> with message body <text>
* **get <nickname>**: Get last notice from <nickname>
* **last <nickname>**: Same as 'get'
* **whois <nickname>**: Get Profile info on <nickname>
* **fav <nickname>**: Add user's last notice as a favorite
* **on** - turn on notifications
* **off** - turn off notifications
* **help** - show this help
* **follow <nickname>** - subscribe to user
* **groups** - lists the groups you have joined
* **subscriptions** - list the people you follow
* **subscribers** - list the people that follow you
* **leave <nickname>** - unsubscribe from user
* **d <nickname> <text>** - direct message to user
* **get <nickname>** - get last notice from user
* **whois <nickname>** - get profile info on user
* **lose <nickname>** - force user to stop following you
* **fav <nickname>** - add user's last notice as a 'fave'
* **fav #<notice_id>** - add notice with the given id as a 'fave'
* **repeat #<notice_id>** - repeat a notice with a given id
* **repeat <nickname>** - repeat the last notice from user
* **reply #<notice_id>** - reply to notice with a given id
* **reply <nickname>** - reply to the last notice from user
* **join <group>** - join group
* **login** - Get a link to login to the web interface
* **drop <group>** - leave group
* **stats** - get your stats
* **stop** - same as 'off'
* **quit** - same as 'off'
* **sub <nickname>** - same as 'follow'
* **unsub <nickname>** - same as 'leave'
* **last <nickname>** - same as 'get'
* **on <nickname>** - not yet implemented.
* **off <nickname>** - not yet implemented.
* **nudge <nickname>** - remind a user to update.
* **invite <phone number>** - not yet implemented.
* **track <word>** - not yet implemented.
* **untrack <word>** - not yet implemented.
* **track off** - not yet implemented.
* **untrack all** - not yet implemented.
* **tracks** - not yet implemented.
* **tracking** - not yet implemented.

View File

@ -42,8 +42,9 @@ class CommandInterpreter
case 'help':
if ($arg) {
$result = null;
} else {
$result = new HelpCommand($user);
}
$result = new HelpCommand($user);
break;
case 'login':
if ($arg) {
@ -120,49 +121,51 @@ class CommandInterpreter
case 'join':
if (!$arg) {
$result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new JoinCommand($user, $other);
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new JoinCommand($user, $other);
}
}
break;
case 'drop':
if (!$arg) {
$result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new DropCommand($user, $other);
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new DropCommand($user, $other);
}
}
break;
case 'follow':
case 'sub':
if (!$arg) {
$result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new SubCommand($user, $other);
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new SubCommand($user, $other);
}
}
break;
case 'leave':
case 'unsub':
if (!$arg) {
$result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new UnsubCommand($user, $other);
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new UnsubCommand($user, $other);
}
}
break;
case 'get':
@ -207,96 +210,105 @@ class CommandInterpreter
case 'rd':
if (!$arg) {
$result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new RepeatCommand($user, $other);
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new RepeatCommand($user, $other);
}
}
break;
case 'whois':
if (!$arg) {
$result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new WhoisCommand($user, $other);
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new WhoisCommand($user, $other);
}
}
break;
case 'fav':
if (!$arg) {
$result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new FavCommand($user, $other);
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new FavCommand($user, $other);
}
}
break;
case 'nudge':
if (!$arg) {
$result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new NudgeCommand($user, $other);
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new NudgeCommand($user, $other);
}
}
break;
case 'stats':
if ($arg) {
$result = null;
} else {
$result = new StatsCommand($user);
}
$result = new StatsCommand($user);
break;
case 'invite':
if (!$arg) {
$result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new InviteCommand($user, $other);
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new InviteCommand($user, $other);
}
}
break;
case 'track':
if (!$arg) {
$result = null;
}
list($word, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else if ($word == 'off') {
$result = new TrackOffCommand($user);
} else {
$result = new TrackCommand($user, $word);
list($word, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else if ($word == 'off') {
$result = new TrackOffCommand($user);
} else {
$result = new TrackCommand($user, $word);
}
}
break;
case 'untrack':
if (!$arg) {
$result = null;
}
list($word, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else if ($word == 'all') {
$result = new TrackOffCommand($user);
} else {
$result = new UntrackCommand($user, $word);
list($word, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else if ($word == 'all') {
$result = new TrackOffCommand($user);
} else {
$result = new UntrackCommand($user, $word);
}
}
break;
case 'tracks':
case 'tracking':
if ($arg) {
$result = null;
} else {
$result = new TrackingCommand($user);
}
$result = new TrackingCommand($user);
break;
default:
$result = false;

View File

@ -0,0 +1,174 @@
<?php
if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
print "This script must be run from the command line\n";
exit();
}
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
define('STATUSNET', true);
define('LACONICA', true);
require_once INSTALLDIR . '/lib/common.php';
class CommandInterpreterTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider commandInterpreterCases
*/
public function testCommandInterpreter($input, $expectedType, $comment='')
{
$inter = new CommandInterpreter();
$user = new User(); // fake user
$user->limit(1);
$user->find();
$cmd = $inter->handle_command($user, $input);
$type = $cmd ? get_class($cmd) : null;
$this->assertEquals(strtolower($expectedType), strtolower($type), $comment);
}
static public function commandInterpreterCases()
{
$sets = array(
array('help', 'HelpCommand'),
array('help me bro', null, 'help does not accept multiple params'),
array('HeLP', 'HelpCommand', 'case check'),
array('HeLP Me BRO!', null, 'case & non-params check'),
array('login', 'LoginCommand'),
array('login to savings!', null, 'login does not accept params'),
array('lose', null, 'lose must have at least 1 parameter'),
array('lose foobar', 'LoseCommand', 'lose requires 1 parameter'),
array('lose foobar', 'LoseCommand', 'check for space norm'),
array('lose more weight', null, 'lose does not accept multiple params'),
array('subscribers', 'SubscribersCommand'),
array('subscribers foo', null, 'subscribers does not take params'),
array('subscriptions', 'SubscriptionsCommand'),
array('subscriptions foo', null, 'subscriptions does not take params'),
array('groups', 'GroupsCommand'),
array('groups foo', null, 'groups does not take params'),
array('off', 'OffCommand', 'off accepts 0 or 1 params'),
array('off foo', 'OffCommand', 'off accepts 0 or 1 params'),
array('off foo bar', null, 'off accepts 0 or 1 params'),
array('stop', 'OffCommand', 'stop accepts 0 params'),
array('stop foo', null, 'stop accepts 0 params'),
array('quit', 'OffCommand', 'quit accepts 0 params'),
array('quit foo', null, 'quit accepts 0 params'),
array('on', 'OnCommand', 'on accepts 0 or 1 params'),
array('on foo', 'OnCommand', 'on accepts 0 or 1 params'),
array('on foo bar', null, 'on accepts 0 or 1 params'),
array('join', null),
array('join foo', 'JoinCommand'),
array('join foo bar', null),
array('drop', null),
array('drop foo', 'DropCommand'),
array('drop foo bar', null),
array('follow', null),
array('follow foo', 'SubCommand'),
array('follow foo bar', null),
array('sub', null),
array('sub foo', 'SubCommand'),
array('sub foo bar', null),
array('leave', null),
array('leave foo', 'UnsubCommand'),
array('leave foo bar', null),
array('unsub', null),
array('unsub foo', 'UnsubCommand'),
array('unsub foo bar', null),
array('leave', null),
array('leave foo', 'UnsubCommand'),
array('leave foo bar', null),
array('d', null),
array('d foo', null),
array('d foo bar', 'MessageCommand'),
array('dm', null),
array('dm foo', null),
array('dm foo bar', 'MessageCommand'),
array('r', null),
array('r foo', null),
array('r foo bar', 'ReplyCommand'),
array('reply', null),
array('reply foo', null),
array('reply foo bar', 'ReplyCommand'),
array('repeat', null),
array('repeat foo', 'RepeatCommand'),
array('repeat foo bar', null),
array('rp', null),
array('rp foo', 'RepeatCommand'),
array('rp foo bar', null),
array('rt', null),
array('rt foo', 'RepeatCommand'),
array('rt foo bar', null),
array('rd', null),
array('rd foo', 'RepeatCommand'),
array('rd foo bar', null),
array('whois', null),
array('whois foo', 'WhoisCommand'),
array('whois foo bar', null),
array('fav', null),
array('fav foo', 'FavCommand'),
array('fav foo bar', null),
array('nudge', null),
array('nudge foo', 'NudgeCommand'),
array('nudge foo bar', null),
array('stats', 'StatsCommand'),
array('stats foo', null),
array('invite', null),
array('invite foo', 'InviteCommand'),
array('invite foo bar', null),
array('track', null),
array('track foo', 'TrackCommand'),
array('track off', 'TrackOffCommand'),
array('track foo bar', null),
array('track off foo', null),
array('untrack', null),
array('untrack foo', 'UntrackCommand'),
array('untrack all', 'TrackOffCommand'),
array('untrack foo bar', null),
array('untrack all foo', null),
array('tracking', 'TrackingCommand'),
array('tracking foo', null),
array('tracks', 'TrackingCommand'),
array('tracks foo', null),
);
return $sets;
}
}