corrige les valeurs par défaut (ordre aléatoires et message footer par défaut)

Ajout footer sur les pages admin
This commit is contained in:
Yannick Le Duc
2025-09-16 13:41:32 +02:00
parent cb98d1c87c
commit de86264047
8 changed files with 33 additions and 25 deletions

View File

@@ -349,6 +349,6 @@ CREATE TRIGGER update_user_permissions_updated_at
INSERT INTO settings (key, value, category, description) VALUES
('randomize_propositions', 'true', 'display', 'Afficher les propositions dans un ordre aléatoire'),
('propose_page_message', 'Partagez votre vision et proposez des projets qui feront la différence dans votre collectif. Votre voix compte pour façonner l''avenir de votre communauté.', 'display', 'Message affiché sur la page de dépôt de propositions'),
('footer_message', 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre](GITURL) et open source', 'display', 'Message affiché en bas de page'),
('footer_message', 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)', 'display', 'Message affiché en bas de page'),
('export_anonymization', 'full', 'export', 'Niveau d''anonymisation des exports')
ON CONFLICT (key) DO NOTHING;

View File

@@ -20,7 +20,7 @@ Cette catégorie contient les paramètres liés à l'affichage de l'interface ut
- **Clé** : `randomize_propositions`
- **Type** : Booléen (true/false)
- **Valeur par défaut** : `false`
- **Valeur par défaut** : `true`
- **Description** : Lorsque activé, les propositions sont affichées dans un ordre aléatoire pour chaque participant lors du vote.
**Comportement :**

View File

@@ -13,6 +13,7 @@ import { Badge } from '@/components/ui/badge';
import AuthGuard from '@/components/AuthGuard';
import Footer from '@/components/Footer';
import { FolderOpen, Users, FileText, Plus, BarChart3, Settings, Check, Copy } from 'lucide-react';
import StatusSwitch from '@/components/StatusSwitch';
import { MarkdownContent } from '@/components/MarkdownContent';
@@ -465,6 +466,9 @@ function AdminPageContent() {
{selectedCampaign && (
<DeleteCampaignModal isOpen={showDeleteModal} onClose={() => setShowDeleteModal(false)} onSuccess={handleCampaignDeleted} campaign={selectedCampaign} />
)}
{/* Footer */}
<Footer />
</div>
</div>
);

View File

@@ -8,6 +8,7 @@ import { Switch } from '@/components/ui/switch';
import { Label } from '@/components/ui/label';
import Navigation from '@/components/Navigation';
import AuthGuard from '@/components/AuthGuard';
import Footer from '@/components/Footer';
import SmtpSettingsForm from '@/components/SmtpSettingsForm';
import { Settings, Monitor, Save, CheckCircle, Mail, FileText, Download } from 'lucide-react';
import { ExportAnonymizationSelect, AnonymizationLevel } from '@/components/ExportAnonymizationSelect';
@@ -48,7 +49,7 @@ function SettingsPageContent() {
setSettings(settingsData);
// Charger la valeur du paramètre d'ordre aléatoire
const randomizeValue = await settingsService.getBooleanValue('randomize_propositions', false);
const randomizeValue = await settingsService.getBooleanValue('randomize_propositions', true);
setRandomizePropositions(randomizeValue);
// Charger le message de la page de dépôt de propositions
@@ -56,7 +57,7 @@ function SettingsPageContent() {
setProposePageMessage(messageValue);
// Charger le message du bas de page
const footerValue = await settingsService.getStringValue('footer_message', 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL) et transparent pour tous');
const footerValue = await settingsService.getStringValue('footer_message', 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)');
setFooterMessage(footerValue);
// Charger le niveau d'anonymisation des exports
@@ -267,6 +268,9 @@ function SettingsPageContent() {
setTimeout(() => setSaved(false), 2000);
}} />
</div>
{/* Footer */}
<Footer />
</div>
</div>
);

View File

