]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/OStatus/scripts/update-profile-data.php
Update Profile Data script fixes, might work for groups too now
[quix0rs-gnu-social.git] / plugins / OStatus / scripts / update-profile-data.php
old mode 100644 (file)
new mode 100755 (executable)
index e024ed9..5b3e00e
@@ -44,44 +44,34 @@ function showProfileInfo(Ostatus_profile $oprofile) {
         echo "group\n";
     } else {
         $profile = $oprofile->localProfile();
-        try {
-            foreach (array('nickname', 'fullname', 'bio', 'homepage', 'location') as $field) {
-                print "  $field: {$profile->$field}\n";
-            }
-        } catch (NoProfileException $e) {
-            print "local profile not found";
+        foreach (array('nickname', 'fullname', 'bio', 'homepage', 'location') as $field) {
+            print "  $field: {$profile->$field}\n";
         }
     }
     echo "\n";
 }
 
-function fixProfile($uri) {
-    $oprofile = Ostatus_profile::getKV('uri', $uri);
-
-    if (!$oprofile) {
-        print "No OStatus remote profile known for URI $uri\n";
-        return false;
-    }
-
+function fixProfile(Ostatus_profile $oprofile) {
     echo "Before:\n";
     showProfileInfo($oprofile);
 
     $feedurl = $oprofile->feeduri;
-    $client = new HttpClient();
+    $client = new HTTPClient();
     $response = $client->get($feedurl);
     if ($response->isOk()) {
         echo "Updating profile from feed: $feedurl\n";
         $dom = new DOMDocument();
         if ($dom->loadXML($response->getBody())) {
-            $feed = $dom->documentElement;
-            $entries = $dom->getElementsByTagNameNS(Activity::ATOM, 'entry');
-            if ($entries->length) {
-                $entry = $entries->item(0);
-                $activity = new Activity($entry, $feed);
-                $oprofile->checkAuthorship($activity);
+            if ($dom->documentElement->tagName !== 'feed') {
+                echo "  (no <feed> element in feed URL response; skipping)\n";
+                return false;
+            }
+            $actorObj = ActivityUtils::getFeedAuthor($dom->documentElement);
+            if ($actorObj) {
+                $oprofile->updateFromActivityObject($actorObj);
                 echo "  (ok)\n";
             } else {
-                echo "  (no entry; skipping)\n";
+                echo "  (no author on feed; skipping)\n";
                 return false;
             }
         } else {
@@ -99,12 +89,18 @@ function fixProfile($uri) {
 }
 
 $ok = true;
+$validate = new Validate();
 if (have_option('all')) {
     $oprofile = new Ostatus_profile();
     $oprofile->find();
     echo "Found $oprofile->N profiles:\n\n";
     while ($oprofile->fetch()) {
-        $ok = fixProfile($oprofile->uri) && $ok;
+        try {
+            $ok = fixProfile($oprofile) && $ok;
+        } catch (Exception $e) {
+            $ok = false;
+            echo "Failed on URI=="._ve($oprofile->uri).": {$e->getMessage()}\n";
+        }
     }
 } else if (have_option('suspicious')) {
     $oprofile = new Ostatus_profile();
@@ -113,11 +109,28 @@ if (have_option('all')) {
     $oprofile->find();
     echo "Found $oprofile->N matching profiles:\n\n";
     while ($oprofile->fetch()) {
-        $ok = fixProfile($oprofile->uri) && $ok;
+        try {
+            $ok = fixProfile($oprofile) && $ok;
+        } catch (Exception $e) {
+            $ok = false;
+            echo "Failed on URI=="._ve($oprofile->uri).": {$e->getMessage()}\n";
+        }
     }
-} else if (!empty($args[0]) && Validate::uri($args[0])) {
+} else if (!empty($args[0]) && $validate->uri($args[0])) {
     $uri = $args[0];
-    $ok = fixProfile($uri);
+    $oprofile = Ostatus_profile::getKV('uri', $uri);
+
+    if (!$oprofile instanceof Ostatus_profile) {
+        print "No OStatus remote profile known for URI $uri\n";
+        return false;
+    }
+
+    try {
+        $ok = fixProfile($oprofile) && $ok;
+    } catch (Exception $e) {
+        $ok = false;
+        echo "Failed on URI=="._ve($oprofile->uri).": {$e->getMessage()}\n";
+    }
 } else {
     print "$helptext";
     $ok = false;