diff --git a/CHANGELOG.md b/CHANGELOG.md index ae62e5f..298dbcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -95,3 +95,12 @@ Toutes les modifications importantes du projet sont consignées ici. Le format s [1.0.0]: https://nnsprod.com/git/oversu/Globinours [0.1.0]: https://nnsprod.com/git/oversu/Globinours +## [1.0.0-rc.9] — 2026-09-08 + +### Troisième lot de tickets + +- ajout de liens publics facultatifs vers WhatsApp, LinkedIn, X et Snapchat, sans ressource chargée depuis un service tiers (`#7`) ; +- clarification de la conservation de l’historique lors de la désactivation d’une salle (`#11`) ; +- distinction explicite entre les frais d’adoption et le catalogue des coûts vétérinaires (`#14`) ; +- rappel du routeur requis par le serveur PHP local pour rendre la recherche universelle disponible (`#19`) ; +- vérification des correctifs déjà livrés pour le lien du pied de page et l’ajout d’espèces aux références biologiques (`#8`, `#15`). diff --git a/HISTORIQUE.md b/HISTORIQUE.md index 43924b4..99e6be8 100644 --- a/HISTORIQUE.md +++ b/HISTORIQUE.md @@ -41,3 +41,7 @@ Fiabilisation du géocodage et des formulaires de configuration, amélioration d ## `1.0.0-rc.8` — Deuxième lot de tickets Clarification du diagnostic système et de la santé des sauvegardes, validation des identifiants administratifs et encadrement des longueurs de noms. + +## `1.0.0-rc.9` — Troisième lot de tickets + +Extension des liens sociaux du site public, clarification des salles et des tarifs, et documentation du routage nécessaire à la recherche locale. diff --git a/README.md b/README.md index b13e51c..b26890b 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,8 @@ php -d upload_max_filesize=250M -d post_max_size=260M \ -S 127.0.0.1:8000 -t public public/router.php ``` +Le dernier argument, `public/router.php`, est indispensable : sans lui, les routes telles que la recherche universelle (`/search.json`) renvoient une page introuvable avec le serveur PHP intégré. + Ouvrez ensuite `http://127.0.0.1:8000/setup`. L’assistant vérifie l’environnement, recueille l’identité de l’association et crée le premier compte administrateur. Les migrations sont appliquées automatiquement. Elles peuvent aussi être exécutées explicitement : diff --git a/VERSION b/VERSION index e9c62cf..99ebec6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.0.0-rc.8 +1.0.0-rc.9 diff --git a/app/Controllers/SettingsController.php b/app/Controllers/SettingsController.php index 64b59d6..d4ce8d4 100644 --- a/app/Controllers/SettingsController.php +++ b/app/Controllers/SettingsController.php @@ -825,7 +825,20 @@ final class SettingsController exit(); } $values['public_site_custom_css'] = $customCss; - foreach (['public_site_donation_url', 'public_site_facebook_url', 'public_site_instagram_url', 'public_site_youtube_url', 'public_site_tiktok_url'] as $key) { + foreach ( + [ + 'public_site_donation_url', + 'public_site_facebook_url', + 'public_site_instagram_url', + 'public_site_youtube_url', + 'public_site_tiktok_url', + 'public_site_whatsapp_url', + 'public_site_linkedin_url', + 'public_site_x_url', + 'public_site_snapchat_url', + ] + as $key + ) { $url = trim((string) ($_POST[$key] ?? '')); $scheme = strtolower((string) parse_url($url, PHP_URL_SCHEME)); if ($url !== '' && (!filter_var($url, FILTER_VALIDATE_URL) || $scheme !== 'https')) { diff --git a/app/Services/AppSettings.php b/app/Services/AppSettings.php index 102d351..52fddac 100644 --- a/app/Services/AppSettings.php +++ b/app/Services/AppSettings.php @@ -39,6 +39,10 @@ final class AppSettings 'public_site_instagram_url' => '', 'public_site_youtube_url' => '', 'public_site_tiktok_url' => '', + 'public_site_whatsapp_url' => '', + 'public_site_linkedin_url' => '', + 'public_site_x_url' => '', + 'public_site_snapchat_url' => '', 'notification_email_enabled' => '0', 'notification_email_frequency' => 'weekly', 'notification_email_recipient' => '', diff --git a/app/Views/evolutions.php b/app/Views/evolutions.php index ea10128..15894d0 100644 --- a/app/Views/evolutions.php +++ b/app/Views/evolutions.php @@ -31,10 +31,10 @@
- 1.0.0-rc.8 -

Deuxième lot de tickets

-

Diagnostic système clarifié, identifiants administratifs contrôlés et - longueurs des principaux noms encadrées.

+ 1.0.0-rc.9 +

Troisième lot de tickets

+

Site public enrichi, salles et tarifs clarifiés, et lancement local de la + recherche mieux documenté.

