]> git.mxchange.org Git - friendica.git/blobdiff - src/Content/Widget/VCard.php
Merge pull request #11532 from tobiasd/2022.05-CHANGELOG
[friendica.git] / src / Content / Widget / VCard.php
index a7d7d8cbd2e7fa3d41d2b1e68b8d668156e150e2..96f35e6584503f2aec7cd7a2fe9dbba6ab0ce03a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
 
 namespace Friendica\Content\Widget;
 
+use Friendica\Content\ContactSelector;
 use Friendica\Content\Text\BBCode;
+use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
 use Friendica\Core\Renderer;
+use Friendica\Core\System;
 use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Util\Strings;
@@ -43,32 +46,45 @@ class VCard
         */
        public static function getHTML(array $contact)
        {
-               if (($contact['network'] != '') && ($contact['network'] != Protocol::DFRN)) {
-                       $network_link = Strings::formatNetworkName($contact['network'], $contact['url']);
+               if (!isset($contact['network']) || !isset($contact['id'])) {
+                       Logger::warning('Incomplete contact', ['contact' => $contact ?? [], 'callstack' => System::callstack(20)]);
+               }
+
+               if ($contact['network'] != '') {
+                       $network_link   = Strings::formatNetworkName($contact['network'], $contact['url']);
+                       $network_avatar = ContactSelector::networkToIcon($contact['network'], $contact['url']);
                } else {
-                       $network_link = '';
+                       $network_link   = '';
+                       $network_avatar = '';
                }
 
-               $follow_link = '';
-               $unfollow_link = '';
+               $follow_link      = '';
+               $unfollow_link    = '';
                $wallmessage_link = '';
 
+               $photo   = Contact::getPhoto($contact);
+
                if (local_user()) {
                        if ($contact['uid']) {
                                $id      = $contact['id'];
                                $rel     = $contact['rel'];
                                $pending = $contact['pending'];
                        } else {
-                               $pcontact = Contact::selectFirst(['id', 'rel', 'pending'], ['uid' => local_user(), 'uri-id' => $contact['uri-id']]);
+                               $pcontact = Contact::selectFirst([], ['uid' => local_user(), 'uri-id' => $contact['uri-id']]);
+
                                $id      = $pcontact['id'] ?? 0;
                                $rel     = $pcontact['rel'] ?? Contact::NOTHING;
                                $pending = $pcontact['pending'] ?? false;
+
+                               if (!empty($pcontact) && in_array($pcontact['network'], [Protocol::MAIL, Protocol::FEED])) {
+                                       $photo = Contact::getPhoto($pcontact);
+                               }
                        }
 
-                       if (in_array($contact['network'], Protocol::NATIVE_SUPPORT)) {
+                       if (empty($contact['self']) && Protocol::supportsFollow($contact['network'])) {
                                if (in_array($rel, [Contact::SHARING, Contact::FRIEND])) {
                                        $unfollow_link = 'unfollow?url=' . urlencode($contact['url']) . '&auto=1';
-                               } elseif(!$pending) {
+                               } elseif (!$pending) {
                                        $follow_link = 'follow?url=' . urlencode($contact['url']) . '&auto=1';
                                }
                        }
@@ -80,14 +96,16 @@ class VCard
 
                return Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/vcard.tpl'), [
                        '$contact'          => $contact,
-                       '$photo'            => Contact::getPhoto($contact),
+                       '$photo'            => $photo,
                        '$url'              => Contact::magicLinkByContact($contact, $contact['url']),
                        '$about'            => BBCode::convertForUriId($contact['uri-id'] ?? 0, $contact['about'] ?? ''),
                        '$xmpp'             => DI::l10n()->t('XMPP:'),
+                       '$matrix'           => DI::l10n()->t('Matrix:'),
                        '$location'         => DI::l10n()->t('Location:'),
                        '$network_link'     => $network_link,
+                       '$network_avatar'   => $network_avatar,
                        '$network'          => DI::l10n()->t('Network:'),
-                       '$account_type'     => Contact::getAccountType($contact),
+                       '$account_type'     => Contact::getAccountType($contact['contact-type']),
                        '$follow'           => DI::l10n()->t('Follow'),
                        '$follow_link'      => $follow_link,
                        '$unfollow'         => DI::l10n()->t('Unfollow'),