src/Controller/Admin/RessourcesCrudController.php line 189

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 EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface;
  29. use Symfony\Component\Validator\Constraints\Callback;
  30. use Symfony\Component\Validator\Context\ExecutionContextInterface;
  31. class RessourcesCrudController extends AbstractCrudController
  32. {
  33.     private AdminUrlGenerator $adminUrlGenerator;
  34.     public function __construct(
  35.         AdminUrlGenerator $adminUrlGenerator,
  36.     ) {
  37.         $this->adminUrlGenerator $adminUrlGenerator;
  38.     }
  39.     public static function getEntityFqcn(): string
  40.     {
  41.         return Ressources::class;
  42.     }
  43.     public function configureCrud(Crud $crud): Crud
  44.     {
  45.         return $crud ->setPageTitle('index''Liste des  Ressources')
  46.             ->setPageTitle('detail''Détails Ressource')
  47.             ->setPageTitle('new''Créer une Ressource')
  48.             ->setPageTitle('edit''Modifier une Ressource') ->overrideTemplates([
  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_EDIT),
  141.             TextareaField::new('description')->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
  142.             TextField::new('auteur')->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
  143.             DateField::new('date_debut''Date de début')
  144.             ->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3')
  145.             ->setFormTypeOptions([
  146.                 'constraints' => [
  147.                     new Callback([$this'validateDateDebut']),
  148.                 ],
  149.             ]),
  150.             DateField::new('date_expiration''Date d\'expiration')
  151.                 ->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
  152.                 ChoiceField::new('Categorie''Catégorie')
  153.                         ->setChoices([
  154.                             'Guide' => 'Guide',
  155.                             'Fiches d’expérience' => 'Fiches d experience',
  156.                             'Manifestations' => 'Manifestations',
  157.                             'Lois et règlements' => 'Lois et reglements',
  158.                             'Centre de documentation' => 'Centre de documentation',
  159.                         ])->setFormTypeOptions(['placeholder' => 'Veuillez sélectionner Catégorie'])->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3')/*->hideOnIndex()*/,
  160.                         ImageField::new('ressource''Ressource')->setUploadDir('/public/upload/galerie/images')->setBasePath('upload/galerie/images')->setTemplatePath('admin/fields/vich_uploader_pdf.html.twig')
  161.                         ->setUploadedFileNamePattern('[randomhash].[extension]')
  162.                         ->setFormTypeOptions(["attr" => ['accept' => 'image/*, application/pdf, application/vnd.ms-excel']])
  163.                         ->setRequired($pageName !== Crud::PAGE_EDIT)->hideOnIndex(),
  164.                         BooleanField::new('ispublic''Publier ?')->setFormTypeOption('disabled''disabled')->onlyOnIndex(),
  165.                         BooleanField::new('ispublic''Publier ?')->onlyWhenCreating(),
  166.                         BooleanField::new('ispublic''Publier ?')->onlyWhenUpdating(),
  167.                         TextField::new('status''Statut')->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3')->hideOnForm(),
  168.                     ];
  169.                 }
  170.     public function persistEntity(EntityManagerInterface $entityManager$entityInstance): void
  171.     {
  172.         $entityInstance->setStatus('VALIDATED');
  173.         $entityInstance->setUser($this->getUser());
  174.         $entityManager->persist($entityInstance);
  175.         $entityManager->flush();
  176.     }
  177.     #[Route('/show/ressource/detail/{id}'name'show_ressource_detail')]
  178.     public function showByRessourceDetail(Ressources $ressourceRequest $requestEntityManagerInterface $entityManager): Response
  179.     {
  180.         return $this->render('ressource/detail.html.twig', [
  181.              'ressource'=>$ressource,
  182.          ]);
  183.     }
  184.     #[Route('/list/ressource/index/'name'index_ressource')]
  185.     public function listRessources(Request $requestEntityManagerInterface $entityManagerPaginatorInterface $paginator): Response
  186.     {
  187.         //dd($request->request->get('selected_filter'));
  188.         // $date = new \DateTime();
  189.         $donnees $entityManager->getRepository(Ressources::class)->getLastsRessources($request->request->get('selected_filter'), -1);
  190.         $ressources $paginator->paginate(
  191.             $donnees,
  192.             $request->query->getInt('page'1),
  193.             9
  194.         );
  195.         return $this->render('ressource/index.html.twig', [
  196.              'ressources'=>$ressources,
  197.              'selectedFilter'=>$request->request->get('selected_filter')
  198.          ]);
  199.     }
  200. public  function validateDateDebut($valueExecutionContextInterface $context): void
  201. {
  202.     $entity $context->getRoot()->getData();
  203.     $dateDebut $entity->getDateDebut();
  204.     $dateExpiration $entity->getDateExpiration();
  205.     if ($dateExpiration) {
  206.     if ($dateDebut >= $dateExpiration) {
  207.         $context
  208.             ->buildViolation('La date de début doit être inférieure à la date d\'expiration.')
  209.             ->atPath('date_debut')
  210.             ->addViolation();
  211.     }
  212. }
  213. }
  214. }
  215.