]> git.mxchange.org Git - friendica.git/commitdiff
Issue 11427: id values of OrderedCollections have to contain the page number
authorMichael <heluecht@pirati.ca>
Thu, 21 Apr 2022 04:29:08 +0000 (04:29 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 21 Apr 2022 04:29:08 +0000 (04:29 +0000)
src/Module/ActivityPub/Featured.php
src/Module/ActivityPub/Followers.php
src/Module/ActivityPub/Following.php
src/Module/ActivityPub/Outbox.php
src/Protocol/ActivityPub/Transmitter.php

index a4b8c3fef10e48791dce63838e49fc997d13ea2c..d525e7d69a82fff9b4a1a468d2a0265ded52e0e9 100644 (file)
@@ -42,7 +42,7 @@ class Featured extends BaseModule
                        throw new \Friendica\Network\HTTPException\NotFoundException();
                }
 
-               $page = $request['page'] ?? null;
+               $page = !empty($request['page']) ? (int)$request['page'] : null;
 
                $featured = ActivityPub\Transmitter::getFeatured($owner, $page);
 
index b04d1976e0e503ca58fa9e8bc7cb87579ec71177..48236da301580f1a1d7d892b8129a9a827a4d962 100644 (file)
@@ -45,7 +45,7 @@ class Followers extends BaseModule
                        throw new \Friendica\Network\HTTPException\NotFoundException();
                }
 
-               $page = $_REQUEST['page'] ?? null;
+               $page = !empty($request['page']) ? (int)$request['page'] : null;
 
                $followers = ActivityPub\Transmitter::getContacts($owner, [Contact::FOLLOWER, Contact::FRIEND], 'followers', $page, (string)HTTPSignature::getSigner('', $_SERVER));
 
index e3ae10e87e22382d55501c1049c7bd767a5778fe..50d4a0824aa6b2434d842a8392a660626617a6f5 100644 (file)
@@ -43,7 +43,7 @@ class Following extends BaseModule
                        throw new \Friendica\Network\HTTPException\NotFoundException();
                }
 
-               $page = $_REQUEST['page'] ?? null;
+               $page = !empty($request['page']) ? (int)$request['page'] : null;
 
                $following = ActivityPub\Transmitter::getContacts($owner, [Contact::SHARING, Contact::FRIEND], 'following', $page);
 
index 4bc1ca69301d27aa27b7789d39add7138f953316..47ff2a8fc8e840a064997d9879b2dcceb29491f9 100644 (file)
@@ -43,7 +43,7 @@ class Outbox extends BaseModule
                        throw new \Friendica\Network\HTTPException\NotFoundException();
                }
 
-               $page = $_REQUEST['page'] ?? null;
+               $page = !empty($request['page']) ? (int)$request['page'] : null;
 
                $requester = HTTPSignature::getSigner('', $_SERVER);
                $outbox = ActivityPub\Transmitter::getOutbox($owner, $page, $requester);
index b86f94715c5d1783e7bac534935abf8b2dc7c677..e3df1a7a32fc0af404803e0ec40245faf99acce4 100644 (file)
@@ -146,16 +146,16 @@ class Transmitter
        /**
         * Collects a list of contacts of the given owner
         *
-        * @param array     $owner     Owner array
-        * @param int|array $rel       The relevant value(s) contact.rel should match
-        * @param string    $module    The name of the relevant AP endpoint module (followers|following)
-        * @param integer   $page      Page number
-        * @param string    $requester URL of the requester
+        * @param array   $owner     Owner array
+        * @param array   $rel       The relevant value(s) contact.rel should match
+        * @param string  $module    The name of the relevant AP endpoint module (followers|following)
+        * @param integer $page      Page number
+        * @param string  $requester URL of the requester
         *
         * @return array of owners
         * @throws \Exception
         */
-       public static function getContacts($owner, $rel, $module, $page = null, string $requester = null)
+       public static function getContacts(array $owner, array $rel, string $module, int $page = null, string $requester = null)
        {
                $parameters = [
                        'rel' => $rel,
@@ -179,6 +179,10 @@ class Transmitter
                $data['type'] = 'OrderedCollection';
                $data['totalItems'] = $total;
 
+               if (!empty($page)) {
+                       $data['id'] .= '?' . http_build_query(['page' => $page]);
+               }
+
                // When we hide our friends we will only show the pure number but don't allow more.
                $show_contacts = empty($owner['hide-friends']);
 
@@ -203,7 +207,7 @@ class Transmitter
                        }
                        DBA::close($contacts);
 
-                       if (!empty($list)) {
+                       if (count($list) == 100) {
                                $data['next'] = DI::baseUrl() . $modulePath . $owner['nickname'] . '?page=' . ($page + 1);
                        }
 
@@ -226,7 +230,7 @@ class Transmitter
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       public static function getOutbox($owner, $page = null, $requester = '')
+       public static function getOutbox(array $owner, int $page = null, string $requester = '')
        {
                $condition = ['private' => [Item::PUBLIC, Item::UNLISTED]];
 
@@ -258,6 +262,10 @@ class Transmitter
                $data['type'] = 'OrderedCollection';
                $data['totalItems'] = $count;
 
+               if (!empty($page)) {
+                       $data['id'] .= '?' . http_build_query(['page' => $page]);
+               }
+
                if (empty($page)) {
                        $data['first'] = DI::baseUrl() . '/outbox/' . $owner['nickname'] . '?page=1';
                } else {
@@ -276,7 +284,7 @@ class Transmitter
                        }
                        DBA::close($items);
 
-                       if (!empty($list)) {
+                       if (count($list) == 20) {
                                $data['next'] = DI::baseUrl() . '/outbox/' . $owner['nickname'] . '?page=' . ($page + 1);
                        }
 
@@ -298,7 +306,7 @@ class Transmitter
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       public static function getFeatured($owner, $page = null)
+       public static function getFeatured(array $owner, int $page = null)
        {
                $condition = ["`uri-id` IN (SELECT `uri-id` FROM `collection-view` WHERE `cid` = ? AND `type` = ?)",
                        Contact::getIdForURL($owner['url'], 0, false), Post\Collection::FEATURED];
@@ -321,6 +329,10 @@ class Transmitter
                $data['type'] = 'OrderedCollection';
                $data['totalItems'] = $count;
 
+               if (!empty($page)) {
+                       $data['id'] .= '?' . http_build_query(['page' => $page]);
+               }
+
                if (empty($page)) {
                        $data['first'] = DI::baseUrl() . '/featured/' . $owner['nickname'] . '?page=1';
                } else {
@@ -339,7 +351,7 @@ class Transmitter
                        }
                        DBA::close($items);
 
-                       if (!empty($list)) {
+                       if (count($list) == 20) {
                                $data['next'] = DI::baseUrl() . '/featured/' . $owner['nickname'] . '?page=' . ($page + 1);
                        }