config = $config; $this->entityManager = $entityManager; } public function afterSave(Entity $entity, array $options = []) { if (!empty($options['silent']) || !empty($options['noNotifications'])) { return; } if ( $this->config->get('assignmentEmailNotifications') && ( $entity->has('assignedUserId') || $entity->hasLinkMultipleField('assignedUsers') && $entity->has('assignedUsersIds') ) && in_array($entity->getEntityType(), $this->config->get('assignmentEmailNotificationsEntityList', [])) ) { if ($entity->has('assignedUsersIds')) { $userIdList = $entity->getLinkMultipleIdList('assignedUsers'); $fetchedAssignedUserIdList = $entity->getFetched('assignedUsersIds'); if (!is_array($fetchedAssignedUserIdList)) { $fetchedAssignedUserIdList = []; } foreach ($userIdList as $userId) { if (in_array($userId, $fetchedAssignedUserIdList)) continue; if (!$this->isNotSelfAssignment($entity, $userId)) continue; $this->createJob($entity, $userId); } } else { $userId = $entity->get('assignedUserId'); if (!empty($userId) && $entity->isAttributeChanged('assignedUserId') && $this->isNotSelfAssignment($entity, $userId) ) { $this->createJob($entity, $userId); } } } } protected function isNotSelfAssignment(Entity $entity, $assignedUserId) { 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->getUser()->id; } return $isNotSelfAssignment; } protected function createJob(Entity $entity, $userId) { $job = $this->entityManager->getEntity('Job'); $job->set([ 'serviceName' => 'EmailNotification', 'methodName' => 'notifyAboutAssignmentJob', 'data' => [ 'userId' => $userId, 'assignerUserId' => $this->getUser()->id, 'entityId' => $entity->id, 'entityType' => $entity->getEntityType(), ], 'executeTime' => date('Y-m-d H:i:s'), 'queue' => 'e0', ]); $this->entityManager->saveEntity($job); } }