src/Controller/Forum/ForumController.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Forum;
  3. use App\Entity\Forum;
  4. use App\EntityManager\ForumManager;
  5. use App\Form\Forum\SearchForumType;
  6. use App\Model\SearchForum;
  7. use App\Security\Voter\ForumVoter;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. /**
  14.  * Class ForumController
  15.  * @package App\Controller\Forum
  16.  * @Route("/forum")
  17.  */
  18. class ForumController extends AbstractController
  19. {
  20.     /**
  21.      * @var ForumManager
  22.      */
  23.     protected $forumManager;
  24.     public function __construct(ForumManager $forumManager)
  25.     {
  26.         $this->forumManager $forumManager;
  27.     }
  28.     /**
  29.      * @Route("", name="forum_index")
  30.      * @Template()
  31.      */
  32.     public function index()
  33.     {
  34.         $categories $this->forumManager->getIndexList();
  35.         return [
  36.             'categories' => $categories,
  37.         ];
  38.     }
  39.     /**
  40.      * @Route("/{id<\d+>}", name="forum_view")
  41.      * @IsGranted(ForumVoter::VIEW, subject="forum")
  42.      * @Template()
  43.      */
  44.     public function view(Forum $forum)
  45.     {
  46.         $this->forumManager->updateLastVisit($forum);
  47.         $topics $this->forumManager->getTopicList($forum);
  48.         $mods   $this->forumManager->getModList($forum);
  49.         return [
  50.             'forum'           => $forum,
  51.             'topics'          => $topics,
  52.             'forumModerators' => $mods,
  53.         ];
  54.     }
  55.     /**
  56.      * @Route("/tracked", name="forum_topic_view_tracked")
  57.      * @Template()
  58.      */
  59.     public function viewTracked()
  60.     {
  61.         $topics $this->forumManager->getTrackedTopicList();
  62.         return [
  63.             'topics' => $topics,
  64.         ];
  65.     }
  66.     /**
  67.      * @Route("/search", name="forum_search")
  68.      * @Template()
  69.      */
  70.     public function search(Request $request)
  71.     {
  72.         $searchObject = new SearchForum();
  73.         if (!is_null($forum $request->query->get('forum'))) {
  74.             $forum $this->getDoctrine()->getRepository(Forum::class)->find($forum);
  75.             if ($forum instanceof Forum) {
  76.                 $searchObject->setForum($forum);
  77.             }
  78.         }
  79.         if (!is_null($author $request->query->get('author'))) {
  80.             $searchObject->setAuthor($author);
  81.         }
  82.         $searchForm $this->createForm(
  83.             SearchForumType::class,
  84.             $searchObject,
  85.             [
  86.                 'action' => $this->generateUrl('forum_search_results'),
  87.                 'method' => Request::METHOD_GET,
  88.             ]
  89.         );
  90.         return [
  91.             'form' => $searchForm->createView(),
  92.         ];
  93.     }
  94.     /**
  95.      * @Route("/search_results", name="forum_search_results")
  96.      * @Template()
  97.      */
  98.     public function searchResults(Request $request)
  99.     {
  100.         $searchObject = new SearchForum();
  101.         $searchForm   $this->createForm(SearchForumType::class, $searchObject, ['method' => Request::METHOD_GET]);
  102.         $searchForm->handleRequest($request);
  103.         if ($searchForm->isSubmitted() && $searchForm->isValid()) {
  104.             $results $this->forumManager->search($searchObject);
  105.             return $this->render(
  106.                 'forum/forum/search_results.html.twig',
  107.                 [
  108.                     'results'      => $results,
  109.                     'searchObject' => $searchObject,
  110.                 ]
  111.             );
  112.         }
  113.         return $this->redirectToRoute('forum_search');
  114.     }
  115. }