Moderated Content Bulk Publish
admin/content ページからモデレートされたコンテンツの公開、非公開、アーカイブ、ピン留め、ピン解除の一括操作を提供します。
moderated_content_bulk_publish
インストール
composer require 'drupal/moderated_content_bulk_publish:^2.0'
概要
Moderated Content Bulk Publish モジュールは、コアでは利用できない重要な一括操作プラグインを提供することで、Drupal のコンテンツモデレーションシステムを拡張します。サイト管理者は /admin/content ビューからモデレートされたコンテンツに対してバッチ操作を直接実行できるようになります。
このモジュールは、Drupal コアの Workflow および Content Moderation モジュールが提供するエディトリアルワークフローを使用するコンテンツタイプとシームレスに連携するように設計されています。一括操作時にコンテンツアイテムのすべての翻訳を処理することで、多言語サイトを適切に処理します。
主な機能には、最新リビジョンの公開(下書きの場合でも)、アーカイブ状態から下書き状態への移行によるコンテンツの非公開化、コンテンツのアーカイブ、およびノードの固定(ピン留め/ピン解除)ステータスの管理が含まれます。また、誤った一括操作を防ぐためのオプションの確認ダイアログ、多言語サイト用のツールバー言語スイッチャー、翻訳の最新リビジョンが存在しない場合に適切にリダイレクトする 403 エラーハンドラーも提供します。
開発者向けには、公開またはアーカイブ操作が実行される前にカスタム検証ロジックを実装できる Hook API を提供しており、Safe Delete などのコンテンツ検証システムとの統合を可能にします。
Features
- 最新リビジョンが下書きの場合でも、モデレートされたコンテンツの最新リビジョンを一括公開
- すべての翻訳を適切に処理しながら、アーカイブ状態から下書き状態への遷移により現在のリビジョンを非公開化
- 一括操作でコンテンツの現在のリビジョンをアーカイブ
- 管理コンテンツ一覧からコンテンツを一括でピン留め(固定)およびピン解除
- 誤った変更を防ぐための admin/content ページでの一括操作時のオプションの確認ダイアログ
- ノード編集フォームからコンテンツを公開する際のオプションの確認ダイアログ
- 複数の言語が有効なサイト用のツールバー言語スイッチャー
- 翻訳の最新リビジョンが存在しない場合の適切な 403 リダイレクト処理
- 公開およびアーカイブ操作前のカスタム検証用 Hook API
- 一括操作時の Pathauto エイリアスの自動更新
- 一括公開時に元のリビジョン作成者情報を保持する設定可能なオプション
- 公開/非公開操作でのノードおよびメディアエンティティタイプの両方をサポート
Use Cases
複数の下書き記事を一度に公開する
コンテンツ編集者が複数の下書き状態の記事をレビューして承認した場合、/admin/content から「Publish latest revision」一括アクションを使用して一度にすべてを公開できます。チェックボックスを使用して記事を選択し、アクションドロップダウンから「Publish latest revision」を選択して適用するだけです。有効になっている場合は確認ダイアログが表示されます。
古いコンテンツを一括で非公開にする
季節限定のコンテンツやタイムリーな記事をオフラインにする必要がある場合、編集者は複数のアイテムを選択して「Unpublish current revision」アクションを使用できます。これにより、適切なワークフロー状態管理を確保しながら、コンテンツをアーカイブ状態から下書き状態に遷移させます。
注目セクション用の固定コンテンツの管理
定期的にローテーションが必要なホームページやセクションの注目コンテンツについて、編集者は「Pin Content」と「Unpin Content」アクションを使用して、各ノードを個別に編集することなく、一覧の上部に表示される記事をすばやく管理できます。
レガシーコンテンツのアーカイブ
コンテンツが役目を終えたが削除すべきではない場合、「Archive current revision」アクションにより複数のアイテムを一括アーカイブできます。これは、コンテンツを保存する必要があるが公開アクセスできないようにする法的コンプライアンスに特に有用です。
多言語コンテンツワークフロー
多言語サイトでソース言語のコンテンツが公開承認されると、モジュールはすべての翻訳を自動的に処理し、コンテンツのすべての言語バージョン間で一貫したモデレーション状態を確保します。
カスタム公開検証の実装
開発者は hook_moderated_content_bulk_publish_verify_publish を実装して、コンテンツが公開される前にカスタム検証を追加できます。例えば、リンク切れ、必須フィールド、コンプライアンス要件のチェックなどです。検証が失敗した場合、公開はブロックされ、エラーメッセージが表示されます。
Tips
- 確認ダイアログは、次のコマンドを実行することで自動テスト用に無効にできます:jQuery('*').unbind('click.moderated_content_bulk_publish')
- 「リビジョン作成者情報を保持する」が有効な場合、元の作成者と日付は保持され、一括公開ユーザーと日付がログメッセージに追加されます
- 多言語サイトでは、データベーストランザクションの問題を回避するために現在の言語が最初に処理され、他の言語は PHP シャットダウン中に処理されます
- モジュールは監査目的で、すべての一括操作を「moderated_content_bulk_publish」チャンネルで Drupal ログに記録します
- メディアエンティティは、ノードだけでなく、公開および非公開操作でサポートされています
Technical Details
Admin Pages 1
/admin/config/content/moderated-content-bulk-publish
確認ダイアログやツールバー言語スイッチャーオプションなど、Moderated Content Bulk Publish モジュールの設定を構成します。
権限 5
Hooks 2
hook_moderated_content_bulk_publish_verify_publish
一括公開前にコンテンツを検証およびバリデーションできるようにします。特定の条件が満たされない場合に公開を防ぐために使用できます。
hook_moderated_content_bulk_publish_verify_archived
一括アーカイブ前にコンテンツを検証およびバリデーションできるようにします。特定の条件が満たされない場合にアーカイブを防ぐために使用できます。
Troubleshooting 6
/admin/structure/views/view/content のコンテンツビューに「Node operations bulk」フィールドを追加し、フィールド設定から希望する操作を選択していることを確認してください。
ユーザーが適切な権限を持っていることを確認してください:「moderated content bulk publish」、「moderated content bulk unpublish」、「moderated content bulk pin content」、「moderated content bulk unpin content」、または「moderated content bulk archive」。
コンテンツタイプが Content Moderation でエディトリアルワークフローを使用するように設定されていることを確認してください。ワークフローに必要な状態(published、draft、archived)があり、遷移が正しく設定されていることを確認してください。
モジュールにはこれに対するハンドラーが含まれています。それでも発生する場合は、HandlerFor403AccessDenied イベントサブスクライバーが適切に登録されていることを確認してください。インストール後にキャッシュをクリアしてください。
/admin/config/content/moderated-content-bulk-publish のモジュール設定でダイアログが有効になっていることを確認してください。また、コンソールエラーをチェックして JavaScript が正しく読み込まれていることを確認してください。
Pathauto モジュールがインストールされ、適切に設定されていることを確認してください。モジュールはシャットダウン関数中に Pathauto のジェネレーターサービスを呼び出して、すべての翻訳のエイリアスを更新します。
Security Notes 3
- すべての一括操作は特定の権限を必要とし、実行前にユーザーアクセスを検証します
- モジュールは、ユーザーがモデレーション状態を編集できるかどうかを確認する際に Content Moderation のアクセス制御を尊重します
- フック実装からの入力は、メッセージに表示される前に mb_convert_encoding を使用してサニタイズされます