From 39804809dd67d72926d985f31164e6df334ee387 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 16 Dec 2010 16:17:38 -0500 Subject: [PATCH] distribute flag for Notice::saveNew() --- classes/Notice.php | 11 ++++++++--- lib/accountrestorer.php | 44 ++++++++++++++++++++--------------------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index a067cd3741..d412c5f3ae 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -234,6 +234,8 @@ class Notice extends Memcached_DataObject * in place of extracting # tags from content * array 'urls' list of attached/referred URLs to save with the * notice in place of extracting links from content + * boolean 'distribute' whether to distribute the notice, default true + * * @fixme tag override * * @return Notice @@ -243,7 +245,8 @@ class Notice extends Memcached_DataObject $defaults = array('uri' => null, 'url' => null, 'reply_to' => null, - 'repeat_of' => null); + 'repeat_of' => null, + 'distribute' => true); if (!empty($options)) { $options = $options + $defaults; @@ -426,8 +429,10 @@ class Notice extends Memcached_DataObject $notice->saveUrls(); } - // Prepare inbox delivery, may be queued to background. - $notice->distribute(); + if ($distribute) { + // Prepare inbox delivery, may be queued to background. + $notice->distribute(); + } return $notice; } diff --git a/lib/accountrestorer.php b/lib/accountrestorer.php index 98f12ccb6a..3f6ac0da4a 100644 --- a/lib/accountrestorer.php +++ b/lib/accountrestorer.php @@ -52,6 +52,8 @@ if (!defined('STATUSNET')) { class AccountRestorer { + private $_trusted = false; + function loadXML($xml) { $dom = DOMDocument::loadXML($xml); @@ -72,29 +74,22 @@ class AccountRestorer if (!empty($subjectEl)) { $subject = new ActivityObject($subjectEl); - // TRANS: Commandline script output. %1$s is the subject ID, %2$s is the subject nickname. - printfv(_("Backup file for user %1$s (%2$s)")."\n", $subject->id, Ostatus_profile::getActivityObjectNickname($subject)); } else { throw new Exception("Feed doesn't have an element."); } if (is_null($user)) { - // TRANS: Commandline script output. - printfv(_("No user specified; using backup user.")."\n"); $user = $this->userFromSubject($subject); } $entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry'); - // TRANS: Commandline script output. %d is the number of entries in the activity stream in backup; used for plural. - printfv(_m("%d entry in backup.","%d entries in backup.",$entries->length)."\n", $entries->length); - - for ($i = $entries->length - 1; $i >= 0; $i--) { - try { - $entry = $entries->item($i); + $activities = $this->entriesToActivities($entries, $feed); - $activity = new Activity($entry, $feed); + // XXX: sort entries here + foreach ($activities as $activity) { + try { switch ($activity->verb) { case ActivityVerb::FOLLOW: $this->subscribeProfile($user, $subject, $activity); @@ -109,7 +104,7 @@ class AccountRestorer throw new Exception("Unknown verb: {$activity->verb}"); } } catch (Exception $e) { - print $e->getMessage()."\n"; + common_log(LOG_WARNING, $e->getMessage()); continue; } } @@ -120,19 +115,22 @@ class AccountRestorer $profile = $user->getProfile(); if ($activity->objects[0]->id == $subject->id) { - - $other = $activity->actor; - $otherUser = User::staticGet('uri', $other->id); - - if (!empty($otherUser)) { - $otherProfile = $otherUser->getProfile(); + if (!$this->_trusted) { + throw new Exception("Skipping a pushed subscription."); } else { - throw new Exception("Can't force remote user to subscribe."); - } - // XXX: don't do this for untrusted input! - Subscription::start($otherProfile, $profile); + $other = $activity->actor; + $otherUser = User::staticGet('uri', $other->id); - } else if (empty($activity->actor) || $activity->actor->id == $subject->id) { + if (!empty($otherUser)) { + $otherProfile = $otherUser->getProfile(); + } else { + throw new Exception("Can't force remote user to subscribe."); + } + // XXX: don't do this for untrusted input! + Subscription::start($otherProfile, $profile); + } + } else if (empty($activity->actor) + || $activity->actor->id == $subject->id) { $other = $activity->objects[0]; $otherUser = User::staticGet('uri', $other->id); -- 2.39.5