diff --git a/plugins/OStatus/scripts/update-profile-data.php b/plugins/OStatus/scripts/update-profile-data.php new file mode 100644 index 0000000000..20f6d57d90 --- /dev/null +++ b/plugins/OStatus/scripts/update-profile-data.php @@ -0,0 +1,121 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); + +$longoptions = array('all', 'suspicious', 'quiet'); + +$helptext = <<isGroup()) { + echo "group\n"; + } else { + $profile = $oprofile->localProfile(); + foreach (array('nickname', 'bio', 'homepage', 'location') as $field) { + print " $field: {$profile->$field}\n"; + } + } + echo "\n"; +} + +function fixProfile($uri) { + $oprofile = Ostatus_profile::staticGet('uri', $uri); + + 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 " (bad feed; skipping)\n"; + return false; + } + } else { + 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 { + print "$helptext"; + $ok = false; +} + +exit($ok ? 0 : 1);