コンテンツの管理には、以下のモジュールを使用しています。現在、コンテンツ承認者の役割を持つ5人がいて、状態遷移が発生すると、全員にメールが送信されます。 5人の承認者のうちの2人だけに承認が必要な特定のコンテンツタイプについて、モデレーションの移行に関する電子メールアラートを送信する必要があります。
モデレート状態を変更するときに、選択したユーザーのセットにメールを送信するにはどうすればよいですか?
推測される結果:
コンテンツエディターは、レビューの準備ができているページにマークを付けると、役割に関係なく、1人以上のユーザーを手動で選択して電子メールアラートを送信できます。
有効なモジュール:
@Matoeilの回答によれば、おそらくルールでこれを行うことができます。
エンティティ参照フィールドを5つの値(または必要に応じてそれ以上)に制限して追加し、ビューを使用して、役割に基づいて使用可能なオプション(ユーザー)を制限できます。次に、ルールを使用して、参照先のユーザーにメールを送信できます。
あなたはおそらくルールモジュールを使うことができます
あるいは、カスタムモジュールを作成し、これからインスパイアできます。これは、コアコンテンツ管理モジュールで使用されます。
use \Drupal\user\Entity\User;
/**
*
*
* Envoie de mail en fonction des transitions le modération de contenu.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
*/
function my_module_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
if ($entity->getEntityTypeId() !== 'content_moderation_state') {
return;
}
$article_id = $entity->get('content_entity_id')->getString();
$article = \Drupal\node\Entity\Node::load($article_id);
if ($article->bundle() !== 'article') {
return;
}
global $base_url;
$article_title = $article->get('title')->getString();
$article_url = $base_url . "/node/" . $article->get('nid')->getString();
$author_name = $article->getOwner()->get('field_cn_ldap')->getString();
$author_email = $article->getOwner()->getEmail();
$current_user_uid = \Drupal::currentUser()->id();
$current_user_name = \Drupal\user\Entity\User::load($current_user_uid)
->get('field_cn_ldap')
->getString();
$is_author = ($current_user_name == $author_name);
$uids = \Drupal::entityQuery('user')
->condition('status', 1)
->condition('roles', 'redacteur_en_chef')
->execute();
;
$users = User::loadMultiple($uids);
$emails_redacteur_en_chef = [];
foreach ($users as $user) {
$emails_redacteur_en_chef[] = $user->getEmail();
}
$emails_redacteur_en_chef = implode(',', $emails_redacteur_en_chef);
$moderation_state = $entity->get('moderation_state')->getString();
$moderation_state_original = '';
if ($entity->original) {
$moderation_state_original = $entity->original->get('moderation_state')
->getString();
}
$is_transition_change = ($moderation_state !== $moderation_state_original);
include 'includes/notification/messages.php';
include 'includes/notification/titles.php';
$send_to = $author_email;
$params['node_title'] = $title_mod;
$params['message'] = $message_same_state;
$send = FALSE;
switch ($moderation_state) {
case 'draft':
if (!$is_transition_change && !$is_author) {
$send = TRUE;
}
break;
case 'relecture':
if (!$is_transition_change && !$is_author) {
$send = TRUE;
}
elseif ($is_transition_change) {
$send_to = "[email protected]";
$params['node_title'] = $title_prop;
$params['message'] = $message_prop;
$send = TRUE;
}
break;
case 'relecture1':
if (!$is_transition_change && !$is_author) {
$send = TRUE;
}
elseif ($is_transition_change) {
$send_to = "[email protected]";
$params['node_title'] = $title_relec1;
$params['message'] = $message_relec1;
$send = TRUE;
}
break;
case 'relecture2':
$send_to = $emails_redacteur_en_chef;
$params['node_title'] = $title_relec2;
$params['message'] = $message_relec2;
$send = TRUE;
break;
case 'published':
if (!$is_transition_change) {
$send_to .= ',';
$send_to .= $emails_redacteur_en_chef;
$send = TRUE;
}
else {
$send_to = "[email protected]";
$params['node_title'] = $title_pub;
$params['message'] = $message_pub;
$send = TRUE;
}
break;
case 'maj':
$send_to = "[email protected]";
$params['node_title'] = $title_maj;
$params['message'] = $message_maj;
$send = TRUE;
break;
default:
break;
}
if ($send) {
$mailManager = \Drupal::service('plugin.manager.mail');
$module = "amu_dud_rules";
$key = 'state_changed_action';
$to = $send_to;
$langcode = \Drupal::currentUser()->getPreferredLangcode();
$result = $mailManager->mail($module, $key, $to, $langcode, $params, NULL, $send);
if ($result['result'] !== TRUE) {
drupal_set_message(t('There was a problem sending notifications.'), 'error');
}
else {
drupal_set_message(t("A notification has been sent to $to"));
}
}
}
/**
* Implements hook_mail().
*/
function my_module_mail($key, &$message, $params) {
$options = [
'langcode' => $message['langcode'],
];
switch ($key) {
case 'state_changed_action':
//$message['from'] = \Drupal::config('system.site')->get('mail');
$from = '[email protected]';
$message['from'] = $from;
$message['headers']['From'] = $from;
$message['headers']['Sender'] = $from;
$message['headers']['Return-Path'] = $from;
$message['subject'] = t('@title', ['@title' => $params['node_title']], $options);
$message['body'][] = $params['message'];
break;
}
}