Есть в Drupal 8 такой механизм - действия (actions). Он представляет собой систему плагинов, в каждом из которых описывается логика, которая выполняется при выполнении действия. Также есть настраиваемые действия, которые связываются с конфигурационными сущностями.

В ядре имеется несколько предопределённых типой действий, одним из которых является действие отправки электронной почты - EmailAction. С помощью административного интерфейса можно создать своё действие данного типа и задать содержимое письма. Для удобства кастомизации при настройке разрешается использование функционала токенов, однако, как ни странно, "из коробки" заменяются только токены для нод.

Причина такого поведения в следующем коде (для замены токенов используется то, что лежит в свойстве configuration):

/**
 * {@inheritdoc}
 */
public function execute($entity = NULL) {
  if (empty($this->configuration['node'])) {
    $this->configuration['node'] = $entity;
  }
  ...
}

Если нужны не только ноды, то добавить данные для замены токенов можно следующим образом:

/** @var \Drupal\system\ActionConfigEntityInterface $entity */
$action = $entity->getPlugin();
 
if ($action instanceof EmailAction) {
  // Хотим использовать токены для пользователя.
  $data = ['user' => $account];
  // Добавляем данные в конфигурацию плагина.
  $config = $action->getConfiguration();
  $action->setConfiguration($config + $data);
  // Выполняем действие.
  $action->execute();
}
Андрей Тымчук

Добавить комментарий