Install

Works with Drupal: ^11.3 || ^12

Using Composer to manage Drupal site dependencies

Alternative installation files

Download tar.gz 764.72 KB
MD5: fa9b0bec69f0f54e92a906b8ce246761
SHA-1: 1794de33d9e5a5e38107e1d793a601715a471fc6
SHA-256: 72b5d89c837cc7d91c15ebe01a19b8111ebbecdc99fff6f5f3b02fc85b6a2e2c
Download zip 994.85 KB
MD5: f38e07869f1b5bda55d3845cf60a0598
SHA-1: 41bd19e11ae6b0e11ffc1c6de48538a7924aca10
SHA-256: b164e6200cc6d794f18729f40c281e5a5be8a338e32f3446ce016e782be9250e

Release notes

No schema change, no update hook, and an alpha7 site upgrades in place. No table, column, service or route changes, so deploy the code, rebuild caches, and re-import the French catalogs of every Kessai module (drush locale:import fr <module>/translations/fr.po --type=not-customized --override=not-customized, one per catalog): most of this release is French wording, and a site keeps what it imported until it imports again. One shipped view changed, and shipped configuration never reaches an installed site: the claims listing is now called Payment claims in its label, page title and table caption. Change the three in the Views UI or reinstall kessai_views to pick it up; nothing breaks if you do neither, and the listing reads Prélèvements in French either way.

One consumer site that does not answer no longer holds cron for minutes

#3621976, for sites running kessai_server. Every event a payment announces is posted to the consumer that took it, in the same request, with an eight second timeout, and cron's expiry sweep announces one per payment it expires, up to 200 a run. When a consumer site was down behind a firewall that drops the connection, each of those posts waited out the whole timeout, so a batch of one consumer's payments could hold cron for more than 25 minutes, past the 15 minutes core locks cron for, at which point a second cron run can start beside the first.

A consumer that a notice timed out on before any of it was sent is now sent nothing else for the rest of that request or cron run, and the line logged for that first notice says so. A consumer that refused the connection, answered with an error, or took the notice and was slow to answer is still told about every payment: a refusal costs nothing to hear again, and the other two are up. Delivery stays best effort, as before: a consumer that missed a notice can still read the payment.

"Claim" no longer shares its translation with other modules

#3621975. Locale keeps one string table for a whole site, so a word two modules translate differently is one row, and whichever was imported last wins it. The claim entity's labels were the bare word Claim, and on a site running a workflow engine beside Kessai, that engine's "claim this task" link read Prélèvement, a direct debit offered as a task action. Every form of the entity label, and the Claims menu link, now carries the Payment translation context, so Kessai's claims keep their French without lending it to anybody else.

French: one word for each thing

#3621977, #3621978.

  • A notice, the signed message one Kessai posts to another when a payment moves, is now a notification everywhere. The client said avis in five places and notification in two, and its settings page was titled Limites des avis; it is now Limites des notifications, as the status report already called it.
  • Enabled and Disabled on the payment accounts listing read Activée and Désactivée while two other modules translated Enabled as Activé, so the word on every page depended on which module was installed last. All three now say Activé and Désactivé.
  • The label of the consumer origin constraint is declared with the Validation context and its French entry named none, so it was never looked up. The entry now names it.

For developers

ConsumerOriginConstraint::$notAnOrigin and $notEncrypted are now $notAnOriginMessage and $notEncryptedMessage (#3621977). Code that sets or reads them by name has to follow. The extractor localize.drupal.org runs reads a constraint's messages only from properties whose name ends in message, which is also how core names every extra message a constraint carries, so the two refusals are now offered to translators there.

Also

A translations job checks every string against the catalog of the project that ships it with potx, context included, and replaces fifteen test cases that read the project's own files for their words (#3621977). The metrics page is refreshed, and the cspell project words lose four entries the dictionaries already know (#3621979).

Created by: mably
Created on: 23 Sep 2026 at 12:40 UTC
Last updated: 23 Sep 2026 at 12:41 UTC
Bug fixes

Other releases