]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Profile.php
Drop using the proxy large size for image preview
[friendica.git] / src / Model / Profile.php
index 29f6b29376362f4e6645cf2dfbb6ecb79b7a8f4f..c2b21e904bcaccc173e7fae8b23d1b72a52c4584 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -37,6 +37,7 @@ use Friendica\DI;
 use Friendica\Network\HTTPClient\Client\HttpClientAccept;
 use Friendica\Network\HTTPClient\Client\HttpClientOptions;
 use Friendica\Network\HTTPException;
+use Friendica\Network\HTTPException\InternalServerErrorException;
 use Friendica\Protocol\Activity;
 use Friendica\Protocol\Diaspora;
 use Friendica\Security\PermissionSet\Entity\PermissionSet;
@@ -93,10 +94,11 @@ class Profile
        /**
         * Update a profile entry and distribute the changes if needed
         *
-        * @param array $fields Profile fields to update
-        * @param integer $uid User id
+        * @param array   $fields Profile fields to update
+        * @param integer $uid    User id
         *
         * @return boolean Whether update was successful
+        * @throws \Exception
         */
        public static function update(array $fields, int $uid): bool
        {
@@ -116,10 +118,6 @@ class Profile
                        return false;
                }
 
-               if ($old_owner['name'] != $owner['name']) {
-                       User::update(['username' => $owner['name']], $uid);
-               }
-
                $profile_fields = ['postal-code', 'dob', 'prv_keywords', 'homepage'];
                foreach ($profile_fields as $field) {
                        if ($old_owner[$field] != $owner[$field]) {
@@ -334,14 +332,14 @@ class Profile
                if (!$local_user_is_self) {
                        if (!$visitor_is_authenticated) {
                                // Remote follow is only available for local profiles
-                               if (!empty($profile['nickname']) && strpos($profile_url, DI::baseUrl()->get()) === 0) {
+                               if (!empty($profile['nickname']) && strpos($profile_url, (string)DI::baseUrl()) === 0) {
                                        $follow_link = 'profile/' . $profile['nickname'] . '/remote_follow';
                                }
                        } else {
                                if ($visitor_is_following) {
                                        $unfollow_link = $visitor_base_path . '/contact/unfollow?url=' . urlencode($profile_url) . '&auto=1';
                                } else {
-                                       $follow_link =  $visitor_base_path .'/contact/follow?url=' . urlencode($profile_url) . '&auto=1';
+                                       $follow_link = $visitor_base_path . '/contact/follow?url=' . urlencode($profile_url) . '&auto=1';
                                }
                        }
 
@@ -451,6 +449,22 @@ class Profile
 
                $p['url'] = Contact::magicLinkById($cid, $profile['url']);
 
+               if (!isset($profile['hidewall'])) {
+                       Logger::warning('Missing hidewall key in profile array', ['profile' => $profile, 'callstack' => System::callstack(10)]);
+               }
+
+               if ($profile['account-type'] == Contact::TYPE_COMMUNITY) {
+                       $mention_label = DI::l10n()->t('Post to group');
+                       $mention_url   = 'compose/0?body=!' . $profile['addr'];
+                       $network_label = DI::l10n()->t('View group');
+                       $network_url   = 'network/group/' . $profile['id'];
+               } else {
+                       $mention_label = DI::l10n()->t('Mention');
+                       $mention_url   = 'compose/0?body=@' . $profile['addr'];
+                       $network_label = DI::l10n()->t('Network Posts');
+                       $network_url   = 'contact/' . $profile['id'] . '/conversations';
+               }
+
                $tpl = Renderer::getMarkupTemplate('profile/vcard.tpl');
                $o .= Renderer::replaceMacros($tpl, [
                        '$profile' => $p,
@@ -461,18 +475,23 @@ class Profile
                        '$unfollow' => DI::l10n()->t('Unfollow'),
                        '$unfollow_link' => $unfollow_link,
                        '$subscribe_feed' => DI::l10n()->t('Atom feed'),
-                       '$subscribe_feed_link' => $profile['poll'],
+                       '$subscribe_feed_link' => $profile['hidewall'] ?? 0 ? '' : $profile['poll'],
                        '$wallmessage' => DI::l10n()->t('Message'),
                        '$wallmessage_link' => $wallmessage_link,
                        '$account_type' => $account_type,
                        '$location' => $location,
                        '$homepage' => $homepage,
+                       '$homepage_verified' => DI::l10n()->t('This website has been verified to belong to the same person.'),
                        '$about' => $about,
                        '$network' => DI::l10n()->t('Network:'),
                        '$contacts' => $contact_count,
                        '$updated' => $updated,
                        '$diaspora' => $diaspora,
                        '$contact_block' => $contact_block,
+                       '$mention_label' => $mention_label,
+                       '$mention_url' => $mention_url,
+                       '$network_label' => $network_label,
+                       '$network_url' => $network_url,
                ]);
 
                $arr = ['profile' => &$profile, 'entry' => &$o];
@@ -635,13 +654,13 @@ class Profile
                                        $istoday = true;
                                }
 
-                               $title = strip_tags(html_entity_decode(BBCode::convertForUriId($rr['uri-id'], $rr['summary']), ENT_QUOTES, 'UTF-8'));
+                               $title = BBCode::toPlaintext($rr['summary'], false);
 
                                if (strlen($title) > 35) {
                                        $title = substr($title, 0, 32) . '... ';
                                }
 
-                               $description = substr(strip_tags(BBCode::convertForUriId($rr['uri-id'], $rr['desc'])), 0, 32) . '... ';
+                               $description = BBCode::toPlaintext($rr['desc'], false) . '... ';
                                if (!$description) {
                                        $description = DI::l10n()->t('[No description]');
                                }
@@ -751,13 +770,13 @@ class Profile
                $query = rtrim(str_replace($addr_request, '', DI::args()->getQueryString()), '?&');
 
                // The other instance needs to know where to redirect.
-               $dest = urlencode(DI::baseUrl()->get() . '/' . $query);
+               $dest = urlencode(DI::baseUrl() . '/' . $query);
 
                // We need to extract the basebath from the profile url
                // to redirect the visitors '/magic' module.
                $basepath = Contact::getBasepath($contact['url']);
 
-               if ($basepath != DI::baseUrl()->get() && !strstr($dest, '/magic')) {
+               if ($basepath != DI::baseUrl() && !strstr($dest, '/magic')) {
                        $magic_path = $basepath . '/magic' . '?owa=1&dest=' . $dest . '&' . $addr_request;
 
                        // We have to check if the remote server does understand /magic without invoking something
@@ -790,14 +809,16 @@ class Profile
                $visitor = Contact::getById($cid);
 
                // Authenticate the visitor.
-               $_SESSION['authenticated'] = 1;
-               $_SESSION['visitor_id'] = $visitor['id'];
-               $_SESSION['visitor_handle'] = $visitor['addr'];
-               $_SESSION['visitor_home'] = $visitor['url'];
-               $_SESSION['my_url'] = $visitor['url'];
-               $_SESSION['remote_comment'] = $visitor['subscribe'];
+               DI::userSession()->setMultiple([
+                       'authenticated'  => 1,
+                       'visitor_id'     => $visitor['id'],
+                       'visitor_handle' => $visitor['addr'],
+                       'visitor_home'   => $visitor['url'],
+                       'my_url'         => $visitor['url'],
+                       'remote_comment' => $visitor['subscribe'],
+               ]);
 
-               DI::userSession()->setVisitorsContacts();
+               DI::userSession()->setVisitorsContacts($visitor['url']);
 
                $a->setContactId($visitor['id']);
 
@@ -808,12 +829,14 @@ class Profile
 
        /**
         * Set the visitor cookies (see remote_user()) for signed HTTP requests
-        (
+        *
+        * @param array $server The content of the $_SERVER superglobal
         * @return array Visitor contact array
+        * @throws InternalServerErrorException
         */
-       public static function addVisitorCookieForHTTPSigner(): array
+       public static function addVisitorCookieForHTTPSigner(array $server): array
        {
-               $requester = HTTPSignature::getSigner('', $_SERVER);
+               $requester = HTTPSignature::getSigner('', $server);
                if (empty($requester)) {
                        return [];
                }
@@ -865,7 +888,7 @@ class Profile
 
                $a->setContactId($arr['visitor']['id']);
 
-               DI::sysmsg()->addInfo(DI::l10n()->t('OpenWebAuth: %1$s welcomes %2$s', DI::baseUrl()->getHostname(), $visitor['name']));
+               DI::sysmsg()->addInfo(DI::l10n()->t('OpenWebAuth: %1$s welcomes %2$s', DI::baseUrl()->getHost(), $visitor['name']));
 
                Logger::info('OpenWebAuth: auth success from ' . $visitor['addr']);
        }
@@ -935,7 +958,7 @@ class Profile
                if (!empty($search)) {
                        $publish = (DI::config()->get('system', 'publish_all') ? '' : "AND `publish` ");
                        $searchTerm = '%' . $search . '%';
-                       $condition = ["NOT `blocked` AND NOT `account_removed`
+                       $condition = ["`verified` AND NOT `blocked` AND NOT `account_removed` AND NOT `account_expired`
                                $publish
                                AND ((`name` LIKE ?) OR
                                (`nickname` LIKE ?) OR
@@ -948,7 +971,7 @@ class Profile
                                $searchTerm, $searchTerm, $searchTerm, $searchTerm,
                                $searchTerm, $searchTerm, $searchTerm, $searchTerm];
                } else {
-                       $condition = ['blocked' => false, 'account_removed' => false];
+                       $condition = ['verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false];
                        if (!DI::config()->get('system', 'publish_all')) {
                                $condition['publish'] = true;
                        }