Journal des changements¶
1.2.1 -> 1.3.0¶
Note
PHP 8.3 minimum is required
Security¶
CSRF protection now relies on HTTP headers (Sec-Fetch-Site, with a fallback on Origin) rather than on per form tokens
Session cookie is now flagged SameSite=Lax
Session identifier is renewed on login, and when impersonating a member or coming back from it
Failed authentication attempts are now counted, and further attempts refused for a while: per account and address, per address, and per account as a backstop against attacks spread over many addresses. Thresholds and durations are in the advanced configuration
Password recovery requests are limited as well, per account asked about and per address asking
Self subscriptions are limited per address
Plugins can limit their own forms through the same mechanism, under a name of their own
Password recovery no longer says whether an account exists, but is still in the history and the logs
A new page under Configuration lists what is being refused, and lifts it
Everything that is typed in and later rendered as is - mailing preview, public document comment, dynamic fields values, PDF models, mails subjects and bodies - is now sanitized when it is stored
Password recovery relies on a dedicated token
The legacy md5 password fallback has been removed
Random strings are generated using a cryptographically secure generator
Coming back from impersonation is restricted to sessions that were really impersonating someone
A corrupted password strength setting no longer silently disables the check against personal information
The uniqueness check on the super administrator login could be skipped
Missing authentication checks on few routes
Demonstration mode freezes sender addresses, super administrator credentials and mail method, including from the advanced configuration page
Add optional two-factor authentication (experimental, disabled by default), using time based codes (TOTP) from any authenticator application:
Two-factor authentication can be made mandatory for administrators and staff members, or for everyone, behind the
two-factor-requiredfeature flag: under a mandatory policy, a wrong clock or a botched enrolment locks an association out of its own instance, and the way back is a SQL statementMembers enrolling get ten single use recovery codes; administrators and staff can reset a member second factor
Administrators and staff members without a second factor are invited to set one up when they log in, until they decline
The super administrator can use a second factor as well; it is cleared from the preferences in database
New features¶
Mailings can be sent in batches (experimental): a delay can be set between two messages, and hourly and daily quotas can be enforced. Sending goes through a queue that can be resumed; reminders use it as well. Default values keep the previous behavior
New advanced configuration page, listing every preference, including those the configuration forms do not show; each one tells whether it holds its default value, has been modified, is locked by a constant from behavior.inc.php or is unknown, and secret ones only tell whether they are set
Some settings moved from behavior.inc.php to the database: instance URL (GALETTE_URI), reverse proxy address index (GALETTE_X_FORWARDED_FOR_INDEX) and session duration (GALETTE_TIMEOUT). The constants still work and still take precedence; they are then reported as locked
The maximum size of an upload is now a setting, one per kind of upload: pictures, mailing attachments, documents, CSV imports and dynamic fields files. They are in the advanced configuration, and default to the single value that was hard coded until now
Plugins now have their own database version, and are updated on their own; the plugins page has been reworked, and lists disabled, not installed and outdated plugins
Plugins can declare public pages, each with a visibility of its own, set from the preferences page like the core ones
Dynamic fields can be added on preferences
Filters and pagination on the documents list
Contribution types can carry a description
Emailing settings can be tested from the values in the form, without storing them first; a new button checks the connection without sending anything
The adaptative PDF member card is now the default; the former implementation has been removed
Install and update are guarded by a lock file, and the update no longer asks for the database configuration
New
galette:superadmin:passwordconsole command to change the super administrator passwordbin/consoleis now shipped with release archivesLanguage selector has been reworked: regionalised languages are handled, the current language is listed, and the installer offers the same list
Contributions and transactions shortcuts on the groups managers dashboard
Maintenance mode tells the super administrator it is enabled when they are logged in
The reminders cron script takes the instance URL from the settings
New feature flags mechanism, to ship features that are not production ready yet; flags are declared in behavior.inc.php, only apply in debug mode, and a
galette:feature:statusconsole command tells what is enabledImprovements on dynamic fields: choice, date and file can now be repeated and you can now import up to 10 dynamic fields from CSV import.
Improvements¶
Global accessibility improvements
Dynamic choice fields values are now stored as JSON along the field, instead of one dedicated table per field
Repeatable dynamic fields: labels, one add button per field, per field counters, maximum number of repetitions, and fields that cannot be repeated
Groups addition form has been reworked and simplified
Mailings list and forms carry more information
Buttons have been reworked all over the application, and theme contrasts improved
Page titles have been improved throughout the application
A missing asset now renders a proper error page instead of a blank one
Error messages name the setting that holds an invalid address
A file size is shown in the unit that fits - octets, Ko, Mo or Go - wherever it appears: the upload limits, the error a file too big raises, and the list of import files
Reuse SMTP connection on several calls
Load news with ajax call to prevent dashboard hangs
Superadmin login and password settings moved from the Preferences to the « My information » page in the « My account » menu
Fixes¶
A mailing attachment over the maximum allowed size raised a fatal error instead of being reported
The maximum size allowed for a dynamic field file was announced in bytes, and called kilobytes
Line breaks were lost in the text version of the mail signature
A new mailing could not be created once a mailing had been sent
Groups managers could not edit their own member record
Groups managers could not get receipts and invoices of the members they manage
Members could not get their own vCard
Wrong count and sum on contributions and transactions lists
Wrong contribution end date when the previous contribution ends the day before the beginning of membership
A member renewing on the last valid day of their membership was considered expired; beginning of membership calculation is also leap year safe
Wrong beginning of membership calculation when a beginning of membership date is set
Wrong lines alignment on PDF models using a multiline address
Underscores were escaped in plain text emails
Payment types were not created at install; wrong scheduled payment type on update, and missing engine and relation on the scheduled payments table with MySQL
Group selection on member form was broken
Requests on robots.txt no longer raise a not found error
The news cache was written but never read back, so galette.eu was contacted on every displayed page, even for anonymous visitors
Members list could be ordered on a column that does not exist
Preferences values were limited to 255 characters
The association address could be read from an arbitrary member when the configured source is unreadable
A public page whose visibility cannot be read is now closed, rather than open to everyone
Documents tab could be hidden by ad blockers
Several fixes on the web installer, including Javascript errors
GALETTE_SQL_DEBUG was tested for existence only, so declaring it to false still dumped every query
Fix mass change when only a group removal is selected
Customized PDF models and email texts were reset to their default values on every update
Occurrences of a dynamic field holding the same value collapsed into one in PDF and mail replacements, and a dynamic file link could point to another occurrence
L10n¶
New Slovenian translation, complete
New Brazilian Portuguese translation, started
Russian translation went from a quarter of the strings to almost complete
German and Tamil translations are complete again
Catalan, Portuguese and Turkish translations have progressed
Translatable strings are being reworked to only use positional parameters
Removals and requirements¶
Javascript is now required; a message says so when it is disabled, and the per feature warnings and the markup that was kept hidden for browsers without it have been dropped
PHP 8.3 is now the minimum required version
The fileinfo PHP module is now required; compatibility tests now also check ctype, dom, filter and iconv, and gettext is no longer reported as optional
Mime type detection now always relies on fileinfo; the extension based fallback and the FileTrait::$mime_types map it used have been removed
Database version is now 1.300; new tables have been added for plugins, authentication attempts and the mailing queue
The QMAIL mail method has been removed; installations using it are switched to sendmail
The GMAIL mail method has been removed; installations using it are switched to SMTP
GALETTE_DISPLAY_VERSION, GALETTE_HIDE_VERSION and GALETTE_ADAPTATIVE_CARDS constants have been removed
Updating from 0.6x releases is deprecated
Third party libraries have been updated
Plugins and development¶
Plugins declare an install class implementing InstallableInterface; the former way still works, but is deprecated, and a plugin class is now mandatory
Plugins can declare their own preferences; they are stored along the others, and their values are kept while the plugin is disabled
Plugins can refuse the removal of a group, and give the reason
Routes can be declared from controllers using the #[Route] attribute; this does not replace routes files yet, it is a first step
New AbstractEntity class and #[Column] attribute; Pdf is now abstract, and History members are protected
Preferences have been split behind a declarative schema, and a new Html utility class handles cleaning and stripping markup
Old deprecated routes, and Galette::showPublicPages() deprecated since 1.2.0, have been removed
The plugins directory can be set from the environment
New tools for developers: bin/serve, and galette:check-routes, galette:headers-check and galette:seed-fixtures console commands
1.2.0.1 -> 1.2.1¶
See full 1.2.1 changelog for all details.
Rework groups management user interface
Several fixes and improvements on logo (webp transparency, logo display in mails, …)
Change default order on contributions and transactions
Fix attaching existing contribution on transaction
Fixes on PDF member cards
Fix text emails signature
Fix debug mode using release archives
Minor fix on CSV exports
Fix contributions creation from payments plugins
Fix issues on some PostgreSQL sequences
1.2.0 -> 1.2.0.1¶
See full 1.2.0.1 changelog for all details.
Fix logo size on maintenance, install an compatibility pages
Fix PostgreSQL wrong sequences after update
Rework installation proposed versions
1.1.6.1 -> 1.2.0¶
See full 1.2.0 changelog for all details.
Rework/harmonize SQL scripts - review some data types and defaults values
Dynamic dates are now stored using Y-m-d format only
Dates validation is a bit stricter
Remove photo drag’n drop
Remove log preferences (logs are always enabled)
Fix several typehint issues
Use transaction payment type as default on new contributions
Contributions amount no longer can be zero
Add links to relevant parts of the documentation
Add few parameters to customize appearance
Plugins can now add Javascript just before the closing body tag
Add staff public pages (list and gallery)
Prevent main social networks to be removed on update
Fix mass changes on boolean fields
Add phone number and contact email in settings
Fix few dynamic translations issues
Fix CSRF error when using filters on scheduled payments with ajax mode
Remove show ID preference
PHP 8.5 compatibility
Remove support for PHP 8.1
Fix stored XSS CVE-2025-48076 and reflected XSS CVE-2025-48884
Fix groups manager access bypass CVE-2025-53922 and CVE-2025-58052
Plugins no longer require write access to their root directory to be disabled/enabled
FIx mass adding members to group when one selected member is already in the group
Prevent group managers from creating contributions with scheduled payments
Simple users cannot filter their own list of scheduled payments
Wrong toast message displayed when saving a contribution
Display issues on contributions/scheduled payments/transactions lists
Fix member storage when some fields are not present in the form
Plugins can display news on dashboard
Admin field is shown even if it is configured to be hidden
New members are set inactive when activity field is hidden
1.1.6.1 -> 1.1.6.2¶
Fixed typed property must not be accessed
Make sure fields visible for anyone don’t cause errors
Login must never be empty
Fix donation begin date
1.1.6 -> 1.1.6.1¶
Fix some issues when Status objects was not loaded from DI
1.1.5.2 -> 1.1.6¶
Improve checks on members
Use fields configuration to restrict to allowed fields only
1.1.5.1 -> 1.1.5.2¶
Wrong year on new contributions when using begin of membership date
Several issues on mass groups adding
Update German translation
1.1.5 -> 1.1.5.1¶
Loop issue on new contributions when using begin of membership date
Update TCPDF to latest version
1.1.4 -> 1.1.5¶
Fixes for PHP 8.4 compatibility
Members cannot access their invoices/receipts (#1886)
Fatal error adding contribution when no type is present (#1887)
Fix few typehint issues
Mass add/remove members from groups (#1624)
Use previous begin of membership date for new contributions (#1893)
Update translations in various languages, add new Tamil lang
1.1.3 -> 1.1.4¶
Groups managers can add or list contributions and transactions (from a preference - #1863)
Install from command line (#1180)
Improve dashboard (#1864)
Activate choice after member creation for groups managers (#1873)
Revert PDF member card to previous version, new adaptative one is optional (#1871)
Fix PDF footer overlaps (#1858)
Notify members when groups managers edit their account (#1860)
Preferences socials networks were removed on telemetry update (#1862)
Special HTML character are encoded on members search, therefore no results are found (#1865)
Begin membership date changes on keyboard browse (#1869)
Improve Preferences checks for membership extension/date (#1870)
Cannot remove emails from emails management (#1872)
Force image crop in preferences does not work (#1877)
Display PHP startup messages on error page
Display max_input_vars configuration on sys info page
Fix SQL issue with postgres searching on dynamic dates
1.1.2 -> 1.1.3¶
Impossible to update database (#1857)
Note
Since 2024-07, Changelog will no longer be translated. All new entries will be available in english only.
1.1.1 -> 1.1.2¶
Désormais traduite entièrement en Italien !
Ne pas afficher les liens vers la page publique des documents si les pages publiques ne sont pas activées (#1848)
Correction de l’affichage du message d’information d’une nouvelle version (#1849)
Correction de types sur les champs dynamiques (#1850)
Vérification de possibles valeurs vides converties en entiers
Correction de la recherche d’adhérents sur les types de contributions (#1852)
Les types de contributions et de paiements n’étaient plus sélectionnés à l’affichage des paramètres de recherche
Correction d’une erreur SQL avec PostgreSQL sur la recherche de champs dynamiques de type booléen
Correction des types de retour sur les exports paramétrés (#1853)
1.1.0 -> 1.1.1¶
Impossible de trier les transactions sur la colonne type de paiement (#1837)
Les inscriptions par l’adhérent ne pouvaient pas être enregistrées (#1838)
Erreur sur le tri dans la liste des envois (#1839)
Erreur sur le filtrage par status de la liste des adhérents (#1840)
Impossible de rejouer une recherche sauvegardée (#1841)
Impossible de lister les recherches sauvegardées avec le paramètre « afficher les identifiants » désactivé (#)
1.0.x -> 1.1.0¶
Ajout d’une variable pour le logo d’impression dans les modèles PDF (#1741)
Ne plus utiliser la sérialisation pour le stockage en base (#1744)
Message d’avertissement davantage explicite lorsque l’on est déjà sur la dernière release (#1779)
Empêcher l’indexation de l’instance par les moteurs de recherche (#1784)
Suppression de l’ancien cache à la mise à jour (#1788)
Modification de l’encodage MySQL et MariaDB (#1794)
Ajout d’une taille minimale sur les champs dynamiques (#1795)
Ajout des montants sur les types de contributions (#273)
Ajout du champ région (#583)
Vérification de la disponibilité d’une nouvelle version de Galette (#1785)
Amélioration de l’affichage du formulaire adhérent (#1775)
Ajout d’une constante spécifique pour activer le mode de débogage
Option pour désactiver les réseaux sociaux à l’affichage et la modification des adhérents (#1802)
Factorisation des droits entre les champs du cœur et les champs dynamiques (#1798)
Gestion des documents administratifs (#1216)
Autoriser les plugins à fournir leurs propres polices de caractères
Utilisation du format décimal pour tous les montants, suppression des valeurs par défaut
Revue du pied de page des PDF, correction de la pagination sur les listes d’émargement (#1816)
Correction de la couleur pour les membres du bureau sur les cartes adhérent (#1814)
Affichage en tête de liste des membres du bureau sur les pages publiques (#1809)
Identification des sponsors dans la liste des adhérents (#1792)
Ventilation des contributions en paiements planifiés (#1193)
Filtre des contributions selon leur type (#1470)
L’entrée de menu n’était pas toujours correctement sélectionnée (#1818)
Ajout du type de paiement sur les transactions (#574)
Suppression des fichiers non relatifs à l’utilisateur du dossier de configuration (#1822)
Ajout des contributions mensuelles (#1438)
Taille adaptative des cartes de membre PDF (#1817)
Les rappels n’étaient pas envoyés (#1614)
1.0.3 -> 1.0.4¶
Impossible d’accéder aux tabulations sur certaines résolutions (#1799)
L’aperçu HTML des courriels affiche le code (#1800)
Correction du défilement dans la fenêtre d’aperçu des courriels
Corrections sur l’utilisation de l’injection de dépendances
Le nombre d’adhérents affichés était automatiquement remis à « tous » (#1803)
Les modifications de groupes n’étaient pas visuellement affichées sur le formulaire adhérent (#1801)
Correction de la redirection lorsqu’un fichier dynamique n’existe pas
Défilement horizontal du menu lorsque le nom est trop long (#1805)
Un adhérent ne peut pas être son propre parent (#1806)
Ajout du pied de page des préférences dans les remplacements (#1808)
1.0.2 -> 1.0.3¶
Le logo n’apparaissait pas dans la signature des courriels (#1783)
L’éditeur HTML était absent sur le champ information des champs dynamiques (#1774)
Les pages de maintenance et de mise à jour ne fonctionnaient plus (#1782)
Ne pas déclencher les évènements lors de l’édition de masse (#1733)
Le cache est désormais dépendant de la version (#1787)
Vérification de la validité du site web (#1789)
Lien vers site de l’asso depuis le logo (#1790)
Amélioration des messages dans l’interface (#1786)
1.0.1 -> 1.0.2¶
Restriction d’accès des pages publiques (CVE-2024-24761 - #1778)
Suppression de classes inutiles (#1771) et correction de la création de nouveaux réseaux sociaux (#1760)
Modification de la langue de l’utilisateur cron (#1769)
Icône des variables de remplacements davantage visible pour les modèles PDF (#1770)
Correction d’un problème éventuel à la création de groupes (#1773)
Correction de la redirection d’URL (#1777)
1.0.0 -> 1.0.1¶
Le titre dans la liste des adhérents provoquait une erreur (#1756)
Impossible de créer un nouveau nom de réseau social (#1760)
Pagination et recherche sur la liste des adhérents cassée à l’ajout d’une contribution (#1761)
Chevauchement de la date de début de contribution (#1762)
« L’accordéon » des groupes n’était pas ouvert lorsque le nom contient un slash (#1764)
open_basedir empêche l’a lecture des fichiers dans /etc (#1765)
Quelques problèmes sur les contributions avec un montant à 0 (#1767)
Erreur fatale avec PHP 7.4 (#1768)
L’utilisateur cron n’avait pas de langue définie (#1769)
0.9.6.1 -> 1.0.0¶
Note
PHP 8.1 minimum requis
Ajouts¶
UI moderne
Améliorations majeures sur les UI/UX et responsive (#1611)
Utilisation de YAML au lieu de XML pour la configuration des exports
Nouvelle préférence pour afficher/masquer les bordures autour des cartes de membres PDF (#184)
Support des images WebP (#1681)
Suppression de la recherche libre dans la recherche avancée (#1684)
Vérification de la version minimale de la base de données à l’installation (#1725)
Retaillage et recadrage des images des adhérents selon un ratio fixe (#1717)
Corrections¶
Problèmes de mise à jour (constantes non définies) (#1615)
Erreur fatale lorsque le cookie n’est pas défini après connexion (#1617)
Tri des adhérents par statut (#16118)
Correction de plusieurs problèmes de compatibilité PHP 8.1 (#1629, #1655)
Les responsables de groupes ne peuvent éditer leurs propres informations (#1635)
Compte et affichage différent des adhérents des rappels (#1491)
La version minimale de PHP n’était pas affichée sur la page de compatibilité (#1682)
Les simples adhérents ne peuvent accéder à la liste de leurs contributions (#1675)
Suppression en masse de contributions (#1661)
Désactivation des images en ligne dans les courriels (#1659)
Problème à l’édition d’adhérents avec des fausses valeurs en liste de choix dynamiques (#1650)
Le groupe parent était perdu lorsqu’un responsable de groupe modifiait un groupe (#1648)
Correction de la taille du logo sur les cartes de membre (#1626)
Correction d’un timeout à l’utilisation du logo dans les cartes de membre PDF (#1726)
Correction des fichiers dynamiques sur les contributions et transactions (#1697)
Suppression de champs requis sur les cartes de membre PDF (#781)
Le groupe parent pouvait être perdu lorsqu’un responsable de groupe modifiait un groupe (#1708)
L’ajout en masse de contribution échouait s’il manquait une donnée (#1694)
Les champs dynamiques des contributions n’étaient pas affichés dans la recherche avancée (#1693)
Les champs dynamiques de type choix sur les contributions échouaient avec postgres (#1692)
Plusieurs issues mineures avec les langues RTL à la génération de PDF (#1727)
Problème dans les recherches des transactions avec certains formats de date (#1731)
Les adhérents sélectionnés n’étaient pas remis à jour à la création d’un nouvel envoi (#1742)
Sous le capot…¶
Anciennes versions¶
- 0.9.6 => 0.9.6.1
- 0.9.5.2 => 0.9.6
- 0.9.5.1 => 0.9.5.2
- 0.9.5 => 0.9.5.1
- 0.9.4.2 => 0.9.5
- 0.9.4.1 => 0.9.4.2
- 0.9.4 => 0.9.4.1
- 0.9.3.1 -> 0.9.4
- 0.9.3 -> 0.9.3.1
- 0.9.2.1 -> 0.9.3
- 0.9.2 -> 0.9.2.1
- 0.9.1.2 -> 0.9.2
- 0.9.1.1 -> 0.9.1.2
- 0.9.1 -> 0.9.1.1
- 0.9 -> 0.9.1
- 0.8.3.4 -> 0.9
- 0.8.3.3 -> 0.8.3.4
- 0.8.3.2 -> 0.8.3.3
- 0.8.3.1 -> 0.8.3.2
- 0.8.3 -> 0.8.3.1
- 0.8.2.3 -> 0.8.3
- 0.8.2.2 -> 0.8.2.3
- 0.8.2.1 -> 0.8.2.2
- 0.8.2 -> 0.8.2.1
- 0.8.1 -> 0.8.2
- 0.8 -> 0.8.1
- 0.7.8 -> 0.8
- 0.7.7 -> 0.7.8
- 0.7.6.1 -> 0.7.7
- 0.7.6 -> 0.7.6.1
- 0.7.5.5 -> 0.7.6
- 0.7.5.4 -> 0.7.5.5
- 0.7.5.3 -> 0.7.5.4
- 0.7.5.2 -> 0.7.5.3
- 0.7.5.1 -> 0.7.5.2
- 0.7.5 -> 0.7.5.1
- 0.7.4.5 -> 0.7.5
- 0.7.4.4 -> 0.7.4.5
- 0.7.4.3 -> 0.7.4.4
- 0.7.4.2 -> 0.7.4.3
- 0.7.4.1 -> 0.7.4.2
- 0.7.4 -> 0.7.4.1
- 0.7.3.2 -> 0.7.4
- 0.7.3.1 -> 0.7.3.2
- 0.7.3 -> 0.7.3.1
- 0.7.2.9 -> 0.7.3
- 0.7.2.8 -> 0.7.2.9
- 0.7.2.7 -> 0.7.2.8
- 0.7.2.6 -> 0.7.2.7
- 0.7.2.5 -> 0.7.2.6
- 0.7.2.4 -> 0.7.2.5
- 0.7.2.3 -> 0.7.2.4
- 0.7.2.1 -> 0.7.2.3
- 0.7.2.1 -> 0.7.2.2
- 0.7.2 -> 0.7.2.1
- 0.7.1 -> 0.7.2
- 0.7 -> 0.7.1
- 0.64 -> 0.7
- 0.63.3 -> 0.64
- 0.63.2 -> 0.63.3
- 0.63.1 -> 0.63.2
- 0.63 -> 0.63.1
- 0.62 -> 0.63
- 0.62.1 -> 0.62.2
- 0.62 -> 0.62.1
- 0.61 -> 0.62
- 0.60 -> 0.61