diff options
author | Jeremy Benoist <jeremy.benoist@gmail.com> | 2017-07-01 09:52:38 +0200 |
---|---|---|
committer | Jeremy Benoist <jeremy.benoist@gmail.com> | 2017-07-01 09:52:38 +0200 |
commit | f808b01692a835673f328d7221ba8c212caa9b61 (patch) | |
tree | 0c3b1fc5b1ddbd7af72227303503177689e1d403 /src/Wallabag/CoreBundle/Controller/EntryController.php | |
parent | 822c877949aff8ae57677671115f8f4fc69588d5 (diff) | |
download | wallabag-f808b01692a835673f328d7221ba8c212caa9b61.tar.gz wallabag-f808b01692a835673f328d7221ba8c212caa9b61.tar.zst wallabag-f808b01692a835673f328d7221ba8c212caa9b61.zip |
Add a real configuration for CS-Fixer
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller/EntryController.php')
-rw-r--r-- | src/Wallabag/CoreBundle/Controller/EntryController.php | 260 |
1 files changed, 128 insertions, 132 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index fafa49f1..445cfeeb 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php | |||
@@ -4,17 +4,17 @@ namespace Wallabag\CoreBundle\Controller; | |||
4 | 4 | ||
5 | use Pagerfanta\Adapter\DoctrineORMAdapter; | 5 | use Pagerfanta\Adapter\DoctrineORMAdapter; |
6 | use Pagerfanta\Exception\OutOfRangeCurrentPageException; | 6 | use Pagerfanta\Exception\OutOfRangeCurrentPageException; |
7 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache; | ||
7 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 8 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
8 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 9 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
9 | use Symfony\Component\HttpFoundation\Request; | 10 | use Symfony\Component\HttpFoundation\Request; |
10 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | 11 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; |
11 | use Wallabag\CoreBundle\Entity\Entry; | 12 | use Wallabag\CoreBundle\Entity\Entry; |
12 | use Wallabag\CoreBundle\Form\Type\EntryFilterType; | 13 | use Wallabag\CoreBundle\Event\EntryDeletedEvent; |
14 | use Wallabag\CoreBundle\Event\EntrySavedEvent; | ||
13 | use Wallabag\CoreBundle\Form\Type\EditEntryType; | 15 | use Wallabag\CoreBundle\Form\Type\EditEntryType; |
16 | use Wallabag\CoreBundle\Form\Type\EntryFilterType; | ||
14 | use Wallabag\CoreBundle\Form\Type\NewEntryType; | 17 | use Wallabag\CoreBundle\Form\Type\NewEntryType; |
15 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache; | ||
16 | use Wallabag\CoreBundle\Event\EntrySavedEvent; | ||
17 | use Wallabag\CoreBundle\Event\EntryDeletedEvent; | ||
18 | use Wallabag\CoreBundle\Form\Type\SearchEntryType; | 18 | use Wallabag\CoreBundle\Form\Type\SearchEntryType; |
19 | 19 | ||
20 | class EntryController extends Controller | 20 | class EntryController extends Controller |
@@ -52,31 +52,6 @@ class EntryController extends Controller | |||
52 | } | 52 | } |
53 | 53 | ||
54 | /** | 54 | /** |
55 | * Fetch content and update entry. | ||
56 | * In case it fails, $entry->getContent will return an error message. | ||
57 | * | ||
58 | * @param Entry $entry | ||
59 | * @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded | ||
60 | */ | ||
61 | private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved') | ||
62 | { | ||
63 | $message = 'flashes.entry.notice.'.$prefixMessage; | ||
64 | |||
65 | try { | ||
66 | $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl()); | ||
67 | } catch (\Exception $e) { | ||
68 | $this->get('logger')->error('Error while saving an entry', [ | ||
69 | 'exception' => $e, | ||
70 | 'entry' => $entry, | ||
71 | ]); | ||
72 | |||
73 | $message = 'flashes.entry.notice.'.$prefixMessage.'_failed'; | ||
74 | } | ||
75 | |||
76 | $this->get('session')->getFlashBag()->add('notice', $message); | ||
77 | } | ||
78 | |||
79 | /** | ||
80 | * @param Request $request | 55 | * @param Request $request |
81 | * | 56 | * |
82 | * @Route("/new-entry", name="new_entry") | 57 | * @Route("/new-entry", name="new_entry") |
@@ -220,7 +195,7 @@ class EntryController extends Controller | |||
220 | public function showUnreadAction(Request $request, $page) | 195 | public function showUnreadAction(Request $request, $page) |
221 | { | 196 | { |
222 | // load the quickstart if no entry in database | 197 | // load the quickstart if no entry in database |
223 | if ($page == 1 && $this->get('wallabag_core.entry_repository')->countAllEntriesByUser($this->getUser()->getId()) == 0) { | 198 | if ($page === 1 && $this->get('wallabag_core.entry_repository')->countAllEntriesByUser($this->getUser()->getId()) === 0) { |
224 | return $this->redirect($this->generateUrl('quickstart')); | 199 | return $this->redirect($this->generateUrl('quickstart')); |
225 | } | 200 | } |
226 | 201 | ||
@@ -258,83 +233,6 @@ class EntryController extends Controller | |||
258 | } | 233 | } |
259 | 234 | ||
260 | /** | 235 | /** |
261 | * Global method to retrieve entries depending on the given type | ||
262 | * It returns the response to be send. | ||
263 | * | ||
264 | * @param string $type Entries type: unread, starred or archive | ||
265 | * @param Request $request | ||
266 | * @param int $page | ||
267 | * | ||
268 | * @return \Symfony\Component\HttpFoundation\Response | ||
269 | */ | ||
270 | private function showEntries($type, Request $request, $page) | ||
271 | { | ||
272 | $repository = $this->get('wallabag_core.entry_repository'); | ||
273 | $searchTerm = (isset($request->get('search_entry')['term']) ? $request->get('search_entry')['term'] : ''); | ||
274 | $currentRoute = (!is_null($request->query->get('currentRoute')) ? $request->query->get('currentRoute') : ''); | ||
275 | |||
276 | switch ($type) { | ||
277 | case 'search': | ||
278 | $qb = $repository->getBuilderForSearchByUser($this->getUser()->getId(), $searchTerm, $currentRoute); | ||
279 | |||
280 | break; | ||
281 | case 'untagged': | ||
282 | $qb = $repository->getBuilderForUntaggedByUser($this->getUser()->getId()); | ||
283 | |||
284 | break; | ||
285 | case 'starred': | ||
286 | $qb = $repository->getBuilderForStarredByUser($this->getUser()->getId()); | ||
287 | break; | ||
288 | |||
289 | case 'archive': | ||
290 | $qb = $repository->getBuilderForArchiveByUser($this->getUser()->getId()); | ||
291 | break; | ||
292 | |||
293 | case 'unread': | ||
294 | $qb = $repository->getBuilderForUnreadByUser($this->getUser()->getId()); | ||
295 | break; | ||
296 | |||
297 | case 'all': | ||
298 | $qb = $repository->getBuilderForAllByUser($this->getUser()->getId()); | ||
299 | break; | ||
300 | |||
301 | default: | ||
302 | throw new \InvalidArgumentException(sprintf('Type "%s" is not implemented.', $type)); | ||
303 | } | ||
304 | |||
305 | $form = $this->createForm(EntryFilterType::class); | ||
306 | |||
307 | if ($request->query->has($form->getName())) { | ||
308 | // manually bind values from the request | ||
309 | $form->submit($request->query->get($form->getName())); | ||
310 | |||
311 | // build the query from the given form object | ||
312 | $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $qb); | ||
313 | } | ||
314 | |||
315 | $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false); | ||
316 | |||
317 | $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')->prepare($pagerAdapter); | ||
318 | |||
319 | try { | ||
320 | $entries->setCurrentPage($page); | ||
321 | } catch (OutOfRangeCurrentPageException $e) { | ||
322 | if ($page > 1) { | ||
323 | return $this->redirect($this->generateUrl($type, ['page' => $entries->getNbPages()]), 302); | ||
324 | } | ||
325 | } | ||
326 | |||
327 | return $this->render( | ||
328 | 'WallabagCoreBundle:Entry:entries.html.twig', [ | ||
329 | 'form' => $form->createView(), | ||
330 | 'entries' => $entries, | ||
331 | 'currentPage' => $page, | ||
332 | 'searchTerm' => $searchTerm, | ||
333 | ] | ||
334 | ); | ||
335 | } | ||
336 | |||
337 | /** | ||
338 | * Shows entry content. | 236 | * Shows entry content. |
339 | * | 237 | * |
340 | * @param Entry $entry | 238 | * @param Entry $entry |
@@ -487,7 +385,7 @@ class EntryController extends Controller | |||
487 | 385 | ||
488 | // don't redirect user to the deleted entry (check that the referer doesn't end with the same url) | 386 | // don't redirect user to the deleted entry (check that the referer doesn't end with the same url) |
489 | $referer = $request->headers->get('referer'); | 387 | $referer = $request->headers->get('referer'); |
490 | $to = (1 !== preg_match('#'.$url.'$#i', $referer) ? $referer : null); | 388 | $to = (1 !== preg_match('#' . $url . '$#i', $referer) ? $referer : null); |
491 | 389 | ||
492 | $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($to); | 390 | $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($to); |
493 | 391 | ||
@@ -495,30 +393,6 @@ class EntryController extends Controller | |||
495 | } | 393 | } |
496 | 394 | ||
497 | /** | 395 | /** |
498 | * Check if the logged user can manage the given entry. | ||
499 | * | ||
500 | * @param Entry $entry | ||
501 | */ | ||
502 | private function checkUserAction(Entry $entry) | ||
503 | { | ||
504 | if (null === $this->getUser() || $this->getUser()->getId() != $entry->getUser()->getId()) { | ||
505 | throw $this->createAccessDeniedException('You can not access this entry.'); | ||
506 | } | ||
507 | } | ||
508 | |||
509 | /** | ||
510 | * Check for existing entry, if it exists, redirect to it with a message. | ||
511 | * | ||
512 | * @param Entry $entry | ||
513 | * | ||
514 | * @return Entry|bool | ||
515 | */ | ||
516 | private function checkIfEntryAlreadyExists(Entry $entry) | ||
517 | { | ||
518 | return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId()); | ||
519 | } | ||
520 | |||
521 | /** | ||
522 | * Get public URL for entry (and generate it if necessary). | 396 | * Get public URL for entry (and generate it if necessary). |
523 | * | 397 | * |
524 | * @param Entry $entry | 398 | * @param Entry $entry |
@@ -604,4 +478,126 @@ class EntryController extends Controller | |||
604 | { | 478 | { |
605 | return $this->showEntries('untagged', $request, $page); | 479 | return $this->showEntries('untagged', $request, $page); |
606 | } | 480 | } |
481 | |||
482 | /** | ||
483 | * Fetch content and update entry. | ||
484 | * In case it fails, $entry->getContent will return an error message. | ||
485 | * | ||
486 | * @param Entry $entry | ||
487 | * @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded | ||
488 | */ | ||
489 | private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved') | ||
490 | { | ||
491 | $message = 'flashes.entry.notice.' . $prefixMessage; | ||
492 | |||
493 | try { | ||
494 | $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl()); | ||
495 | } catch (\Exception $e) { | ||
496 | $this->get('logger')->error('Error while saving an entry', [ | ||
497 | 'exception' => $e, | ||
498 | 'entry' => $entry, | ||
499 | ]); | ||
500 | |||
501 | $message = 'flashes.entry.notice.' . $prefixMessage . '_failed'; | ||
502 | } | ||
503 | |||
504 | $this->get('session')->getFlashBag()->add('notice', $message); | ||
505 | } | ||
506 | |||
507 | /** | ||
508 | * Global method to retrieve entries depending on the given type | ||
509 | * It returns the response to be send. | ||
510 | * | ||
511 | * @param string $type Entries type: unread, starred or archive | ||
512 | * @param Request $request | ||
513 | * @param int $page | ||
514 | * | ||
515 | * @return \Symfony\Component\HttpFoundation\Response | ||
516 | */ | ||
517 | private function showEntries($type, Request $request, $page) | ||
518 | { | ||
519 | $repository = $this->get('wallabag_core.entry_repository'); | ||
520 | $searchTerm = (isset($request->get('search_entry')['term']) ? $request->get('search_entry')['term'] : ''); | ||
521 | $currentRoute = (null !== $request->query->get('currentRoute') ? $request->query->get('currentRoute') : ''); | ||
522 | |||
523 | switch ($type) { | ||
524 | case 'search': | ||
525 | $qb = $repository->getBuilderForSearchByUser($this->getUser()->getId(), $searchTerm, $currentRoute); | ||
526 | |||
527 | break; | ||
528 | case 'untagged': | ||
529 | $qb = $repository->getBuilderForUntaggedByUser($this->getUser()->getId()); | ||
530 | |||
531 | break; | ||
532 | case 'starred': | ||
533 | $qb = $repository->getBuilderForStarredByUser($this->getUser()->getId()); | ||
534 | break; | ||
535 | case 'archive': | ||
536 | $qb = $repository->getBuilderForArchiveByUser($this->getUser()->getId()); | ||
537 | break; | ||
538 | case 'unread': | ||
539 | $qb = $repository->getBuilderForUnreadByUser($this->getUser()->getId()); | ||
540 | break; | ||
541 | case 'all': | ||
542 | $qb = $repository->getBuilderForAllByUser($this->getUser()->getId()); | ||
543 | break; | ||
544 | default: | ||
545 | throw new \InvalidArgumentException(sprintf('Type "%s" is not implemented.', $type)); | ||
546 | } | ||
547 | |||
548 | $form = $this->createForm(EntryFilterType::class); | ||
549 | |||
550 | if ($request->query->has($form->getName())) { | ||
551 | // manually bind values from the request | ||
552 | $form->submit($request->query->get($form->getName())); | ||
553 | |||
554 | // build the query from the given form object | ||
555 | $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $qb); | ||
556 | } | ||
557 | |||
558 | $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false); | ||
559 | |||
560 | $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')->prepare($pagerAdapter); | ||
561 | |||
562 | try { | ||
563 | $entries->setCurrentPage($page); | ||
564 | } catch (OutOfRangeCurrentPageException $e) { | ||
565 | if ($page > 1) { | ||
566 | return $this->redirect($this->generateUrl($type, ['page' => $entries->getNbPages()]), 302); | ||
567 | } | ||
568 | } | ||
569 | |||
570 | return $this->render( | ||
571 | 'WallabagCoreBundle:Entry:entries.html.twig', [ | ||
572 | 'form' => $form->createView(), | ||
573 | 'entries' => $entries, | ||
574 | 'currentPage' => $page, | ||
575 | 'searchTerm' => $searchTerm, | ||
576 | ] | ||
577 | ); | ||
578 | } | ||
579 | |||
580 | /** | ||
581 | * Check if the logged user can manage the given entry. | ||
582 | * | ||
583 | * @param Entry $entry | ||
584 | */ | ||
585 | private function checkUserAction(Entry $entry) | ||
586 | { | ||
587 | if (null === $this->getUser() || $this->getUser()->getId() !== $entry->getUser()->getId()) { | ||
588 | throw $this->createAccessDeniedException('You can not access this entry.'); | ||
589 | } | ||
590 | } | ||
591 | |||
592 | /** | ||
593 | * Check for existing entry, if it exists, redirect to it with a message. | ||
594 | * | ||
595 | * @param Entry $entry | ||
596 | * | ||
597 | * @return Entry|bool | ||
598 | */ | ||
599 | private function checkIfEntryAlreadyExists(Entry $entry) | ||
600 | { | ||
601 | return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId()); | ||
602 | } | ||
607 | } | 603 | } |