]> 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 cdb347e8be253ea8699e59fa69aa4312da313f7b..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
@@ -2762,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']]);
        }
 
        /**