X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FActivityPub%2FProcessor.php;h=e5653a554fd565aa79cf286e9fd2604e28d0ed1a;hb=d15023fe4bbc404d71ad9deeccfb066c70db9ee5;hp=5caef7745eae7e9dc294efb126f0641ffd10eebb;hpb=a5a5a4b60318eb8ec94ee25f38e8ef6e6516c4b9;p=friendica.git diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 5caef7745e..e5653a554f 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -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 *