Drupal8, 9のWorkflowsのモデレーション状態をプログラム側で取得する

著者
Kato83
作成日
2020/08/10 - 18:31
更新日
2023/03/02 - 13:48

Drupal 8, 9でワークフローを使用するとなると、Drupal標準の WorkflowsWorkbench moderationLightning WorkflowWorkflow の4択から基本的に選ぶことになると思います~~WorkflowsとWorkflow紛らわしい~~。

個人的には、Drupalのコア機能にあるWorkflowsがオススメなのですが、機能拡張するための方法が書かれている記事が殆どないのでちょっと調べてみました。

<?php
function my_module_content_moderation_state_presave(Drupal\content_moderation\Entity\ContentModerationState $entity){
  // ユーザーID
  \Drupal::logger('log')->debug(var_export($entity->get('uid')->getValue(),true), []);
  // ワークフローシステム内部名称
  \Drupal::logger('log')->debug(var_export($entity->get('workflow')->getValue(),true), []);
  // dfaft, archives, published等の値
  \Drupal::logger('log')->debug(var_export($entity->get('moderation_state')->getValue(),true), []);
  // ワークフローを適用しているエンティティのタイプ(基本的にはnodeだと思って良い
  \Drupal::logger('log')->debug(var_export($entity->get('content_entity_type_id')->getValue(),true), []);
  // コンテンツID (Node ID)
  \Drupal::logger('log')->debug(var_export($entity->get('content_entity_id')->getValue(),true), []);
  // コンテンツリビジョンID
  \Drupal::logger('log')->debug(var_export($entity->get('content_entity_revision_id')->getValue(),true), []);
}

module_content_moderation_state_presave でワークフローのモデレーション状態を取得できる。

これによって、Workflowsでコンテンツを承認待ちの状態にしたらメールを送信だったり、Slackに通知を送るなどのカスタマイズを行えるようになる。

Workbench Moderationもメール送信を行えるようになるモジュールなどがあるのですが、Workbench Moderation自体がちょっと安定感に欠けるなと思える挙動をそれなりの頻度で発生していたので、あまり使いたくない……

Category