]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
distribute flag for Notice::saveNew()
authorEvan Prodromou <evan@status.net>
Thu, 16 Dec 2010 21:17:38 +0000 (16:17 -0500)
committerEvan Prodromou <evan@status.net>
Thu, 16 Dec 2010 21:17:38 +0000 (16:17 -0500)
classes/Notice.php
lib/accountrestorer.php

index a067cd3741fa4fb4b8e6fafff99b0f407cc44ad1..d412c5f3ae2e914622303f32947965d5b117916a 100644 (file)
@@ -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;
     }
index 98f12ccb6abc98c48e50b9a69fe9c3f3b4cbddf4..3f6ac0da4aff5fc8c8624a54c5850c4d23d720b7 100644 (file)
@@ -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);