src/Controller/Admin/SujetforumCrudController.php line 155

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Controller\Trait\ForumAccessTrait;
  4. use App\Entity\Sujetforum;
  5. use App\Entity\User;
  6. use App\Service\NotificationManager;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  9. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  10. use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
  11. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  12. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  13. use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  17. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Knp\Component\Pager\PaginatorInterface;
  22. use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
  23. use Symfony\Component\Security\Core\Security;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use DateTimeImmutable// Assurez-vous que cette classe est importée en haut de votre fichier
  26. use Symfony\Component\Form\Extension\Core\Type\DateType;
  27. use Symfony\Component\Form\Extension\Core\Type\TextType;
  28. use Symfony\Component\Validator\Constraints\NotBlank;
  29. class SujetforumCrudController extends AbstractBaseCrudController
  30. {
  31.     use ForumAccessTrait;
  32.     public $em;
  33.     private $adminUrlGenerator;
  34.     private $notificationManager;
  35.     private $request;
  36.      /**
  37.      * @param EntityManagerInterface $em
  38.      */
  39.     public function __construct(EntityManagerInterface $emAdminUrlGenerator $adminUrlGeneratorNotificationManager $notificationManager)
  40.     {
  41.         $this->em $em;
  42.         $this->adminUrlGenerator $adminUrlGenerator;
  43.         $this->notificationManager $notificationManager;
  44.     }
  45.     #[Route('/forum/list'name'app_list_sujet_propose')]
  46.     public function listSujetPropose(EntityManagerInterface $entityManager): Response
  47.     {
  48.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  49.         $Sujetforums $entityManager->getRepository(Sujetforum::class)->findBy(['user' => $this->getUser()]);
  50.         return $this->render('forum/list_sujet_propose.html.twig', [
  51.             "sujetforums" => $Sujetforums,
  52.         ]);
  53.     }
  54.     public static function getEntityFqcn(): string
  55.     {
  56.         return Sujetforum::class;
  57.     }
  58.     public function configureCrud(Crud $crud): Crud
  59.     {
  60.         return $crud->setPageTitle('index''Liste des sujets ')
  61.             ->setPageTitle('detail''Détails des sujets')
  62.             ->setPageTitle('new''Créer un sujet')
  63.             ->setPageTitle('edit''Modifier un sujet');
  64.     }
  65.     public function configureActions(Actions $actions): Actions
  66.     {
  67.         $actions->add(Crud::PAGE_INDEXAction::DETAIL)
  68.             ->update(Crud::PAGE_INDEXAction::NEW, function (Action $action) {
  69.                 return $action->setIcon('fa fa-plus')->setLabel('Créer un sujet');
  70.             })
  71.             ->update(Crud::PAGE_NEWAction::SAVE_AND_RETURN, function (Action $action) {
  72.                 return $action->setLabel('Enregistrer');
  73.             });
  74.         return $actions;
  75.     }
  76.     public function configureFields(string $pageName): iterable
  77.     {
  78.         return [
  79.             IdField::new('id')->hideOnForm(),
  80.             TextField::new('sujet'),
  81.             TextareaField::new('description')->formatValue(function ($value) {
  82.                 return $value;
  83.             }),
  84.             TextField::new('user''utilisateur')->setFormTypeOption('disabled''disabled'),
  85.             
  86.             BooleanField::new('ispublic''Publier ?')
  87.                 // ->onlyOnForms() // Ne s'affiche que dans le formulaire
  88.                 ->setFormTypeOption('attr', ['class' => 'enable-in-form'])->setDisabled$pageName == Crud::PAGE_INDEX,true), // Ajout d'une classe CSS personnalisée
  89.   
  90.             DateField::new('date_public'' ')
  91.                 ->setFormType(DateType::class)
  92.                 ->onlyOnForms()
  93.                 ->setFormTypeOptions([
  94.                     'widget' => 'single_text',
  95.                     'data' => new \DateTimeImmutable(),
  96.                     'constraints' => [
  97.                         new NotBlank(),
  98.                     ],
  99.                     'attr' => ['style' => 'display: none'],
  100.                 ]),
  101.         ];
  102.     }
  103.     public function createEntity(string $entityFqcn)
  104.     {
  105.         $sujet = new Sujetforum();
  106.         $sujet->setUser($this->getUser());
  107.         return $sujet;
  108.     }
  109.     public function persistEntity(EntityManagerInterface $entityManager$entityInstance): void
  110.     {
  111.         $entityInstance->setUser($this->getUser());
  112.         $entityInstance->setDate(new \DateTime());
  113.         $entityManager->persist($entityInstance);
  114.         $entityManager->flush();
  115.     }
  116.     
  117.     public function updateEntity(EntityManagerInterface $entityManager$entityInstance): void
  118.     {
  119.         // $entityInstance->setSujet($entityInstance->getSujet());
  120.         // $entityInstance->setDescription($entityInstance->getDescription());
  121.         // $entityManager->setIsPublic($entityInstance->isIsPublic());
  122.         if($entityInstance->isIsPublic()){
  123.             $urlSujet '/list/forum/index/';
  124.             $user $entityManager->getRepository(User::class)->find($entityInstance->getUser());
  125.            
  126.             $notification_message 'Votre sujet a été validé ! ';
  127.             $this->notificationManager->pushMessage('Votre sujet a été validé !'$notification_message$user$urlSujet);
  128.         }
  129.         $entityManager->persist($entityInstance);
  130.         $entityManager->flush();
  131.     }
  132.     #[Route('/list/forum/index/'name'index_forum')]
  133.     public function listServices(Request $requestEntityManagerInterface $emPaginatorInterface $paginator): Response
  134.     {
  135.         //$donnees = $entityManager->getRepository(Sujetforum::class)->findBy([], ['id'=>'DESC']);
  136.         $donnees $em->getRepository(Sujetforum::class)->getLastsSujetForums($request->query->get('offset'), 2);
  137.         // $sujetForums = $paginator->paginate(
  138.         //     $donnees,
  139.         //     $request->query->getInt('page', 1),
  140.         //     10
  141.         // );
  142.         return $this->render('forum/index.html.twig', [
  143.             'sujetForums' => $donnees,
  144.         ]);
  145.     }
  146.     #[Route('/delete/forum/sujet/{id}'name'delete_forum__sujet_response'methods: ['POST'])]
  147.     public function deleteResponseForum(Sujetforum $reponseRequest $requestEntityManagerInterface $entityManagerSecurity $security): JsonResponse
  148.     {
  149.         $this->validateRequestCsrfToken($request'ajax');
  150.         $this->denyUnlessSujetForumOwner($reponse);
  151.         $entityManager->remove($reponse);
  152.         $entityManager->flush();
  153.         return new JsonResponse(['data' => 'done'], Response::HTTP_OK, ['Content-Type''application/json']);
  154.     }
  155.     #[Route('/forum/update/{id}'name'update_forum_sujet'methods: ['POST'])]
  156.     public function updateResponseForum(Sujetforum $reponseRequest $request
  157.     EntityManagerInterface $entityManager,
  158.     AdminUrlGenerator $adminUrlGenerator): Response
  159.     {
  160.         $this->validateRequestCsrfToken($request'forum');
  161.         $this->denyUnlessSujetForumOwner($reponse);
  162.         $reponse->setDescription($request->request->get('sujetDescription'));
  163.         $reponse->setSujet($request->request->get('sujetName'));
  164.         $entityManager->persist($reponse);
  165.         $entityManager->flush();
  166.     
  167.           // End send comment
  168.         return $this->redirectToRoute('index_forum');
  169.     }
  170.     #[Route('/make/sujet/'name'make_sujet'methods: ['POST'])]
  171.     public function responseForum(Request $requestEntityManagerInterface $entityManager
  172.     Security $security,
  173.     AdminUrlGenerator $adminUrlGenerator,
  174.     NotificationManager $notificationManager): Response
  175.     {
  176.         $this->validateRequestCsrfToken($request'forum');
  177.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  178.         $sujet = new Sujetforum();
  179.         $sujet->setSujet($request->request->get('sujetName'));
  180.         $sujet->setDescription($request->request->get('sujetDescription'));
  181.         $sujet->setIsPublic(false);
  182.         $sujet->setUser($security->getUser());
  183.         $sujet->setDate((new \DateTime()));
  184.         $entityManager->persist($sujet);
  185.         $entityManager->flush();
  186.               // Send Comment
  187.               $edit_demande_url =  $this->adminUrlGenerator
  188.               ->setController(SujetforumCrudController::class)
  189.               ->setAction(Action::INDEX)
  190.               ->generateUrl();
  191.               $notification_message 'Nouveau sujet proposé !   ';
  192.               $admins $entityManager->getRepository(User::class)->findByRole('ROLE_ADMIN');
  193.               foreach($admins as $admin){
  194.                   $notificationManager->pushMessage('Nouveau sujet proposé !'$notification_message$admin$edit_demande_url);
  195.     
  196.               }
  197.         return $this->redirectToRoute('index_forum');
  198.     }
  199.     #[Route('ajax/get/sujetForum'name'ajax_get_sujetForum')]
  200.     public function getSujetForum(Request $requestEntityManagerInterface $emSecurity $security): JsonResponse
  201.     {
  202.         /** @var  $result */
  203.         $result = [];
  204.         try {
  205.             $user null;
  206.             $donnees $em->getRepository(Sujetforum::class)->getLastsSujetForums($request->query->get('offset'), 2);
  207.             foreach ($donnees as $key => $obj) {
  208.                 $result[$key] = [
  209.                     'id' => $obj->getId(),
  210.                     'sujet' => $obj->getSujet(),
  211.                     // 'date' => $obj->getDate()->format('d/m/Y'),
  212.                     'isPublic' => $obj->isIsPublic(),
  213.                     'userName' => $obj->getUser()->getUsername(),
  214.                     'description' => $obj->getDescription(),
  215.                     'userId' => $obj->getUser()->getId(),
  216.                     'date' =>$obj->getDatePublic()
  217.                 ];
  218.             }
  219.             if ($security->getUser()) {
  220.                 $user $security->getUser()->getId();
  221.             }
  222.         } catch (\Exception $e) {
  223.             echo $e->getMessage();
  224.         }
  225.         return new JsonResponse(['result' => $result"userId" => $user], Response::HTTP_OK, ['Content-Type''application/json']);
  226.     }
  227.     #[Route('/list/forum/delete/{id}'name'sujet_delete'methods: ['POST'])]
  228.     public function deleteAction(Request $request$idEntityManagerInterface $entityManager)
  229.     {
  230.         $this->validateRequestCsrfToken($request'delete');
  231.         $sujet $entityManager->getRepository(Sujetforum::class);
  232.         $sujet $sujet->find($id);
  233.         if (!$sujet) {
  234.             throw $this->createNotFoundException(
  235.                 'Il n\'y a aucun sujet avec l\'identifiant suivant : ' $id
  236.             );
  237.         }
  238.         $this->denyUnlessSujetForumOwner($sujet);
  239.         $entityManager->remove($sujet);
  240.         $entityManager->flush();
  241.         $this->addFlash('success'$this->trans('flash.deletion_done'));
  242.         return $this->redirect($this->generateUrl('app_list_sujet_propose'));
  243.     }
  244.     /**
  245.      * @Route("/sujet/fetchData/{id}", name="fetch_sujet_data", methods={"GET"})
  246.      */
  247.     public function fetchData(int $idEntityManagerInterface $entityManager): Response
  248.     {
  249.         $sujetforum $entityManager->getRepository(Sujetforum::class)->find($id);
  250.         if (!$sujetforum) {
  251.             return $this->json(['error' => 'Subject not found.'], Response::HTTP_NOT_FOUND);
  252.         }
  253.         $this->denyUnlessSujetForumOwner($sujetforum);
  254.         $date_pub '';
  255.         if ($sujetforum->getDatePublic()) {
  256.             $date_pub $sujetforum->getDatePublic()->format('Y-m-d');
  257.         }
  258.         $response = [
  259.             'id' => $sujetforum->getId(),
  260.             'sujet' => $sujetforum->getSujet(),
  261.             'description' => $sujetforum->getDescription(),
  262.             'isPublic' => $sujetforum->isIsPublic(),
  263.             'date' => $sujetforum->getDate()->format('Y-m-d'),
  264.             'date_pub' => $date_pub
  265.         ];
  266.  
  267.         return $this->json($response);
  268.     }
  269.     /**
  270.      * @Route("/sujet/update/{id}", name="update_sujet", methods={"POST"})
  271.      */
  272.     public function updateSujet(Request $requestint $idEntityManagerInterface $entityManager): Response
  273.     {
  274.         $this->validateRequestCsrfToken($request'ajax');
  275.         $sujetforum $entityManager->getRepository(Sujetforum::class)->find($id);
  276.         if (!$sujetforum) {
  277.             return $this->json(['error' => 'Subject not found.'], Response::HTTP_NOT_FOUND);
  278.         }
  279.         $this->denyUnlessSujetForumOwner($sujetforum);
  280.         // Assuming the submitted form data is sent as JSON, you can decode it as follows:
  281.         $formData json_decode($request->getContent(), true);
  282.  
  283.         // Update the properties of the Sujetforum entity based on the form data
  284.         $sujetforum->setSujet($formData['sujetName']);
  285.         $sujetforum->setDescription($formData['sujetDescription']);
  286.         $sujetforum->setDate((new \DateTime()));
  287.         // Update other properties as needed    
  288.     
  289.         // Persist and flush the changes tVotre Sujet a été publiéo the database
  290.         $entityManager->persist($sujetforum);
  291.         $entityManager->flush();
  292.         // Return a success response
  293.         $response = [
  294.             'success' => true,
  295.             'messages' => 'Le sujet a été mis à jour avec succès.',
  296.         ];
  297.         return $this->json($response);
  298.     }
  299. }