X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FGContact.php;h=05f20ec5b8063822cced6ea70aa276b838135f3f;hb=8e2910976f126ee7c728ba4716f317ac496f377b;hp=95f1080f8d56570cdd87a2e522121c3024f98c79;hpb=1531cad596484f4d53db79f963cf3e948a99e4bf;p=friendica.git diff --git a/src/Model/GContact.php b/src/Model/GContact.php index 95f1080f8d..05f20ec5b8 100644 --- a/src/Model/GContact.php +++ b/src/Model/GContact.php @@ -1,19 +1,19 @@ get('system', 'diaspora_enabled')) { $diaspora = Protocol::DIASPORA; } else { $diaspora = Protocol::DFRN; } - if (!Config::get('system', 'ostatus_disabled')) { + if (!DI::config()->get('system', 'ostatus_disabled')) { $ostatus = Protocol::OSTATUS; } else { $ostatus = Protocol::DFRN; @@ -87,7 +87,7 @@ class GContact } /** - * @brief Link the gcontact entry with user, contact and global contact + * Link the gcontact entry with user, contact and global contact * * @param integer $gcid Global contact ID * @param integer $uid User ID @@ -107,7 +107,7 @@ class GContact } /** - * @brief Sanitize the given gcontact data + * Sanitize the given gcontact data * * Generation: * 0: No definition @@ -149,7 +149,7 @@ class GContact } // The global contacts should contain the original picture, not the cached one - if (($gcontact['generation'] != 1) && stristr(Strings::normaliseLink($gcontact['photo']), Strings::normaliseLink(System::baseUrl() . '/photo/'))) { + if (($gcontact['generation'] != 1) && stristr(Strings::normaliseLink($gcontact['photo']), Strings::normaliseLink(DI::baseUrl() . '/photo/'))) { $gcontact['photo'] = ''; } @@ -216,7 +216,7 @@ class GContact if (empty($gcontact['server_url'])) { // We check the server url to be sure that it is a real one - $server_url = Contact::getBasepath($gcontact['url']); + $server_url = self::getBasepath($gcontact['url']); // We are now sure that it is a correct URL. So we use it in the future if ($server_url != '') { @@ -423,11 +423,11 @@ class GContact $network = [Protocol::DFRN, Protocol::ACTIVITYPUB]; - if (Config::get('system', 'diaspora_enabled')) { + if (DI::config()->get('system', 'diaspora_enabled')) { $network[] = Protocol::DIASPORA; } - if (!Config::get('system', 'ostatus_disabled')) { + if (!DI::config()->get('system', 'ostatus_disabled')) { $network[] = Protocol::OSTATUS; } @@ -503,12 +503,12 @@ class GContact $done = []; /// @TODO Check if it is really neccessary to poll the own server - PortableContact::loadWorker(0, 0, 0, System::baseUrl() . '/poco'); + PortableContact::loadWorker(0, 0, 0, DI::baseUrl() . '/poco'); - $done[] = System::baseUrl() . '/poco'; + $done[] = DI::baseUrl() . '/poco'; - if (strlen(Config::get('system', 'directory'))) { - $x = Network::fetchUrl(get_server() . '/pubsites'); + if (strlen(DI::config()->get('system', 'directory'))) { + $x = Network::fetchUrl(Search::getGlobalDirectory() . '/pubsites'); if (!empty($x)) { $j = json_decode($x); if (!empty($j->entries)) { @@ -536,7 +536,7 @@ class GContact } /** - * @brief Removes unwanted parts from a contact url + * Removes unwanted parts from a contact url * * @param string $url Contact url * @@ -569,7 +569,7 @@ class GContact } /** - * @brief Fetch the gcontact id, add an entry if not existed + * Fetch the gcontact id, add an entry if not existed * * @param array $contact contact array * @@ -580,9 +580,6 @@ class GContact public static function getId($contact) { $gcontact_id = 0; - $doprobing = false; - $last_failure_str = ''; - $last_contact_str = ''; if (empty($contact['network'])) { Logger::notice('Empty network', ['url' => $contact['url'], 'callstack' => System::callstack()]); @@ -613,15 +610,6 @@ class GContact $gcnt = DBA::selectFirst('gcontact', $fields, ['nurl' => Strings::normaliseLink($contact['url'])]); if (DBA::isResult($gcnt)) { $gcontact_id = $gcnt['id']; - - // Update every 90 days - if (empty($gcnt['network']) || in_array($gcnt['network'], Protocol::FEDERATED)) { - $last_failure_str = $gcnt['last_failure']; - $last_failure = strtotime($gcnt['last_failure']); - $last_contact_str = $gcnt['last_contact']; - $last_contact = strtotime($gcnt['last_contact']); - $doprobing = (((time() - $last_contact) > (90 * 86400)) && ((time() - $last_failure) > (90 * 86400))); - } } else { $contact['location'] = $contact['location'] ?? ''; $contact['about'] = $contact['about'] ?? ''; @@ -638,21 +626,15 @@ class GContact $cnt = DBA::selectFirst('gcontact', ['id', 'network'], $condition, ['order' => ['id']]); if (DBA::isResult($cnt)) { $gcontact_id = $cnt['id']; - $doprobing = (empty($cnt['network']) || in_array($cnt['network'], Protocol::FEDERATED)); } } DBA::unlock(); - if ($doprobing) { - Logger::notice('Probing', ['contact' => $last_contact_str, "failure" => $last_failure_str, "checking" => $contact['url']]); - Worker::add(PRIORITY_LOW, 'GProbe', $contact['url']); - } - return $gcontact_id; } /** - * @brief Updates the gcontact table from a given array + * Updates the gcontact table from a given array * * @param array $contact contact array * @@ -801,7 +783,7 @@ class GContact return; } - if (!$force && !PortableContact::updateNeeded($gcontact['created'], $gcontact['updated'], $gcontact['last_failure'], $gcontact['last_contact'])) { + if (!$force && !GServer::updateNeeded($gcontact['created'], $gcontact['updated'], $gcontact['last_failure'], $gcontact['last_contact'])) { Logger::info("Don't update profile", ['url' => $data['url'], 'updated' => $gcontact['updated']]); return; } @@ -876,7 +858,11 @@ class GContact self::updateFromOutbox($outbox['first']['href'], $data); return; } elseif (!empty($outbox['first'])) { - self::updateFromOutbox($outbox['first'], $data); + if (is_string($outbox['first'])) { + self::updateFromOutbox($outbox['first'], $data); + } else { + Logger::warning('Unexpected data', ['outbox' => $outbox]); + } return; } else { $items = []; @@ -916,7 +902,7 @@ class GContact $curlResult = Network::curl($data['poll']); if (!$curlResult->isSuccess()) { $fields = ['last_failure' => DateTimeFormat::utcNow()]; - DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]); + DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($data['url'])]); Logger::info("Profile wasn't reachable (no feed)", ['url' => $data['url']]); return; @@ -960,7 +946,7 @@ class GContact DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($data['url'])]); } /** - * @brief Updates the gcontact entry from a given public contact id + * Updates the gcontact entry from a given public contact id * * @param integer $cid contact id * @return void @@ -973,7 +959,7 @@ class GContact } /** - * @brief Updates the gcontact entry from a given public contact url + * Updates the gcontact entry from a given public contact url * * @param string $url contact url * @return integer gcontact id @@ -986,7 +972,7 @@ class GContact } /** - * @brief Helper function for updateFromPublicContactID and updateFromPublicContactURL + * Helper function for updateFromPublicContactID and updateFromPublicContactURL * * @param array $condition contact condition * @return integer gcontact id @@ -1071,7 +1057,7 @@ class GContact } /** - * @brief Updates the gcontact entry from probe + * Updates the gcontact entry from probe * * @param string $url profile link * @param boolean $force Optional forcing of network probing (otherwise we use the cached data) @@ -1103,7 +1089,7 @@ class GContact } /** - * @brief Update the gcontact entry for a given user id + * Update the gcontact entry for a given user id * * @param int $uid User ID * @return bool @@ -1131,19 +1117,51 @@ class GContact ); $gcontact = ['name' => $userdata['name'], 'location' => $location, 'about' => $userdata['about'], - 'gender' => $userdata['gender'], 'keywords' => $userdata['pub_keywords'], + 'gender' => '', 'keywords' => $userdata['pub_keywords'], 'birthday' => $userdata['dob'], 'photo' => $userdata['photo'], "notify" => $userdata['notify'], 'url' => $userdata['url'], "hide" => ($userdata['hidewall'] || !$userdata['net-publish']), 'nick' => $userdata['nickname'], 'addr' => $userdata['addr'], - "connect" => $userdata['addr'], "server_url" => System::baseUrl(), + "connect" => $userdata['addr'], "server_url" => DI::baseUrl(), "generation" => 1, 'network' => Protocol::DFRN]; self::update($gcontact); } /** - * @brief Fetches users of given GNU Social server + * Get the basepath for a given contact link + * + * @param string $url The gcontact link + * @param boolean $dont_update Don't update the contact + * + * @return string basepath + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException + */ + public static function getBasepath($url, $dont_update = false) + { + $gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => Strings::normaliseLink($url)]); + if (!empty($gcontact['server_url'])) { + return $gcontact['server_url']; + } elseif ($dont_update) { + return ''; + } + + self::updateFromProbe($url, true); + + // Fetch the result + $gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => Strings::normaliseLink($url)]); + if (empty($gcontact['server_url'])) { + Logger::info('No baseurl for gcontact', ['url' => $url]); + return ''; + } + + Logger::info('Found baseurl for gcontact', ['url' => $url, 'baseurl' => $gcontact['server_url']]); + return $gcontact['server_url']; + } + + /** + * Fetches users of given GNU Social server * * If the "Statistics" addon is enabled (See http://gstools.org/ for details) we query user data with this. * @@ -1196,7 +1214,7 @@ class GContact 'addr' => $user->nickname . '@' . $hostname, 'nick' => $user->nickname, "network" => Protocol::OSTATUS, - 'photo' => System::baseUrl() . '/images/person-300.jpg']; + 'photo' => DI::baseUrl() . '/images/person-300.jpg']; if (isset($user->bio)) { $contact['about'] = $user->bio; @@ -1208,14 +1226,15 @@ class GContact } /** - * @brief Asking GNU Social server on a regular base for their user data + * Asking GNU Social server on a regular base for their user data + * * @return void * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function discoverGsUsers() { - $requery_days = intval(Config::get('system', 'poco_requery_days')); + $requery_days = intval(DI::config()->get('system', 'poco_requery_days')); $last_update = date("c", time() - (60 * 60 * 24 * $requery_days));