25 parent::__construct();
27 $this->collabRepository = CollabRepository::getInstance();
34 $command =
$event->getCommand();
35 $collabId = $command->getId();
36 $initiatorId = $command->getInitiatorId();
38 if ($this->mayCreateCollabEntityJobs($initiatorId, $collabId))
40 $jobCollection->merge($this->getCollabEntityJobs($command));
43 if (!$this->isFirstMemberJustNowAdded(
$event))
45 $this->queueService->add($jobCollection);
50 if ($command->getAddInvitedMembers())
52 $jobCollection->merge($this->getJobsAfterFirstCollaberInvited($collabId, $initiatorId));
55 if ($command->getAddMembers() || $command->getAddModeratorMembers())
57 $jobCollection->merge($this->getJobsAfterFirstEmployeeInvited($collabId, $initiatorId));
60 $this->queueService->add($jobCollection);
61 $this->deleteJobsAfterMemberAdded($collabId);
68 $collabBefore =
$event->getCollabBefore();
69 $memberBeforeIds = $collabBefore->getUserMemberIds();
71 $isSingleMember =
count($memberBeforeIds) === 1;
73 return $isSingleMember && $this->hasAddedMembersInCommand(
$event->getCommand());
76 private function hasAddedMembersInCommand(CollabUpdateCommand $command): bool
79 $command->getAddInvitedMembers()
80 || $command->getAddMembers()
81 || $command->getAddModeratorMembers()
85 private function mayCreateCollabEntityJobs(
int $initiatorId,
int $collabId): bool
87 $firstAddedData = $this->collabRepository->getFirstAddedMemberData($collabId);
89 if (!$firstAddedData || !$firstAddedData->isFirstMemberAdded)
94 $lastDateForJobCreation = (
new ClosestWorkDate())->
get(
95 CreatedTaskOrMeetingOrFileThreeDays::JOB_OFFSET,
96 $firstAddedData->addedDate->toUserTime()
99 $userTimeOffset = CTimeZone::GetOffset($initiatorId);
100 $lastDateForJobCreation->add(
"-{$userTimeOffset} seconds");
102 return time() < $lastDateForJobCreation->getTimestamp();
105 private function getCollabEntityJobs(CollabUpdateCommand $command): JobCollection
109 if ($command->getAddMembers())
111 $addedMembers = $command->getAddMembers();
114 if ($command->getAddModeratorMembers())
116 $addedMembers = array_merge($addedMembers, $command->getAddModeratorMembers());
119 $firstAddedData = $this->collabRepository->getFirstAddedMemberData($command->getId());
120 if ($firstAddedData?->isFirstMemberAdded && $command->getAddInvitedMembers())
122 $addedMembers = array_merge($addedMembers, $command->getAddInvitedMembers());
125 $jobCollection =
new JobCollection();
127 if (empty($addedMembers))
129 return $jobCollection;
132 $addedMemberIds = (
new AccessCodeConverter(...$addedMembers))->getUserIds();
134 foreach ($addedMemberIds as $memberId)
137 JobFactory::create($command->getId(), $memberId, Type::CreatedTaskOrMeetingOrFileThreeDays->value)
141 return $jobCollection;
144 private function getJobsAfterFirstCollaberInvited(
int $collabId,
int $initiatorId): JobCollection
146 return new JobCollection(
147 JobFactory::create($collabId, $initiatorId, Type::CollaberNotAcceptInvitationOneDay->value),
148 JobFactory::create($collabId, $initiatorId, Type::CollaberNotAcceptInvitationTwoDays->value),
152 private function getJobsAfterFirstEmployeeInvited(
int $collabId,
int $initiatorId): JobCollection
154 return new JobCollection(
155 JobFactory::create($collabId, $initiatorId, Type::StartChattingOneDay->value),
156 JobFactory::create($collabId, $initiatorId, Type::CreatedTaskOrMeetingOrFileThreeDays->value),
160 private function deleteJobsAfterMemberAdded(
int $collabId): void
162 $this->queueService->deleteByFilter([
163 'COLLAB_IDS' => [$collabId],
165 Type::MembersNotInvitedOneDay->value,
166 Type::MembersNotInvitedTwoDays->value,
167 Type::MembersNotInvitedFourDays->value,
168 Type::MembersNotInvitedFiveDays->value,