diff --git a/src/JeMengage/Timeline/FeedProcessor/EventProcessor.php b/src/JeMengage/Timeline/FeedProcessor/EventProcessor.php index 59a7fe41ae0..1bac4c9ae8e 100644 --- a/src/JeMengage/Timeline/FeedProcessor/EventProcessor.php +++ b/src/JeMengage/Timeline/FeedProcessor/EventProcessor.php @@ -7,21 +7,28 @@ use App\Event\EventCleaner; use App\Event\EventVisibilityEnum; use App\JeMengage\Timeline\TimelineFeedTypeEnum; +use App\Repository\EventRegistrationRepository; use Symfony\Component\Security\Core\Security; class EventProcessor extends AbstractFeedProcessor { private const CONTEXT_CLEANER_ENABLED_KEY = 'event:cleaner_enabled'; + private ?Adherent $currentUser = null; + public function __construct( private readonly EventCleaner $eventCleaner, private readonly Security $security, + private readonly EventRegistrationRepository $eventRegistrationRepository, ) { } public function process(array $item, array &$context): array { - return $this->cleanEventDataIfNeed($item, $context); + $item = $this->cleanEventDataIfNeed($item, $context); + $item = $this->appendEventRegistrationDate($item); + + return $item; } public function supports(array $item): bool @@ -34,12 +41,11 @@ private function cleanEventDataIfNeed(array $item, array &$context): array $needClean = $context[self::CONTEXT_CLEANER_ENABLED_KEY] ?? null; if (null === $needClean) { - $user = $this->security->getUser(); + $user = $this->getCurrentUser(); $needClean = $context[self::CONTEXT_CLEANER_ENABLED_KEY] = EventVisibilityEnum::isForAdherent($visibility = $item['visibility'] ?? EventVisibilityEnum::ADHERENT_DUES->value) && ( - !$user instanceof Adherent - || (EventVisibilityEnum::ADHERENT->value === $visibility && !$user->hasTag(TagEnum::ADHERENT)) + (EventVisibilityEnum::ADHERENT->value === $visibility && !$user->hasTag(TagEnum::ADHERENT)) || (EventVisibilityEnum::ADHERENT_DUES->value === $visibility && !$user->hasTag(TagEnum::getAdherentYearTag())) ); } @@ -53,4 +59,23 @@ private function cleanEventDataIfNeed(array $item, array &$context): array return $item; } + + private function getCurrentUser(): Adherent + { + if ($this->currentUser) { + return $this->currentUser; + } + + return $this->currentUser = $this->security->getUser(); + } + + private function appendEventRegistrationDate(array $item): array + { + $item['user_registered_at'] = $this->eventRegistrationRepository->findAdherentRegistration( + $item['objectID'], + $this->getCurrentUser()->getUuidAsString() + )?->getCreatedAt(); + + return $item; + } }