src/EventListener/TranslationUpdateEventListener.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Answer;
  4. use App\Entity\Blog;
  5. use App\Entity\Category;
  6. use App\Entity\Employee;
  7. use App\Entity\Event;
  8. use App\Entity\EventCategory;
  9. use App\Entity\Location;
  10. use App\Entity\Page;
  11. use App\Entity\Product;
  12. use App\Entity\Question;
  13. use App\Entity\Sample;
  14. use App\Entity\Tag;
  15. use App\Entity\Testimonial;
  16. use App\Entity\Translation\BlogTranslation;
  17. use App\Entity\Translation\CategoryTranslation;
  18. use App\Entity\Translation\EmployeeTranslation;
  19. use App\Entity\Translation\EventCategoryTranslation;
  20. use App\Entity\Translation\EventLocationTranslation;
  21. use App\Entity\Translation\EventTranslation;
  22. use App\Entity\Translation\PageTranslation;
  23. use App\Entity\Translation\ProductTranslation;
  24. use App\Entity\Translation\SampleTranslation;
  25. use App\Entity\Translation\ShoppingAssistantAnswerTranslation;
  26. use App\Entity\Translation\ShoppingAssistantQuestionTranslation;
  27. use App\Entity\Translation\TagTranslation;
  28. use App\Entity\Translation\TestimonialTranslation;
  29. use App\Entity\Translation\USPTranslation;
  30. use App\Entity\USP;
  31. use App\Event\SiteUpdateEvent;
  32. use Doctrine\Common\Annotations\AnnotationException;
  33. use Doctrine\Common\Annotations\AnnotationReader;
  34. use Doctrine\DBAL\Exception as DBALException;
  35. use Doctrine\ORM\EntityManagerInterface;
  36. class TranslationUpdateEventListener
  37. {
  38.     /**
  39.      * @var EntityManagerInterface
  40.      */
  41.     protected $entityManager;
  42.     /**
  43.      * @var AnnotationReader
  44.      */
  45.     protected $annotationReader;
  46.     protected $translationEntities = [
  47.         EmployeeTranslation::class => Employee::class,
  48.         ShoppingAssistantQuestionTranslation::class => Question::class,
  49.         TestimonialTranslation::class => Testimonial::class,
  50.         TagTranslation::class => Tag::class,
  51.         PageTranslation::class => Page::class,
  52.         ProductTranslation::class => Product::class,
  53.         EventLocationTranslation::class => Location::class,
  54.         ShoppingAssistantAnswerTranslation::class => Answer::class,
  55.         CategoryTranslation::class => Category::class,
  56.         USPTranslation::class => USP::class,
  57.         EventTranslation::class => Event::class,
  58.         EventCategoryTranslation::class => EventCategory::class,
  59.         SampleTranslation::class => Sample::class,
  60.         BlogTranslation::class => Blog::class,
  61.     ];
  62.     /**
  63.      * TranslationUpdateEventListener constructor.
  64.      *
  65.      * @throws AnnotationException
  66.      */
  67.     public function __construct(EntityManagerInterface $entityManager)
  68.     {
  69.         $this->entityManager $entityManager;
  70.         $this->annotationReader = new AnnotationReader();
  71.     }
  72.     /**
  73.      * @throws DBALException
  74.      */
  75.     public function update(SiteUpdateEvent $event)
  76.     {
  77.         $event->getOutput()->writeln(\PHP_EOL);
  78.         foreach ($this->translationEntities as $translationEntity => $class) {
  79.             $translationTableName $this->entityManager->getClassMetadata($translationEntity)->getTableName();
  80.             $updated $this->entityManager->getConnection()
  81.                 ->exec(sprintf("UPDATE `%s` SET `object_class` = '%s'"$translationTableNameaddslashes($class)));
  82.             if ($updated 0) {
  83.                 $event->getOutput()->writeln(
  84.                     sprintf(
  85.                         '<comment>Updating Translation:</comment> set object_class %s for table %s',
  86.                         $class,
  87.                         $translationTableName
  88.                     )
  89.                 );
  90.             }
  91.         }
  92.     }
  93. }