]> git.mxchange.org Git - friendica.git/commitdiff
Add Link headers by offset/limit capability to BaseApi
authorHank Grabowski <hankgrabowski@gmail.com>
Fri, 17 Feb 2023 18:24:00 +0000 (13:24 -0500)
committerHank Grabowski <hankgrabowski@gmail.com>
Fri, 17 Feb 2023 18:24:00 +0000 (13:24 -0500)
src/Module/BaseApi.php

index 6a41198473b2cb99225761dfb0997728383e249b..f8524b524ee48c694f2532515aab0cdfe06e3e71 100644 (file)
@@ -168,6 +168,34 @@ class BaseApi extends BaseModule
                return 'Link: <' . $next . '>; rel="next", <' . $prev . '>; rel="prev"';
        }
 
+       /**
+        * Get the "link" header with "next" and "prev" links for an offset/limit type call
+        * @return string
+        */
+       protected static function getOffsetAndLimitLinkHeader(int $offset, int $limit): string
+       {
+               $request = self::$request;
+
+               unset($request['offset']);
+               $request['limit'] = $limit;
+
+               $prev_request = $next_request = $request;
+
+               $prev_request['offset'] = $offset - $limit;
+               $next_request['offset'] = $offset + $limit;
+
+               $command = DI::baseUrl() . '/' . DI::args()->getCommand();
+
+               $prev = $command . '?' . http_build_query($prev_request);
+               $next = $command . '?' . http_build_query($next_request);
+
+               if ($prev_request['offset'] >= 0) {
+                       return 'Link: <' . $next . '>; rel="next", <' . $prev . '>; rel="prev"';
+               } else {
+                       return 'Link: <' . $next . '>; rel="next"';
+               }
+       }
+
        /**
         * Set the "link" header with "next" and "prev" links
         * @return void
@@ -180,6 +208,18 @@ class BaseApi extends BaseModule
                }
        }
 
+       /**
+        * Set the "link" header with "next" and "prev" links
+        * @return void
+        */
+       protected static function setLinkHeaderByOffsetLimit(int $offset, int $limit)
+       {
+               $header = self::getOffsetAndLimitLinkHeader($offset, $limit);
+               if (!empty($header)) {
+                       header($header);
+               }
+       }
+
        /**
         * Check if the app is known to support quoted posts
         *