Scheduler Content Moderation Integration

Scheduler モジュールと Drupal の Content Moderation ワークフローシステム間の統合を提供し、スケジュールされたモデレーション状態の遷移を可能にします。

scheduler_content_moderation_integration
26,603 sites
32
drupal.org

インストール

Drupal 11, 10 v3.0.4
composer require 'drupal/scheduler_content_moderation_integration:^3.0'
Drupal 9 v2.0.0
composer require 'drupal/scheduler_content_moderation_integration:^2.0'

概要

Scheduler Content Moderation Integration (SCMI) は、Scheduler モジュールと Drupal コアの Content Moderation システムを橋渡しするサブモジュールです。モデレーションワークフローを使用しながらコンテンツの公開・非公開をスケジュールする必要がある場合、このモジュールが不可欠です。

このモジュールは、モデレートされた Entity に「Publish state(公開状態)」と「Unpublish state(非公開状態)」という2つの新しいフィールドを追加します。これらのフィールドにより、コンテンツ編集者はスケジュールされた公開・非公開の日時に達した際に、コンテンツがどのモデレーション状態に遷移すべきかを指定できます。例えば、典型的な「Draft(下書き)-Published(公開)-Archived(アーカイブ)」ワークフローでは、編集者は Draft 状態でコンテンツを作成し、将来の日付に自動的に Published 状態に遷移するようスケジュールできます。

スケジュールされた時刻になり cron が実行されると、モジュールは標準の公開・非公開アクションではなく、モデレーション状態の遷移を処理します。これにより、スケジュールされた操作中もワークフローのルール、権限、遷移の検証が尊重されます。

Features

  • Scheduler と Content Moderation の両方をサポートするすべての Entity タイプに「Publish state」と「Unpublish state」フィールドを追加
  • 無効な状態変更を防ぐため、ワークフローで許可された遷移に対してスケジュールされた遷移を検証
  • スケジュールされた遷移に対するユーザー権限を検証し、ユーザーがアクセス権を持つ遷移のみをスケジュールできることを保証
  • Entity の現在のモデレーション状態からの有効な遷移に基づいて、状態オプションを動的に生成
  • Node、Media、および Scheduler Plugin を持つその他の Entity タイプを含む複数の Entity タイプをサポート
  • 現在のユーザーに有効なモデレーション遷移がない場合、スケジューリングフィールドを非表示
  • Scheduler の即時公開機能を通じた即時公開を、適切なモデレーション状態の処理とともにサポート
  • 追加設定なしで既存の Content Moderation ワークフローとシームレスに統合

Use Cases

下書きコンテンツの将来の公開をスケジュール

編集者がニュース記事を作成し、Draft として保存します。来週月曜日の午前9時に公開したいと考えています。スケジューリングオプションを使用して、「Publish on」の日時を月曜日午前9時に設定し、「Publish state」として「Published」を選択します。その時間後に cron が実行されると、コンテンツは自動的に Draft から Published に遷移します。

期間限定コンテンツの自動アーカイブをスケジュール

プロモーションページを1週間だけ公開する必要があります。編集者はスケジュールされた公開と非公開の両方を設定します:「Publish on」をキャンペーン開始日に設定し「Publish state」を Published に、「Unpublish on」をキャンペーン終了日に設定し「Unpublish state」を Archived に設定します。コンテンツは手動介入なしで自動的に公開され、アーカイブされます。

コンテンツ更新を事前に準備

既存の Published 記事を特定の時間に更新する必要があります。編集者はコンテンツを編集し、変更を加え、現在の状態を Draft に設定します(新しい下書きリビジョンを作成)。Draft を希望の時間に Published に遷移するようスケジュールします。元の公開バージョンはスケジュールされた時間まで表示され続け、その時点で新しいリビジョンが公開バージョンになります。

複数段階の公開ワークフロー

編集ワークフロー(Draft -> Review -> Published -> Archived)を持つ組織では、コンテンツはスケジュール前に承認が必要です。編集者は Draft でコンテンツを作成し、承認のために Review に移動します。承認されると、Published への遷移をスケジュールできます。モジュールは Review から Published への遷移がワークフローで有効であることを検証します。

メディアアセットのスケジューリング

モデレーションワークフローの一部であるメディアアイテム(画像、動画、音声)もスケジュールできます。例えば、プロモーション動画をキャンペーン開始時に利用可能(Published 状態)になるようスケジュールし、その後自動的にアーカイブされるよう設定できます。

Tips

  • モジュールは有効な状態遷移がない場合、Scheduler の日付フィールドを自動的に非表示にし、ユーザーの混乱を防ぎます
  • 'use [workflow] transition [transition]' 権限を使用して、どのユーザーが特定の遷移をスケジュールできるかを制御できます
  • 公開と非公開の両方を一緒にスケジュールできます - unpublish_state のオプションは、選択された publish_state から到達可能な状態に基づいて計算されます
  • モジュールはあらゆるカスタム Content Moderation ワークフローで動作します - デフォルトの 'editorial' ワークフローに限定されません
  • テスト用に、システム cron を待つ代わりに 'drush scheduler:cron' を使用してスケジュールされた遷移を即座にトリガーできます

