src/Controller/ContributionController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Contribution;
  4. use App\Entity\Jurisprudence;
  5. use App\Entity\News;
  6. use App\Entity\NewsCategory;
  7. use App\Entity\Tuto;
  8. use App\Form\Type\ContributionType;
  9. use App\Repository\ContributionRepository;
  10. use App\Repository\JurisprudenceCategoryRepository;
  11. use App\Repository\NewsCategoryRepository;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  16. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  17. use Symfony\Component\Form\Extension\Core\Type\TextType;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. class ContributionController extends AbstractController
  22. {
  23.     private EntityManagerInterface $entityManager;
  24.     private JurisprudenceCategoryRepository $jurisprudenceCategoryRepository;
  25.     private ContributionRepository $contributionRepository;
  26.     private NewsCategoryRepository $newsCategoryRepository;
  27.     private AdminUrlGenerator $adminUrlGenerator;
  28.     public function __construct(
  29.         EntityManagerInterface $entityManager,
  30.         JurisprudenceCategoryRepository $jurisprudenceCategoryRepository,
  31.         ContributionRepository $contributionRepository,
  32.         AdminUrlGenerator $adminUrlGenerator,
  33.         NewsCategoryRepository $newsCategoryRepository
  34.     ) {
  35.         $this->entityManager $entityManager;
  36.         $this->jurisprudenceCategoryRepository $jurisprudenceCategoryRepository;
  37.         $this->contributionRepository $contributionRepository;
  38.         $this->adminUrlGenerator $adminUrlGenerator;
  39.         $this->newsCategoryRepository $newsCategoryRepository;
  40.     }
  41.     /**
  42.      * @Route("/contribution", name="contribution")
  43.      */
  44.     public function contribution(Request $request): Response
  45.     {
  46.         $contribution = new Contribution();
  47.         $form $this->createForm(ContributionType::class, $contribution);
  48.         $form->handleRequest($request);
  49.         if ($form->isSubmitted() && $form->isValid()) {
  50.             $contribution $form->getData();
  51.             // Persist contact message
  52.             $this->entityManager->persist($contribution);
  53.             $this->entityManager->flush();
  54.             $this->addFlash('success''Contribution envoyée !');
  55.             return $this->redirectToRoute('contribution');
  56.         }
  57.         return $this->render('contribute/new_contribution.html.twig', [
  58.             'controller_name' => 'ContributionController',
  59.             'active_menu' => 'contribution',
  60.             'form' => $form->createView()
  61.         ]);
  62.     }
  63.     /**
  64.      * @Route("/contribution-admin-form", name="contribution_admin_form")
  65.      */
  66.     public function contributionAdminForm(Request $request)
  67.     {
  68.         $categories $this->jurisprudenceCategoryRepository->findBy([
  69.             'enabled' => true,
  70.         ], [
  71.             'name' => 'ASC'
  72.         ]);
  73.         $choices = [];
  74.         foreach ($categories as $category) {
  75.             $choices[$category->getName()] = $category->getId();
  76.         }
  77.         
  78.         $form $this->createFormBuilder()
  79.             ->add('active'CheckboxType::class, [
  80.                 'label' => 'Afficher la jurisprudence sur le site',
  81.                 'required' => false
  82.             ])
  83.             ->add('category'ChoiceType::class, [
  84.                 'choices' => $choices,
  85.                 'label' => 'Choisir une catégorie',
  86.             ])
  87.             ->add('adress'TextType::class, [
  88.                 'label' => 'Ajouter une adresse',
  89.                 'required' => false
  90.             ])
  91.             ->add('justiceCourt'TextType::class, [
  92.                 'label' => 'Indiquer une cour de justice',
  93.                 'required' => false
  94.             ])
  95.             ->add('tags'TextType::class, [
  96.                 'label' => 'Ajouter des mots clés séparés par des virgules',
  97.                 'required' => false
  98.             ])
  99.             ->getForm();
  100.         return $this->render('@EasyAdmin/Contribution/contribution_admin_form.html.twig', [
  101.             'form' => $form->createView()
  102.         ]);
  103.     }
  104.     /**
  105.      * @Route("/contribution-admin-form-news", name="contribution_admin_form_news")
  106.      */
  107.     public function contributionAdminFormNews(Request $request)
  108.     {
  109.         $categories $this->newsCategoryRepository->findBy([
  110.             'enabled' => true,
  111.         ], [
  112.             'name' => 'ASC'
  113.         ]);
  114.         $choices = [];
  115.         foreach ($categories as $category) {
  116.             $choices[$category->getName()] = $category->getId();
  117.         }
  118.         $form $this->createFormBuilder()
  119.             ->add('active'CheckboxType::class, [
  120.                 'label' => "Afficher l'info sur le site",
  121.                 'required' => false
  122.             ])
  123.             ->add('category'ChoiceType::class, [
  124.                 'choices' => $choices,
  125.                 'label' => 'Choisir une catégorie',
  126.                 'required' => false
  127.             ])
  128.             ->getForm();
  129.         return $this->render('@EasyAdmin/Contribution/contribution_admin_form.html.twig', [
  130.             'form' => $form->createView()
  131.         ]);
  132.     }
  133.     /**
  134.      * @Route("/contribution-admin-form-tuto", name="contribution_admin_form_tuto")
  135.      */
  136.     public function contributionAdminFormTuto(Request $request)
  137.     {
  138.         $form $this->createFormBuilder()
  139.             ->add('active'CheckboxType::class, [
  140.                 'label' => "Afficher le tuto sur le site",
  141.                 'required' => false
  142.             ])
  143.             ->getForm();
  144.         return $this->render('@EasyAdmin/Contribution/contribution_admin_form.html.twig', [
  145.             'form' => $form->createView()
  146.         ]);
  147.     }
  148.     /**
  149.      * @Route("/contribution-admin-create-jurisprudence", name="contribution_to_jurisprudence")
  150.      */
  151.     public function createJurisprudenceFromContrib(Request $request)
  152.     {
  153.         // Get contrib
  154.         $contribution $this->contributionRepository->find((int) $request->get('contribution'));
  155.         // Get category
  156.         $category $this->jurisprudenceCategoryRepository->find((int) $request->get('category'));
  157.         // Build tags array from input
  158.         $tagsArray explode(','$request->get('tags'));
  159.         $jurisprudence = new Jurisprudence();
  160.         if ('' !== $request->get('content')) {
  161.             $jurisprudence->setContent($request->get('content'));
  162.         } else {
  163.             $jurisprudence->setContent($contribution->getContent());
  164.         }
  165.         $jurisprudence->setName($request->get('name'));
  166.         $jurisprudence->setAdress($request->get('adress'));
  167.         $jurisprudence->setJusticeCourt($request->get('justiceCourt'));
  168.         $jurisprudence->setActive($request->get('active') == 'true' truefalse);
  169.         $jurisprudence->setDate(new \Datetime());
  170.         $jurisprudence->setCategory($category);
  171.         $jurisprudence->setTags($tagsArray);
  172.         if ($request->get('active') == 'true') {
  173.             $contribution->setPublished(true);
  174.         }
  175.         $contribution->setValidatedBy($this->getUser());
  176.         $this->entityManager->persist($jurisprudence);
  177.         $this->entityManager->flush();
  178.         return new Response();
  179.     }
  180.     /**
  181.      * @Route("/contribution-admin-create-news", name="contribution_to_news")
  182.      */
  183.     public function createNewsFromContrib(Request $request)
  184.     {
  185.         // Get contrib
  186.         $contribution $this->contributionRepository->find((int) $request->get('contribution'));
  187.         // Get category
  188.         $category $this->newsCategoryRepository->find((int) $request->get('category'));
  189.         $news = new News();
  190.         if ('' !== $request->get('content')) {
  191.             $news->setContent($request->get('content'));
  192.         } else {
  193.             $news->setContent($contribution->getContent());
  194.         }
  195.         $news->setTitle($request->get('name'));
  196.         $news->setActive($request->get('active') == 'true' truefalse);
  197.         $news->setCategory($category);
  198.         if ($request->get('active') == 'true') {
  199.             $contribution->setPublished(true);
  200.         }
  201.         $contribution->setValidatedBy($this->getUser());
  202.         $this->entityManager->persist($news);
  203.         $this->entityManager->flush();
  204.         return new Response();
  205.     }
  206.     /**
  207.      * @Route("/contribution-admin-create-tuto", name="contribution_to_tuto")
  208.      */
  209.     public function createTutoFromContrib(Request $request)
  210.     {
  211.         // Get contrib
  212.         $contribution $this->contributionRepository->find((int) $request->get('contribution'));
  213.         $tuto = new Tuto();
  214.         if ('' !== $request->get('content')) {
  215.             $tuto->setContent($request->get('content'));
  216.         } else {
  217.             $tuto->setContent($contribution->getContent());
  218.         }
  219.         $tuto->setTitle($request->get('name'));
  220.         $tuto->setActive($request->get('active') == 'true' truefalse);
  221.         if ($request->get('active') == 'true') {
  222.             $contribution->setPublished(true);
  223.         }
  224.         $contribution->setValidatedBy($this->getUser());
  225.         // Flush tuto to get an id
  226.         $this->entityManager->persist($tuto);
  227.         $this->entityManager->flush();
  228.         // Create the news associated
  229.         $news $this->createNewsForTuto($tuto);
  230.         $this->entityManager->persist($news);
  231.         // flush again for the actu
  232.         $this->entityManager->flush();
  233.         return new Response();
  234.     }
  235.     private function createNewsForTuto(Tuto $tuto): News
  236.     {
  237.         $tutoCategory $this->newsCategoryRepository->findOneBy(['name' => 'Tuto']);
  238.         if (null === $tutoCategory) {
  239.             $tutoCategory $this->newsCategoryRepository->findOneBy(['name' => 'Tutos']);
  240.         }
  241.         $news = new News();
  242.         if ($tutoCategory) {
  243.             $news->setCategory($tutoCategory);
  244.         }
  245.         $news->setTitle(sprintf('Un nouveau tuto est disponible : %s'$tuto->getTitle()));
  246.         $news->setContent((string) $tuto->getId());
  247.         if ($tuto->isActive()) {
  248.             $news->setActive(true);
  249.         }
  250.         return $news;
  251.     }
  252. }