Issue #3586353: Add Scheduler to CCC Extensions page.

Description

Scheduler was made optional in #3577429 but was never listed on the Extensions page at /admin/config/ai/context/settings/extensions.

This MR adds Schedule context items as the third row in the General section. It lists Scheduler and Scheduler content moderation integration together on one line (comma-separated via core's item_list comma-list theme), since both are required for scheduled publishing of moderated context items. Status shows Installed only when both modules are enabled, Partially installed when only one is enabled, and Not installed when neither is enabled.

While adding that row, the extensions controller was refactored so every extension uses the same modules array shape (one or more modules per feature). Module links use link render arrays inside an item_list; description links use $this->t() with @link placeholders fed by Link::toString().

Testing instructions

  1. Enable AI Context and visit /admin/config/ai/context/settings/extensions.
  2. Confirm the General section includes Schedule context items as the third row, alphabetically after Diff and Dynamic Entity Reference.
  3. Confirm the Module column lists Scheduler and Scheduler content moderation integration as comma-separated links on one line (not "and").
  4. Confirm Status is Not installed when neither Scheduler module is enabled.
  5. Enable only Scheduler (or only Scheduler Content Moderation Integration); confirm the row shows Partially installed.
  6. Enable both Scheduler and Scheduler Content Moderation Integration; confirm the row shows Installed.
  7. Confirm all module and description links render as clickable <a> tags (not raw HTML).
  8. Confirm existing rows still render correctly:
    • Diff and Dynamic Entity Reference (single module link each)
    • Document Loader: Context File Importer with (submodule) suffix inline after the link
    • Document Loader: Webpage importer row and Importers section intro/requirement text
cd web/modules/contrib/ai_context
./lint.sh
vendor/bin/phpunit --filter AiContextExtensionsControllerTest

Checklist

  • MR title uses Issue #3586353: … format
  • Description includes Closes #3586353
  • Self-review completed
  • Unit tests updated (AiContextExtensionsControllerTest)
  • Testing instructions written and verified locally
  • No breaking API or hook changes

Not applicable:

  • No post-merge steps required beyond normal cache clear
  • Documentation updated (not needed — admin UI only, no new user-facing docs)

AI Compliance

  • AI Assisted Code
  • AI Generated Code
  • Vibe Coded

Closes #3586353 (closed)

Edited by Kristen Pol

Merge request reports

Loading