diff --git a/include/conversation.php b/include/conversation.php index 1185e9dc3..43854bb40 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -657,7 +657,7 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o 'id' => ($preview ? 'P0' : $item['id']), 'guid' => ($preview ? 'Q0' : $item['guid']), 'network' => $item['network'], - 'network_name' => ContactSelector::networkToName($item['network'], $profile_link), + 'network_name' => ContactSelector::networkToName($item['network'], $item['author-link']), 'linktitle' => L10n::t('View %s\'s profile @ %s', $profile_name, $item['author-link']), 'profile_url' => $profile_link, 'item_photo_menu' => item_photo_menu($item), diff --git a/src/Content/ContactSelector.php b/src/Content/ContactSelector.php index 6a701f25f..298f2512e 100644 --- a/src/Content/ContactSelector.php +++ b/src/Content/ContactSelector.php @@ -7,7 +7,9 @@ namespace Friendica\Content; use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\Protocol; +use Friendica\Core\System; use Friendica\Database\DBA; +use Friendica\Util\Network; /** * @brief ContactSelector class @@ -68,11 +70,11 @@ class ContactSelector } /** - * @param string $s network + * @param string $network network * @param string $profile optional, default empty * @return string */ - public static function networkToName($s, $profile = "") + public static function networkToName($network, $profile = "") { $nets = [ Protocol::DFRN => L10n::t('Friendica'), @@ -98,18 +100,36 @@ class ContactSelector $search = array_keys($nets); $replace = array_values($nets); - $networkname = str_replace($search, $replace, $s); + $networkname = str_replace($search, $replace, $network); - if ((in_array($s, [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS])) && ($profile != "")) { - $r = DBA::fetchFirst("SELECT `gserver`.`platform` FROM `gcontact` - INNER JOIN `gserver` ON `gserver`.`nurl` = `gcontact`.`server_url` - WHERE `gcontact`.`nurl` = ? AND `platform` != ''", normalise_link($profile)); + if ((in_array($network, [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS])) && ($profile != "")) { + // Create the server url out of the profile url + $parts = parse_url($profile); + unset($parts['path']); + $server_url = [normalise_link(Network::unparseURL($parts))]; - if (DBA::isResult($r)) { - $networkname = $r['platform']; + // Fetch the server url + $gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => normalise_link($profile)]); + if (!empty($gcontact) && !empty($gcontact['server_url'])) { + $server_url[] = normalise_link($gcontact['server_url']); + } - if ($s == Protocol::ACTIVITYPUB) { - $networkname .= ' (AP)'; + // Now query the GServer for the platform name + $gserver = DBA::selectFirst('gserver', ['platform', 'network'], ['nurl' => $server_url]); + + if (DBA::isResult($gserver)) { + if (!empty($gserver['platform'])) { + $platform = $gserver['platform']; + } elseif (!empty($gserver['network']) && ($gserver['network'] != Protocol::ACTIVITYPUB)) { + $platform = self::networkToName($gserver['network']); + } + + if (!empty($platform)) { + $networkname = $platform; + + if ($network == Protocol::ACTIVITYPUB) { + $networkname .= ' (AP)'; + } } } } diff --git a/src/Object/Post.php b/src/Object/Post.php index efd7d4dc8..35805e1fd 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -402,7 +402,7 @@ class Post extends BaseObject 'thread_level' => $thread_level, 'edited' => $edited, 'network' => $item["network"], - 'network_name' => ContactSelector::networkToName($item['network'], $profile_link), + 'network_name' => ContactSelector::networkToName($item['network'], $item['author-link']), 'received' => $item['received'], 'commented' => $item['commented'], 'created_date' => $item['created'],