diff --git a/app/Views/public_site_contact.php b/app/Views/public_site_contact.php index 2b458b0..5599cbe 100644 --- a/app/Views/public_site_contact.php +++ b/app/Views/public_site_contact.php @@ -14,7 +14,7 @@ $obfuscate = static fn (string$value): string => implode('', array_reverse(mb_st class="contact-obfuscated">
- 'Facebook','instagram' => 'Instagram','youtube' => 'YouTube','tiktok' => 'TikTok'] as $network => $label): + 'Facebook','instagram' => 'Instagram','youtube' => 'YouTube','tiktok' => 'TikTok','whatsapp' => 'WhatsApp','linkedin' => 'LinkedIn','x' => 'X','snapchat' => 'Snapchat'] as $network => $label): $url = trim((string)($settings['public_site_' . $network . '_url'] ?? '')); if ($url === '') continue; ?> diff --git a/app/Views/settings_pricing.php b/app/Views/settings_pricing.php index 0314820..b76a6ee 100644 --- a/app/Views/settings_pricing.php +++ b/app/Views/settings_pricing.php @@ -10,7 +10,10 @@
-

+
+

+
+
diff --git a/app/Views/settings_public_site.php b/app/Views/settings_public_site.php index ae7fa93..68809b4 100644 --- a/app/Views/settings_public_site.php +++ b/app/Views/settings_public_site.php @@ -137,7 +137,7 @@ name="public_site_facebook_url" value="">
- 'YouTube','tiktok' => 'TikTok'] as $network => $label): ?> + 'YouTube','tiktok' => 'TikTok','whatsapp' => 'WhatsApp','linkedin' => 'LinkedIn','x' => 'X','snapchat' => 'Snapchat'] as $network => $label): ?>
diff --git a/app/Views/settings_rooms.php b/app/Views/settings_rooms.php index 620f3f5..3fe301a 100644 --- a/app/Views/settings_rooms.php +++ b/app/Views/settings_rooms.php @@ -2,7 +2,7 @@
-
+
(int)$box['active'] === 1), 'name')); ?>
diff --git a/migrations/092_additional_public_social_links.sql b/migrations/092_additional_public_social_links.sql new file mode 100644 index 0000000..7c10680 --- /dev/null +++ b/migrations/092_additional_public_social_links.sql @@ -0,0 +1,5 @@ +INSERT OR IGNORE INTO app_settings(setting_key, setting_value) VALUES +('public_site_whatsapp_url', ''), +('public_site_linkedin_url', ''), +('public_site_x_url', ''), +('public_site_snapchat_url', ''); diff --git a/resources/lang/en.php b/resources/lang/en.php index cd8aaf2..2daa378 100644 --- a/resources/lang/en.php +++ b/resources/lang/en.php @@ -123,4 +123,5 @@ return [ 'public_site.image_library'=>'Image library','public_site.image_file'=>'Image to add','public_site.image_upload'=>'Upload image','public_site.image_help'=>'Upload an image, place the cursor in a text field, then choose “Insert”. Accepted formats: JPEG, PNG and WebP.','public_site.image_none'=>'No image uploaded.','public_site.image_insert'=>'Insert','public_site.image_invalid'=>'Choose a valid image.', 'rooms.duplicate'=>'A room with this name or code already exists.','settings.species_duplicate'=>'A species with this name or code already exists.', 'settings.invalid_rna'=>'The RNA number must start with W followed by 9 digits.','settings.invalid_siret'=>'The SIRET number must contain 14 digits and be valid.','rooms.name_too_long'=>'A room name cannot exceed 100 characters.','rooms.box_name_too_long'=>'A box name cannot exceed 100 characters.','animal.name_too_long'=>'An animal name cannot exceed 150 characters.', + 'pricing.adoption_fees_help'=>'Indicative amounts shared by all animals, according to their sterilisation status.','rooms.inactive_help'=>'An unchecked room becomes inactive, while its previous assignments remain in the history. Its internal code never changes.', ]; diff --git a/resources/lang/fr.php b/resources/lang/fr.php index a898da4..ca5b3bd 100644 --- a/resources/lang/fr.php +++ b/resources/lang/fr.php @@ -123,4 +123,5 @@ return [ 'public_site.image_library'=>'Bibliothèque d’images','public_site.image_file'=>'Image à ajouter','public_site.image_upload'=>'Ajouter l’image','public_site.image_help'=>'Ajoutez une image, placez le curseur dans un texte puis choisissez « Insérer ». Formats acceptés : JPEG, PNG et WebP.','public_site.image_none'=>'Aucune image ajoutée.','public_site.image_insert'=>'Insérer','public_site.image_invalid'=>'Choisissez une image valide.', 'rooms.duplicate'=>'Une salle portant ce nom ou ce code existe déjà.','settings.species_duplicate'=>'Une espèce portant ce nom ou ce code existe déjà.', 'settings.invalid_rna'=>'Le numéro RNA doit commencer par W et être suivi de 9 chiffres.','settings.invalid_siret'=>'Le numéro SIRET doit contenir 14 chiffres et être valide.','rooms.name_too_long'=>'Le nom d’une salle ne peut pas dépasser 100 caractères.','rooms.box_name_too_long'=>'Le nom d’un box ne peut pas dépasser 100 caractères.','animal.name_too_long'=>'Le nom d’un animal ne peut pas dépasser 150 caractères.', + 'pricing.adoption_fees_help'=>'Montants indicatifs communs à tous les animaux, selon leur état de stérilisation.','rooms.inactive_help'=>'Une salle décochée devient inactive, mais ses anciennes affectations restent dans l’historique. Son code interne ne change jamais.', ];