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:
@@ -349,6 +349,6 @@ CREATE TRIGGER update_user_permissions_updated_at
|
|||||||
INSERT INTO settings (key, value, category, description) VALUES
|
INSERT INTO settings (key, value, category, description) VALUES
|
||||||
('randomize_propositions', 'true', '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'),
|
('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')
|
('export_anonymization', 'full', 'export', 'Niveau d''anonymisation des exports')
|
||||||
ON CONFLICT (key) DO NOTHING;
|
ON CONFLICT (key) DO NOTHING;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Cette catégorie contient les paramètres liés à l'affichage de l'interface ut
|
|||||||
|
|
||||||
- **Clé** : `randomize_propositions`
|
- **Clé** : `randomize_propositions`
|
||||||
- **Type** : Booléen (true/false)
|
- **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.
|
- **Description** : Lorsque activé, les propositions sont affichées dans un ordre aléatoire pour chaque participant lors du vote.
|
||||||
|
|
||||||
**Comportement :**
|
**Comportement :**
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import { Badge } from '@/components/ui/badge';
|
|||||||
|
|
||||||
|
|
||||||
import AuthGuard from '@/components/AuthGuard';
|
import AuthGuard from '@/components/AuthGuard';
|
||||||
|
import Footer from '@/components/Footer';
|
||||||
import { FolderOpen, Users, FileText, Plus, BarChart3, Settings, Check, Copy } from 'lucide-react';
|
import { FolderOpen, Users, FileText, Plus, BarChart3, Settings, Check, Copy } from 'lucide-react';
|
||||||
import StatusSwitch from '@/components/StatusSwitch';
|
import StatusSwitch from '@/components/StatusSwitch';
|
||||||
import { MarkdownContent } from '@/components/MarkdownContent';
|
import { MarkdownContent } from '@/components/MarkdownContent';
|
||||||
@@ -465,6 +466,9 @@ function AdminPageContent() {
|
|||||||
{selectedCampaign && (
|
{selectedCampaign && (
|
||||||
<DeleteCampaignModal isOpen={showDeleteModal} onClose={() => setShowDeleteModal(false)} onSuccess={handleCampaignDeleted} campaign={selectedCampaign} />
|
<DeleteCampaignModal isOpen={showDeleteModal} onClose={() => setShowDeleteModal(false)} onSuccess={handleCampaignDeleted} campaign={selectedCampaign} />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{/* Footer */}
|
||||||
|
<Footer />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { Switch } from '@/components/ui/switch';
|
|||||||
import { Label } from '@/components/ui/label';
|
import { Label } from '@/components/ui/label';
|
||||||
import Navigation from '@/components/Navigation';
|
import Navigation from '@/components/Navigation';
|
||||||
import AuthGuard from '@/components/AuthGuard';
|
import AuthGuard from '@/components/AuthGuard';
|
||||||
|
import Footer from '@/components/Footer';
|
||||||
import SmtpSettingsForm from '@/components/SmtpSettingsForm';
|
import SmtpSettingsForm from '@/components/SmtpSettingsForm';
|
||||||
import { Settings, Monitor, Save, CheckCircle, Mail, FileText, Download } from 'lucide-react';
|
import { Settings, Monitor, Save, CheckCircle, Mail, FileText, Download } from 'lucide-react';
|
||||||
import { ExportAnonymizationSelect, AnonymizationLevel } from '@/components/ExportAnonymizationSelect';
|
import { ExportAnonymizationSelect, AnonymizationLevel } from '@/components/ExportAnonymizationSelect';
|
||||||
@@ -48,7 +49,7 @@ function SettingsPageContent() {
|
|||||||
setSettings(settingsData);
|
setSettings(settingsData);
|
||||||
|
|
||||||
// Charger la valeur du paramètre d'ordre aléatoire
|
// 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);
|
setRandomizePropositions(randomizeValue);
|
||||||
|
|
||||||
// Charger le message de la page de dépôt de propositions
|
// Charger le message de la page de dépôt de propositions
|
||||||
@@ -56,7 +57,7 @@ function SettingsPageContent() {
|
|||||||
setProposePageMessage(messageValue);
|
setProposePageMessage(messageValue);
|
||||||
|
|
||||||
// Charger le message du bas de page
|
// 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);
|
setFooterMessage(footerValue);
|
||||||
|
|
||||||
// Charger le niveau d'anonymisation des exports
|
// Charger le niveau d'anonymisation des exports
|
||||||
@@ -267,6 +268,9 @@ function SettingsPageContent() {
|
|||||||
setTimeout(() => setSaved(false), 2000);
|
setTimeout(() => setSaved(false), 2000);
|
||||||
}} />
|
}} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Footer */}
|
||||||
|
<Footer />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -186,9 +186,9 @@ SUPABASE_SERVICE_ROLE_KEY=${body.supabaseServiceKey}
|
|||||||
// 7. Ajouter des paramètres par défaut
|
// 7. Ajouter des paramètres par défaut
|
||||||
try {
|
try {
|
||||||
const defaultSettings = [
|
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: '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' }
|
{ key: 'export_anonymization', value: 'full', category: 'export', description: 'Niveau d\'anonymisation des exports' }
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ export default function PublicVotePage() {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
// Vérifier si l'ordre aléatoire est activé
|
// 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) {
|
if (randomizePropositions) {
|
||||||
// Mélanger les propositions de manière aléatoire
|
// Mélanger les propositions de manière aléatoire
|
||||||
|
|||||||
@@ -22,19 +22,19 @@ export default function Footer({ className = '', variant = 'public' }: FooterPro
|
|||||||
|
|
||||||
if (!supabaseUrl || !supabaseAnonKey || supabaseUrl === 'https://placeholder.supabase.co') {
|
if (!supabaseUrl || !supabaseAnonKey || supabaseUrl === 'https://placeholder.supabase.co') {
|
||||||
// Supabase n'est pas configuré, utiliser le message par défaut
|
// 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);
|
setLoading(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const message = await settingsService.getStringValue(
|
const message = await settingsService.getStringValue(
|
||||||
'footer_message',
|
'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);
|
setFooterMessage(message);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Ignorer silencieusement les erreurs et utiliser le message par défaut
|
// 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 {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
@@ -49,18 +49,7 @@ export default function Footer({ className = '', variant = 'public' }: FooterPro
|
|||||||
|
|
||||||
const { text: processedText, links } = parseFooterMessage(footerMessage, PROJECT_CONFIG.repository.url);
|
const { text: processedText, links } = parseFooterMessage(footerMessage, PROJECT_CONFIG.repository.url);
|
||||||
|
|
||||||
// Pour la page d'accueil, utiliser un style plus simple
|
// Fonction pour rendre le texte avec les 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">
|
|
||||||
{processedText}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pour les pages publiques, utiliser un style plus discret avec liens
|
|
||||||
const renderFooterText = () => {
|
const renderFooterText = () => {
|
||||||
if (links.length === 0) {
|
if (links.length === 0) {
|
||||||
return processedText;
|
return processedText;
|
||||||
@@ -83,7 +72,7 @@ export default function Footer({ className = '', variant = 'public' }: FooterPro
|
|||||||
href={link.url}
|
href={link.url}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
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}
|
{link.text}
|
||||||
</a>
|
</a>
|
||||||
@@ -100,6 +89,17 @@ export default function Footer({ className = '', variant = 'public' }: FooterPro
|
|||||||
return elements;
|
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 (
|
return (
|
||||||
<div className={`text-center mt-16 pb-20 ${className}`}>
|
<div className={`text-center mt-16 pb-20 ${className}`}>
|
||||||
<p className="text-gray-400 text-sm">
|
<p className="text-gray-400 text-sm">
|
||||||
|
|||||||
@@ -354,9 +354,9 @@ CREATE TRIGGER update_user_permissions_updated_at
|
|||||||
|
|
||||||
-- Insérer les paramètres par défaut
|
-- Insérer les paramètres par défaut
|
||||||
INSERT INTO settings (key, value, category, description) VALUES
|
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'),
|
('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')
|
('export_anonymization', 'full', 'export', 'Niveau d''anonymisation des exports')
|
||||||
ON CONFLICT (key) DO NOTHING;`;
|
ON CONFLICT (key) DO NOTHING;`;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user