src/Controller/Admin/RessourcesCrudController.php line 224

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Documents;
  4. use App\Entity\Ressources;
  5. use App\Entity\User;
  6. use App\Service\NotificationManager;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use phpDocumentor\Reflection\Types\Resource_;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  14. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  17. use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
  18. use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
  19. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  20. use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
  21. use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
  22. use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
  23. use EasyCorp\Bundle\EasyAdminBundle\Filter\ArrayFilter;
  24. use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
  25. use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
  26. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  27. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  28. use Symfony\Component\Validator\Constraints\Callback;
  29. use Symfony\Component\Validator\Context\ExecutionContextInterface;
  30. class RessourcesCrudController extends AbstractBaseCrudController
  31. {
  32.     private AdminUrlGenerator $adminUrlGenerator;
  33.     public function __construct(
  34.         AdminUrlGenerator $adminUrlGenerator
  35.     ) {
  36.         $this->adminUrlGenerator $adminUrlGenerator;
  37.     }
  38.     public static function getEntityFqcn(): string
  39.     {
  40.         return Ressources::class;
  41.     }
  42.     public function configureCrud(Crud $crud): Crud
  43.     {
  44.         return $crud ->setPageTitle('index''Liste des  Ressources')
  45.             ->setPageTitle('detail''Détails Ressource')
  46.             ->setPageTitle('new''Créer une Ressource')
  47.             ->setPageTitle('edit''Modifier une Ressource') ->overrideTemplates([
  48.                 'crud/new' =>  'admin/fields/publier.html.twig',
  49.                 'crud/edit' =>  'admin/fields/publier.html.twig'
  50.             ]);
  51.     }
  52.     public function configureFilters(Filters $filters): Filters
  53.     {
  54.         return $filters
  55.         ->add(ArrayFilter::new('status''Statut')->setChoices(array_combine(Ressources::STATUS_ARRAYRessources::STATUS_ARRAY)));
  56.     }
  57.     public function configureActions(Actions $actions): Actions
  58.     {
  59.         $valider Action::new('validerDocument''Valider''fa fa-check-circle')
  60.         ->linkToCrudAction('validerDocument') ->displayIf(static function ($entity) {
  61.             return $entity->getStatus() == 'en cours';
  62.         });
  63.         $refuser Action::new('refuserDocument''Refuser''fa fa-ban')
  64.         ->linkToCrudAction('refuserDocument') ->displayIf(static function ($entity) {
  65.             return $entity->getStatus() == 'en cours';
  66.         });
  67.         return $actions
  68.         ->update(Crud::PAGE_NEWAction::SAVE_AND_RETURN, function (Action $action) {
  69.             return $action->setLabel('Enregistrer');
  70.         })
  71.         ->update(Crud::PAGE_INDEXAction::NEW, function (Action $action) {
  72.             return $action->setLabel('Créer ressource');
  73.         })
  74.         ->update(Crud::PAGE_INDEXAction::EDIT, function (Action $action) {
  75.             return $action->displayIf(static function ($entity) {
  76.                 return $entity->getStatus() == 'en cours' || $entity->getStatus() != 'refusé';
  77.             });
  78.         })
  79.         ->update(Crud::PAGE_DETAILAction::EDIT, function (Action $action) {
  80.             return $action->displayIf(static function ($entity) {
  81.                 return $entity->getStatus() == 'en cours' || $entity->getStatus() != 'refusé';
  82.             });
  83.         })
  84.             ->add(Crud::PAGE_EDIT$valider)
  85.             ->add(Crud::PAGE_EDIT$refuser)
  86.             ->add(Crud::PAGE_INDEXAction::DETAIL)
  87.         ;
  88.     }
  89.      public function validerDocument(EntityManagerInterface $entityManagerAdminContext $contextNotificationManager $notificationManager)
  90.      {
  91.          $ressource $context->getEntity()->getInstance();
  92.          $ressource->setStatus('VALIDATED');
  93.          if ($ressource->getDateDebut() != new \DateTime()) {
  94.              $ressource->setDateDebut(new \DateTime());
  95.          }
  96.          $ressource->setIsPublic(true);
  97.          $entityManager->persist($ressource);
  98.          $entityManager->flush();
  99.          $url =
  100.              $this->adminUrlGenerator
  101.                  ->setController(RessourcesCrudController::class)
  102.                  ->setAction(Action::INDEX)
  103.                  ->generateUrl();
  104.                  $urlCommande '/listDocuments';
  105.                  $user $entityManager->getRepository(User::class)->find($ressource->getUser());
  106.                 
  107.                  $notification_message 'Votre Document a été validée !' $ressource->getId() . ' ';
  108.                  $notificationManager->pushMessage('Votre Document a été validée !'$notification_message$user$urlCommande);
  109.          return $this->redirect($url);
  110.      }
  111.     public function refuserDocument(EntityManagerInterface $entityManagerAdminContext $contextNotificationManager $notificationManager)
  112.     {
  113.         $ressource $context->getEntity()->getInstance();
  114.         if ($ressource->getStatus() === Ressources::STATUS_ARRAY['WAITING']) {
  115.             $ressource->setStatus('REFUSED');
  116.         }
  117.         $ressource->setIsPublic(false);
  118.         $entityManager->persist($ressource);
  119.         $entityManager->flush();
  120.         $url =
  121.             $this->adminUrlGenerator
  122.                 ->setController(RessourcesCrudController::class)
  123.                 ->setAction(Action::INDEX)
  124.                 ->generateUrl();
  125.                     $urlCommande '/listDocuments';
  126.                     $user $entityManager->getRepository(User::class)->find($ressource->getUser());
  127.                    
  128.                     $notification_message 'Votre Document a été refusé !' $ressource->getId() . ' ';
  129.                     $notificationManager->pushMessage('Votre Document a été refusé !'$notification_message$user$urlCommande);
  130.         return $this->redirect($url);
  131.     }
  132.     public function configureFields(string $pageName): iterable
  133.     {
  134.         return [
  135.             IdField::new('id')->hideOnForm()->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
  136.             TextField::new('titre')->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
  137.             ImageField::new('image''Photo')->setUploadDir('/public/upload/galerie/images')->setBasePath('upload/galerie/images')
  138.             ->setUploadedFileNamePattern('[randomhash].[extension]')
  139.             ->setFormTypeOptions(["attr" => ['accept' => 'image/*']])
  140.             ->setRequired($pageName === Crud::PAGE_NEW)
  141.             ->setFormTypeOption('required'true)
  142.             ->setHelp('Champ obligatoire (image conservée si aucune nouvelle sélection en modification).'),
  143.             TextareaField::new('description')->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
  144.             TextField::new('auteur')->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
  145.             DateField::new('date_debut''Date de début')
  146.             ->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3')
  147.             ->setFormTypeOptions([
  148.                 'constraints' => [
  149.                     new Callback([$this'validateDateDebut']),
  150.                 ],
  151.             ]),
  152.             DateField::new('date_expiration''Date d\'expiration')
  153.                 ->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
  154.                 ChoiceField::new('Categorie''Catégorie')
  155.                         ->setChoices([
  156.                             'Guide' => 'Guide',
  157.                             'Fiches d’expérience' => 'Fiches d experience',
  158.                             'Manifestations' => 'Manifestations',
  159.                             'Lois et règlements' => 'Lois et reglements',
  160.                             'Centre de documentation' => 'Centre de documentation',
  161.                         ])->setFormTypeOptions(['placeholder' => 'Veuillez sélectionner Catégorie'])->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3')/*->hideOnIndex()*/,
  162.                         ImageField::new('ressource''Ressource')->setUploadDir('/public/upload/galerie/images')->setBasePath('upload/galerie/images')->setTemplatePath('admin/fields/vich_uploader_pdf.html.twig')
  163.                         ->setUploadedFileNamePattern('[randomhash].[extension]')
  164.                         ->setFormTypeOptions(["attr" => ['accept' => 'image/*, application/pdf, application/vnd.ms-excel']])
  165.                         ->setRequired($pageName === Crud::PAGE_NEW)
  166.                         ->setFormTypeOption('required'true)
  167.                         ->setHelp('Champ obligatoire (fichier conservé si aucune nouvelle sélection en modification).')
  168.                         ->hideOnIndex(),
  169.                         BooleanField::new('ispublic''Publier ?')->setFormTypeOption('disabled''disabled')->onlyOnIndex(),
  170.                         BooleanField::new('ispublic''Publier ?')->onlyWhenCreating(),
  171.                         BooleanField::new('ispublic''Publier ?')->onlyWhenUpdating(),
  172.                         TextField::new('status''Statut')->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3')->hideOnForm(),
  173.                     ];
  174.                 }
  175.     public function persistEntity(EntityManagerInterface $entityManager$entityInstance): void
  176.     {
  177.         $entityInstance->setStatus('VALIDATED');
  178.         $entityInstance->setUser($this->getUser());
  179.         $entityManager->persist($entityInstance);
  180.         $entityManager->flush();
  181.     }
  182.     public function updateEntity(EntityManagerInterface $entityManager$entityInstance): void
  183.     {
  184.         if (!$entityInstance instanceof Ressources) {
  185.             parent::updateEntity($entityManager$entityInstance);
  186.             return;
  187.         }
  188.         $persisted null;
  189.         if (null !== $entityInstance->getId()) {
  190.             $persisted $entityManager->getRepository(Ressources::class)->find($entityInstance->getId());
  191.         }
  192.         $originalData $entityManager->getUnitOfWork()->getOriginalEntityData($entityInstance);
  193.         if (empty($entityInstance->getImage())) {
  194.             if (!empty($originalData['image'])) {
  195.                 $entityInstance->setImage($originalData['image']);
  196.             } elseif ($persisted && !empty($persisted->getImage())) {
  197.                 $entityInstance->setImage($persisted->getImage());
  198.             }
  199.         }
  200.         if (empty($entityInstance->getRessource())) {
  201.             if (!empty($originalData['ressource'])) {
  202.                 $entityInstance->setRessource($originalData['ressource']);
  203.             } elseif ($persisted && !empty($persisted->getRessource())) {
  204.                 $entityInstance->setRessource($persisted->getRessource());
  205.             }
  206.         }
  207.         parent::updateEntity($entityManager$entityInstance);
  208.     }
  209.     #[Route('/show/ressource/detail/{id}'name'show_ressource_detail')]
  210.     public function showByRessourceDetail(Ressources $ressourceRequest $requestEntityManagerInterface $entityManager): Response
  211.     {
  212.         return $this->render('ressource/detail.html.twig', [
  213.              'ressource'=>$ressource,
  214.          ]);
  215.     }
  216.     #[Route('/list/ressource/index/'name'index_ressource')]
  217.     public function listRessources(Request $requestEntityManagerInterface $entityManagerPaginatorInterface $paginator): Response
  218.     {
  219.         if ($request->isMethod('POST')) {
  220.             $this->validateRequestCsrfToken($request'submit');
  221.         }
  222.         //dd($request->request->get('selected_filter'));
  223.         // $date = new \DateTime();
  224.         $donnees $entityManager->getRepository(Ressources::class)->findForFrontListing($request->request->get('selected_filter'));
  225.         $ressources $paginator->paginate(
  226.             $donnees,
  227.             $request->query->getInt('page'1),
  228.             9
  229.         );
  230.         return $this->render('ressource/index.html.twig', [
  231.              'ressources'=>$ressources,
  232.              'selectedFilter'=>$request->request->get('selected_filter')
  233.          ]);
  234.     }
  235. public  function validateDateDebut($valueExecutionContextInterface $context): void
  236. {
  237.     $entity $context->getRoot()->getData();
  238.     $dateDebut $entity->getDateDebut();
  239.     $dateExpiration $entity->getDateExpiration();
  240.     if ($dateExpiration) {
  241.     if ($dateDebut >= $dateExpiration) {
  242.         $context
  243.             ->buildViolation('La date de début doit être inférieure à la date d\'expiration.')
  244.             ->atPath('date_debut')
  245.             ->addViolation();
  246.     }
  247. }
  248. }
  249. }
  250.