<?php
namespace App\Controller\Admin;
use App\Entity\Equipe;
use App\Entity\DomainEquipe;
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\IntegerField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
use App\Form\DomainEquipeType;
use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Asset;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
class EquipeCrudController extends AbstractCrudController
{
public static function getEntityFqcn(): string
{
return Equipe::class;
}
public function configureAssets(Assets $assets): Assets
{
return $assets->addJsFile(Asset::new('js/equipeJs.js')->defer());
}
public function configureActions(Actions $actions): Actions
{
$actions->add(Crud::PAGE_INDEX, Action::DETAIL)
->update(Crud::PAGE_NEW, Action::SAVE_AND_RETURN, function (Action $action) {
return $action->setLabel('Enregistrer');
});
return $actions;
}
public function configureCrud(Crud $crud): Crud
{
return $crud->setPageTitle('detail', 'Détails membre');
}
public function configureFields(string $pageName): iterable
{
return [
TextField::new('nom', 'Nom et prénom'),
ImageField::new('image', 'Photo')->setUploadDir('public/imagees/galery')->setBasePath('imagees/galery')
->setUploadedFileNamePattern('[randomhash].[extension]')
->setFormTypeOptions(["attr" => ['accept' => 'image/*, application/pdf, application/vnd.ms-excel']])
->setRequired($pageName !== Crud::PAGE_EDIT),
TextField::new('diplome', 'Diplôme'),
TextField::new('poste', 'Poste')
->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
NumberField::new('experience', 'Expérience (ans)')->setFormTypeOptions(["attr" => ['min' => '0','pattern'=>'[0-9]+', 'oninput'=>"this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"]])->setRequired(true),
CollectionField::new('domains', 'Domaine de compétences')
->allowAdd(true)
->allowDelete(true)
->setEntryIsComplex(true)
->setEntryType(DomainEquipeType::class)
->setFormTypeOptions([
'by_reference' => 'true',
'mapped' => true
])->hideOnIndex()->setRequired($pageName !== Crud::PAGE_EDIT)
->setColumns('custom_class_domain col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
ChoiceField::new('regional', 'Régional/Central')
->setChoices([
'Régional' => 'Regional',
'Central' => 'Central',])
->setFormTypeOptions(['placeholder' => 'Veuillez sélectionner la Regional/Central'])->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
ChoiceField::new('unite', 'Unité régionale')
->addCssClass('equipe_unite_field')
->setRequired($pageName !== Crud::PAGE_EDIT || $pageName !== Crud::PAGE_NEW)
->setChoices([
'Tunis' => 'Tunis',
'Beja' => 'Beja',
'Ben Arous' => 'Ben Arous',
'Ariana' => 'Ariana',
'Bizerte' => 'Bizerte',
'Gabes' => 'Gabes',
'Gafsa' => 'Gafsa',
'Jendouba' => 'Jendouba',
'Kairouan' => 'Kairouan',
'Kasserine' => 'Kasserine',
'Kebilli' => 'Kebilli',
'Kef' => 'Kef',
'Mahdia' => 'Mahdia',
'Manouba' => 'Manouba',
'Medenine' => 'Medenine',
'Monastir' => 'Monastir',
'Nabeul' => 'Nabeul',
'Sfax' => 'Sfax',
'Sidi Bouzid' => 'Sidi Bouzid',
'Siliana' => 'Siliana',
'Sousse' => 'Sousse',
'Tataouine' => 'Tataouine',
'Tozeur' => 'Tozeur',
'Zaghouan' => 'Zaghouan'])
->setFormTypeOptions(['placeholder' => 'Veuillez sélectionner l\'Unité régionale'])->setColumns('col-sm-6 col-md-6 col-lg-5 col-xxl-3'),
];
}
#[Route('/show/equipe/detail/{id}', name: 'show_equipe_detail')]
public function showByEquipeDetail(Equipe $equipeMember, Request $request, EntityManagerInterface $entityManager): Response
{
$equipe = $entityManager->getRepository(Equipe::class)->findAll();
return $this->render('equipe/detail.html.twig', [
'equipe' => $equipe,
'equipeMember' => $equipeMember,
]);
}
public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void
{
$oldDomains= clone $entityInstance->getDomains();
foreach ($entityInstance->getDomains() as $Domain) {
$entityInstance->removeDomain($Domain);
}
$entityManager->persist($entityInstance);
$entityManager->flush();
foreach ($oldDomains as $Domain2) {
$Domain2->setEquipe($entityInstance);
$entityManager->persist($Domain2);
$entityManager->flush();
}
}
public function updateEntity(EntityManagerInterface $entityManager, $entityInstance): void
{
/** check if FormUserNotes instances was updated */
if ($entityInstance->getDomains()) {
foreach ($entityInstance->getDomains()->getSnapshot() as $Domain) {
/** check if the FormUserNotes instance is to remove */
if (!$entityInstance->getDomains()->contains($Domain)) {
/* $Domain->setUser(null); */
$entityManager->remove($Domain);
}
}
/** mapping of created User */
foreach ($entityInstance->getDomains() as $Domain) {
$Domain->setEquipe($entityInstance);
}
}
$entityManager->persist($entityInstance);
$entityManager->flush();
}
}