<?php
namespace App\Controller\Admin;
use App\Entity\Temoignage;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Knp\Component\Pager\PaginatorInterface;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Asset;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use Symfony\Component\HttpFoundation\RequestStack;
class TemoignageCrudController extends AbstractCrudController
{
public function configureCrud(Crud $crud): Crud
{
return $crud->setPageTitle('index', 'témoignages')
->setPageTitle('detail', 'Détails témoignages')
->setPageTitle('new', 'Créer un témoignage');
}
public function __construct(RequestStack $request)
{
$this->request = $request;
}
public static function getEntityFqcn(): string
{
return Temoignage::class;
}
public function configureActions(Actions $actions): Actions
{
return $actions
// ...
->update(Crud::PAGE_INDEX, Action::NEW, function (Action $action) {
return $action->setLabel('Créer Témoignage');
})
->add(Crud::PAGE_INDEX, Action::DETAIL)
->update(Crud::PAGE_NEW, Action::SAVE_AND_RETURN, function (Action $action) {
return $action->setLabel('Enregistrer');
})
// in PHP 7.4 and newer you can use arrow functions
// ->update(Crud::PAGE_INDEX, Action::NEW,
// fn (Action $action) => $action->setIcon('fa fa-file-alt')->setLabel(false))
;
}
public function configureAssets(Assets $assets): Assets
{
return $assets->addJsFile(Asset::new('js/temoignageJs.js')->defer());
}
public function configureFields(string $pageName): iterable
{
return [
TextField::new('beneficiaire', 'Bénéficiaire'),
DateField::new('date'),
//TextField::new('type'),
ChoiceField::new('videoType', 'Type de vidéo')
->setChoices([
'Url' => 'Url',
'Vidéo' => 'Video',])
->renderExpanded(),
TextField::new('url', 'url')->setColumns('custom_class_url col-sm-6 col-md-6 col-lg-6 col-xxl-6')
->hideOnIndex()
->setRequired($pageName !== Crud::PAGE_EDIT && $pageName !== Crud::PAGE_NEW),
ImageField::new('video', 'vidéo')
->setUploadDir('public/imagees/galery')
->setBasePath('imagees/galery')
->setTemplatePath('admin/fields/video.html.twig')
->setRequired($pageName !== Crud::PAGE_EDIT && $pageName !== Crud::PAGE_NEW)
->setUploadedFileNamePattern('[randomhash].[extension]')
->hideOnIndex()
->setRequired($pageName !== Crud::PAGE_EDIT && $pageName !== Crud::PAGE_NEW)
->setFormTypeOptions([
"attr" => [
'accept' => 'video/mp4, video/webm, video/ogg, video/avi, video/mov, video/wmv, video/flv, video/mkv'
]
])
->setColumns('custom_class_video col-sm-6 col-md-6 col-lg-6 col-xxl-6'),
ChoiceField::new('type', 'Statut')
->setChoices([
'Publique' => 'Publique',
'Privé' => 'Privé',])
->setFormTypeOptions(['placeholder' => 'Veuillez sélectionner le type'])->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
TextareaField::new('description')->setColumns('col-sm-6 col-md-6 col-lg-6 col-xxl-6'),
ImageField::new('image', 'Logo')->setUploadDir('public/imagees/galery')->setBasePath('imagees/galery')
->setRequired(false)
->setUploadedFileNamePattern('[randomhash].[extension]')
->setFormTypeOptions(["attr" => ['accept' => 'image/*, application/pdf, application/vnd.ms-excel']]),
];
}
public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void
{
if ($entityInstance->getVideoType() == 'Url') {
$entityInstance->setUrl($entityInstance->getUrl());
$entityInstance->setVideoType('Url');
$entityInstance->setVideo(" ");
} else {
$entityInstance->setVideoType('Video');
$entityInstance->setUrl(" ");
}
$entityManager->persist($entityInstance);
$entityManager->flush();
}
public function updateEntity(EntityManagerInterface $entityManager, $entityInstance): void
{
if ($entityInstance->getVideoType() == 'Url') {
$entityInstance->setUrl($entityInstance->getUrl());
$entityInstance->setVideo(" ");
} else {
$entityInstance->setVideoType('Video');
$entityInstance->setVideo($entityInstance->getVideo());
$entityInstance->setUrl(" ");
}
$entityManager->persist($entityInstance);
$entityManager->flush();
}
#[Route('/show/temoignage/detail/{id}', name: 'show_temoignage_detail')]
public function showByTemoignageDetail(Temoignage $temoignage, Request $request, EntityManagerInterface $entityManager): Response
{
return $this->render('temoignage/detail.html.twig', [
'temoignage'=>$temoignage,
]);
}
#[Route('/list/temoignage/index/', name: 'index_temoignage')]
public function listTemoignages(Request $request, EntityManagerInterface $entityManager, PaginatorInterface $paginator): Response
{
$donnees = $entityManager->getRepository(Temoignage::class)->findAll();
$temoignages = $paginator->paginate(
$donnees,
$request->query->getInt('page', 1),
10
);
return $this->render('temoignage/index.html.twig', [
'temoignages'=>$temoignages,
]);
}
}