X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2Fscripts%2Fupdate-profile-data.php;h=5b3e00e9fc45440aac838a55b1a811ac070e7f8f;hb=7bef2ad4ccb10a319dde1e62460d34f7ebf3242c;hp=4f5409bfab9c924c6e7f452eee7de65ccc6b487f;hpb=f7b431d60bd2d38d5fbf12e1a37678f3d25a7cc6;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/scripts/update-profile-data.php b/plugins/OStatus/scripts/update-profile-data.php old mode 100644 new mode 100755 index 4f5409bfab..5b3e00e9fc --- a/plugins/OStatus/scripts/update-profile-data.php +++ b/plugins/OStatus/scripts/update-profile-data.php @@ -20,70 +20,120 @@ 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) { + foreach (array('nickname', 'fullname', 'bio', 'homepage', 'location') as $field) { print " $field: {$profile->$field}\n"; } } echo "\n"; } -echo "Before:\n"; -showProfileInfo($oprofile); +function fixProfile(Ostatus_profile $oprofile) { + 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"; + $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())) { + if ($dom->documentElement->tagName !== 'feed') { + echo " (no 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 author on feed; 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; +$validate = new Validate(); +if (have_option('all')) { + $oprofile = new Ostatus_profile(); + $oprofile->find(); + echo "Found $oprofile->N profiles:\n\n"; + while ($oprofile->fetch()) { + 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(); + $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()) { + 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])) { + $uri = $args[0]; + $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 { - echo "Failed feed fetch: {$response->getStatus()} for $feedurl\n"; + print "$helptext"; + $ok = false; } -echo "After:\n"; -showProfileInfo($oprofile); +exit($ok ? 0 : 1);