Scheduled Transitions
コンテンツのリビジョンのモデレーション状態を指定した日時に変更するスケジュールを設定できます。
scheduled_transitions
インストール
composer require 'drupal/scheduled_transitions:^2.8'
composer require 'drupal/scheduled_transitions:^2.7'
概要
Scheduled Transitionsは、DrupalのContent Moderationシステムと統合する強力なワークフロー自動化Moduleです。コンテンツ編集者や管理者がEntityリビジョンの状態変更を事前に設定した時間にスケジュールし、公開ワークフロープロセスを自動化できます。
このModuleは、スケジュールされたTransitionを保存するためのカスタムEntityタイプを作成し、それらを管理するための包括的なUIを提供します。各スケジュールされたTransitionには、対象Entity、リビジョン、新しいモデレーション状態、実行日、スケジュールしたユーザーが記録されます。Transitionは特定のリビジョンを対象にすることも、実行時に自動的に最新のリビジョンを使用することもできます。
処理はDrupalのQueueシステムを通じて2段階のプロセスで行われます。まず、準備ができたTransitionがQueueに追加され、次にQueueワーカーが実際の状態変更を実行します。これはCronで自動化するか、Drushコマンドを使用して手動で管理できます。
このModuleは、Transitionされるリビジョンの言語を追跡することで多言語サイトをサポートし、古いリビジョンを公開した後に保留中のドラフトを再作成するような複雑なシナリオも処理します。
Features
- 任意のEntityリビジョンを指定した日時に異なるモデレーション状態にTransitionするようスケジュール
- 最新リビジョンの動的スケジューリングをサポート - 実行時点での実際の最新リビジョンが使用される
- 履歴リビジョンの公開後に保留中のドラフトを再作成し、未公開の作業を保持するオプション
- EntityタイプおよびバンドルごとにスケジュールされたTransitionの有効化設定
- Entityタイプ/バンドルごとに表示、追加、再スケジュールの権限を生成する動的権限システム
- Transition詳細のToken対応を含むカスタマイズ可能なリビジョンログメッセージテンプレート
- 有効化時にスケジュールされたTransitionごとにユーザーがリビジョンログメッセージを上書き可能
- 有効化されたEntityの全スケジュール済みTransitionを表示するEntityタブ統合
- Views統合を備えたサイト全体のスケジュール済みTransitionを一覧表示する管理インターフェース
- モーダルダイアログで保留中のTransitionの実行時間を変更する再スケジュール機能
- 2段階のQueue処理:ジョブ作成と実行を分離してきめ細かな制御が可能
- 作成されたリビジョンへのリンクを含むオプション付きで処理済みTransitionの保持を設定可能
- ホストEntityまたはリビジョンが削除されたときにスケジュール済みTransitionを自動クリーンアップ
- アクセスチェックをupdateなどの標準Entityオペレーションに委譲するミラーオペレーション機能
- リビジョンログやその他の統合用にTransition状態情報を提供するTokenシステム
- どのリビジョンをTransitionするかを決定するカスタムロジックを可能にするイベントシステム
- Queueジョブ作成を手動でトリガーするDrushコマンド
- 状態ラベルとリビジョンリンク用のカスタムFieldハンドラを備えた完全なViews統合
Use Cases
スケジュール公開
特定の日時にコンテンツを公開するようスケジュールします。Nodeをドラフト状態で作成し、希望の時間に公開状態に移行するスケジュールされたTransitionを追加します。スケジュールされた時間が来ると、Moduleは自動的に公開リビジョンを作成します。
期間限定コンテンツ
後で自動的に非公開になるコンテンツを公開します。コンテンツを公開した後、将来の日付にアーカイブまたは非公開状態に移行するスケジュールされたTransitionを追加します。イベント告知、プロモーション、季節限定コンテンツに便利です。
エンバーゴ/解禁ワークフロー
特定の時間にリリースされるべきエンバーゴ下のコンテンツを管理します。エンバーゴされたコンテンツをカスタムの「エンバーゴ」状態に保存し、エンバーゴが解除されたときに公開へのTransitionをスケジュールします。複数のTransitionを連鎖させることができます。
コンテンツレビューサイクル
コンテンツをレビュー状態を通じて自動的に移動します。定期的な間隔で公開から「要レビュー」状態へのTransitionをスケジュールし、コンテンツが定期的にレビューされ更新されるようにします。
ロールバックスケジューリング
履歴リビジョン機能を使用して、以前のリビジョンへの復帰をスケジュールします。最新ではなく特定のリビジョンを選択してTransitionし、問題のある変更のスケジュールされたロールバックに便利です。
多言語公開
言語固有のTransitionを独立してスケジュールします。各翻訳は独自のスケジュールされたTransitionを持つことができ、地域の要件に基づいて異なる言語を異なる時間に公開できます。
公開時のドラフト保持
新しいドラフトが存在する状態で古いリビジョンを公開する場合、「保留中のリビジョンを再作成」を有効にすると、新しい公開バージョンの上にドラフトを自動的に復元し、作業中の内容を保持します。
Tips
- 正確なスケジューリング精度を得るには、「drush scheduled-transitions:queue-jobs」と「drush queue:run scheduled_transition_job」を1〜5分ごとに実行してください
- 特定のリビジョンではなく、実行時点の現在の状態にTransitionを適用したい場合は「最新リビジョン」オプションを使用してください
- 古いリビジョンを公開する際にドラフト作業を保持するには「保留中のリビジョンを再作成」を有効にしてください
- よりシンプルな権限管理のためにオペレーションを「update」にミラーしてください - 編集アクセス権を持つユーザーは自動的にスケジュールされたTransitionへのアクセスを取得します
- よりカスタマイズ可能な管理Viewsには、/admin/content/scheduled-transitionsにあるオプションのViewsベースの一覧を使用してください
- 処理済みTransitionは監査目的で保持できます - 設定で保持期間を構成してください
- リビジョンログでのToken対応は明確な監査証跡の作成に役立ちます - ワークフローに合わせてテンプレートをカスタマイズしてください
- イベントシステムはA/Bテストや条件付き公開などの高度なユースケースのためのカスタムリビジョン選択ロジックを可能にします
Technical Details
Admin Pages 5
/admin/config/workflow/scheduled-transitions
スケジュールされたTransitionを使用できるEntityタイプとバンドルを設定し、自動化オプションを設定し、リビジョンログメッセージテンプレートをカスタマイズし、処理動作を構成します。
/admin/content/scheduled-transitions
サイト全体のすべてのスケジュールされたTransitionの管理一覧。対象Entity、スケジュール日、Transitionの再スケジュールや削除のオペレーションを表示します。「view all scheduled transitions」権限が必要です。
{entity_canonical}/scheduled-transitions
現在のEntityのすべてのスケジュールされたTransitionを表示するEntity固有のタブ。リビジョン情報、状態変更、スケジュール日、処理状態を表示します。スケジュールされたTransitionが有効な任意のEntityで利用可能です。
{entity_canonical}/scheduled-transitions/add
Entityの新しいスケジュールされたTransitionを作成するフォーム。ソースリビジョン(または最新)の選択、Transition/目標状態の選択、実行日の設定ができます。モーダルダイアログとして開きます。
/admin/scheduled-transition/{scheduled_transition}/reschedule
既存のスケジュールされたTransitionの実行日時を変更するモーダルフォーム。
権限 5
Hooks 1
hook_scheduled_transitions_new_revision
従来のhookではなく、Symfonyイベントサブスクライバーパターンを使用します。リビジョン選択をカスタマイズするにはScheduledTransitionsEvents::NEW_REVISIONをサブスクライブしてください。
Drush Commands 2
drush scheduled-transitions:queue-jobs
処理準備ができているすべてのスケジュールされたTransition(transition_on日が過ぎたもの)のQueueアイテムを作成します。重複処理を防ぐためにTransitionはロックされます。
drush queue:run scheduled_transition_job
スケジュールされたTransition Queueを処理します。これはqueue-jobsで作成されたアイテムを実行するCore Drushコマンドです。
Troubleshooting 6
Cronが頻繁に実行されていることを確認してください。設定で「Cronでスケジューリングジョブを作成」が有効になっているか確認するか、「drush scheduled-transitions:queue-jobs」の後に「drush queue:run scheduled_transition_job」を手動で実行してください。transition_on時間が過ぎていることを確認してください。
Entityタイプ/バンドルが設定で有効になっていることを確認してください。ユーザーが適切な「view scheduled transitions {type} {bundle}」権限を持っているか確認してください。ミラーオペレーションを使用している場合は、ユーザーがミラーされたオペレーションの権限(通常は「update」)を持っていることを確認してください。
選択したワークフローTransitionがソースリビジョンの現在の状態に対して有効であることを確認してください。Transitionが作成された後にワークフローまたは状態が変更されていないか確認してください。
/admin/people/permissionsで、有効なEntityタイプ/バンドルに対して少なくとも1つのロールに「view scheduled transitions」と「add scheduled transitions」権限を付与してください。
TransitionはQueueに追加されると30分間ロックされます。処理が失敗した場合は、ロックが期限切れになるのを待つか、データベースのlocked_on Fieldを手動で更新してください。処理エラーについてログを確認してください。
リビジョンログの状態名は実行時に決定されます。スケジュール後にワークフロー状態の名前が変更された場合、新しい名前が使用されます。状態が削除された場合はフォールバックメッセージが表示されます。
Security Notes 4
- 「administer scheduled transitions」権限は制限付きアクセスであり、信頼できる管理者にのみ付与する必要があります
- Transition実行はワークフローTransition権限を尊重します - ユーザーは実行が許可されているTransitionのみをスケジュールできます
- ミラーオペレーションはEntityアクセスチェックに委譲し、既存のアクセス制御パターンを維持します
- スケジュールされたTransitionは、ホストEntityまたはリビジョンが削除されると自動的に削除され、孤立したデータを防ぎます