X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2FOStatus%2Factions%2Fusersalmon.php;h=f5a93183e59e95265484f615b2b831b199e63502;hb=57198a74647f8350db4de03b0b7ef157091a4359;hp=15e8c1869dcd76cefd8c53eb20eebfcca9b4121b;hpb=c89e1865f7250341c8b5e7878715d5a693a0e6aa;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/actions/usersalmon.php b/plugins/OStatus/actions/usersalmon.php index 15e8c1869d..f5a93183e5 100644 --- a/plugins/OStatus/actions/usersalmon.php +++ b/plugins/OStatus/actions/usersalmon.php @@ -17,15 +17,14 @@ * along with this program. If not, see . */ -/** - * @package OStatusPlugin - * @author James Walker - */ - if (!defined('STATUSNET')) { exit(1); } +/** + * @package OStatusPlugin + * @author James Walker + */ class UsersalmonAction extends SalmonAction { function prepare($args) @@ -35,15 +34,17 @@ class UsersalmonAction extends SalmonAction $id = $this->trimmed('id'); if (!$id) { - $this->clientError(_('No ID.')); + $this->clientError(_m('No ID.')); } $this->user = User::staticGet('id', $id); if (empty($this->user)) { - $this->clientError(_('No such user.')); + $this->clientError(_m('No such user.')); } + $this->target = $this->user; + return true; } @@ -55,9 +56,10 @@ class UsersalmonAction extends SalmonAction */ function handlePost() { - common_log(LOG_INFO, "Received post of '{$this->act->object->id}' from '{$this->act->actor->id}'"); + common_log(LOG_INFO, "Received post of '{$this->activity->objects[0]->id}' from '{$this->activity->actor->id}'"); - switch ($this->act->object->type) { + // @fixme: process all activity objects? + switch ($this->activity->objects[0]->type) { case ActivityObject::ARTICLE: case ActivityObject::BLOGENTRY: case ActivityObject::NOTE: @@ -70,28 +72,34 @@ class UsersalmonAction extends SalmonAction // Notice must either be a) in reply to a notice by this user // or b) to the attention of this user + // or c) in reply to a notice to the attention of this user - $context = $this->act->context; + $context = $this->activity->context; if (!empty($context->replyToID)) { $notice = Notice::staticGet('uri', $context->replyToID); if (empty($notice)) { - throw new ClientException("In reply to unknown notice"); + // TRANS: Client exception. + throw new ClientException(_m('In reply to unknown notice.')); } - if ($notice->profile_id != $this->user->id) { - throw new ClientException("In reply to a notice not by this user"); + if ($notice->profile_id != $this->user->id && + !in_array($this->user->id, $notice->getReplies())) { + // TRANS: Client exception. + throw new ClientException(_m('In reply to a notice not by this user and not mentioning this user.')); } } else if (!empty($context->attention)) { if (!in_array($this->user->uri, $context->attention) && !in_array(common_profile_url($this->user->nickname), $context->attention)) { common_log(LOG_ERR, "{$this->user->uri} not in attention list (".implode(',', $context->attention).")"); - throw new ClientException("To the attention of user(s) not including this one!"); + // TRANS: Client exception. + throw new ClientException('To the attention of user(s), not including this one.'); } } else { - throw new ClientException("Not to anyone in reply to anything!"); + // TRANS: Client exception. + throw new ClientException('Not to anyone in reply to anything.'); } - $existing = Notice::staticGet('uri', $this->act->object->id); + $existing = Notice::staticGet('uri', $this->activity->objects[0]->id); if (!empty($existing)) { common_log(LOG_ERR, "Not saving notice '{$existing->uri}'; already exists."); @@ -105,7 +113,6 @@ class UsersalmonAction extends SalmonAction * We've gotten a follow/subscribe notification from a remote user. * Save a subscription relationship for them. */ - function handleFollow() { $oprofile = $this->ensureProfile(); @@ -142,18 +149,20 @@ class UsersalmonAction extends SalmonAction function handleFavorite() { - $notice = $this->getNotice($this->act->object); + $notice = $this->getNotice($this->activity->objects[0]); $profile = $this->ensureProfile()->localProfile(); $old = Fave::pkeyGet(array('user_id' => $profile->id, 'notice_id' => $notice->id)); if (!empty($old)) { - throw new ClientException("We already know that's a fave!"); + // TRANS: Client exception. + throw new ClientException(_m('This is already a favorite.')); } if (!Fave::addNew($profile, $notice)) { - throw new ClientException("Could not save new favorite."); + // TRANS: Client exception. + throw new ClientException(_m('Could not save new favorite.')); } } @@ -163,18 +172,80 @@ class UsersalmonAction extends SalmonAction */ function handleUnfavorite() { - $notice = $this->getNotice($this->act->object); + $notice = $this->getNotice($this->activity->objects[0]); $profile = $this->ensureProfile()->localProfile(); $fave = Fave::pkeyGet(array('user_id' => $profile->id, 'notice_id' => $notice->id)); if (empty($fave)) { - throw new ClientException("Notice wasn't favorited!"); + // TRANS: Client exception. + throw new ClientException(_m('Notice was not favorited!')); } $fave->delete(); } + function handleTag() + { + if ($this->activity->target->type == ActivityObject::_LIST) { + if ($this->activity->objects[0]->type != ActivityObject::PERSON) { + throw new ClientException("Not a person object"); + return false; + } + // this is a peopletag + $tagged = User::staticGet('uri', $this->activity->objects[0]->id); + + if (empty($tagged)) { + throw new ClientException("Unidentified profile being tagged"); + } + + if ($tagged->id !== $this->user->id) { + throw new ClientException("This user is not the one being tagged"); + } + + // save the list + $tagger = $this->ensureProfile(); + $list = Ostatus_profile::ensureActivityObjectProfile($this->activity->target); + + $ptag = $list->localPeopletag(); + $result = Profile_tag::setTag($ptag->tagger, $tagged->id, $ptag->tag); + if (!$result) { + throw new ClientException("The tag could not be saved."); + } + } + } + + function handleUntag() + { + if ($this->activity->target->type == ActivityObject::_LIST) { + if ($this->activity->objects[0]->type != ActivityObject::PERSON) { + throw new ClientException("Not a person object"); + return false; + } + // this is a peopletag + $tagged = User::staticGet('uri', $this->activity->objects[0]->id); + + if (empty($tagged)) { + throw new ClientException("Unidentified profile being untagged"); + } + + if ($tagged->id !== $this->user->id) { + throw new ClientException("This user is not the one being untagged"); + } + + // save the list + $tagger = $this->ensureProfile(); + $list = Ostatus_profile::ensureActivityObjectProfile($this->activity->target); + + $ptag = $list->localPeopletag(); + $result = Profile_tag::unTag($ptag->tagger, $tagged->id, $ptag->tag); + + if (!$result) { + throw new ClientException("The tag could not be deleted."); + } + } + } + /** * @param ActivityObject $object * @return Notice @@ -183,7 +254,8 @@ class UsersalmonAction extends SalmonAction function getNotice($object) { if (!$object) { - throw new ClientException("Can't favorite/unfavorite without an object."); + // TRANS: Client exception. + throw new ClientException(_m('Can\'t favorite/unfavorite without an object.')); } switch ($object->type) { @@ -194,20 +266,22 @@ class UsersalmonAction extends SalmonAction case ActivityObject::COMMENT: break; default: - throw new ClientException("Can't handle that kind of object for liking/faving."); + // TRANS: Client exception. + throw new ClientException(_m('Can\'t handle that kind of object for liking/faving.')); } $notice = Notice::staticGet('uri', $object->id); if (empty($notice)) { - throw new ClientException("Notice with ID $object->id unknown."); + // TRANS: Client exception. %s is an object ID. + throw new ClientException(sprintf(_m('Notice with ID %s unknown.'),$object->id)); } if ($notice->profile_id != $this->user->id) { - throw new ClientException("Notice with ID $object->id not posted by $this->user->id."); + // TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID. + throw new ClientException(sprintf(_m('Notice with ID %1$s not posted by %2$s.'),$object->id,$this->user->id)); } return $notice; } - }