src/EventSubscriber/SaloonSubscriber.php line 66

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Sales\SidebarPlacementType;
  4. use App\Event\Saloon\SaloonCommentWasAdded;
  5. use App\Event\Saloon\SaloonWasPlacedOnAdBoard;
  6. use App\Event\Saloon\SaloonWasProlongedOnAdBoard;
  7. use App\Event\Saloon\SaloonWasRemovedFromAdBoard;
  8. use App\Mautic\Marketing\MauticContactActivityUpdater;
  9. use App\Service\IpAddressService;
  10. use App\Service\PlacementHider;
  11. use App\Service\Sidebar;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. class SaloonSubscriber implements EventSubscriberInterface
  14. {
  15.     public function __construct(
  16.         private Sidebar $sidebar,
  17.         private PlacementHider $placementHider,
  18.         private IpAddressService $ipAddressService,
  19.         private MauticContactActivityUpdater $mauticContactActivityUpdater
  20.     ) {}
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             SaloonWasPlacedOnAdBoard::NAME => [
  25.                 ['addSidebarPlacement', 0],
  26.                 ['removePlacementHiding', 10],
  27.             ],
  28.             SaloonWasRemovedFromAdBoard::NAME => 'deleteSidebarPlacement',
  29.             SaloonWasProlongedOnAdBoard::NAME => 'prolongSidebarPlacement',
  30.             SaloonCommentWasAdded::NAME => 'checkIpAddressCommentBanNeeded',
  31.         ];
  32.     }
  33.     public function addSidebarPlacement(SaloonWasPlacedOnAdBoard $saloonWasPlacedOnAdBoard): void
  34.     {
  35.         $placement = $saloonWasPlacedOnAdBoard->getPlacement();
  36.         $placementType = $placement->getType();
  37.         if($placementType->isVip() || $placementType->isUltraVip()) {
  38.             $this->sidebar->doPlaceSaloonOnSidebar(
  39.                 $saloonWasPlacedOnAdBoard->getSaloon(),
  40.                 new SidebarPlacementType($placementType->getValue()),
  41.                 $placement->getPlacementPrice(),
  42.                 $placement->getPlacedAt(),
  43.                 $placement->getPlacedUntil()
  44.             );
  45.         }
  46.         if (null !== $saloonWasPlacedOnAdBoard->getSaloon()->getOwner()) {
  47.             $this->mauticContactActivityUpdater->markPaidPlacement(
  48.                 $saloonWasPlacedOnAdBoard->getSaloon()->getOwner(),
  49.                 $placement->getPlacedAt()
  50.             );
  51.         }
  52.     }
  53.     public function deleteSidebarPlacement(SaloonWasRemovedFromAdBoard $saloonWasRemovedFromAdBoard): void
  54.     {
  55.         $this->sidebar->deleteSaloonFromSidebar($saloonWasRemovedFromAdBoard->getSaloon());
  56.     }
  57.     public function prolongSidebarPlacement(SaloonWasProlongedOnAdBoard $saloonWasProlongedOnAdBoard): void
  58.     {
  59.         $this->sidebar->prolongSaloonPlacement($saloonWasProlongedOnAdBoard->getSaloon(), $saloonWasProlongedOnAdBoard->getUntil());
  60.     }
  61.     public function removePlacementHiding(SaloonWasPlacedOnAdBoard $saloonWasPlacedOnAdBoard): void
  62.     {
  63.         $this->placementHider->deleteSaloonHiding($saloonWasPlacedOnAdBoard->getSaloon());
  64.     }
  65.     public function checkIpAddressCommentBanNeeded(SaloonCommentWasAdded $saloonCommentWasAddedEvent): void
  66.     {
  67.         $this->ipAddressService->checkDailyCommentBanNeeded();
  68.     }
  69. }