* */ class OutOfOfficeStatusListener implements IEventListener { public function __construct( private IJobList $jobsList, private ITimeFactory $time, private IManager $manager, ) { } /** * @inheritDoc */ public function handle(Event $event): void { if ($event instanceof OutOfOfficeClearedEvent) { $this->manager->revertUserStatus($event->getData()->getUser()->getUID(), IUserStatus::MESSAGE_OUT_OF_OFFICE, IUserStatus::DND); $this->jobsList->scheduleAfter(UserStatusAutomation::class, $this->time->getTime(), ['userId' => $event->getData()->getUser()->getUID()]); return; } if ($event instanceof OutOfOfficeScheduledEvent || $event instanceof OutOfOfficeChangedEvent || $event instanceof OutOfOfficeStartedEvent || $event instanceof OutOfOfficeEndedEvent ) { // This might be overwritten by the office hours automation, but that is ok. This is just in case no office hours are set $this->jobsList->scheduleAfter(UserStatusAutomation::class, $this->time->getTime(), ['userId' => $event->getData()->getUser()->getUID()]); } } }