Merge branch '0.9.x' of gitorious.org:statusnet/mainline into 0.9.x

This commit is contained in:
Evan Prodromou 2011-02-21 16:36:12 -05:00
commit f743a233ab
5 changed files with 296 additions and 81 deletions

View File

@ -1333,7 +1333,7 @@ class Notice extends Memcached_DataObject
$groups = $this->getGroups(); $groups = $this->getGroups();
foreach ($groups as $group) { foreach ($groups as $group) {
$ctx->attention[] = $group->uri; $ctx->attention[] = $group->getUri();
} }
// XXX: deprecated; use ActivityVerb::SHARE instead // 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}'"); 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)); 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)); 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)); Event::handle('EndRevokeRole', array($this, $name));
return true; return true;

View File

@ -32,19 +32,40 @@ Commands
You can do some minor management of your account through Jabber. These are the You can do some minor management of your account through Jabber. These are the
currently-implemented commands: currently-implemented commands:
* **on**: Turn on notifications. You'll receive copies of messages by people * **on** - turn on notifications
you subscribe to. * **off** - turn off notifications
* **off**: Turn off notifications. You'll no longer receive Jabber * **help** - show this help
notifications. * **follow <nickname>** - subscribe to user
* **stop**: Same as 'off' * **groups** - lists the groups you have joined
* **quit**: Same as 'off' * **subscriptions** - list the people you follow
* **help**: Show this help. List available Jabber/XMPP commands * **subscribers** - list the people that follow you
* **follow <nickname>**: Subscribe to <nickname> * **leave <nickname>** - unsubscribe from user
* **sub <nickname>**: Same as follow * **d <nickname> <text>** - direct message to user
* **leave <nickname>**: Unsubscribe from <nickname> * **get <nickname>** - get last notice from user
* **unsub <nickname>**: Same as leave * **whois <nickname>** - get profile info on user
* **d <nickname> <text>**: Send direct message to <nickname> with message body <text> * **lose <nickname>** - force user to stop following you
* **get <nickname>**: Get last notice from <nickname> * **fav <nickname>** - add user's last notice as a 'fave'
* **last <nickname>**: Same as 'get' * **fav #<notice_id>** - add notice with the given id as a 'fave'
* **whois <nickname>**: Get Profile info on <nickname> * **repeat #<notice_id>** - repeat a notice with a given id
* **fav <nickname>**: Add user's last notice as a favorite * **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': case 'help':
if ($arg) { if ($arg) {
$result = null; $result = null;
} else {
$result = new HelpCommand($user);
} }
$result = new HelpCommand($user);
break; break;
case 'login': case 'login':
if ($arg) { if ($arg) {
@ -120,49 +121,51 @@ class CommandInterpreter
case 'join': case 'join':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else { } else {
$result = new JoinCommand($user, $other); list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new JoinCommand($user, $other);
}
} }
break; break;
case 'drop': case 'drop':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else { } else {
$result = new DropCommand($user, $other); list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new DropCommand($user, $other);
}
} }
break; break;
case 'follow': case 'follow':
case 'sub': case 'sub':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else { } else {
$result = new SubCommand($user, $other); list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new SubCommand($user, $other);
}
} }
break; break;
case 'leave': case 'leave':
case 'unsub': case 'unsub':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else { } else {
$result = new UnsubCommand($user, $other); list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new UnsubCommand($user, $other);
}
} }
break; break;
case 'get': case 'get':
@ -207,96 +210,105 @@ class CommandInterpreter
case 'rd': case 'rd':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else { } else {
$result = new RepeatCommand($user, $other); list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new RepeatCommand($user, $other);
}
} }
break; break;
case 'whois': case 'whois':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else { } else {
$result = new WhoisCommand($user, $other); list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new WhoisCommand($user, $other);
}
} }
break; break;
case 'fav': case 'fav':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else { } else {
$result = new FavCommand($user, $other); list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new FavCommand($user, $other);
}
} }
break; break;
case 'nudge': case 'nudge':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else { } else {
$result = new NudgeCommand($user, $other); list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new NudgeCommand($user, $other);
}
} }
break; break;
case 'stats': case 'stats':
if ($arg) { if ($arg) {
$result = null; $result = null;
} else {
$result = new StatsCommand($user);
} }
$result = new StatsCommand($user);
break; break;
case 'invite': case 'invite':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else { } else {
$result = new InviteCommand($user, $other); list($other, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else {
$result = new InviteCommand($user, $other);
}
} }
break; break;
case 'track': case 'track':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($word, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else if ($word == 'off') {
$result = new TrackOffCommand($user);
} else { } 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; break;
case 'untrack': case 'untrack':
if (!$arg) { if (!$arg) {
$result = null; $result = null;
}
list($word, $extra) = $this->split_arg($arg);
if ($extra) {
$result = null;
} else if ($word == 'all') {
$result = new TrackOffCommand($user);
} else { } 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; break;
case 'tracks': case 'tracks':
case 'tracking': case 'tracking':
if ($arg) { if ($arg) {
$result = null; $result = null;
} else {
$result = new TrackingCommand($user);
} }
$result = new TrackingCommand($user);
break; break;
default: default:
$result = false; $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;
}
}