1
0
Fork 0
mirror of https://github.com/wallabag/wallabag.git synced 2025-08-06 17:41:01 +00:00

this change adds an option to sort the feed entires by updated_at

There is now an option to sort the feed entires by updated_at, on the
controler : a sort querystring argument that accepts either "created"
or "updated".
This commit is contained in:
Adrien Gallou 2022-03-10 08:06:55 +01:00
parent 6bd257a711
commit 29df8ed590
No known key found for this signature in database
GPG key ID: 75B82B86781FE88A
4 changed files with 87 additions and 8 deletions

View file

@ -8,7 +8,9 @@ use Pagerfanta\Exception\OutOfRangeCurrentPageException;
use Pagerfanta\Pagerfanta;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Wallabag\CoreBundle\Entity\Tag;
@ -88,8 +90,19 @@ class FeedController extends Controller
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function showTagsFeedAction(User $user, Tag $tag, $page)
public function showTagsFeedAction(Request $request, User $user, Tag $tag, $page)
{
$sort = $request->query->get('sort', 'created');
$sorts = [
'created' => 'createdAt',
'updated' => 'updatedAt',
];
if (!isset($sorts[$sort])) {
throw new BadRequestHttpException(sprintf('Sort "%s" is not available.', $sort));
}
$url = $this->generateUrl(
'tag_feed',
[
@ -102,7 +115,8 @@ class FeedController extends Controller
$entriesByTag = $this->get('wallabag_core.entry_repository')->findAllByTagId(
$user->getId(),
$tag->getId()
$tag->getId(),
$sorts[$sort]
);
$pagerAdapter = new ArrayAdapter($entriesByTag);
@ -137,11 +151,28 @@ class FeedController extends Controller
'domainName' => $this->getParameter('domain_name'),
'version' => $this->getParameter('wallabag_core.version'),
'tag' => $tag->getSlug(),
'updated' => $this->prepareFeedUpdatedDate($entries, $sort),
],
new Response('', 200, ['Content-Type' => 'application/atom+xml'])
);
}
private function prepareFeedUpdatedDate(Pagerfanta $entries, $sort = 'created')
{
$currentPageResults = $entries->getCurrentPageResults();
if (isset($currentPageResults[0])) {
$firstEntry = $currentPageResults[0];
if ('created' === $sort) {
return $firstEntry->getCreatedAt();
}
return $firstEntry->getUpdatedAt();
}
return null;
}
/**
* Global method to retrieve entries depending on the given type
* It returns the response to be send.
@ -202,6 +233,7 @@ class FeedController extends Controller
'user' => $user->getUsername(),
'domainName' => $this->getParameter('domain_name'),
'version' => $this->getParameter('wallabag_core.version'),
'updated' => $this->prepareFeedUpdatedDate($entries),
],
new Response('', 200, ['Content-Type' => 'application/atom+xml'])
);