X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fcommand.php;h=02324280baec871a361c7700e591cb6d1c3f931b;hb=aadc7398dc40f500db98aaba4606726edf5a64ce;hp=aaad57776176a8e4cf43c072b211be22bd6681f1;hpb=9adbb49fc9c134539fb8311612ccc6f67637e6d8;p=quix0rs-gnu-social.git diff --git a/lib/command.php b/lib/command.php index aaad577761..02324280ba 100644 --- a/lib/command.php +++ b/lib/command.php @@ -23,10 +23,12 @@ 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; @@ -414,6 +365,127 @@ class DropCommand extends Command } } +class TagCommand extends Command +{ + var $other = null; + var $tags = null; + function __construct($user, $other, $tags) + { + parent::__construct($user); + $this->other = $other; + $this->tags = $tags; + } + + function handle($channel) + { + $profile = $this->getProfile($this->other); + $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; + } + + $privs = array(); + $tags = preg_split('/[\s,]+/', $this->tags); + $clean_tags = array(); + + foreach ($tags as $tag) { + $private = @$tag[0] === '.'; + $tag = $clean_tags[] = common_canonical_tag($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; + } + $privs[$tag] = $private; + } + + try { + foreach ($clean_tags as $tag) { + Profile_tag::setTag($cur->id, $profile->id, $tag, null, $privs[$tag]); + } + } catch (Exception $e) { + // 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; + } + + // 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) + { + $profile = $this->getProfile($this->other); + $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; + } + + $tags = array_map('common_canonical_tag', preg_split('/[\s,]+/', $this->tags)); + + 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; + } + } + + try { + foreach ($tags as $tag) { + Profile_tag::unTag($cur->id, $profile->id, $tag); + } + } catch (Exception $e) { + // 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; + } + + // 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))); + } +} + class WhoisCommand extends Command { var $other = null; @@ -465,7 +537,7 @@ class MessageCommand extends Command function handle($channel) { try { - $other = $this->getUser($this->other); + $other = $this->getUser($this->other)->getProfile(); } catch (CommandException $e) { try { $profile = $this->getProfile($this->other); @@ -498,7 +570,7 @@ class MessageCommand extends Command return; } - if (!$other) { + if (!$other instanceof Profile) { // 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; @@ -508,18 +580,18 @@ class MessageCommand extends Command 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.')); + $channel->error($this->user, _('Do not 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) { + try { + $message = Message::saveNew($this->user->id, $other->id, $this->text, $channel->source()); $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 { + } catch (Exception $e) { // TRANS: Error text shown sending a direct message fails with an unknown reason. - $channel->error($this->user, _('Error sending direct message.')); + $channel->error($this->user, $e->getMessage()); } } } @@ -538,7 +610,7 @@ class RepeatCommand extends Command $notice = $this->getNotice($this->other); try { - $repeat = $notice->repeat($this->user->id, $channel->source()); + $repeat = $notice->repeat($this->scoped->id, $channel->source()); $recipient = $notice->getProfile(); // TRANS: Message given having repeated a notice from another user. @@ -649,15 +721,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)); @@ -688,8 +753,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)); @@ -812,7 +876,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; @@ -824,7 +888,7 @@ class SubscriptionsCommand extends Command // TRANS: Text shown after requesting other users a user is subscribed to. // TRANS: This message supports plural forms. This message is followed by a // TRANS: hard coded space and a comma separated list of subscribed users. - $out = ngettext('You are subscribed to this person:', + $out = _m('You are subscribed to this person:', 'You are subscribed to these people:', count($nicknames)); $out .= ' '; @@ -851,7 +915,7 @@ class SubscribersCommand extends Command // TRANS: Text shown after requesting other users that are subscribed to a user (followers). // TRANS: This message supports plural forms. This message is followed by a // TRANS: hard coded space and a comma separated list of subscribing users. - $out = ngettext('This person is subscribed to you:', + $out = _m('This person is subscribed to you:', 'These people are subscribed to you:', count($nicknames)); $out .= ' '; @@ -867,7 +931,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){ @@ -878,7 +942,7 @@ class GroupsCommand extends Command // TRANS: Text shown after requesting groups a user is subscribed to. // TRANS: This message supports plural forms. This message is followed by a // TRANS: hard coded space and a comma separated list of subscribed groups. - $out = ngettext('You are a member of this group:', + $out = _m('You are a member of this group:', 'You are a member of these groups:', count($nicknames)); $out.=implode(', ',$groups); @@ -893,83 +957,85 @@ 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 "subscriptions" + // TRANS: Help message for IM/SMS command "tag". + "tag " => _m('COMMANDHELP',"tag a user"), + // TRANS: Help message for IM/SMS command "untag". + "untag " => _m('COMMANDHELP',"untag a user"), + // 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 #" + // 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 " + // 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)); + + sort($commands); foreach ($commands as $command => $help) { $out[] = "$command - $help"; }