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);