src/Controller/Admin/SujetforumCrudController.php line 143

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