From 9cbf320c86baecc5aa3f72106dfef0e7df925ef9 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 28 Aug 2019 06:38:35 +0000 Subject: [PATCH] Issue 7563: Use icons instead of names on posts --- include/conversation.php | 1 + src/Content/ContactSelector.php | 107 ++++++++++++++++++++-- src/Object/Post.php | 1 + view/theme/frio/templates/search_item.tpl | 5 + view/theme/frio/templates/wall_thread.tpl | 5 +- 5 files changed, 108 insertions(+), 11 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index 798a224016..66b6d2a11c 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -677,6 +677,7 @@ function conversation(App $a, array $items, Pager $pager, $mode, $update, $previ 'guid' => ($preview ? 'Q0' : $item['guid']), 'network' => $item['network'], 'network_name' => ContactSelector::networkToName($item['network'], $item['author-link']), + 'network_icon' => ContactSelector::networkToIcon($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 2b86a6e75d..2f6677aba1 100644 --- a/src/Content/ContactSelector.php +++ b/src/Content/ContactSelector.php @@ -71,6 +71,39 @@ class ContactSelector return $o; } + /** + * @param string $profile Profile URL + * @return string Server URL + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + private static function getServerURLForProfile($profile) + { + $server_url = ''; + + // Fetch the server url from the contact table + $contact = DBA::selectFirst('contact', ['baseurl'], ['nurl' => Strings::normaliseLink($profile)]); + if (DBA::isResult($contact) && !empty($contact['baseurl'])) { + $server_url = Strings::normaliseLink($contact['baseurl']); + } + + if (empty($server_url)) { + // Fetch the server url from the gcontact table + $gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => Strings::normaliseLink($profile)]); + if (!empty($gcontact) && !empty($gcontact['server_url'])) { + $server_url = Strings::normaliseLink($gcontact['server_url']); + } + } + + if (empty($server_url)) { + // Create the server url out of the profile url + $parts = parse_url($profile); + unset($parts['path']); + $server_url = Strings::normaliseLink(Network::unparseURL($parts)); + } + + return $server_url; + } + /** * @param string $network network * @param string $profile optional, default empty @@ -106,16 +139,7 @@ class ContactSelector $networkname = str_replace($search, $replace, $network); if ((in_array($network, Protocol::FEDERATED)) && ($profile != "")) { - // Create the server url out of the profile url - $parts = parse_url($profile); - unset($parts['path']); - $server_url = [Strings::normaliseLink(Network::unparseURL($parts))]; - - // Fetch the server url - $gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => Strings::normaliseLink($profile)]); - if (!empty($gcontact) && !empty($gcontact['server_url'])) { - $server_url[] = Strings::normaliseLink($gcontact['server_url']); - } + $server_url = self::getServerURLForProfile($profile); // Now query the GServer for the platform name $gserver = DBA::selectFirst('gserver', ['platform', 'network'], ['nurl' => $server_url]); @@ -140,6 +164,69 @@ class ContactSelector return $networkname; } + /** + * @param string $network network + * @param string $profile optional, default empty + * @return string + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + public static function networkToIcon($network, $profile = "") + { + $nets = [ + Protocol::DFRN => 'friendica', + Protocol::OSTATUS => 'gnu-social', + Protocol::FEED => 'rss', + Protocol::MAIL => '', + Protocol::DIASPORA => 'diaspora', + Protocol::ZOT => 'hubzilla', + Protocol::LINKEDIN => 'linkedin', + Protocol::XMPP => 'xmpp', + Protocol::MYSPACE => '', + Protocol::GPLUS => 'google-plus', + Protocol::PUMPIO => '', + Protocol::TWITTER => 'twitter', + Protocol::DIASPORA2 => 'diaspora', + Protocol::STATUSNET => 'gnu-social', + Protocol::ACTIVITYPUB => 'activitypub', + Protocol::PNUT => '', + ]; + + $search = array_keys($nets); + $replace = array_values($nets); + + $networkicon = str_replace($search, $replace, $network); + + if ((in_array($network, Protocol::FEDERATED)) && ($profile != "")) { + $server_url = self::getServerURLForProfile($profile); + + // Now query the GServer for the platform name + $gserver = DBA::selectFirst('gserver', ['platform'], ['nurl' => $server_url]); + + if (DBA::isResult($gserver) && !empty($gserver['platform'])) { + switch (strtolower($gserver['platform'])) { + case 'friendica': + $networkicon = 'friendica'; + break; + case 'hubzilla': + $networkicon = 'hubzilla'; + break; + case 'mastodon': + $networkicon = 'mastodon'; + break; + case 'pleroma': + $networkicon = 'pleroma'; + break; + } + } + } + + if (empty($networkicon)) { + $networkicon = 'file-text-o'; + } + + return $networkicon; + } + /** * @param string $current optional, default empty * @param string $suffix optionsl, default empty diff --git a/src/Object/Post.php b/src/Object/Post.php index 7f9f84b546..36be9c4e6b 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -426,6 +426,7 @@ class Post extends BaseObject 'edited' => $edited, 'network' => $item["network"], 'network_name' => ContactSelector::networkToName($item['network'], $item['author-link']), + 'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link']), 'received' => $item['received'], 'commented' => $item['commented'], 'created_date' => $item['created'], diff --git a/view/theme/frio/templates/search_item.tpl b/view/theme/frio/templates/search_item.tpl index 3b3f64a0d4..3b56621ef3 100644 --- a/view/theme/frio/templates/search_item.tpl +++ b/view/theme/frio/templates/search_item.tpl @@ -12,7 +12,12 @@ {{* Put additional actions in a top-right dropdown menu *}}