X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FContact.php;h=bf90edcd4c3e20fd78a60677e653d158b228e7ec;hb=44818ba5562f24e098225cef1d3252ff35d02a6e;hp=392f7776154b863f1f1bfe54998907450fd40526;hpb=8b3a9fc58a969a3d9202f6858d5228f3a28be1ef;p=friendica.git diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 392f777615..bf90edcd4c 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -329,7 +329,7 @@ class Contact // Add internal fields $removal = []; if (!empty($fields)) { - foreach (['id', 'next-update', 'network'] as $internal) { + foreach (['id', 'next-update', 'network', 'local-data'] as $internal) { if (!in_array($internal, $fields)) { $fields[] = $internal; $removal[] = $internal; @@ -358,8 +358,10 @@ class Contact return []; } + $background_update = DI::config()->get('system', 'update_active_contacts') ? $contact['local-data'] : true; + // Update the contact in the background if needed - if (Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) { + if ($background_update && !self::isLocal($url) && Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) { Worker::add(['priority' => Worker::PRIORITY_LOW, 'dont_fork' => true], 'UpdateContact', $contact['id']); } @@ -1266,12 +1268,14 @@ class Contact return 0; } - $contact = self::getByURL($url, false, ['id', 'network', 'uri-id', 'next-update'], $uid); + $contact = self::getByURL($url, false, ['id', 'network', 'uri-id', 'next-update', 'local-data'], $uid); if (!empty($contact)) { $contact_id = $contact['id']; - if (Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) { + $background_update = DI::config()->get('system', 'update_active_contacts') ? $contact['local-data'] : true; + + if ($background_update && !self::isLocal($url) && Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) { Worker::add(['priority' => Worker::PRIORITY_LOW, 'dont_fork' => true], 'UpdateContact', $contact['id']); } @@ -1544,8 +1548,8 @@ class Contact $contact_field = ((($contact["contact-type"] == self::TYPE_COMMUNITY) || ($contact['network'] == Protocol::MAIL)) ? 'owner-id' : 'author-id'); if ($thread_mode) { - $condition = ["((`$contact_field` = ? AND `gravity` = ?) OR (`author-id` = ? AND `gravity` = ? AND `vid` = ? AND `thr-parent-id` = `parent-uri-id`)) AND " . $sql, - $cid, Item::GRAVITY_PARENT, $cid, Item::GRAVITY_ACTIVITY, Verb::getID(Activity::ANNOUNCE), DI::userSession()->getLocalUserId()]; + $condition = ["((`$contact_field` = ? AND `gravity` = ?) OR (`author-id` = ? AND `gravity` = ? AND `vid` = ? AND `protocol` != ? AND `thr-parent-id` = `parent-uri-id`)) AND " . $sql, + $cid, Item::GRAVITY_PARENT, $cid, Item::GRAVITY_ACTIVITY, Verb::getID(Activity::ANNOUNCE), Conversation::PARCEL_DIASPORA, DI::userSession()->getLocalUserId()]; } else { $condition = ["`$contact_field` = ? AND `gravity` IN (?, ?) AND " . $sql, $cid, Item::GRAVITY_PARENT, Item::GRAVITY_COMMENT, DI::userSession()->getLocalUserId()]; @@ -2481,6 +2485,44 @@ class Contact return true; } + /** + * Perform a contact update if the contact is outdated + * + * @param integer $id contact id + * @return bool + */ + public static function updateByIdIfNeeded(int $id): bool + { + $contact = self::selectFirst(['url'], ["`id` = ? AND `next-update` < ?", $id, DateTimeFormat::utcNow()]); + if (empty($contact['url'])) { + return false; + } + + if (self::isLocal($contact['url'])) { + return true; + } + + $stamp = (float)microtime(true); + self::updateFromProbe($id); + Logger::debug('Contact data is updated.', ['duration' => round((float)microtime(true) - $stamp, 3), 'id' => $id, 'url' => $contact['url'], 'callstack' => System::callstack(20)]); + return true; + } + + /** + * Perform a contact update if the contact is outdated + * + * @param string $url contact url + * @return bool + */ + public static function updateByUrlIfNeeded(string $url): bool + { + $id = self::getIdForURL($url, 0, false); + if (!empty($id)) { + return self::updateByIdIfNeeded($id); + } + return (bool)self::getIdForURL($url); + } + /** * Updates contact record by provided id and optional network * @@ -2911,7 +2953,7 @@ class Contact } if (($network != '') && ($ret['network'] != $network)) { - Logger::notice('Expected network ' . $network . ' does not match actual network ' . $ret['network']); + $result['message'] = DI::l10n()->t('Expected network %s does not match actual network %s', $network, $ret['network']); return $result; }