mirror of
https://github.com/wallabag/wallabag.git
synced 2025-08-11 17:51:02 +00:00
This is just a simple proxy because we can't lazy load RabbitMQ service just to count number of messages in the queue. As they are automatically injected in the controller now, we can't lazy load them. Also forgot to use `AbstractController` in previous PR about _controller as a service_.
105 lines
3.6 KiB
PHP
105 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace Wallabag\CoreBundle\Controller;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
use Wallabag\CoreBundle\Entity\Entry;
|
|
use Wallabag\CoreBundle\Helper\EntriesExport;
|
|
use Wallabag\CoreBundle\Repository\EntryRepository;
|
|
use Wallabag\CoreBundle\Repository\TagRepository;
|
|
|
|
/**
|
|
* The try/catch can be removed once all formats will be implemented.
|
|
* Still need implementation: txt.
|
|
*/
|
|
class ExportController extends AbstractController
|
|
{
|
|
/**
|
|
* Gets one entry content.
|
|
*
|
|
* @Route("/export/{id}.{format}", name="export_entry", requirements={
|
|
* "format": "epub|mobi|pdf|json|xml|txt|csv",
|
|
* "id": "\d+"
|
|
* })
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function downloadEntryAction(Entry $entry, EntriesExport $entriesExport, string $format)
|
|
{
|
|
try {
|
|
return $entriesExport
|
|
->setEntries($entry)
|
|
->updateTitle('entry')
|
|
->updateAuthor('entry')
|
|
->exportAs($format);
|
|
} catch (\InvalidArgumentException $e) {
|
|
throw new NotFoundHttpException($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Export all entries for current user.
|
|
*
|
|
* @Route("/export/{category}.{format}", name="export_entries", requirements={
|
|
* "format": "epub|mobi|pdf|json|xml|txt|csv",
|
|
* "category": "all|unread|starred|archive|tag_entries|untagged|search|annotated|same_domain"
|
|
* })
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function downloadEntriesAction(Request $request, EntryRepository $entryRepository, TagRepository $tagRepository, EntriesExport $entriesExport, string $format, string $category)
|
|
{
|
|
$method = ucfirst($category);
|
|
$methodBuilder = 'getBuilderFor' . $method . 'ByUser';
|
|
$title = $method;
|
|
|
|
if ('tag_entries' === $category) {
|
|
$tag = $tagRepository->findOneBySlug($request->query->get('tag'));
|
|
|
|
$entries = $entryRepository->findAllByTagId(
|
|
$this->getUser()->getId(),
|
|
$tag->getId()
|
|
);
|
|
|
|
$title = 'Tag ' . $tag->getLabel();
|
|
} elseif ('search' === $category) {
|
|
$searchTerm = (isset($request->get('search_entry')['term']) ? $request->get('search_entry')['term'] : '');
|
|
$currentRoute = (null !== $request->query->get('currentRoute') ? $request->query->get('currentRoute') : '');
|
|
|
|
$entries = $entryRepository->getBuilderForSearchByUser(
|
|
$this->getUser()->getId(),
|
|
$searchTerm,
|
|
$currentRoute
|
|
)->getQuery()
|
|
->getResult();
|
|
|
|
$title = 'Search ' . $searchTerm;
|
|
} elseif ('annotated' === $category) {
|
|
$entries = $entryRepository->getBuilderForAnnotationsByUser(
|
|
$this->getUser()->getId()
|
|
)->getQuery()
|
|
->getResult();
|
|
|
|
$title = 'With annotations';
|
|
} else {
|
|
$entries = $entryRepository
|
|
->$methodBuilder($this->getUser()->getId())
|
|
->getQuery()
|
|
->getResult();
|
|
}
|
|
|
|
try {
|
|
return $entriesExport
|
|
->setEntries($entries)
|
|
->updateTitle($title)
|
|
->updateAuthor($method)
|
|
->exportAs($format);
|
|
} catch (\InvalidArgumentException $e) {
|
|
throw new NotFoundHttpException($e->getMessage());
|
|
}
|
|
}
|
|
}
|