Gestion utilisateurs, limites recherche, filtres lieux/sources, fix logo prod

- Admin : CRUD complet utilisateurs (créer, modifier nom/email/mdp/rôle, supprimer)
  avec garde-fous (dernier admin, compte propre)
- Recherche : limite configurable par l'admin (défaut 200), bannière d'avertissement
  quand la limite est atteinte, plus de pagination (résultats en bloc)
- Lieux : liste non chargée sans filtre actif (performance sur grands volumes)
- Sources : idem pour admin/responsables ; membres voient toujours leurs sources
- Logo 404 prod : +FollowSymLinks dans .htaccess, storage:link dans l'assistant
  d'installation, bouton "Recréer le lien" dans Administration → Paramètres

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-07 03:39:06 +02:00
parent dab9e758fe
commit 6a73a2f001
16 changed files with 464 additions and 99 deletions
@@ -37,6 +37,24 @@
@enderror
</div>
{{-- Nombre maximum de résultats de recherche --}}
<div class="pt-4 border-t border-gray-100 dark:border-gray-700">
<label for="search_max_results" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
Nombre maximum de résultats de recherche
</label>
<input type="number" id="search_max_results" name="search_max_results"
value="{{ old('search_max_results', \App\Services\SiteSettingsService::get('search_max_results', 200)) }}"
min="10" max="5000"
class="block w-32 rounded-md border-gray-300 dark:border-gray-600 shadow-sm text-sm
focus:border-indigo-500 focus:ring-indigo-500">
<p class="mt-1 text-xs text-gray-400 dark:text-gray-500">
La page de recherche affiche au plus ce nombre de relevés. Si la limite est atteinte, un message invite l'utilisateur à affiner ses critères. (10 5000, défaut : 200)
</p>
@error('search_max_results')
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
@enderror
</div>
{{-- Inscriptions --}}
<div class="pt-4 border-t border-gray-100 dark:border-gray-700">
<p class="text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">Inscription publique des comptes</p>
@@ -62,6 +80,22 @@
</form>
</div>
{{-- Lien de stockage public --}}
<div class="bg-white dark:bg-gray-800 shadow rounded-lg p-6 space-y-3">
<h3 class="text-sm font-semibold text-gray-700 dark:text-gray-300 uppercase tracking-wide">Lien de stockage</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">
Le lien symbolique <code class="bg-gray-100 dark:bg-gray-700 px-1 rounded text-xs">public/storage</code> permet de servir les fichiers (logo, etc.) via l'URL <code class="bg-gray-100 dark:bg-gray-700 px-1 rounded text-xs">/storage/</code>.
S'il est absent, le logo sera invisible et d'autres fichiers seront inaccessibles.
</p>
<form method="POST" action="{{ route('admin.parametres.storage-link') }}">
@csrf
<button type="submit"
class="px-4 py-2 bg-gray-100 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 text-sm rounded-md hover:bg-gray-200 dark:hover:bg-gray-600">
Recréer le lien de stockage
</button>
</form>
</div>
{{-- Logo --}}
<div class="bg-white dark:bg-gray-800 shadow rounded-lg p-6 space-y-5">
<h3 class="text-sm font-semibold text-gray-700 dark:text-gray-300 uppercase tracking-wide">Logo du site</h3>