getUserId(); $assignerUserId = $data->getAssignerUserId(); $entityId = $data->getEntityId(); $entityType = $data->getEntityType(); if ( !$userId || !$assignerUserId || !$entityId || !$entityType ) { throw new LogicException(); } $user = $this->entityManager->getEntityById(User::ENTITY_TYPE, $userId); if (!$user) { return; } if ($user->isPortal()) { return; } $preferences = $this->entityManager->getEntityById(Preferences::ENTITY_TYPE, $userId); if (!$preferences) { return; } if (!$preferences->get('receiveAssignmentEmailNotifications')) { return; } $ignoreList = $preferences->get('assignmentEmailNotificationsIgnoreEntityTypeList') ?? []; if (in_array($entityType, $ignoreList)) { return; } $assignerUser = $this->entityManager->getEntityById(User::ENTITY_TYPE, $assignerUserId); $entity = $this->entityManager->getEntityById($entityType, $entityId); if (!$entity) { return; } if (!$assignerUser) { return; } if (!$entity instanceof Entity) { return; } $this->loadParentNameFields($entity); if (!$entity->hasLinkMultipleField('assignedUsers')) { if ($entity->get('assignedUserId') !== $userId) { return; } } $emailAddress = $user->get('emailAddress'); if (!$emailAddress) { return; } /** @var Email $email */ $email = $this->entityManager->getNewEntity(Email::ENTITY_TYPE); $subjectTpl = $this->templateFileManager->getTemplate('assignment', 'subject', $entity->getEntityType()); $bodyTpl = $this->templateFileManager->getTemplate('assignment', 'body', $entity->getEntityType()); $subjectTpl = str_replace(["\n", "\r"], '', $subjectTpl); $recordUrl = rtrim($this->config->get('siteUrl'), '/') . '/#' . $entity->getEntityType() . '/view/' . $entity->getId(); $templateData = [ 'userName' => $user->get('name'), 'assignerUserName' => $assignerUser->get('name'), 'recordUrl' => $recordUrl, 'entityType' => $this->language->translateLabel($entity->getEntityType(), 'scopeNames'), ]; $templateData['entityTypeLowerFirst'] = Util::mbLowerCaseFirst($templateData['entityType']); $subject = $this->getHtmlizer()->render( $entity, $subjectTpl, 'assignment-email-subject-' . $entity->getEntityType(), $templateData, true ); $body = $this->getHtmlizer()->render( $entity, $bodyTpl, 'assignment-email-body-' . $entity->getEntityType(), $templateData, true ); $email->set([ 'subject' => $subject, 'body' => $body, 'isHtml' => true, 'to' => $emailAddress, 'isSystem' => true, 'parentId' => $entity->getId(), 'parentType' => $entity->getEntityType(), ]); try { $this->emailSender->send($email); } catch (Exception $e) { $this->log->error('EmailNotification: [' . $e->getCode() . '] ' . $e->getMessage()); } } private function getHtmlizer(): Htmlizer { if (!$this->htmlizer) { $this->htmlizer = $this->htmlizerFactory->create(true); } return $this->htmlizer; } private function loadParentNameFields(Entity $entity): void { $fieldDefs = $this->metadata->get(['entityDefs', $entity->getEntityType(), 'fields'], []); foreach ($fieldDefs as $field => $defs) { if (isset($defs['type']) && $defs['type'] == 'linkParent') { $entity->loadParentNameField($field); } } } }