src/Subscriber/User/MainPhotoActionsSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. /*
  3.  * Author: Dominik Piekarski <code@dompie.de>
  4.  * Created at: 2021/08/27 11:30
  5.  */
  6. declare(strict_types=1);
  7. namespace App\Subscriber\User;
  8. use App\Entity\MemberMedia;
  9. use App\Event\Media\MemberMediaChangedEvent;
  10. use App\Event\Media\MemberMediaDeletedEvent;
  11. use App\Repository\MemberMediaRepository;
  12. use App\Service\Media\MemberMediaService;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. class MainPhotoActionsSubscriber implements EventSubscriberInterface
  15. {
  16.     protected MemberMediaRepository $mmRepository;
  17.     protected MemberMediaService $mmService;
  18.     public function __construct(MemberMediaRepository $mmRepoMemberMediaService $mmService)
  19.     {
  20.         $this->mmRepository $mmRepo;
  21.         $this->mmService $mmService;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             MemberMediaChangedEvent::class => [
  27.                 ['onMemberMediaChange'0],
  28.             ],
  29.             MemberMediaDeletedEvent::class => [
  30.                 ['onMemberMediaDelete'0],
  31.             ],
  32.         ];
  33.     }
  34.     public function onMemberMediaChange(MemberMediaChangedEvent $e): void
  35.     {
  36.         if ($e->hasPositionChanged()) {
  37.             $this->setMainPhoto($e->getMemberMedia());
  38.         }
  39.         if ($e->wasApproved()) {
  40.             $this->setMainPhoto($e->getMemberMedia());
  41.         }
  42.     }
  43.     private function setMainPhoto(MemberMedia $media): void
  44.     {
  45.         if (=== $media->getPosition() && $media->getIsChecked()) {
  46.             $media->getMember()->setMainPhoto($media);
  47.             $this->mmRepository->storeEntity($media->getMember(), false);
  48.         }
  49.     }
  50.     public function onMemberMediaDelete(MemberMediaDeletedEvent $e): void
  51.     {
  52.         $media $e->getMemberMedia();
  53.         if (!== $media->getPosition()) {
  54.             return;
  55.         }
  56.         $next $this->mmService->findNextMainPhoto($media->getMember(), $media->getId());
  57.         $media->getMember()->setMainPhoto($next);
  58.         $this->mmRepository->storeEntity($media->getMember(), false);
  59.     }
  60. }