Merge branch '0.9.x' of gitorious.org:statusnet/mainline into 0.9.x
This commit is contained in:
commit
f743a233ab
@ -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
|
||||
|
@ -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;
|
||||
|
53
doc-src/im
53
doc-src/im
@ -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.
|
||||
|
@ -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;
|
||||
|
174
tests/CommandInterperterTest.php
Normal file
174
tests/CommandInterperterTest.php
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user