summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2010-12-16 16:17:38 -0500
committerEvan Prodromou <evan@status.net>2010-12-16 16:17:38 -0500
commit39804809dd67d72926d985f31164e6df334ee387 (patch)
treeed1168e96f5676d4d6e9cdaca62bc353c3e86a68
parent2e2519afee87009165c97026737f72634461e82b (diff)
distribute flag for Notice::saveNew()
-rw-r--r--classes/Notice.php11
-rw-r--r--lib/accountrestorer.php44
2 files changed, 29 insertions, 26 deletions
diff --git a/classes/Notice.php b/classes/Notice.php
index a067cd374..d412c5f3a 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 98f12ccb6..3f6ac0da4 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 <activity:subject> 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);