X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fcommand.php;h=750b1c88a26808f688474d4490930dafd8049ce7;hb=b176f0fb5855b9550942a80c7e3ab346eb4845ad;hp=39fb283dd87d82bbc02b02dcc30647fa1fde853b;hpb=c335db4bbc1521d45308c757ef31da9625e38ee5;p=quix0rs-gnu-social.git diff --git a/lib/command.php b/lib/command.php index 39fb283dd8..750b1c88a2 100644 --- a/lib/command.php +++ b/lib/command.php @@ -420,6 +420,104 @@ 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) { + $channel->error($cur, _('No such profile.')); + return; + } + if (!$cur->canTag($profile)) { + $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)) { + $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) { + $channel->error($cur, sprintf(_('Error tagging %s: %s'), + $profile->nickname, $e->getMessage())); + return; + } + + $channel->output($cur, sprintf(_('%1$s was tagged %2$s'), + $profile->nickname, + implode(', ', $clean_tags))); + } +} + + +class UntagCommand extends TagCommand +{ + function handle($channel) + { + $profile = $this->getProfile($this->other); + $cur = $this->user->getProfile(); + + if (!$profile) { + $channel->error($cur, _('No such profile.')); + return; + } + if (!$cur->canTag($profile)) { + $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)) { + $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) { + $channel->error($cur, sprintf(_('Error untagging %s: %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))); + } +} + class WhoisCommand extends Command { var $other = null; @@ -919,6 +1017,8 @@ class HelpCommand extends Command "help - show this help\n". "follow - subscribe to user\n". "groups - lists the groups you have joined\n". + "tag - tag a user\n". + "untag - untag a user\n". "subscriptions - list the people you follow\n". "subscribers - list the people that follow you\n". "leave - unsubscribe from user\n".