src/Aqarmap/Bundle/ListingBundle/EventListener/ListingFeatureListener.php line 76
<?phpnamespace Aqarmap\Bundle\ListingBundle\EventListener;use Aqarmap\Bundle\ListingBundle\Constant\ListingFeatures;use Aqarmap\Bundle\ListingBundle\Entity\ListingFeature;use Aqarmap\Bundle\ListingBundle\Event\ListingFeatureEvent;use Aqarmap\Bundle\ListingBundle\Model\Contracts\BumpUpModelInterface;use Aqarmap\Bundle\ListingBundle\Service\Contracts\ListingFeatureServiceInterface;use Aqarmap\Bundle\ListingBundle\Service\ListingManager;use Aqarmap\Bundle\MainBundle\Constant\ActivityType;use Aqarmap\Bundle\MainBundle\Service\ActivityLogger;use Aqarmap\Bundle\MainBundle\Service\Setting;use Psr\Log\LoggerInterface;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;class ListingFeatureListener implements EventSubscriberInterface{private $user;public function __construct(private readonly ListingFeatureServiceInterface $listingFeatureService,private readonly BumpUpModelInterface $bumpUpModel,private readonly Setting $settings,private readonly TokenStorageInterface $tokenStorage,private readonly ListingManager $listingManager,private readonly ActivityLogger $activityLogger,private readonly LoggerInterface $logger,) {$this->user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;}public function onFeaturingCreateAutoBumpUp(ListingFeatureEvent $event): void{$listingFeature = $event->getListingFeature();if (\in_array($listingFeature->getType(), ListingFeatures::getBumpUpFeatures())) {try {if ($listingFeature->getExpiresAt()) {$listing = $listingFeature->getListing();$listing->setBumped(true);$bumpUpModel = $this->createBumpUpModel($listingFeature);$this->listingFeatureService->createBumpUp($bumpUpModel);$this->listingManager->saveListing($listingFeature->getListing(), true);$this->activityLogger->record(ActivityType::LISTING_BUMP_UP, $this->user, $listing->getId());$this->listingFeatureService->logBumpActivity('aqarmap.listing.bump_up_started', $listing, $this->user);}} catch (\Exception $e) {$this->logger->error($e->getMessage());}}}/*** {@inheri tdoc}.*/public static function getSubscribedEvents(): array{return ['aqarmap.listing.feature.bumpup' => 'onFeaturingCreateAutoBumpUp',];}private function createBumpUpModel(ListingFeature $listingFeature): BumpUpModelInterface{$featuringOccurenceInterval = $this->getFeaturingOccurenceInterval($listingFeature);$durationInDays = date_diff(new \DateTime(), $listingFeature->getExpiresAt())->format('%a');$occurrences = $featuringOccurenceInterval > 0 ? round($durationInDays / $featuringOccurenceInterval) : 0;return $this->bumpUpModel->setListing($listingFeature->getListing())->setDuration($durationInDays)->setOccurrences($occurrences)->setOwner($this->user);}private function getFeaturingOccurenceInterval(ListingFeature $listingFeature){return match ($listingFeature->getType()) {ListingFeatures::SPONSORED => $this->settings->getSetting('general', 'auto_bumpup_sponserd_interval'),ListingFeatures::SPOTLIGHT => $this->settings->getSetting('general', 'auto_bumpup_spotlight_interval'),default => $Interval,};}}