{{-- Les filtres de la photothèque : une barre au-dessus des photos, la recherche puis un menu par filtre (Bootstrap, qui reste ouvert tant qu'on clique dedans). Un formulaire GET. Dans un menu, cocher ne recharge rien : le bouton « Voir N photos » compte ce que donnerait la sélection (?compte=1) ; il envoie, comme refermer le menu après un changement, ou « Effacer » (js/phototheque.js). La recherche part à Entrée ; une liste déroulante, dès qu'on choisit. Chaque valeur porte le nombre de photos qu'elle donnerait avec les AUTRES filtres (Phototheque::requete($sauf)). Le bouton d'un menu dit ce qui y est choisi : la valeur s'il n'y en a qu'une, sinon leur nombre. --}} @php $choisis = collect($actifs)->groupBy('cle'); $resume = function (array $cles) use ($choisis) { $valeurs = collect($cles)->flatMap(fn ($c) => $choisis->get($c, collect())->pluck('valeur')); return match ($valeurs->count()) { 0 => null, 1 => $valeurs->first(), default => (string) $valeurs->count(), }; }; $plus = collect([ $filtres->articles ? count($filtres->articles) : 0, $filtres->photographe !== null || $filtres->photographeNom !== null ? 1 : 0, $filtres->retouchees ? 1 : 0, $filtres->surLeSite ? 1 : 0, $filtres->videos ? 1 : 0, ])->sum(); $gererEtiquettes = auth()->user()?->can('photos.edit'); @endphp
@foreach ([ 'client' => $filtres->client, 'planning' => $filtres->planning, // L'onglet (à traiter, corbeille) reste d'un filtre à l'autre. 'vue' => $filtres->vue === 'toutes' ? null : $filtres->vue, ] as $nom => $valeur) @if ($valeur !== null) @endif @endforeach
{{-- ===== Produit : les types à gauche, les modèles du type choisi à droite, la flèche d'un modèle déplie ses variations. Le champ cherche dans tous les types à la fois. ===== --}} @if ($produits) @php $typeOuvert = collect($produits)->first(fn ($t) => $t['coche'] || $t['ouvert'])['cle'] ?? $produits[0]['cle']; @endphp @include('admin.photos._menu-bouton', ['libelle' => __('Produit'), 'choix' => $resume([__('Produit')])]) @endif {{-- ===== Ville : les plus photographiées d'abord ===== --}} @if ($villes->isNotEmpty() || $filtres->villes) @include('admin.photos._menu-bouton', ['libelle' => __('Ville'), 'choix' => $resume([__('Ville')])]) @endif {{-- ===== Date du chantier ===== --}} @include('admin.photos._menu-bouton', ['libelle' => __('Date'), 'choix' => $resume([__('Date')])]) {{-- ===== Couleur ===== --}} @if ($couleurs->isNotEmpty() || $filtres->couleurs) @include('admin.photos._menu-bouton', ['libelle' => __('Couleur'), 'choix' => $resume([__('Couleur')])]) @endif {{-- ===== Étiquettes : celles de la sélection, les plus posées d'abord. Cochées ensemble, elles affinent (ET). « Gérer » : toute la liste, dans une fenêtre (admin/photos/_etiquettes). ===== --}} @if ($etiquettes->isNotEmpty() || $gererEtiquettes) @include('admin.photos._menu-bouton', ['libelle' => __('Étiquettes'), 'choix' => $resume([__('Étiquette')])]) @endif {{-- ===== À rattacher : ce que les photos ne disent pas encore, pour qui trie (photos.edit). Les clients de digiKam restés en texte (rattachés un à un depuis le panneau, le plus récent d'abord), les photos sans modèle ou sans couleur (« Rattacher », barre de sélection), et l'écran des libellés de digiKam absents du catalogue. ===== --}} @if ($gererEtiquettes) @include('admin.photos._menu-bouton', ['libelle' => __('À rattacher'), 'choix' => ($n = (int) $filtres->aRattacher + (int) $filtres->sansModele + (int) $filtres->sansCouleur) ? (string) $n : null]) @endif {{-- ===== Plus : ce qui sert moins souvent ===== --}} @include('admin.photos._menu-bouton', ['libelle' => __('Plus'), 'choix' => $plus ? (string) $plus : null]) @if ($actifs) {{ __('Tout effacer') }} @endif