Description
Mairie Reservation de Salles is a turnkey booking system for town halls (mairies) that want to digitize the reservation of their municipal rooms. The interface is in French, designed for French local authorities.
Citizens check availability online 24/7 through an interactive calendar and submit a request in a few clicks. Municipal staff manage requests from the WordPress admin with validation, deposit payment tracking, and automated emails.
For citizens
- Check availability online, on desktop or mobile
- Select multiple dates in one click on the calendar
- Four-step form: time slot, equipment, information, confirmation
- Automatic confirmation email for the request
- Choose between individual, association, or local association
For town hall staff
- Complete dashboard with multiple menus inside WordPress
- Filtering and search of requests
- Validation, refusal, cancellation, and deposit payment tracking
- Twelve-month yearly view with color coding
- Detailed monthly calendar per room
- Block a time slot for internal use (council meeting, maintenance, etc.)
- Management of local associations with a configurable deposit discount
- Global and per-room equipment catalog with real-time stock checking
- Fully editable email templates
- PDF rules document automatically attached to emails
- One-click JSON backup and restore
- Advanced statistics with charts (bookings per month, per room, occupancy rate)
- Granular permission system with role presets (Mayor, Deputy, Agent, Secretary)
- PDF calendar export (monthly and yearly views)
- Optional anti-bot protection via Cloudflare Turnstile
Available shortcodes
[mrds_reservation_salle]– Full multi-step booking form[mrds_reservation_salle_directe salle="slug"]– Form with a pre-selected room[mrds_reservation_sans_salles]– Companion form for the calendar[mrds_calendrier_salle]– Interactive multi-date calendar[mrds_salles_disponibilites]– Room presentation cards
External services
This plugin can optionally use Cloudflare Turnstile to protect the public form from bots. When enabled by the administrator, the Turnstile script is loaded from Cloudflare and the submitted token is verified against Cloudflare’s API. This only happens if you enter your own Turnstile keys in the settings. See the Cloudflare Turnstile terms (https://www.cloudflare.com/website-terms/) and privacy policy (https://www.cloudflare.com/privacypolicy/).
Installation
- Download the plugin ZIP file
- In WordPress: Plugins > Add New > Upload Plugin
- Select the ZIP and click Install
- Activate the plugin
- Go to Reservations > Rooms to configure your rooms
- Add the shortcode
[mrds_reservation_salle]or[mrds_calendrier_salle]to a page
FAQ
-
Is the plugin compatible with my theme?
-
Yes. The plugin uses standard WordPress shortcodes and works with any standards-compliant theme. No theme modification is required.
-
How many rooms can I manage?
-
There is no limit. You can manage one or dozens of rooms, each with its own opening hours, capacity, deposit, and equipment.
-
How does the double-booking check work?
-
On every booking attempt, the system checks in real time that no other active request overlaps the time slot, which prevents duplicates even with simultaneous submissions.
-
Are the emails customizable?
-
Yes. The email templates (acknowledgement, validation, refusal, and more) are fully editable from the admin. Dynamic variables are available, such as first name, last name, room, date, time slot, and subject.
-
Can I attach a rules document to the emails?
-
Yes. Upload a PDF in Reservations > Rules. You can have one global document or a specific document per room. It is attached automatically to the configured emails.
-
How can I protect the form from bots?
-
The plugin integrates Cloudflare Turnstile (free). Create your keys on the Cloudflare dashboard, paste them into the settings, and the form is protected immediately.
-
Which PHP versions are supported?
-
The plugin requires PHP 7.4 or higher and has been tested up to PHP 8.3.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Mairie Réservation de Salles” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Mairie Réservation de Salles” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.5.17
- Sécurité : échappement des chaînes traduites concaténées dans le HTML retourné par le shortcode de réservation (branche « accès bloqué » — liens Se connecter / Créer un compte), via esc_html__() au lieu de __(). Audit de l’ensemble des shortcodes et filtres du plugin pour le même schéma : aucun autre cas trouvé.
1.5.16
- Sécurité (généralisation des correctifs 1.5.15 à l’ensemble du plugin) : vérification de nonce réelle sur toutes les navigations GET restantes — Calendrier mensuel (liens mois/année/salle via wp_nonce_url), sélecteur d’année des Statistiques, formulaire de filtres de l’Export PDF — avec bornage systématique des mois (1-12) et années (2000-2100).
- Sécurité : les messages de confirmation post-redirection (salles, matériel, associations) portent désormais un nonce dans l’URL de redirection, vérifié avant affichage.
- Sécurité : le chargement de Chart.js sur la page Statistiques utilise le paramètre $hook fourni par WordPress (admin_enqueue_scripts) au lieu de lire $_GET[‘page’].
- Sécurité : élimination des deux dernières constructions SQL dynamiques — la liste des réservations utilise une requête entièrement littérale (filtres vides neutralisés par « %s = ” OR colonne = %s »), et l’export PDF toutes salles filtre par salle côté PHP au lieu d’une clause IN générée.
1.5.15
- Sécurité : vérification de nonce réelle sur la navigation de la Vue annuelle (mrds_admin_page_annuel) — liens année/salle générés via wp_nonce_url(), paramètres GET lus uniquement après wp_verify_nonce() ; sinon valeurs par défaut (année courante, première salle). Validation supplémentaire de l’année (plage 2000-2100).
- Sécurité : restructuration du contrôle de nonce des filtres de la liste des réservations — la condition porte désormais uniquement sur la validité du nonce (plus de test préalable sur la présence des paramètres, non contournable) ; validation stricte du statut contre la liste des valeurs connues.
- Sécurité : sanitization explicite champ par champ de $_FILES pour l’import de sauvegarde et l’upload de règlement (sanitize_file_name, sanitize_mime_type, cast entiers), plus validation is_uploaded_file() et extension .json pour l’import.
- Sécurité : les chaînes JSON reçues en POST (matériel, dates) sont sanitizées avant json_decode(), et chaque élément décodé est validé et reconstruit champ par champ (identifiants et quantités castés en entiers) — rien du JSON brut n’est conservé.
- Sécurité : les migrations de base de données (ALTER TABLE) n’interpolent plus aucune variable dans les chaînes SQL — chaque requête est un littéral complet figé, seul le nom de table passe par le placeholder %i de $wpdb->prepare().
1.5.14
- Correction : le tableau “Shortcodes disponibles” de la page Paramètres (admin) affichait encore les anciens noms non préfixés (héritage du renommage en 1.5.10) ; mis à jour avec les tags mrds_* actuels, y compris la “Combinaison recommandée”.
- Nettoyage : mise à jour des commentaires de documentation interne (docblocks) dans le code source pour référencer les mêmes noms de shortcodes préfixés.
1.5.13
- Correction technique : deux derniers commentaires phpcs:ignore mal positionnés (ligne de fermeture au lieu de ligne d’ouverture) sur des requêtes multi-lignes dans helpers.php et admin.php ; repositionnés. Ajout du code PluginCheck.Security.DirectDB.UnescapedDBParameter à la liste déjà justifiée dans admin.php (liste de réservations à filtres dynamiques).
1.5.12
- Correction technique : sur les requêtes $wpdb multi-lignes, le commentaire phpcs:ignore doit se trouver sur la ligne où l’appel commence (et non sur la ligne de fermeture) pour être pris en compte par l’outil d’analyse ; repositionné sur l’ensemble des fichiers concernés.
- Correction : plusieurs requêtes assignaient le résultat de $wpdb->prepare() à une variable intermédiaire avant de l’exécuter, ce que l’analyseur ne peut pas vérifier statiquement ; ces appels sont désormais imbriqués directement.
- Correction : les requêtes dont la clause SQL variait selon un paramètre (ternaire/concaténation dans la chaîne passée à prepare()) sont désormais écrites en branches explicites avec une chaîne littérale complète par cas.
1.5.11
- Sécurité : toutes les requêtes SQL construites avec un nom de table interpolé utilisent désormais le placeholder %i de $wpdb->prepare() (nécessite WordPress 6.2+, voir “Requires at least” mis à jour).
- Sécurité : ajout de vérifications de nonce ou de justifications documentées (phpcs:ignore) sur les lectures $_GET/$_POST sans risque (navigation en lecture seule protégée par capability, ou nonce déjà vérifié par l’appelant).
- Correction : le hook d’export CSV des statistiques était mal nommé (admin_post_mr_stats_export_csv au lieu de admin_post_mrds_stats_export_csv) et ne se déclenchait donc jamais ; corrigé.
- Nettoyage : suppression des blocs phpcs:disable/enable fragiles au profit de commentaires phpcs:ignore ciblés et justifiés.
1.5.10
- Conformité WordPress.org : préfixage des tags de shortcodes (ex. [reservation_salle] [mrds_reservation_salle]). Aucun site n’étant en production à ce jour, les anciens tags non préfixés ont été entièrement retirés (pas d’alias de rétrocompatibilité) — merci de mettre à jour vos pages de test en conséquence.
1.5.9
- Sécurité : la restauration de sauvegarde utilise désormais une liste blanche stricte des options du plugin (au lieu d’un simple test de préfixe), qui ne peut pas être étendue via un fichier de sauvegarde trafiqué.
- Sécurité : ajout d’un contrôle de nonce sur le formulaire de filtre de la liste des réservations (statut / salle / recherche).
- Conformité WordPress.org : remplacement du préfixe court « mr- » (trop court, 2 caractères) par « mrds- » sur tous les identifiants de menus d’administration et de scripts/styles enregistrés (aucun impact fonctionnel).
1.5.8
- Conformité revue WordPress.org : préfixe unique « mrds_ » sur toutes les fonctions, constantes, options, hooks AJAX et capacités (migration automatique des données existantes).
- Sécurité : l’import de sauvegarde ne peut plus écraser que les options du plugin (préfixe), jamais des options WordPress arbitraires.
- Permissions : pages Réservations / Calendrier / Vue annuelle protégées par capacité (plus seulement « read »).
1.5.7
- Manifestations : marquage d’une réservation comme « Manifestation » et nouvel export « Calendrier des manifestations » de l’année (liste par mois ou calendrier visuel 12 mois).
- Récurrences : nouvelles options « ne pas réserver pendant les vacances scolaires » et « ignorer les jours fériés » (l’association reprend après la coupure, le nombre d’occurrences est respecté).
- Vacances scolaires : sélection de zone (A/B/C) et couleur de surlignage dans Identité mairie, report sur les calendriers exportés.
- Impression : option « Toutes les salles » (présentation empilée ou grille par jour), par mois ou par année.
- Édition d’une récurrence avec propagation aux dates à venir.
- Jours fériés et dimanches grisés à l’impression.
1.5.6
- Version de validation pour la soumission au répertoire WordPress.org (revue de conformité).
- Aucune nouvelle fonctionnalité : reprend l’ensemble des corrections de la 1.5.5 (enqueue des scripts/styles, wp_json_encode, Chart.js 4.5.1, sécurité).
1.5.5
- Conformité revue WordPress.org : tous les blocs / inline migrés vers wp_enqueue_script / wp_enqueue_style / wp_add_inline_script / wp_add_inline_style.
- Données dynamiques passées au JS via variables (wp_json_encode) au lieu de PHP interpolé dans le JavaScript.
- json_encode remplacé par wp_json_encode partout (sortie et stockage).
- Bibliothèque Chart.js mise à jour de 4.4.1 vers 4.5.1.
- Renforcements de sécurité (nonces sanitizés, sorties échappées, text domain unifié).
1.5.4
- New “Town hall identity” page: contact details, mayor, and a variable number of deputies and councillors
- PDF “All months” export now starts with a cover page (town hall name, room, year, elected officials, contact details)
1.5.3
- PDF export: new “All months” mode – one detailed page per month (12 pages) in a single print job
- PDF export options now stacked vertically for better readability
- Input handling hardening (wp_unslash and sanitization on form data)
1.5.2
- Granular permission system: capabilities with role presets (Mayor, Deputy, Agent, Secretary)
- PDF calendar export module (monthly and yearly views)
- Compatibility and security hardening for WordPress.org review (output escaping, file handling, local script bundling)
1.5.1
- Fixed validation of known associations (contact details retrieved from the database)
- Fixed progress bar synchronization when clicking from the calendar
- Removed scroll jump when moving from calendar to form
- Visual grouping of multi-date bookings in the admin list
- Cascading actions on groups (validate/refuse/cancel several dates in one click)
- Admin menu: All reservations moved back to first position
- Advanced statistics page with charts
- Permanent deletion of a reservation (admin only)
- Cancel button on every step of the form
- Explicit error message with the ID of the conflicting reservation
- Null safety for PHP 8.1+
1.5.0
- Email templates page – fully editable templates
- Rules document page – global or per-room PDF upload
- Manager fields (first name, last name) on associations
- Hidden contact details for known associations