Search by

drupal / agora_transparency

Drupal-Infrastructure

A transparency and open government site template for Drupal CMS, for councils, public bodies and organisations that publish accountability information.

Package info

git.drupalcode.org/project/agora_transparency.git

Type:drupal-recipe

pkg:composer/drupal/agora_transparency

Statistics

Installs: 5

Dependents: 0

Suggesters: 0

1.0.3 2026-11-11 13:07 UTC

This package is auto-updated.

Last update: 2026-11-11 19:39:25 UTC


README

Ágora Transparency (Ágora for short) is a site template for Drupal CMS for transparency and open government portals: local councils, public bodies, foundations and other organisations that publish what they decide, what they spend and who works for them.

The Ágora front page as the template installs it: the masthead, the search block, the key figures for the fictional municipality of Fuentelclaro, and the register of published records beneath them.

Features

  • A working Drupal CMS site: administration, media, SEO, privacy and consent, authentication and HTML email.
  • Its own front-end theme, drupal/agora_theme, which this template requires at ^1.2.5 and makes the default theme.
  • Six registers (documents, people, contracts, agreements, grants and datasets), each with a table of records that can be filtered and downloaded, plus a listing across all of them and a document library.
  • A Canvas landing page as the home page, carrying five blocks from the template's own views. The service-area cards on /publications filter the register beside them.
  • Configuration auditing with Config Guardian: weekly snapshots kept for 400 days, and a read-only Governance auditor role.
  • Demonstration content: 60 records across six registers, with generated PDFs and CSV files.

Not included in this release: freedom-of-information requests, an editorial review workflow of the template's own (records use Drupal CMS's draft and published states), and an AI assistant.

Demonstration content

The demonstration content belongs to Fuentelclaro, a fictional Spanish municipality; every person, figure, contract and document in it is invented. Its registers follow Spanish transparency law, which is why it publishes budget chapters, a by-law, an equality plan and declarations of assets for elected members. It is written in English: a site template cannot ship interface translations, so a Spanish site is set up after installation with the language and config_translation modules.

The package has 224 files in content/ and 133 config objects in config/. The licence and source of every image, PDF and CSV file are listed in content/MEDIA-LICENCES.md, and the invented people in content/PEOPLE.md.

Accessibility

The public pages of a clean install conform to WCAG 2.2 level AA, by an evaluation made on 2026-10-28. The administrative interface and the pages that need an account are outside that claim. The method, the results and what was not measured are in ACCESSIBILITY.md, which also describes the automated accessibility tests that run on every change.

The site ships an accessibility statement at /accessibility-statement. Its sections marked "To be completed" are for the organisation running the site.

Requirements

  • A Drupal CMS 2.2 or later project, on Drupal core 11.4 or later; the installation steps below create one.
  • PHP and Composer versions as required by Drupal CMS. This template adds no constraint of its own.
  • DDEV 1.25.0 or later for the commands below. Drupal CMS 2.2.3 and later ship a .ddev/config.yaml that requires it.

Installation

mkdir agora-site
cd agora-site
ddev config --project-type=drupal11 --docroot=web
ddev start
ddev composer create-project --no-install drupal/cms
ddev composer install
ddev composer require drupal/agora_transparency

Create the project with --no-install and run composer install separately: with a one-step create-project, Drupal CMS 2.2.0 rewrites a constraint in the project's composer.json that makes the require fail.

Then install the site, either in the browser (ddev launch, and choose Ágora at the site template step) or with Drush:

ddev drush site:install --site-name="Your institution" --yes recipes/agora_transparency

Without --site-name, Drush names the site "Drush Site-Install".

Installing from a clone

To install from a clone of this repository instead of a release, start from drupal/recommended-project, add the clone as a Composer path repository, and then install the site as above:

mkdir agora-site
cd agora-site
ddev config --project-type=drupal11 --docroot=web
ddev config --web-environment-add="COMPOSER_MIRROR_PATH_REPOS=1"
ddev start
ddev composer create-project --no-install drupal/recommended-project
git clone https://git.drupalcode.org/project/agora_transparency.git source
ddev composer repository add source path source
ddev composer require --update-with-all-dependencies "drupal/agora_transparency:@dev"
ddev composer require --dev "drush/drush:^13"

The tests are in the repository but not in the release. .github/workflows/phpunit.yml runs this sequence, copies the tests from the clone into the installed package and runs them.

Make it yours

