Add lose <nickname> command to the command interpreter

This commit is contained in:
Craig Andrews 2010-02-22 22:57:16 -05:00
parent daccaeb748
commit f0d1d07b94
3 changed files with 84 additions and 1 deletions

View File

@ -668,6 +668,34 @@ class LoginCommand extends Command
}
}
class LoseCommand extends Command
{
var $other = null;
function __construct($user, $other)
{
parent::__construct($user);
$this->other = $other;
}
function execute($channel)
{
if(!$this->other) {
$channel->error($this->user, _('Specify the name of the user to unsubscribe from'));
return;
}
$result=subs_unsubscribe_from($this->user, $this->other);
if ($result) {
$channel->output($this->user, sprintf(_('Unsubscribed %s'), $this->other));
} else {
$channel->error($this->user, $result);
}
}
}
class SubscriptionsCommand extends Command
{
function execute($channel)
@ -750,6 +778,7 @@ class HelpCommand extends Command
"d <nickname> <text> - direct message to user\n".
"get <nickname> - get last notice from user\n".
"whois <nickname> - get profile info on user\n".
"lose <nickname> - force user to stop following you\n".
"fav <nickname> - add user's last notice as a 'fave'\n".
"fav #<notice_id> - add notice with the given id as a 'fave'\n".
"repeat #<notice_id> - repeat a notice with a given id\n".

View File

@ -47,6 +47,17 @@ class CommandInterpreter
} else {
return new LoginCommand($user);
}
case 'lose':
if ($arg) {
list($other, $extra) = $this->split_arg($arg);
if ($extra) {
return null;
} else {
return new LoseCommand($user, $other);
}
} else {
return null;
}
case 'subscribers':
if ($arg) {
return null;

View File

@ -42,4 +42,47 @@ function subs_unsubscribe_to($user, $other)
} catch (Exception $e) {
return $e->getMessage();
}
}
}
function subs_unsubscribe_from($user, $other){
$local = User::staticGet("nickname",$other);
if($local){
return subs_unsubscribe_to($local,$user);
} else {
try {
$remote = Profile::staticGet("nickname",$other);
if(is_string($remote)){
return $remote;
}
if (Event::handle('StartUnsubscribe', array($remote,$user))) {
$sub = DB_DataObject::factory('subscription');
$sub->subscriber = $remote->id;
$sub->subscribed = $user->id;
$sub->find(true);
// note we checked for existence above
if (!$sub->delete())
return _('Couldn\'t delete subscription.');
$cache = common_memcache();
if ($cache) {
$cache->delete(common_cache_key('user:notices_with_friends:' . $remote->id));
}
$user->blowSubscribersCount();
$remote->blowSubscribersCount();
Event::handle('EndUnsubscribe', array($remote, $user));
}
} catch (Exception $e) {
return $e->getMessage();
}
}
}