X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FItem.php;h=34f7e0d8b8959e61e80d4d99def20eb1461e5a23;hb=55db2670d1662b32c6faa820c60c44e16cffab20;hp=09abf959975cd0b1be641d8d0dcbe8cf65938a20;hpb=903bc9b679b93c217c0bd9bd3384ad90737ff523;p=friendica.git diff --git a/src/Model/Item.php b/src/Model/Item.php index 09abf95997..34f7e0d8b8 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -869,7 +869,7 @@ class Item $item["contact-id"] = self::contactId($item); if (!empty($item['direction']) && in_array($item['direction'], [Conversation::PUSH, Conversation::RELAY]) && - self::isTooOld($item)) { + empty($item['origin']) &&self::isTooOld($item)) { Logger::info('Item is too old', ['item' => $item]); return 0; } @@ -1751,7 +1751,7 @@ class Item // which point it will be automatically available through `getAvailableLanguages()` and this should be removed. $availableLanguages['fa'] = 'fa'; - $ld = new Language($availableLanguages); + $ld = new Language(array_keys($availableLanguages)); $languages = $ld->detect($naked_body)->limit(0, 3)->close(); if (is_array($languages)) { return json_encode($languages); @@ -1773,7 +1773,10 @@ class Item } /** - * Creates an unique guid out of a given uri + * Creates an unique guid out of a given uri. + * This function is used for messages outside the fediverse (Connector posts, feeds, Mails, ...) + * Posts that are created on this system are using System::createUUID. + * Received ActivityPub posts are using Processor::getGUIDByURL. * * @param string $uri uri of an item entry * @param string $host hostname for the GUID prefix @@ -1785,19 +1788,14 @@ class Item // We have to avoid that different routines could accidentally create the same value $parsed = parse_url($uri); - // We use a hash of the hostname as prefix for the guid - $guid_prefix = hash("crc32", $host); - // Remove the scheme to make sure that "https" and "http" doesn't make a difference unset($parsed["scheme"]); // Glue it together to be able to make a hash from it $host_id = implode("/", $parsed); - // We could use any hash algorithm since it isn't a security issue - $host_hash = hash("ripemd128", $host_id); - - return $guid_prefix.$host_hash; + // Use a mixture of several hashes to provide some GUID like experience + return hash("crc32", $host) . '-'. hash('joaat', $host_id) . '-'. hash('fnv164', $host_id); } /** @@ -3193,6 +3191,12 @@ class Item */ public static function getPlink($item) { + if (!empty($item['plink']) && Network::isValidHttpUrl($item['plink'])) { + $plink = $item['plink']; + } elseif (!empty($item['uri']) && Network::isValidHttpUrl($item['uri']) && !Network::isLocalLink($item['uri'])) { + $plink = $item['uri']; + } + if (local_user()) { $ret = [ 'href' => "display/" . $item['guid'], @@ -3201,14 +3205,14 @@ class Item 'orig_title' => DI::l10n()->t('View on separate page'), ]; - if (!empty($item['plink'])) { - $ret['href'] = DI::baseUrl()->remove($item['plink']); + if (!empty($plink)) { + $ret['href'] = DI::baseUrl()->remove($plink); $ret['title'] = DI::l10n()->t('Link to source'); } - } elseif (!empty($item['plink']) && ($item['private'] != self::PRIVATE)) { + } elseif (!empty($plink) && ($item['private'] != self::PRIVATE)) { $ret = [ - 'href' => $item['plink'], - 'orig' => $item['plink'], + 'href' => $plink, + 'orig' => $plink, 'title' => DI::l10n()->t('Link to source'), 'orig_title' => DI::l10n()->t('Link to source'), ];