X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fcommand.php;h=830b97ee239e9d8ba693efb3aa7f3ebf1b5cde4a;hb=4ea396f8718648ef6b900ea2aa8a7cad9f14d721;hp=a922aa73ac57b66091551c00b843598ca8d6895e;hpb=4d61760154a53e39d1e0499d5fe7a4a586e7a9f0;p=quix0rs-gnu-social.git diff --git a/lib/command.php b/lib/command.php index a922aa73ac..830b97ee23 100644 --- a/lib/command.php +++ b/lib/command.php @@ -17,16 +17,18 @@ * along with this program. If not, see . */ -if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } +if (!defined('GNUSOCIAL')) { exit(1); } require_once(INSTALLDIR.'/lib/channel.php'); class Command { + protected $scoped = null; // The Profile of the user performing the command var $user = null; function __construct($user=null) { + $this->scoped = $user->getProfile(); $this->user = $user; } @@ -76,7 +78,7 @@ class Command if(substr($this->other,0,1)=='#'){ // A specific notice_id #123 - $notice = Notice::staticGet(substr($arg,1)); + $notice = Notice::getKV(substr($arg,1)); if (!$notice) { // TRANS: Command exception text shown when a notice ID is requested that does not exist. throw new CommandException(_('Notice with that id does not exist.')); @@ -85,7 +87,7 @@ class Command if (Validate::uri($this->other)) { // A specific notice by URI lookup - $notice = Notice::staticGet('uri', $arg); + $notice = Notice::getKV('uri', $arg); } if (!$notice) { @@ -139,7 +141,7 @@ class Command { $user = null; if (Event::handle('StartCommandGetUser', array($this, $arg, &$user))) { - $user = User::staticGet('nickname', Nickname::normalize($arg)); + $user = User::getKV('nickname', Nickname::normalize($arg)); } Event::handle('EndCommandGetUser', array($this, $arg, &$user)); if (!$user){ @@ -180,7 +182,7 @@ class UnimplementedCommand extends Command function handle($channel) { // TRANS: Error text shown when an unimplemented command is given. - $channel->error($this->user, _("Sorry, this command is not yet implemented.")); + $channel->error($this->user, _('Sorry, this command is not yet implemented.')); } } @@ -274,57 +276,6 @@ class StatsCommand extends Command } } -class FavCommand extends Command -{ - var $other = null; - - function __construct($user, $other) - { - parent::__construct($user); - $this->other = $other; - } - - function handle($channel) - { - $notice = $this->getNotice($this->other); - - $fave = new Fave(); - $fave->user_id = $this->user->id; - $fave->notice_id = $notice->id; - $fave->find(); - - if ($fave->fetch()) { - // TRANS: Error message text shown when a favorite could not be set because it has already been favorited. - $channel->error($this->user, _('Could not create favorite: already favorited.')); - return; - } - - $fave = Fave::addNew($this->user->getProfile(), $notice); - - if (!$fave) { - // TRANS: Error message text shown when a favorite could not be set. - $channel->error($this->user, _('Could not create favorite.')); - return; - } - - // @fixme favorite notification should be triggered - // at a lower level - - $other = User::staticGet('id', $notice->profile_id); - - if ($other && $other->id != $this->user->id) { - if ($other->email && $other->emailnotifyfav) { - mail_notify_fave($other, $this->user, $notice); - } - } - - $this->user->blowFavesCache(); - - // TRANS: Text shown when a notice has been marked as favourite successfully. - $channel->output($this->user, _('Notice marked as fave.')); - } -} - class JoinCommand extends Command { var $other = null; @@ -431,10 +382,12 @@ class TagCommand extends Command $cur = $this->user->getProfile(); if (!$profile) { + // TRANS: Client error displayed trying to perform an action related to a non-existing profile. $channel->error($cur, _('No such profile.')); return; } if (!$cur->canTag($profile)) { + // TRANS: Error displayed when trying to tag a user that cannot be tagged. $channel->error($cur, _('You cannot tag this user.')); return; } @@ -448,7 +401,9 @@ class TagCommand extends Command $tag = $clean_tags[] = common_canonical_tag($tag); if (!common_valid_profile_tag($tag)) { - $channel->error($cur, sprintf(_('Invalid tag: "%s"'), $tag)); + // TRANS: Error displayed if a given tag is invalid. + // TRANS: %s is the invalid tag. + $channel->error($cur, sprintf(_('Invalid tag: "%s".'), $tag)); return; } $privs[$tag] = $private; @@ -459,18 +414,25 @@ class TagCommand extends Command Profile_tag::setTag($cur->id, $profile->id, $tag, null, $privs[$tag]); } } catch (Exception $e) { - $channel->error($cur, sprintf(_('Error tagging %s: %s'), + // TRANS: Error displayed if tagging a user fails. + // TRANS: %1$s is the tagged user, %2$s is the error message (no punctuation). + $channel->error($cur, sprintf(_('Error tagging %1$s: %2$s'), $profile->nickname, $e->getMessage())); return; } - $channel->output($cur, sprintf(_('%1$s was tagged %2$s'), - $profile->nickname, - implode(', ', $clean_tags))); + // TRANS: Succes message displayed if tagging a user succeeds. + // TRANS: %1$s is the tagged user's nickname, %2$s is a list of tags. + // TRANS: Plural is decided based on the number of tags added (not part of message). + $channel->output($cur, sprintf(_m('%1$s was tagged %2$s', + '%1$s was tagged %2$s', + count($clean_tags)), + $profile->nickname, + // TRANS: Separator for list of tags. + implode(_(', '), $clean_tags))); } } - class UntagCommand extends TagCommand { function handle($channel) @@ -479,10 +441,12 @@ class UntagCommand extends TagCommand $cur = $this->user->getProfile(); if (!$profile) { + // TRANS: Client error displayed trying to perform an action related to a non-existing profile. $channel->error($cur, _('No such profile.')); return; } if (!$cur->canTag($profile)) { + // TRANS: Error displayed when trying to tag a user that cannot be tagged. $channel->error($cur, _('You cannot tag this user.')); return; } @@ -491,6 +455,8 @@ class UntagCommand extends TagCommand foreach ($tags as $tag) { if (!common_valid_profile_tag($tag)) { + // TRANS: Error displayed if a given tag is invalid. + // TRANS: %s is the invalid tag. $channel->error($cur, sprintf(_('Invalid tag: "%s"'), $tag)); return; } @@ -501,14 +467,22 @@ class UntagCommand extends TagCommand Profile_tag::unTag($cur->id, $profile->id, $tag); } } catch (Exception $e) { - $channel->error($cur, sprintf(_('Error untagging %s: %s'), + // TRANS: Error displayed if untagging a user fails. + // TRANS: %1$s is the untagged user, %2$s is the error message (no punctuation). + $channel->error($cur, sprintf(_('Error untagging %1$s: %2$s'), $profile->nickname, $e->getMessage())); return; } - $channel->output($cur, sprintf(_('The following tag(s) were removed from user %1$s: %2$s.'), - $profile->nickname, - implode(', ', $tags))); + // TRANS: Succes message displayed if untagging a user succeeds. + // TRANS: %1$s is the untagged user's nickname, %2$s is a list of tags. + // TRANS: Plural is decided based on the number of tags removed (not part of message). + $channel->output($cur, sprintf(_m('The following tag was removed from user %1$s: %2$s.', + 'The following tags were removed from user %1$s: %2$s.', + count($tags)), + $profile->nickname, + // TRANS: Separator for list of tags. + implode(_(', '), $tags))); } } @@ -549,105 +523,6 @@ class WhoisCommand extends Command } } -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); - } 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) { - // 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, _('Don\'t send a message to yourself; just say it to yourself quietly instead.')); - return; - } - $message = Message::saveNew($this->user->id, $other->id, $this->text, $channel->source()); - if ($message) { - $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)); - } else { - // TRANS: Error text shown sending a direct message fails with an unknown reason. - $channel->error($this->user, _('Error sending direct message.')); - } - } -} - -class RepeatCommand extends Command -{ - var $other = null; - function __construct($user, $other) - { - parent::__construct($user); - $this->other = $other; - } - - function handle($channel) - { - $notice = $this->getNotice($this->other); - - try { - $repeat = $notice->repeat($this->user->id, $channel->source()); - $recipient = $notice->getProfile(); - - // TRANS: Message given having repeated a notice from another user. - // TRANS: %s is the name of the user for which the notice was repeated. - $channel->output($this->user, sprintf(_('Notice from %s repeated.'), $recipient->nickname)); - } catch (Exception $e) { - $channel->error($this->user, $e->getMessage()); - } - } -} - class ReplyCommand extends Command { var $other = null; @@ -747,15 +622,8 @@ class SubCommand extends Command $target = $this->getProfile($this->other); - $remote = Remote_profile::staticGet('id', $target->id); - if ($remote) { - // TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command. - throw new CommandException(_("Can't subscribe to OMB profiles by command.")); - } - try { - Subscription::start($this->user->getProfile(), - $target); + Subscription::start($this->user->getProfile(), $target); // TRANS: Text shown after having subscribed to another user successfully. // TRANS: %s is the name of the user the subscription was requested for. $channel->output($this->user, sprintf(_('Subscribed to %s.'), $this->other)); @@ -786,8 +654,7 @@ class UnsubCommand extends Command $target = $this->getProfile($this->other); try { - Subscription::cancel($this->user->getProfile(), - $target); + Subscription::cancel($this->user->getProfile(), $target); // TRANS: Text shown after having unsubscribed from another user successfully. // TRANS: %s is the name of the user the unsubscription was requested for. $channel->output($this->user, sprintf(_('Unsubscribed from %s.'), $this->other)); @@ -910,7 +777,7 @@ class SubscriptionsCommand extends Command { function handle($channel) { - $profile = $this->user->getSubscriptions(0); + $profile = $this->user->getSubscribed(0); $nicknames=array(); while ($profile->fetch()) { $nicknames[]=$profile->nickname; @@ -965,7 +832,7 @@ class GroupsCommand extends Command { $group = $this->user->getGroups(); $groups=array(); - while ($group->fetch()) { + while ($group instanceof User_group && $group->fetch()) { $groups[]=$group->nickname; } if(count($groups)==0){ @@ -991,87 +858,81 @@ class HelpCommand extends Command { // TRANS: Header line of help text for commands. $out = array(_m('COMMANDHELP', "Commands:")); - $commands = array(// TRANS: Help message for IM/SMS command "on" + $commands = array(// TRANS: Help message for IM/SMS command "on". "on" => _m('COMMANDHELP', "turn on notifications"), - // TRANS: Help message for IM/SMS command "off" + // TRANS: Help message for IM/SMS command "off". "off" => _m('COMMANDHELP', "turn off notifications"), - // TRANS: Help message for IM/SMS command "help" + // TRANS: Help message for IM/SMS command "help". "help" => _m('COMMANDHELP', "show this help"), - // TRANS: Help message for IM/SMS command "follow " + // TRANS: Help message for IM/SMS command "follow ". "follow " => _m('COMMANDHELP', "subscribe to user"), - // TRANS: Help message for IM/SMS command "groups" + // TRANS: Help message for IM/SMS command "groups". "groups" => _m('COMMANDHELP', "lists the groups you have joined"), - // TRANS: Help message for IM/SMS command "tag" + // TRANS: Help message for IM/SMS command "tag". "tag " => _m('COMMANDHELP',"tag a user"), - // TRANS: Help message for IM/SMS command "untag" + // TRANS: Help message for IM/SMS command "untag". "untag " => _m('COMMANDHELP',"untag a user"), - // TRANS: Help message for IM/SMS command "subscriptions" + // TRANS: Help message for IM/SMS command "subscriptions". "subscriptions" => _m('COMMANDHELP', "list the people you follow"), - // TRANS: Help message for IM/SMS command "subscribers" + // TRANS: Help message for IM/SMS command "subscribers". "subscribers" => _m('COMMANDHELP', "list the people that follow you"), - // TRANS: Help message for IM/SMS command "leave " + // TRANS: Help message for IM/SMS command "leave ". "leave " => _m('COMMANDHELP', "unsubscribe from user"), - // TRANS: Help message for IM/SMS command "d " + // TRANS: Help message for IM/SMS command "d ". "d " => _m('COMMANDHELP', "direct message to user"), - // TRANS: Help message for IM/SMS command "get " + // TRANS: Help message for IM/SMS command "get ". "get " => _m('COMMANDHELP', "get last notice from user"), - // TRANS: Help message for IM/SMS command "whois " + // TRANS: Help message for IM/SMS command "whois ". "whois " => _m('COMMANDHELP', "get profile info on user"), - // TRANS: Help message for IM/SMS command "lose " + // TRANS: Help message for IM/SMS command "lose ". "lose " => _m('COMMANDHELP', "force user to stop following you"), - // TRANS: Help message for IM/SMS command "fav " - "fav " => _m('COMMANDHELP', "add user's last notice as a 'fave'"), - // TRANS: Help message for IM/SMS command "fav #" - "fav #" => _m('COMMANDHELP', "add notice with the given id as a 'fave'"), - // TRANS: Help message for IM/SMS command "repeat #" - "repeat #" => _m('COMMANDHELP', "repeat a notice with a given id"), - // TRANS: Help message for IM/SMS command "repeat " - "repeat " => _m('COMMANDHELP', "repeat the last notice from user"), - // TRANS: Help message for IM/SMS command "reply #" + // TRANS: Help message for IM/SMS command "reply #". "reply #" => _m('COMMANDHELP', "reply to notice with a given id"), - // TRANS: Help message for IM/SMS command "reply " + // TRANS: Help message for IM/SMS command "reply ". "reply " => _m('COMMANDHELP', "reply to the last notice from user"), - // TRANS: Help message for IM/SMS command "join " + // TRANS: Help message for IM/SMS command "join ". "join " => _m('COMMANDHELP', "join group"), - // TRANS: Help message for IM/SMS command "login" + // TRANS: Help message for IM/SMS command "login". "login" => _m('COMMANDHELP', "Get a link to login to the web interface"), - // TRANS: Help message for IM/SMS command "drop " + // TRANS: Help message for IM/SMS command "drop ". "drop " => _m('COMMANDHELP', "leave group"), - // TRANS: Help message for IM/SMS command "stats" + // TRANS: Help message for IM/SMS command "stats". "stats" => _m('COMMANDHELP', "get your stats"), - // TRANS: Help message for IM/SMS command "stop" + // TRANS: Help message for IM/SMS command "stop". "stop" => _m('COMMANDHELP', "same as 'off'"), - // TRANS: Help message for IM/SMS command "quit" + // TRANS: Help message for IM/SMS command "quit". "quit" => _m('COMMANDHELP', "same as 'off'"), - // TRANS: Help message for IM/SMS command "sub " + // TRANS: Help message for IM/SMS command "sub ". "sub " => _m('COMMANDHELP', "same as 'follow'"), - // TRANS: Help message for IM/SMS command "unsub " + // TRANS: Help message for IM/SMS command "unsub ". "unsub " => _m('COMMANDHELP', "same as 'leave'"), - // TRANS: Help message for IM/SMS command "last " + // TRANS: Help message for IM/SMS command "last ". "last " => _m('COMMANDHELP', "same as 'get'"), - // TRANS: Help message for IM/SMS command "on " + // TRANS: Help message for IM/SMS command "on ". "on " => _m('COMMANDHELP', "not yet implemented."), - // TRANS: Help message for IM/SMS command "off " + // TRANS: Help message for IM/SMS command "off ". "off " => _m('COMMANDHELP', "not yet implemented."), - // TRANS: Help message for IM/SMS command "nudge " + // TRANS: Help message for IM/SMS command "nudge ". "nudge " => _m('COMMANDHELP', "remind a user to update."), - // TRANS: Help message for IM/SMS command "invite " + // TRANS: Help message for IM/SMS command "invite ". "invite " => _m('COMMANDHELP', "not yet implemented."), - // TRANS: Help message for IM/SMS command "track " + // TRANS: Help message for IM/SMS command "track ". "track " => _m('COMMANDHELP', "not yet implemented."), - // TRANS: Help message for IM/SMS command "untrack " + // TRANS: Help message for IM/SMS command "untrack ". "untrack " => _m('COMMANDHELP', "not yet implemented."), - // TRANS: Help message for IM/SMS command "track off" + // TRANS: Help message for IM/SMS command "track off". "track off" => _m('COMMANDHELP', "not yet implemented."), - // TRANS: Help message for IM/SMS command "untrack all" + // TRANS: Help message for IM/SMS command "untrack all". "untrack all" => _m('COMMANDHELP', "not yet implemented."), - // TRANS: Help message for IM/SMS command "tracks" + // TRANS: Help message for IM/SMS command "tracks". "tracks" => _m('COMMANDHELP', "not yet implemented."), - // TRANS: Help message for IM/SMS command "tracking" + // TRANS: Help message for IM/SMS command "tracking". "tracking" => _m('COMMANDHELP', "not yet implemented.")); // Give plugins a chance to add or override... Event::handle('HelpCommandMessages', array($this, &$commands)); + + ksort($commands); foreach ($commands as $command => $help) { $out[] = "$command - $help"; }