]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/ActivityPub/Processor.php
Use centralized function to fetch query results
[friendica.git] / src / Protocol / ActivityPub / Processor.php
index 5caef7745eae7e9dc294efb126f0641ffd10eebb..e5653a554fd565aa79cf286e9fd2604e28d0ed1a 100644 (file)
@@ -492,7 +492,7 @@ class Processor
 
                Logger::debug('Add post to featured collection', ['uri-id' => $uriid]);
 
-               // @todo Add functionality
+               Post\Collection::add($uriid, Post\Collection::FEATURED);
        }
 
        /**
@@ -509,7 +509,7 @@ class Processor
 
                Logger::debug('Remove post from featured collection', ['uri-id' => $uriid]);
 
-               // @todo Add functionality
+               Post\Collection::remove($uriid, Post\Collection::FEATURED);
        }
 
        /**
@@ -977,6 +977,80 @@ class Processor
                return Mail::insert($msg);
        }
 
+       /**
+        * Fetch featured posts from a contact with the given url
+        *
+        * @param string $url 
+        * @return void 
+        */
+       public static function fetchFeaturedPosts(string $url)
+       {
+               Logger::info('Fetch featured posts', ['contact' => $url]);
+
+               $apcontact = APContact::getByURL($url);
+               if (empty($apcontact['featured'])) {
+                       Logger::info('Contact does not have a featured collection', ['contact' => $url]);
+                       return;
+               }
+
+               $pcid = Contact::getIdForURL($url, 0, false);
+               if (empty($pcid)) {
+                       Logger::info('Contact not found', ['contact' => $url]);
+                       return;
+               }
+
+               $posts = Post\Collection::selectToArrayForContact($pcid, Post\Collection::FEATURED);
+               if (!empty($posts)) {
+                       $old_featured = array_column($posts, 'uri-id');
+               }
+
+               $featured = ActivityPub::fetchItems($apcontact['featured']);
+               if (empty($featured)) {
+                       Logger::info('Contact does not have featured posts', ['contact' => $url]);
+
+                       foreach ($old_featured as $uri_id) {
+                               Post\Collection::remove($uri_id, Post\Collection::FEATURED);
+                               Logger::debug('Removed no longer featured post', ['uri-id' => $uri_id, 'contact' => $url]);
+                       }
+                       return;
+               }
+
+               $new = 0;
+               $old = 0;
+
+               foreach ($featured as $post) {
+                       if (empty($post['id'])) {
+                               continue;
+                       }
+                       $id = Item::fetchByLink($post['id']);
+                       if (!empty($id)) {
+                               $item = Post::selectFirst(['uri-id', 'featured'], ['id' => $id]);
+                               if (!empty($item['uri-id'])) {
+                                       if (!$item['featured']) {
+                                               Post\Collection::add($item['uri-id'], Post\Collection::FEATURED);
+                                               Logger::debug('Added featured post', ['uri-id' => $item['uri-id'], 'contact' => $url]);
+                                               $new++;
+                                       } else {
+                                               Logger::debug('Post already had been featured', ['uri-id' => $item['uri-id'], 'contact' => $url]);
+                                               $old++;
+                                       }
+
+                                       $index = array_search($item['uri-id'], $old_featured);
+                                       if (!($index === false)) {
+                                               unset($old_featured[$index]);
+                                       }
+                               }
+                       }
+               }
+
+               foreach ($old_featured as $uri_id) {
+                       Post\Collection::remove($uri_id, Post\Collection::FEATURED);
+                       Logger::debug('Removed no longer featured post', ['uri-id' => $uri_id, 'contact' => $url]);
+               }
+
+               Logger::info('Fetched featured posts', ['new' => $new, 'old' => $old, 'contact' => $url]);
+       }
+
        /**
         * Fetches missing posts
         *
@@ -1206,6 +1280,52 @@ class Processor
                Logger::info('Deleted contact', ['object' => $activity['object_id']]);
        }
 
+       /**
+        * Blocks the user by the contact
+        *
+        * @param array $activity
+        * @throws \Exception
+        */
+       public static function blockAccount($activity)
+       {
+               $cid = Contact::getIdForURL($activity['actor']);
+               if (empty($cid)) {
+                       return;
+               }
+
+               $uid = User::getIdForURL($activity['object_id']);
+               if (empty($uid)) {
+                       return;                 
+               }
+
+               Contact\User::setIsBlocked($cid, $uid, true);
+
+               Logger::info('Contact blocked user', ['contact' => $cid, 'user' => $uid]);
+       }
+
+       /**
+        * Unblocks the user by the contact
+        *
+        * @param array $activity
+        * @throws \Exception
+        */
+       public static function unblockAccount($activity)
+       {
+               $cid = Contact::getIdForURL($activity['actor']);
+               if (empty($cid)) {
+                       return;
+               }
+
+               $uid = User::getIdForURL($activity['object_object']);
+               if (empty($uid)) {
+                       return;                 
+               }
+
+               Contact\User::setIsBlocked($cid, $uid, false);
+
+               Logger::info('Contact unblocked user', ['contact' => $cid, 'user' => $uid]);
+       }
+
        /**
         * Accept a follow request
         *