]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/OStatus/scripts/update-profile-data.php
Renamed commandline.inc -> commandline.inc.php to avoid confusion.
[quix0rs-gnu-social.git] / plugins / OStatus / scripts / update-profile-data.php
index f10da71437227126aef9dc2a426c86d2fb000694..4e29148c865f71550ba4aa4dcb467b99aecf5d5b 100644 (file)
 
 define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
 
+$longoptions = array('all', 'suspicious', 'quiet');
+
 $helptext = <<<END_OF_HELP
-update-profile-data.php [options] http://example.com/profile/url
+update-profile-data.php [options] [http://example.com/profile/url]
 
 Rerun profile discovery for the given OStatus remote profile, and save the
 updated profile data (nickname, avatar, bio, etc). Doesn't touch feed state.
 Can be used to clean up after breakages.
 
-END_OF_HELP;
-
-require_once INSTALLDIR.'/scripts/commandline.inc';
-
-if (empty($args[0]) || !Validate::uri($args[0])) {
-    print "$helptext";
-    exit(1);
-}
-
-$uri = $args[0];
-
+Options:
+  --all        Run for all known OStatus profiles
+  --suspicious Run for OStatus profiles with all-numeric nicknames
+               (fixes 0.9.7 prerelease back-compatibility bug)
 
-$oprofile = Ostatus_profile::staticGet('uri', $uri);
+END_OF_HELP;
 
-if (!$oprofile) {
-    print "No OStatus remote profile known for URI $uri\n";
-    exit(1);
-}
+require_once INSTALLDIR.'/scripts/commandline.inc.php';
 
-function showProfileInfo($oprofile) {
+function showProfileInfo(Ostatus_profile $oprofile) {
     if ($oprofile->isGroup()) {
         echo "group\n";
     } else {
         $profile = $oprofile->localProfile();
-        foreach (array('nickname', 'bio', 'homepage', 'location') as $field) {
-            print "  $field: {$profile->$field}\n";
+        try {
+            foreach (array('nickname', 'bio', 'homepage', 'location') as $field) {
+                print "  $field: {$profile->$field}\n";
+            }
+        } catch (NoProfileException $e) {
+            print "local profile not found";
         }
     }
     echo "\n";
 }
 
-echo "Before:\n";
-showProfileInfo($oprofile);
+function fixProfile($uri) {
+    $oprofile = Ostatus_profile::getKV('uri', $uri);
 
-$feedurl = $oprofile->feeduri;
-$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())) {
-        $entries = $dom->getElementsByTagNameNS(Activity::ATOM, 'entry');
-        if ($entries->length) {
-            $entry = $entries->item(0);
-            $activity = new Activity($entry, $feed);
-            $oprofile->checkAuthorship($activity);
-            echo "  (ok)\n";
+    if (!$oprofile) {
+        print "No OStatus remote profile known for URI $uri\n";
+        return false;
+    }
+
+    echo "Before:\n";
+    showProfileInfo($oprofile);
+
+    $feedurl = $oprofile->feeduri;
+    $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);
+                echo "  (ok)\n";
+            } else {
+                echo "  (no entry; skipping)\n";
+                return false;
+            }
         } else {
-            echo "  (no entry; skipping)\n";
+            echo "  (bad feed; skipping)\n";
+            return false;
         }
     } else {
-        echo "  (bad feed; skipping)\n";
+        echo "Failed feed fetch: {$response->getStatus()} for $feedurl\n";
+        return false;
     }
+
+    echo "After:\n";
+    showProfileInfo($oprofile);
+    return true;
+}
+
+$ok = true;
+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;
+    }
+} else if (have_option('suspicious')) {
+    $oprofile = new Ostatus_profile();
+    $oprofile->joinAdd(array('profile_id', 'profile:id'));
+    $oprofile->whereAdd("nickname rlike '^[0-9]$'");
+    $oprofile->find();
+    echo "Found $oprofile->N matching profiles:\n\n";
+    while ($oprofile->fetch()) {
+        $ok = fixProfile($oprofile->uri) && $ok;
+    }
+} else if (!empty($args[0]) && Validate::uri($args[0])) {
+    $uri = $args[0];
+    $ok = fixProfile($uri);
 } else {
-    echo "Failed feed fetch: {$response->getStatus()} for $feedurl\n";
+    print "$helptext";
+    $ok = false;
 }
 
-echo "After:\n";
-showProfileInfo($oprofile);
+exit($ok ? 0 : 1);