What an organisation usually changes before going live:

  • Site name: Configuration > System > Basic site settings (/admin/config/system/site-information).
  • Logo: Appearance > Settings > Ágora Transparency theme. Untick "Use the logo supplied by the theme" and upload your own.
  • Masthead image and opening line: the same page, under "Front-page masthead". With no image the band is plain navy.
  • Currency: the same page lists every field that carries a currency prefix or suffix, with a link to each field's settings. The currency is set per field.
  • Social links: Structure > Menus > "Follow us". The four links point at each network's home page; change them to your accounts or delete them.
  • Accessibility statement and legal pages: complete the "To be completed" sections of /accessibility-statement, and the Legal notice, Privacy notice and Cookies pages. drupal_cms_site_template_base also adds an unpublished "Privacy policy" page at /privacy-policy, with a link in the footer menu that only administrators see. Delete it, or complete and publish it and point the cookie banner at it (Configuration > User interface > Klaro! > Texts); the banner points at the Privacy notice by default.
  • Trash: deleted content goes to Content > Trash (/admin/content/trash) until the trash is emptied, for example with ddev drush trash:purge --all -y. Media and files are deleted at once.
  • Canvas page templates: leave "Use Drupal Canvas for page templates in this theme" unticked in the theme settings. Ticking it replaces the theme's header and footer with empty Canvas regions.
  • Config Guardian baseline: Configuration > Development > Config Guardian > Sync > Export Configuration writes the current configuration to the sync directory, as the starting point for later comparisons.

Removing the demonstration content

  1. Content (/admin/content): select every document, person, contract, agreement, grant and dataset record and delete them.
  2. Content > Media (/admin/content/media): select the demonstration documents and delete them. Their files are deleted with them.
  3. Empty the trash: ddev drush trash:purge --all -y.
  4. Eleven files are attached to records directly rather than through media. Delete the ones no longer in use:

    ddev drush php:eval '
    $uuids = [
      "1303ba70-7644-566e-8f6a-531e3ae9f9b4", "34a26985-1f6a-5c06-acc3-d25192efdad9",
      "37581c03-6cec-5b93-93bc-fb1215b30cb4", "49763496-7ef0-5dba-9b15-330481d8ee07",
      "4eeb8798-0a79-5d60-879e-b6c91d135df7", "54c17258-9efe-5c77-91f0-3f946edc1282",
      "7ca8185e-daa9-5190-b9d3-d55299325ee3", "87d36bf0-1f2f-5c0d-b710-268c15045c7e",
      "a33ad178-9649-5db1-acc1-00a1a52684ed", "dbafc2a2-955e-54b9-8d06-fab433c3849c",
      "e02588e5-c81c-52d8-96dc-a7a9d9b1e203",
    ];
    $repo = \Drupal::service("entity.repository");
    $usage = \Drupal::service("file.usage");
    foreach ($uuids as $uuid) {
      $file = $repo->loadEntityByUuid("file", $uuid);
      if (!$file || $usage->listUsage($file)) { continue; }
      echo $file->getFileUri() . PHP_EOL;
      $file->delete();
    }
    '
    
  5. In Canvas, delete the last block of the front page, which names Fuentelclaro, and publish.

The taxonomy terms, menu links and the two Canvas pages are part of the site's structure and stay.

What the template applies

Recipes, in the order recipe.yml applies them:

RecipeWhat it contributes
core/recipes/administrator_roleA generic administrator role with all permissions
core/recipes/core_recommended_maintenanceCore modules that help with site maintenance
core/recipes/core_recommended_performanceCore modules that improve performance
drupal_cms_site_template_baseDrupal CMS Basics: administration UI and theme, authentication, media types, privacy and consent, SEO and Canvas
easy_email_expressHTML email

It also installs a few core modules, agora_theme, agora_core (which serves the sign-in and other account pages in the front-end theme) and config_guardian. It sets the front page to the Canvas landing page in content/, and keeps administrative components out of the Canvas page builder.

What the package contains

The release holds fourteen top-level entries and 377 entries in all: .gitattributes, ACCESSIBILITY.md, AGENTS.md, LICENCE-MANIFEST.md, LICENSE.txt, README.md, SECURITY.md, composer.json, config/, content/, logo.png, recipe.yml, recommended.yml and screenshot.webp. Tests, CI configuration and project notes are in the repository but not in the release.

Known limitations

  • The demonstration content is a fictional Spanish municipality, published in English.
  • No anti-spam module is installed. The forms open to visitors are search and filtering, sign-in and password reset.
  • A site template is applied once. Later releases do not change an existing site.

Support

Report bugs and ask questions in the issue queue, naming the release you are running. Report security issues privately, as described in SECURITY.md.

License

GPL-2.0-or-later; see LICENSE.txt. The licence of every file in the package, including the demonstration media, is listed in LICENCE-MANIFEST.md.

How Ágora is built

Ágora is developed with AI coding assistants, under the maintainer's direction and checked by the project's automated tests. The maintainer is accountable for every release. The project's decisions and their reasoning are recorded in its public repository.