Install

Works with Drupal: ^10.2 || ^11

Using Composer to manage Drupal site dependencies

Alternative installation files

Download tar.gz 10.71 MB
MD5: 446508f1bb6aa19c5eddcdfcbfecfe4e
SHA-1: b8937b0a2f47787fd0916223c42abbbde9ac9c9d
SHA-256: 0b38e3a6fe8ebb18237d765841fda0e12f449d331336ec9dfd08bb8623164be7
Download zip 10.78 MB
MD5: 811bfc06ee358b2c2dc4294930504dca
SHA-1: 27fceae3210e996c8f1a36a846d87f340e779f1e
SHA-256: 5bffa3b01a6f82220e15d430f408193e6209540a98927fbd15688e1cc904708b

Release notes

Bug fixes

  • #3614332: On multilingual sites where the media source field is translatable, only the default translation's PDF was ever checked. Translated files were skipped by upload-time checks, by drush pa:check (bulk and single-item), and by the pdfa11y_check queue worker, and showed "Accessibility: Not checked" on the translated media page while the run summary counted the item as checked. Every code path now resolves the distinct files referenced by any translation of a media item and checks each one. A file shared by several translations is analyzed once.
    • Upload and save hooks check the files of all translations on insert. On update, each translation is compared with the same translation on the original entity, so saving a French translation re-checks only the French file.
    • drush pa:check reports per file. The run summary counts files ("Checked N files"), and each summary line shows the file ID and the language codes that reference it, for example mid 42 [document] fid 108 (fr) – PASS (Rapport). The table format prints one table per file.
    • --missing-only now converges for translated items. Previously a media item whose translation's file had never been checked was reselected on every pass and its default-language file re-analyzed each time.
    • Report page (/media/{id}/accessibility) shows one results block per file, headed with the file name and languages when a media item has more than one. "Run accessibility check" re-checks every translation's file.
    • Admin Views report: the Media report link field names and links to the translation that references the row's file, the Referencing entity field links to the matching translation, and the Pass count / Fail count fields sum across all of a media item's files instead of reporting whichever file loaded last.

Upgrade notes

No schema or configuration changes.

CSV and JSON output of drush pa:check gain a langcode column. It is appended as the last column (comma-separated when a file is shared by several translations), so scripts that read CSV columns by position keep working; scripts that validate the header row or column count need updating.

Multilingual sites should run a backfill. Translated files that were never checked have no stored results, so drush pa:check --bundle=BUNDLE --missing-only (or --missing-only --queue followed by drush queue:run pdfa11y_check) will pick them up without re-checking files that already have results. Expect more work than the media count suggests, because the run is now counted per file. Sites with a single language are unaffected.

Custom Views that aggregate over the Media relationship on the results table join once per translation and will double-count translated items. Prefer the per-file fields (Overall status, Failing issues list) or group by file ID. The shipped report is unaffected.

Known issues

The advisory next-major (Drupal 13.x-dev) CI jobs report new core deprecations unrelated to this release, including drupal_static_reset(), annotation-based Views plugin discovery, and implicit transaction commits. They are tracked in #3614333, which also proposes raising the minimum core version to 10.3. Drupal 10.3+ and 11 are unaffected.

Created by: joshuami
Created on: 7 Oct 2026 at 23:59 UTC
Last updated: 8 Oct 2026 at 00:00 UTC
Bug fixes

Other releases