@@ -186,9 +186,9 @@ SUPABASE_SERVICE_ROLE_KEY=${body.supabaseServiceKey}
// 7. Ajouter des paramètres par défaut
try {
const defaultSettings = [
{ key: 'randomize_propositions', value: 'false', category: 'display', description: 'Afficher les propositions dans un ordre aléatoire' },
{ key: 'randomize_propositions', value: 'true', category: 'display', description: 'Afficher les propositions dans un ordre aléatoire' },
{ key: 'propose_page_message', value: 'Partagez votre vision et proposez des projets qui feront la différence dans votre collectif. Votre voix compte pour façonner l\'avenir de votre communauté.', category: 'display', description: 'Message affiché sur la page de dépôt de propositions' },
{ key: 'footer_message', value: 'Développé avec ❤️ pour faciliter la démocratie participative - Logiciel libre et open source', category: 'display', description: 'Message affiché en bas de page' },
{ key: 'footer_message', value: 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)', category: 'display', description: 'Message affiché en bas de page' },
{ key: 'export_anonymization', value: 'full', category: 'export', description: 'Niveau d\'anonymisation des exports' }
];

View File

@@ -161,7 +161,7 @@ export default function PublicVotePage() {
}));
// Vérifier si l'ordre aléatoire est activé
const randomizePropositions = await settingsService.getBooleanValue('randomize_propositions', false);
const randomizePropositions = await settingsService.getBooleanValue('randomize_propositions', true);
if (randomizePropositions) {
// Mélanger les propositions de manière aléatoire

View File

@@ -22,19 +22,19 @@ export default function Footer({ className = '', variant = 'public' }: FooterPro
if (!supabaseUrl || !supabaseAnonKey || supabaseUrl === 'https://placeholder.supabase.co') {
// Supabase n'est pas configuré, utiliser le message par défaut
setFooterMessage('Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL) et transparent pour tous');
setFooterMessage('Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)');
setLoading(false);
return;
}
const message = await settingsService.getStringValue(
'footer_message',
'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL) et transparent pour tous'
'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)'
);
setFooterMessage(message);
} catch (error) {
// Ignorer silencieusement les erreurs et utiliser le message par défaut
setFooterMessage('Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL) et transparent pour tous');
setFooterMessage('Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)');
} finally {
setLoading(false);
}
@@ -49,18 +49,7 @@ export default function Footer({ className = '', variant = 'public' }: FooterPro
const { text: processedText, links } = parseFooterMessage(footerMessage, PROJECT_CONFIG.repository.url);
// Pour la page d'accueil, utiliser un style plus simple
if (variant === 'home') {
return (
<div className={`text-center mt-16 pb-8 ${className}`}>
<p className="text-slate-600 dark:text-slate-400 text-lg">
{processedText}
</p>
</div>
);
}
// Pour les pages publiques, utiliser un style plus discret avec liens
// Fonction pour rendre le texte avec les liens cliquables
const renderFooterText = () => {
if (links.length === 0) {
return processedText;
@@ -83,7 +72,7 @@ export default function Footer({ className = '', variant = 'public' }: FooterPro
href={link.url}
target="_blank"
rel="noopener noreferrer"
className="text-gray-500 hover:text-gray-700 underline"
className={variant === 'home' ? "text-slate-600 dark:text-slate-400 hover:text-slate-800 dark:hover:text-slate-200 underline" : "text-gray-500 hover:text-gray-700 underline"}
>
{link.text}
</a>
@@ -100,6 +89,17 @@ export default function Footer({ className = '', variant = 'public' }: FooterPro
return elements;
};
// Pour la page d'accueil, utiliser un style plus simple mais avec liens cliquables
if (variant === 'home') {
return (
<div className={`text-center mt-16 pb-8 ${className}`}>
<p className="text-slate-600 dark:text-slate-400 text-lg">
{renderFooterText()}
</p>
</div>
);
}
return (
<div className={`text-center mt-16 pb-20 ${className}`}>
<p className="text-gray-400 text-sm">

View File

@@ -354,9 +354,9 @@ CREATE TRIGGER update_user_permissions_updated_at
-- Insérer les paramètres par défaut
INSERT INTO settings (key, value, category, description) VALUES
('randomize_propositions', 'false', 'display', 'Afficher les propositions dans un ordre aléatoire'),
('randomize_propositions', 'true', 'display', 'Afficher les propositions dans un ordre aléatoire'),
('propose_page_message', 'Partagez votre vision et proposez des projets qui feront la différence dans votre collectif. Votre voix compte pour façonner l''avenir de votre communauté.', 'display', 'Message affiché sur la page de dépôt de propositions'),
('footer_message', 'Développé avec ❤️ pour faciliter la démocratie participative - Logiciel libre et open source', 'display', 'Message affiché en bas de page'),
('footer_message', 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)', 'display', 'Message affiché en bas de page'),
('export_anonymization', 'full', 'export', 'Niveau d''anonymisation des exports')
ON CONFLICT (key) DO NOTHING;`;