diff --git a/app/Enums/FieldType.php b/app/Enums/FieldType.php index 41d7c53..3d4d466 100644 --- a/app/Enums/FieldType.php +++ b/app/Enums/FieldType.php @@ -10,4 +10,5 @@ enum FieldType: string case Select = 'select'; case Textarea = 'textarea'; case Number = 'number'; + case Place = 'place'; } diff --git a/app/Http/Controllers/ReleveController.php b/app/Http/Controllers/ReleveController.php index 40a349c..c7e7ba9 100644 --- a/app/Http/Controllers/ReleveController.php +++ b/app/Http/Controllers/ReleveController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Enums\FieldType; use App\Http\Requests\StoreReleveRequest; use App\Http\Requests\UpdateReleveRequest; +use App\Models\Lieu; use App\Models\Releve; use App\Models\Source; use Illuminate\Http\RedirectResponse; @@ -108,6 +109,10 @@ class ReleveController extends Controller 'valeur' => $value['valeur'] ?? null, 'calendrier' => $value['calendrier'] ?? 'gregorien', ], + FieldType::Place => $value ? (function () use ($value) { + $lieu = Lieu::find((int) $value, ['id', 'nom_long']); + return $lieu ? ['id' => $lieu->id, 'nom_long' => $lieu->nom_long] : null; + })() : null, default => $value === '' ? null : $value, }; } diff --git a/app/Http/Requests/StoreReleveRequest.php b/app/Http/Requests/StoreReleveRequest.php index cbea5b4..ecb6c89 100644 --- a/app/Http/Requests/StoreReleveRequest.php +++ b/app/Http/Requests/StoreReleveRequest.php @@ -46,6 +46,10 @@ class StoreReleveRequest extends FormRequest $rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'in:' . implode(',', $options)]; break; + case FieldType::Place: + $rules[$base] = [$field->required ? 'required' : 'nullable', 'integer', 'exists:lieux,id']; + break; + default: // text, textarea $rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'max:2000']; } diff --git a/app/Http/Requests/UpdateReleveRequest.php b/app/Http/Requests/UpdateReleveRequest.php index b33813d..dc1abd6 100644 --- a/app/Http/Requests/UpdateReleveRequest.php +++ b/app/Http/Requests/UpdateReleveRequest.php @@ -41,6 +41,9 @@ class UpdateReleveRequest extends FormRequest $options = $field->options ?? []; $rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'in:' . implode(',', $options)]; break; + case FieldType::Place: + $rules[$base] = [$field->required ? 'required' : 'nullable', 'integer', 'exists:lieux,id']; + break; default: $rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'max:2000']; } diff --git a/resources/views/releves/_field.blade.php b/resources/views/releves/_field.blade.php index e838282..446f894 100644 --- a/resources/views/releves/_field.blade.php +++ b/resources/views/releves/_field.blade.php @@ -7,6 +7,10 @@ $name = "data[{$field->name}]"; $inputId = "field_{$field->name}"; $oldValue = old("data.{$field->name}", $value); + + // Pour le type place : $value est soit null, soit ['id'=>…,'nom_long'=>…] + $placeId = $field->type === FieldType::Place ? ($value['id'] ?? null) : null; + $placeNomLong = $field->type === FieldType::Place ? ($value['nom_long'] ?? '') : ''; @endphp
@@ -94,6 +98,17 @@ @enderror @break + @case(FieldType::Place) + + @break + @endswitch @error("data.{$field->name}") diff --git a/resources/views/releves/show.blade.php b/resources/views/releves/show.blade.php index a2c0e52..973978f 100644 --- a/resources/views/releves/show.blade.php +++ b/resources/views/releves/show.blade.php @@ -42,6 +42,8 @@
@if($val === null || $val === '') + @elseif(is_array($val) && isset($val['nom_long'])) + {{ $val['nom_long'] }} @elseif(is_array($val)) {{ $val['valeur'] ?? '—' }} @if(!empty($val['calendrier']) && $val['calendrier'] !== 'gregorien')