user = $user; $this->entityManager = $entityManager; $this->userChecker = $userChecker; } public function process(Entity $entity, NotificatorParams $params): void { if ($entity->hasLinkMultipleField('assignedUsers')) { $userIdList = $entity->getLinkMultipleIdList('assignedUsers'); $fetchedAssignedUserIdList = $entity->getFetched('assignedUsersIds'); if (!is_array($fetchedAssignedUserIdList)) { $fetchedAssignedUserIdList = []; } foreach ($userIdList as $userId) { if (in_array($userId, $fetchedAssignedUserIdList)) { continue; } $this->processForUser($entity, $userId); } return; } if (!$entity->get('assignedUserId')) { return; } if (!$entity->isAttributeChanged('assignedUserId')) { return; } $assignedUserId = $entity->get('assignedUserId'); $this->processForUser($entity, $assignedUserId); } protected function processForUser(Entity $entity, string $assignedUserId): void { if (!$this->userChecker->checkAssignment($entity->getEntityType(), $assignedUserId)) { return; } if ($entity->hasAttribute('createdById') && $entity->hasAttribute('modifiedById')) { if ($entity->isNew()) { $isNotSelfAssignment = $assignedUserId !== $entity->get('createdById'); } else { $isNotSelfAssignment = $assignedUserId !== $entity->get('modifiedById'); } } else { $isNotSelfAssignment = $assignedUserId !== $this->user->id; } if (!$isNotSelfAssignment) { return; } $this->entityManager->createEntity('Notification', [ 'type' => 'Assign', 'userId' => $assignedUserId, 'data' => [ 'entityType' => $entity->getEntityType(), 'entityId' => $entity->getId(), 'entityName' => $entity->get('name'), 'isNew' => $entity->isNew(), 'userId' => $this->user->getId(), 'userName' => $this->user->get('name'), ], 'relatedType' => $entity->getEntityType(), 'relatedId' => $entity->getId(), ]); } }