X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Factivityimporter.php;h=aa9b95e084c6b80fb54f717e3ecbde991e90c212;hb=bb087a965009fd93a5c02a9e10ab90adcc6b7963;hp=28c371e4dc5239d42d909eb16fbb7a75aacbd413;hpb=1a81356622dba7bcbf75de6eb10f28170e972b96;p=quix0rs-gnu-social.git diff --git a/lib/activityimporter.php b/lib/activityimporter.php index 28c371e4dc..aa9b95e084 100644 --- a/lib/activityimporter.php +++ b/lib/activityimporter.php @@ -4,7 +4,7 @@ * Copyright (C) 2010, StatusNet, Inc. * * class to import activities as part of a user's timeline - * + * * PHP version 5 * * This program is free software: you can redistribute it and/or modify @@ -44,7 +44,6 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class ActivityImporter extends QueueHandler { private $trusted = false; @@ -56,64 +55,72 @@ class ActivityImporter extends QueueHandler * * @return */ - function handle($data) { list($user, $author, $activity, $trusted) = $data; $this->trusted = $trusted; - try { - switch ($activity->verb) { - case ActivityVerb::FOLLOW: - $this->subscribeProfile($user, $author, $activity); - break; - case ActivityVerb::JOIN: - $this->joinGroup($user, $activity); - break; - case ActivityVerb::POST: - $this->postNote($user, $author, $activity); - break; - default: - throw new Exception("Unknown verb: {$activity->verb}"); + $done = null; + + if (Event::handle('StartImportActivity', + array($user, $author, $activity, $trusted, &$done))) { + try { + switch ($activity->verb) { + case ActivityVerb::FOLLOW: + $this->subscribeProfile($user, $author, $activity); + break; + case ActivityVerb::JOIN: + $this->joinGroup($user, $activity); + break; + case ActivityVerb::POST: + $this->postNote($user, $author, $activity); + break; + default: + // TRANS: Client exception thrown when using an unknown verb for the activity importer. + throw new ClientException(sprintf(_("Unknown verb: \"%s\"."),$activity->verb)); + } + Event::handle('EndImportActivity', + array($user, $author, $activity, $trusted)); + $done = true; + } catch (ClientException $ce) { + common_log(LOG_WARNING, $ce->getMessage()); + $done = true; + } catch (ServerException $se) { + common_log(LOG_ERR, $se->getMessage()); + $done = false; + } catch (Exception $e) { + common_log(LOG_ERR, $e->getMessage()); + $done = false; } - } catch (ClientException $ce) { - common_log(LOG_WARNING, $ce->getMessage()); - return true; - } catch (ServerException $se) { - common_log(LOG_ERR, $se->getMessage()); - return false; - } catch (Exception $e) { - common_log(LOG_ERR, $e->getMessage()); - return false; } - return true; + return $done; } - + function subscribeProfile($user, $author, $activity) { $profile = $user->getProfile(); if ($activity->objects[0]->id == $author->id) { - if (!$this->trusted) { - throw new ClientException(_("Can't force subscription for untrusted user.")); + // TRANS: Client exception thrown when trying to force a subscription for an untrusted user. + throw new ClientException(_("Cannot force subscription for untrusted user.")); } $other = $activity->actor; $otherUser = User::staticGet('uri', $other->id); - + if (!empty($otherUser)) { $otherProfile = $otherUser->getProfile(); } else { - throw new Exception("Can't force remote user to subscribe."); + // TRANS: Client exception thrown when trying to for a remote user to subscribe. + throw new Exception(_("Cannot force remote user to subscribe.")); } // XXX: don't do this for untrusted input! Subscription::start($otherProfile, $profile); - - } else if (empty($activity->actor) + } else if (empty($activity->actor) || $activity->actor->id == $author->id) { $other = $activity->objects[0]; @@ -121,12 +128,14 @@ class ActivityImporter extends QueueHandler $otherProfile = Profile::fromUri($other->id); if (empty($otherProfile)) { + // TRANS: Client exception thrown when trying to subscribe to an unknown profile. throw new ClientException(_("Unknown profile.")); } Subscription::start($profile, $otherProfile); } else { - throw new Exception("This activity seems unrelated to our user."); + // TRANS: Client exception thrown when trying to import an event not related to the importing user. + throw new Exception(_("This activity seems unrelated to our user.")); } } @@ -141,7 +150,8 @@ class ActivityImporter extends QueueHandler if (empty($group)) { $oprofile = Ostatus_profile::ensureActivityObjectProfile($activity->objects[0]); if (!$oprofile->isGroup()) { - throw new ClientException("Remote profile is not a group!"); + // TRANS: Client exception thrown when trying to join a remote group that is not a group. + throw new ClientException(_("Remote profile is not a group!")); } $group = $oprofile->localGroup(); } @@ -149,7 +159,8 @@ class ActivityImporter extends QueueHandler assert(!empty($group)); if ($user->isMember($group)) { - throw new ClientException("User is already a member of this group."); + // TRANS: Client exception thrown when trying to join a group the importing user is already a member of. + throw new ClientException(_("User is already a member of this group.")); } if (Event::handle('StartJoinGroup', array($group, $user))) { @@ -169,7 +180,7 @@ class ActivityImporter extends QueueHandler $notice = Notice::staticGet('uri', $sourceUri); if (!empty($notice)) { - + common_log(LOG_INFO, "Notice {$sourceUri} already exists."); if ($this->trusted) { @@ -185,10 +196,15 @@ class ActivityImporter extends QueueHandler $notice->update($orig); return; } else { - throw new ClientException(sprintf(_("Already know about notice %s and ". - " it's got a different author %s."), + // TRANS: Client exception thrown when trying to import a notice by another user. + // TRANS: %1$s is the source URI of the notice, %2$s is the URI of the author. + throw new ClientException(sprintf(_('Already know about notice %1$s and '. + ' it has a different author %2$s.'), $sourceUri, $uri)); } + } else { + // TRANS: Client exception thrown when trying to overwrite the author information for a non-trusted user during import. + throw new ClientException(_("Not overwriting author info for non-trusted user.")); } } @@ -202,8 +218,9 @@ class ActivityImporter extends QueueHandler $sourceContent = $note->title; } else { // @fixme fetch from $sourceUrl? - // @todo i18n FIXME: use sprintf and add i18n. - throw new ClientException("No content for notice {$sourceUri}."); + // TRANS: Client exception thrown when trying to import a notice without content. + // TRANS: %s is the notice URI. + throw new ClientException(sprintf(_("No content for notice %s."),$sourceUri)); } // Get (safe!) HTML and text versions of the content @@ -334,12 +351,15 @@ class ActivityImporter extends QueueHandler return array($groups, $replies); } - + function purify($content) { + require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php'; + $config = array('safe' => 1, 'deny_attribute' => 'id,style,on*'); + return htmLawed($content, $config); } }