]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/feedimporter.php
Merge branch 'event' into 1.0.x
[quix0rs-gnu-social.git] / lib / feedimporter.php
index e2c9df72fd9f3e69515779e45e1870ce8b1d76df..e46858cc51824510d4610f9392cfbab5a1eb2f57 100644 (file)
@@ -68,12 +68,13 @@ class FeedImporter extends QueueHandler
         try {
             $doc = DOMDocument::loadXML($xml);
 
-            if ($doc->documentElement->namespaceURI != Activity::ATOM ||
-                $doc->documentElement->localName != 'feed') {
+            $feed = $doc->documentElement;
+
+            if ($feed->namespaceURI != Activity::ATOM ||
+                $feed->localName != 'feed') {
                 throw new ClientException(_("Not an atom feed."));
             }
 
-            $feed = $doc->documentElement;
 
             $author = ActivityUtils::getFeedAuthor($feed);
 
@@ -84,12 +85,12 @@ class FeedImporter extends QueueHandler
             if (empty($user)) {
                 if ($trusted) {
                     $user = $this->userFromAuthor($author);
+                } else {
+                    throw new ClientException(_("Can't import without a user."));
                 }
             }
 
-            $entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
-
-            $activities = $this->entriesToActivities($entries, $feed);
+            $activities = $this->getActivities($feed);
 
             $qm = QueueManager::get();
 
@@ -108,6 +109,36 @@ class FeedImporter extends QueueHandler
         }
     }
 
+    function getActivities($feed)
+    {
+        $entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
+
+        $activities = array();
+
+        for ($i = 0; $i < $entries->length; $i++) {
+            $activities[] = new Activity($entries->item($i));
+        }
+
+        usort($activities, array("FeedImporter", "activitySort"));
+
+        return $activities;
+    }
+
+    /**
+     * Sort activities oldest-first
+     */
+
+    static function activitySort($a, $b)
+    {
+        if ($a->time == $b->time) {
+            return 0;
+        } else if ($a->time < $b->time) {
+            return -1;
+        } else {
+            return 1;
+        }
+    }
+
     function userFromAuthor($author)
     {
         $user = User::staticGet('uri', $author->id);