Technical Details

Hooks 9
hook_scheduler_publish_process

モデレートされた Entity のスケジュールされた公開を処理します。標準の Scheduler 公開アクションの代わりに、この hook は Entity をスケジュールされた publish_state に遷移させます。処理された場合は 1、エラー時は -1、Scheduler に通常通り処理させる場合は 0 を返します。

hook_scheduler_unpublish_process

モデレートされた Entity のスケジュールされた非公開を処理します。Entity をスケジュールされた unpublish_state(例:'archived' や 'draft')に遷移させます。処理された場合は 1、エラー時は -1、Scheduler に通常通り処理させる場合は 0 を返します。

hook_scheduler_hide_publish_date

公開に利用可能な有効なモデレーション遷移がない場合、Scheduler の publish_on 日付フィールドを非表示にします。これにより、ユーザーがどの公開状態にも遷移できない場合に公開日を設定することを防ぎます。

hook_scheduler_hide_unpublish_date

非公開に利用可能な有効なモデレーション遷移がない場合、Scheduler の unpublish_on 日付フィールドを非表示にします。これにより、ユーザーがどの非公開状態にも遷移できない場合に非公開日を設定することを防ぎます。

hook_entity_base_field_info

Scheduler Plugin によってサポートされ、かつモデレート可能なすべての Entity タイプに対して publish_state と unpublish_state 基本フィールドを定義します。これらのフィールドはスケジュールされた遷移のターゲットモデレーション状態を保存します。

hook_entity_access

ユーザーにスケジュールされた遷移の権限がない場合、更新アクセスを拒否します。ユーザーが publish_state と unpublish_state フィールドで指定された遷移を実行できることを検証します。

hook_form_alter

Entity フォームの Scheduler 設定グループに publish_state と unpublish_state フィールドを添付します。また、Entity タイプでスケジュールされた公開・非公開が有効でない場合、これらのフィールドを非表示にします。

hook_entity_presave

Scheduler によって Entity の公開ステータスが false に設定されている場合、公開モデレーション状態が保存されることを防ぎます。これにより、モデレーション状態と Entity の公開ステータス間の整合性が保証されます。

hook_modules_installed

Scheduler Plugin を持つ新しいモジュールがインストールされると、対応する Entity タイプのデータベーステーブルに publish_state と unpublish_state フィールドを自動的に追加します。

Troubleshooting 6
「Publish state」と「Unpublish state」フィールドが Entity 編集フォームに表示されない

以下を確認してください:1) Entity タイプの Scheduler 設定でスケジューリングが有効になっている、2) Entity タイプが Content Moderation ワークフローに追加されている、3) 現在のユーザーが少なくとも1つのワークフロー遷移を使用する権限を持っている。ユーザーに有効な遷移がない場合、フィールドは意図的に非表示になります。

スケジュールされたコンテンツが期待した状態に遷移しない

cron が適切に実行されていることを確認してください。Entity の現在の状態からスケジュールされた状態への遷移がワークフロー設定で有効であることを確認してください。スケジュールされた処理中のエラーについて dblog を確認してください。

検証エラー:「The scheduled publishing state is not a valid transition」

選択された publish_state には Entity の現在のモデレーション状態から到達できません。現在の状態とターゲット状態の間に遷移が存在することをワークフロー設定で確認してください。

検証エラー:「You do not have access to transition from X to Y」

現在のユーザーに 'use [workflow] transition [transition_id]' 権限がありません。ユーザーのロールに適切な遷移権限を付与してください。

ステータスレポートに「The publish state field needs to be uninstalled」と表示される

これは Entity タイプがモデレーションから削除された場合に発生します。update.php にアクセスするか 'drush updb' を実行してアップデートフックを実行してください。または、以下を実行してください:drush ev '_scheduler_content_moderation_integration_remove_fields()'

状態フィールドにオプションが表示されない(「None」のみ利用可能)

これは Entity の現在の状態から有効な遷移が存在しない場合に発生します。ワークフローで現在の状態から公開・非公開状態への遷移が定義されていること、およびユーザーがそれらの遷移の権限を持っていることを確認してください。

Security Notes 3
  • モジュールは保存時に遷移権限を検証します - ユーザーは実行する権限のない遷移をスケジュールできません
  • スケジュールされた遷移を持つ Entity をロードする際にもアクセスチェックが実行され、権限昇格を防ぎます
  • モジュールは既存の Content Moderation アクセス制御を尊重し、ワークフローの制限をバイパスしません