aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag/CoreBundle/Controller
diff options
context:
space:
mode:
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller')
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php100
-rw-r--r--src/Wallabag/CoreBundle/Controller/ExportController.php2
-rw-r--r--src/Wallabag/CoreBundle/Controller/TagController.php44
3 files changed, 141 insertions, 5 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index ccdf9406..624576b5 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -4,7 +4,6 @@ namespace Wallabag\CoreBundle\Controller;
4 4
5use Pagerfanta\Adapter\DoctrineORMAdapter; 5use Pagerfanta\Adapter\DoctrineORMAdapter;
6use Pagerfanta\Exception\OutOfRangeCurrentPageException; 6use Pagerfanta\Exception\OutOfRangeCurrentPageException;
7use Pagerfanta\Pagerfanta;
8use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 7use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
9use Symfony\Bundle\FrameworkBundle\Controller\Controller; 8use Symfony\Bundle\FrameworkBundle\Controller\Controller;
10use Symfony\Component\HttpFoundation\Request; 9use Symfony\Component\HttpFoundation\Request;
@@ -13,6 +12,7 @@ use Wallabag\CoreBundle\Entity\Entry;
13use Wallabag\CoreBundle\Form\Type\EntryFilterType; 12use Wallabag\CoreBundle\Form\Type\EntryFilterType;
14use Wallabag\CoreBundle\Form\Type\EditEntryType; 13use Wallabag\CoreBundle\Form\Type\EditEntryType;
15use Wallabag\CoreBundle\Form\Type\NewEntryType; 14use Wallabag\CoreBundle\Form\Type\NewEntryType;
15use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
16 16
17class EntryController extends Controller 17class EntryController extends Controller
18{ 18{
@@ -226,6 +226,10 @@ class EntryController extends Controller
226 $repository = $this->get('wallabag_core.entry_repository'); 226 $repository = $this->get('wallabag_core.entry_repository');
227 227
228 switch ($type) { 228 switch ($type) {
229 case 'untagged':
230 $qb = $repository->getBuilderForUntaggedByUser($this->getUser()->getId());
231
232 break;
229 case 'starred': 233 case 'starred':
230 $qb = $repository->getBuilderForStarredByUser($this->getUser()->getId()); 234 $qb = $repository->getBuilderForStarredByUser($this->getUser()->getId());
231 break; 235 break;
@@ -257,9 +261,10 @@ class EntryController extends Controller
257 } 261 }
258 262
259 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery()); 263 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
260 $entries = new Pagerfanta($pagerAdapter);
261 264
262 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage()); 265 $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')
266 ->prepare($pagerAdapter, $page);
267
263 try { 268 try {
264 $entries->setCurrentPage($page); 269 $entries->setCurrentPage($page);
265 } catch (OutOfRangeCurrentPageException $e) { 270 } catch (OutOfRangeCurrentPageException $e) {
@@ -434,7 +439,7 @@ class EntryController extends Controller
434 */ 439 */
435 private function checkUserAction(Entry $entry) 440 private function checkUserAction(Entry $entry)
436 { 441 {
437 if ($this->getUser()->getId() != $entry->getUser()->getId()) { 442 if (null === $this->getUser() || $this->getUser()->getId() != $entry->getUser()->getId()) {
438 throw $this->createAccessDeniedException('You can not access this entry.'); 443 throw $this->createAccessDeniedException('You can not access this entry.');
439 } 444 }
440 } 445 }
@@ -450,4 +455,91 @@ class EntryController extends Controller
450 { 455 {
451 return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId()); 456 return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
452 } 457 }
458
459 /**
460 * Get public URL for entry (and generate it if necessary).
461 *
462 * @param Entry $entry
463 *
464 * @Route("/share/{id}", requirements={"id" = "\d+"}, name="share")
465 *
466 * @return \Symfony\Component\HttpFoundation\Response
467 */
468 public function shareAction(Entry $entry)
469 {
470 $this->checkUserAction($entry);
471
472 if (null === $entry->getUuid()) {
473 $entry->generateUuid();
474
475 $em = $this->getDoctrine()->getManager();
476 $em->persist($entry);
477 $em->flush();
478 }
479
480 return $this->redirect($this->generateUrl('share_entry', [
481 'uuid' => $entry->getUuid(),
482 ]));
483 }
484
485 /**
486 * Disable public sharing for an entry.
487 *
488 * @param Entry $entry
489 *
490 * @Route("/share/delete/{id}", requirements={"id" = "\d+"}, name="delete_share")
491 *
492 * @return \Symfony\Component\HttpFoundation\Response
493 */
494 public function deleteShareAction(Entry $entry)
495 {
496 $this->checkUserAction($entry);
497
498 $entry->cleanUuid();
499
500 $em = $this->getDoctrine()->getManager();
501 $em->persist($entry);
502 $em->flush();
503
504 return $this->redirect($this->generateUrl('view', [
505 'id' => $entry->getId(),
506 ]));
507 }
508
509 /**
510 * Ability to view a content publicly.
511 *
512 * @param Entry $entry
513 *
514 * @Route("/share/{uuid}", requirements={"uuid" = ".+"}, name="share_entry")
515 * @Cache(maxage="25200", smaxage="25200", public=true)
516 *
517 * @return \Symfony\Component\HttpFoundation\Response
518 */
519 public function shareEntryAction(Entry $entry)
520 {
521 if (!$this->get('craue_config')->get('share_public')) {
522 throw $this->createAccessDeniedException('Sharing an entry is disabled for this user.');
523 }
524
525 return $this->render(
526 '@WallabagCore/themes/share.html.twig',
527 ['entry' => $entry]
528 );
529 }
530
531 /**
532 * Shows untagged articles for current user.
533 *
534 * @param Request $request
535 * @param int $page
536 *
537 * @Route("/untagged/list/{page}", name="untagged", defaults={"page" = "1"})
538 *
539 * @return \Symfony\Component\HttpFoundation\Response
540 */
541 public function showUntaggedEntriesAction(Request $request, $page)
542 {
543 return $this->showEntries('untagged', $request, $page);
544 }
453} 545}
diff --git a/src/Wallabag/CoreBundle/Controller/ExportController.php b/src/Wallabag/CoreBundle/Controller/ExportController.php
index 944c755d..6191d5d7 100644
--- a/src/Wallabag/CoreBundle/Controller/ExportController.php
+++ b/src/Wallabag/CoreBundle/Controller/ExportController.php
@@ -46,7 +46,7 @@ class ExportController extends Controller
46 * 46 *
47 * @Route("/export/{category}.{format}", name="export_entries", requirements={ 47 * @Route("/export/{category}.{format}", name="export_entries", requirements={
48 * "format": "epub|mobi|pdf|json|xml|txt|csv", 48 * "format": "epub|mobi|pdf|json|xml|txt|csv",
49 * "category": "all|unread|starred|archive" 49 * "category": "all|unread|starred|archive|tag_entries|untagged"
50 * }) 50 * })
51 * 51 *
52 * @return \Symfony\Component\HttpFoundation\Response 52 * @return \Symfony\Component\HttpFoundation\Response
diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php
index 8645fb44..1cbc413d 100644
--- a/src/Wallabag/CoreBundle/Controller/TagController.php
+++ b/src/Wallabag/CoreBundle/Controller/TagController.php
@@ -2,12 +2,15 @@
2 2
3namespace Wallabag\CoreBundle\Controller; 3namespace Wallabag\CoreBundle\Controller;
4 4
5use Pagerfanta\Adapter\ArrayAdapter;
6use Pagerfanta\Exception\OutOfRangeCurrentPageException;
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 7use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller; 8use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7use Symfony\Component\HttpFoundation\Request; 9use Symfony\Component\HttpFoundation\Request;
8use Wallabag\CoreBundle\Entity\Entry; 10use Wallabag\CoreBundle\Entity\Entry;
9use Wallabag\CoreBundle\Entity\Tag; 11use Wallabag\CoreBundle\Entity\Tag;
10use Wallabag\CoreBundle\Form\Type\NewTagType; 12use Wallabag\CoreBundle\Form\Type\NewTagType;
13use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
11 14
12class TagController extends Controller 15class TagController extends Controller
13{ 16{
@@ -90,4 +93,45 @@ class TagController extends Controller
90 ] 93 ]
91 ); 94 );
92 } 95 }
96
97 /**
98 * @param Tag $tag
99 * @param int $page
100 *
101 * @Route("/tag/list/{slug}/{page}", name="tag_entries", defaults={"page" = "1"})
102 * @ParamConverter("tag", options={"mapping": {"slug": "slug"}})
103 *
104 * @return \Symfony\Component\HttpFoundation\Response
105 */
106 public function showEntriesForTagAction(Tag $tag, $page, Request $request)
107 {
108 $entriesByTag = $this->getDoctrine()
109 ->getRepository('WallabagCoreBundle:Entry')
110 ->findAllByTagId($this->getUser()->getId(), $tag->getId());
111
112 $pagerAdapter = new ArrayAdapter($entriesByTag);
113
114 $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')
115 ->prepare($pagerAdapter, $page);
116
117 try {
118 $entries->setCurrentPage($page);
119 } catch (OutOfRangeCurrentPageException $e) {
120 if ($page > 1) {
121 return $this->redirect($this->generateUrl($request->get('_route'), [
122 'slug' => $tag->getSlug(),
123 'page' => $entries->getNbPages(),
124 ]), 302);
125 }
126 }
127
128 return $this->render(
129 'WallabagCoreBundle:Entry:entries.html.twig',
130 [
131 'form' => null,
132 'entries' => $entries,
133 'currentPage' => $page,
134 ]
135 );
136 }
93} 137}