|
- <?php
-
- namespace Lc\SovBundle\EventSubscriber\Translation;
-
- use Doctrine\ORM\PersistentCollection;
- use Doctrine\ORM\Query;
- use EasyCorp\Bundle\EasyAdminBundle\Event\AfterCrudActionEvent;
- use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeCrudActionEvent;
- use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
- use Gedmo\Translatable\TranslatableListener;
- use Lc\SovBundle\Doctrine\Extension\TranslatableInterface;
- use Lc\SovBundle\Doctrine\EntityManager;
- use Symfony\Component\EventDispatcher\EventSubscriberInterface;
- use function Symfony\Component\Translation\t;
-
- class TranslationEasyAdminSubscriber implements EventSubscriberInterface
- {
- protected $em;
-
- public function __construct(EntityManager $entityManager)
- {
- $this->em = $entityManager;
- }
-
- public static function getSubscribedEvents()
- {
- return [
- BeforeCrudActionEvent::class => ['setTranslatableLocale']
- ];
- }
-
- public function setTranslatableLocale(BeforeCrudActionEvent $event)
- {
-
- $entity = $event->getAdminContext()->getEntity()->getInstance();
- $_locale = $event->getAdminContext()->getRequest()->get('_locale');
-
- if($entity instanceof TranslatableInterface){
-
- //parcours les champs association pour détecter un champ de association qui est traduisible
- foreach ($this->em->getClassMetadata(get_class($entity))->getAssociationMappings() as $associationMapping){
- if (in_array(TranslatableInterface::class, class_implements($associationMapping["targetEntity"]))){
- if($entity->__get($associationMapping['fieldName']) instanceof PersistentCollection){
- foreach ($entity->__get($associationMapping['fieldName']) as $item){
- $item->setTranslatableLocale($_locale);
- $this->em->refresh($item);
- }
- }else{
- if($entity->__get($associationMapping['fieldName'])) {
- $entity->__get($associationMapping['fieldName'])->setTranslatableLocale($_locale);
- $this->em->refresh($entity->__get($associationMapping['fieldName']));
- }
- }
-
- }
- }
- $entity->setTranslatableLocale($_locale);
- $this->em->refresh($entity);
- }
- }
-
-
- }
|