]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Contact.php
Use centralized function to fetch query results
[friendica.git] / src / Model / Contact.php
index f0be45772246457eaa122e204d735fc2e0c70d70..df1a25cd7d81ef0a966b74a6821059b87f5dbaef 100644 (file)
@@ -39,9 +39,6 @@ use Friendica\Network\HTTPException;
 use Friendica\Network\Probe;
 use Friendica\Protocol\Activity;
 use Friendica\Protocol\ActivityPub;
-use Friendica\Protocol\Diaspora;
-use Friendica\Protocol\OStatus;
-use Friendica\Protocol\Salmon;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Images;
 use Friendica\Util\Network;
@@ -1459,11 +1456,29 @@ class Contact
                }
 
                if ($thread_mode) {
-                       $items = Post::toArray(Post::selectForUser(local_user(), ['uri-id', 'gravity', 'parent-uri-id', 'thr-parent-id', 'author-id'], $condition, $params));
+                       $items = Post::toArray(Post::selectForUser(local_user(), ['uri-id'], $condition, $params));
 
-                       $o .= DI::conversation()->create($items, 'contacts', $update, false, 'commented', local_user());
+                       if ($pager->getStart() == 0) {
+                               $cdata = Contact::getPublicAndUserContactID($cid, local_user());
+                               if (!empty($cdata['public'])) {
+                                       $pinned = Post\Collection::selectToArrayForContact($cdata['public'], Post\Collection::FEATURED, ['uri-id']);
+                                       $items = array_merge($items, $pinned);
+                               }
+                       }
+
+                       $o .= DI::conversation()->create($items, 'contacts', $update, false, 'pinned_commented', local_user());
                } else {
-                       $items = Post::toArray(Post::selectForUser(local_user(), Item::DISPLAY_FIELDLIST, $condition, $params));
+                       $fields = array_merge(Item::DISPLAY_FIELDLIST, ['featured']);
+                       $items = Post::toArray(Post::selectForUser(local_user(), $fields, $condition, $params));
+
+                       if ($pager->getStart() == 0) {
+                               $cdata = Contact::getPublicAndUserContactID($cid, local_user());
+                               if (!empty($cdata['public'])) {
+                                       $condition = ["`uri-id` IN (SELECT `uri-id` FROM `collection-view` WHERE `cid` = ?)", $cdata['public']];
+                                       $pinned = Post::toArray(Post::selectForUser(local_user(), $fields, $condition, $params));
+                                       $items = array_merge($pinned, $items);
+                                       }
+                       }
 
                        $o .= DI::conversation()->create($items, 'contact-posts', $update);
                }
@@ -2256,6 +2271,10 @@ class Contact
                $new_pubkey = $ret['pubkey'] ?? '';
 
                if ($uid == 0) {
+                       if ($ret['network'] == Protocol::ACTIVITYPUB) {
+                               ActivityPub\Processor::fetchFeaturedPosts($ret['url']);
+                       }
+       
                        $ret['last-item'] = Probe::getLastUpdate($ret);
                        Logger::info('Fetched last item', ['id' => $id, 'probed_url' => $ret['url'], 'last-item' => $ret['last-item'], 'callstack' => System::callstack(20)]);
                }
@@ -2617,7 +2636,7 @@ class Contact
                        return false;
                }
 
-               $fields = ['url', 'name', 'nick', 'avatar', 'photo', 'network', 'blocked'];
+               $fields = ['id', 'url', 'name', 'nick', 'avatar', 'photo', 'network', 'blocked'];
                $pub_contact = DBA::selectFirst('contact', $fields, ['id' => $datarray['author-id']]);
                if (!DBA::isResult($pub_contact)) {
                        // Should never happen
@@ -2665,7 +2684,7 @@ class Contact
                        // Ensure to always have the correct network type, independent from the connection request method
                        self::updateFromProbe($contact['id']);
 
-                       Post\UserNotification::insertNotification($contact['id'], Activity::FOLLOW, $importer['uid']);
+                       Post\UserNotification::insertNotification($pub_contact['id'], Activity::FOLLOW, $importer['uid']);
 
                        return true;
                } else {
@@ -2696,7 +2715,7 @@ class Contact
 
                        self::updateAvatar($contact_id, $photo, true);
 
-                       Post\UserNotification::insertNotification($contact_id, Activity::FOLLOW, $importer['uid']);
+                       Post\UserNotification::insertNotification($pub_contact['id'], Activity::FOLLOW, $importer['uid']);
 
                        $contact_record = DBA::selectFirst('contact', ['id', 'network', 'name', 'url', 'photo'], ['id' => $contact_id]);
 
@@ -2716,9 +2735,7 @@ class Contact
 
                                Group::addMember(User::getDefaultGroup($importer['uid']), $contact_record['id']);
 
-                               if (($user['notify-flags'] & Notification\Type::INTRO) &&
-                                       in_array($user['page-flags'], [User::PAGE_FLAGS_NORMAL])) {
-
+                               if (($user['notify-flags'] & Notification\Type::INTRO) && $user['page-flags'] == User::PAGE_FLAGS_NORMAL) {
                                        DI::notify()->createFromArray([
                                                'type'  => Notification\Type::INTRO,
                                                'otype' => Notification\ObjectType::INTRO,
@@ -2764,6 +2781,10 @@ class Contact
                } else {
                        DI::logger()->info('Couldn\'t remove follower because of invalid contact array', ['contact' => $contact, 'callstack' => System::callstack()]);
                }
+
+               $cdata = Contact::getPublicAndUserContactID($contact['id'], $contact['uid']);
+
+               DI::notification()->deleteForUserByVerb($contact['uid'], Activity::FOLLOW, ['actor-id' => $cdata['public']]);
        }
 
        /**