From 3d2c5d2e282e6d0e54bf8a9ffe7e431bbf666fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Thu, 8 Apr 2021 20:06:14 +0200 Subject: [PATCH] OCB Breeders BO --- .../Controllers/Bo/BreedersController.php | 353 ------------------ .../Controllers/Bo/OCBBreedersController.php | 129 +++++++ app/Http/Controllers/BrandController.php | 5 +- app/Http/Controllers/HomeController.php | 5 +- app/Http/Controllers/MapController.php | 25 +- app/Http/Controllers/OCBController.php | 9 +- .../Controllers/TraceabilityController.php | 4 +- app/Http/Requests/StoreOcbBreeder.php | 108 ++++++ app/Http/Requests/UpdateOcbBreeder.php | 23 ++ app/Models/OCBBreeder.php | 70 +++- ...02_04_172518_create_ocb_breeders_table.php | 2 +- .../migrations/LeGaulois2016Migration.php | 24 +- resources/js/app.js | 2 +- .../js/components/bo/CKEditorComponent.vue | 13 +- resources/views/bo/breeders/create.blade.php | 159 -------- resources/views/bo/breeders/edit.blade.php | 265 ------------- .../views/bo/ocbbreeders/create.blade.php | 32 ++ resources/views/bo/ocbbreeders/edit.blade.php | 46 +++ .../views/bo/ocbbreeders/formInputs.blade.php | 206 ++++++++++ .../{breeders => ocbbreeders}/index.blade.php | 4 +- resources/views/layouts/bo.blade.php | 14 +- routes/web.php | 11 +- 22 files changed, 659 insertions(+), 850 deletions(-) delete mode 100644 app/Http/Controllers/Bo/BreedersController.php create mode 100644 app/Http/Controllers/Bo/OCBBreedersController.php create mode 100644 app/Http/Requests/StoreOcbBreeder.php create mode 100644 app/Http/Requests/UpdateOcbBreeder.php delete mode 100644 resources/views/bo/breeders/create.blade.php delete mode 100644 resources/views/bo/breeders/edit.blade.php create mode 100644 resources/views/bo/ocbbreeders/create.blade.php create mode 100644 resources/views/bo/ocbbreeders/edit.blade.php create mode 100644 resources/views/bo/ocbbreeders/formInputs.blade.php rename resources/views/bo/{breeders => ocbbreeders}/index.blade.php (85%) diff --git a/app/Http/Controllers/Bo/BreedersController.php b/app/Http/Controllers/Bo/BreedersController.php deleted file mode 100644 index bb4233d1..00000000 --- a/app/Http/Controllers/Bo/BreedersController.php +++ /dev/null @@ -1,353 +0,0 @@ -where('ocbType', $type->value); - })->paginate(); - return view('bo.breeders.index', compact('b', 'type')); - } - - public function create() - { - return view('bo.breeders.create')->with('types', $this->types); - } - - public function store(Request $request) - { - // Partie éleveur - $display = $request->display === null ? 0 : 1; - $breederCode = $request->breeder_code; - $firstName = $request->first_name; - $lastName = $request->last_name; - $slug = strtolower($lastName . '-' . $firstName . '-' . time()); - $picture = $request->picture; - $postalCode = $request->postal_code; - $town = $request->town; - $testimony = $request->testimony; - $type = $request->type; - $status = 0; - - $request->validate([ - 'breeder_code' => 'required', - 'first_name' => 'required|max:150', - 'last_name' => 'required|max:150', - 'picture' => 'required|image|mimes:jpeg,png,jpg|max:2048', - 'postal_code' => 'required|max:20', - 'testimony' => 'required|max:1000', - ]); - - $imageName = Str::slug($lastName) . '-' . Str::slug($firstName) . '-le-gaulois.' . $picture->extension(); - $picture->move(public_path('uploads/images/eleveurs/' . date('Y') . '/' . date('m')), $imageName); - - // Partie site de l'éleveur - $latitude = $request->latitude; - $longitude = $request->longitude; - $geoType = $request->geo_type; - $audit = $request->audit; - $validMarketingDate = $request->valid_marketing_date; - $presentationType = $request->presentation_type; - $videoLink = $request->video_link; - $picture1 = $request->picture1; - $picture2 = $request->picture2; - $picture3 = $request->picture3; - - $request->validate([ - 'latitude' => 'required|max:150', - 'longitude' => 'required|max:150', - ]); - - if ($presentationType === "1") { - $request->validate([ - 'video_link' => 'required|max:255' - ]); - } elseif ($presentationType === "2") { - $request->validate([ - 'picture1' => 'image|mimes:jpeg,png,jpg|max:2048', - 'picture2' => 'image|mimes:jpeg,png,jpg|max:2048', - 'picture3' => 'image|mimes:jpeg,png,jpg|max:2048', - ]); - - if ($picture1 !== null) { - $imageNameSite1 = Str::slug($lastName) . '-' . Str::slug($firstName) . '-site1-elevage-le-gaulois.' . $picture1->extension(); - $picture1->move(public_path('uploads/images/elevages/' . date('Y') . '/' . date('m')), $imageNameSite1); - } - if ($picture2 !== null) { - $imageNameSite2 = Str::slug($lastName) . '-' . Str::slug($firstName) . '-site2-elevage-le-gaulois.' . $picture2->extension(); - $picture2->move(public_path('uploads/images/elevages/' . date('Y') . '/' . date('m')), $imageNameSite2); - } - if ($picture3 !== null) { - $imageNameSite3 = Str::slug($lastName) . '-' . Str::slug($firstName) . '-site3-elevage-le-gaulois.' . $picture3->extension(); - $picture3->move(public_path('uploads/images/elevages/' . date('Y') . '/' . date('m')), $imageNameSite3); - } - } - - // Partie code INUAV - $inuavs = $request->inuavs; - - // Ajout des différents objets en base - // Eleveur - $b = new Breeders(); - $b->display = $display; - $b->breeder_code = $breederCode; - $b->first_name = $firstName; - $b->last_name = $lastName; - $b->slug = $slug; - $b->picture = 'uploads/images/eleveurs/' . date('Y') . '/' . date('m') . '/' . $imageName; - $b->postal_code = $postalCode; - $b->town = $town; - $b->testimony = $testimony; - $b->type = $type; - $b->status = $status; - - // Site d'élevage - $s = new BreedersSites(); - $s->latitude = $latitude; - $s->longitude = $longitude; - $s->geo_type = $geoType; - $s->audit = $audit; - $s->valid_marketing_date = $validMarketingDate; - $s->presentation_type = $presentationType; - if ($presentationType === "1") { - $s->video_link = $videoLink; - } elseif ($presentationType === "2") { - if ($picture1 !== null) { - $s->picture1 = 'uploads/images/elevages/' . date('Y') . '/' . date('m') . '/' . $imageNameSite1; - } - if ($picture2 !== null) { - $s->picture2 = 'uploads/images/elevages/' . date('Y') . '/' . date('m') . '/' . $imageNameSite2; - } - if ($picture3 !== null) { - $s->picture3 = 'uploads/images/elevages/' . date('Y') . '/' . date('m') . '/' . $imageNameSite3; - } - } - - // Ajout en BDD - $b->save(); - $s->breeder_id = $b->id; - $s->save(); - if ($inuavs !== null) { - array_filter($inuavs); - foreach ($inuavs as $inuav) { - $i = new BreedersInuav(); - $i->inuav = $inuav; - $i->breeder_id = $b->id; - $i->save(); - } - } - - return redirect()->route('bo.breeders.content', $type); - } - - public function edit(OCBType $type, Breeders $breeder) - { - return view('bo.breeders.edit', compact('breeder', 'type')); - } - - public function update(Request $request, Breeders $breeder) - { - // Partie éleveur - $display = $request->display === null ? 0 : 1; - $breederCode = $request->breeder_code; - $firstName = $request->first_name; - $lastName = $request->last_name; - $slug = strtolower($lastName . '-' . $firstName . '-' . time()); - $picture = $request->picture; - $postalCode = $request->postal_code; - $town = $request->town; - $testimony = $request->testimony; - $type = $request->type; - $status = $request->status === null ? 0 : 1; - - $request->validate([ - 'breeder_code' => 'required', - 'first_name' => 'required|max:150', - 'last_name' => 'required|max:150', - 'postal_code' => 'required|max:20', - 'testimony' => 'required|max:1000', - ]); - - if ($picture !== null) { - $request->validate([ - 'picture' => 'required|image|mimes:jpeg,png,jpg|max:2048', - ]); - } - - // Partie site de l'éleveur - $latitude = $request->latitude; - $longitude = $request->longitude; - $geoType = $request->geo_type; - $audit = $request->audit; - $validMarketingDate = $request->valid_marketing_date; - $presentationType = $request->presentation_type; - $videoLink = $request->video_link; - $picture1 = $request->picture1; - $picture2 = $request->picture2; - $picture3 = $request->picture3; - - $request->validate([ - 'latitude' => 'required|max:150', - 'longitude' => 'required|max:150', - ]); - - if ($type === 1) { - $request->validate([ - 'videoLink' => 'required|max:255' - ]); - } elseif ($type === 2) { - $request->validate([ - 'picture1' => 'image|mimes:jpeg,png,jpg|max:2048', - 'picture2' => 'image|mimes:jpeg,png,jpg|max:2048', - 'picture3' => 'image|mimes:jpeg,png,jpg|max:2048', - ]); - } - - // Partie code INUAV - $inuavs = $request->inuavs; - - $b = $breeder; - - // Gestion des images - if ($picture !== null) { - if ($b->picture !== null && file_exists(public_path() . '/' . $b->picture)) { - unlink(public_path() . '/' . $b->picture); - } - $imageName = Str::slug($lastName) . '-' . Str::slug($firstName) . '-le-gaulois.' . $picture->extension(); - $picture->move(public_path('uploads/images/eleveurs/' . date('Y') . '/' . date('m')), $imageName); - } - - if ($presentationType === "2") { - // Ajout des images seulement si le type de présentation est "Photos" - if ($picture1 !== null) { - if ($b->site->picture1 !== null && file_exists(public_path() . '/' . $b->site->picture1)) { - unlink(public_path() . '/' . $b->site->picture1); - } - $imageNameSite1 = Str::slug($lastName) . '-' . Str::slug($firstName) . '-site1-elevage-le-gaulois.' . $picture1->extension(); - $picture1->move(public_path('uploads/images/elevages/' . date('Y') . '/' . date('m')), $imageNameSite1); - } - if ($picture2 !== null) { - if ($b->site->picture2 !== null && file_exists(public_path() . '/' . $b->site->picture2)) { - unlink(public_path() . '/' . $b->site->picture2); - } - $imageNameSite2 = Str::slug($lastName) . '-' . Str::slug($firstName) . '-site2-elevage-le-gaulois.' . $picture2->extension(); - $picture2->move(public_path('uploads/images/elevages/' . date('Y') . '/' . date('m')), $imageNameSite2); - } - if ($picture3 !== null) { - if ($b->site->picture3 !== null && file_exists(public_path() . '/' . $b->site->picture3)) { - unlink(public_path() . '/' . $b->site->picture3); - } - $imageNameSite3 = Str::slug($lastName) . '-' . Str::slug($firstName) . '-site3-elevage-le-gaulois.' . $picture3->extension(); - $picture3->move(public_path('uploads/images/elevages/' . date('Y') . '/' . date('m')), $imageNameSite3); - } - } else { - // Sinon, suppression des photos puisqu'elles ne seront plus utilisées - if ($b->site->picture1 !== null && file_exists(public_path() . '/' . $b->site->picture1)) { - unlink(public_path() . '/' . $b->site->picture1); - } - if ($b->site->picture2 !== null && file_exists(public_path() . '/' . $b->site->picture2)) { - unlink(public_path() . '/' . $b->site->picture2); - } - if ($b->site->picture3 !== null && file_exists(public_path() . '/' . $b->site->picture3)) { - unlink(public_path() . '/' . $b->site->picture3); - } - } - - // Ajout des différents objets en base - // Eleveur - $b->display = $display; - $b->breeder_code = $breederCode; - $b->first_name = $firstName; - $b->last_name = $lastName; - $b->slug = $slug; - if ($picture !== null) { - $b->picture = 'uploads/images/eleveurs/' . date('Y') . '/' . date('m') . '/' . $imageName; - } - $b->postal_code = $postalCode; - $b->town = $town; - $b->testimony = $testimony; - $b->type = $type; - $b->status = $status; - - // Site d'élevage - $s = $b->site; - $s->latitude = $latitude; - $s->longitude = $longitude; - $s->geo_type = $geoType; - $s->audit = $audit; - $s->valid_marketing_date = $validMarketingDate; - $s->presentation_type = $presentationType; - if ($presentationType === "1") { - $s->video_link = $videoLink; - $s->picture1 = null; - $s->picture2 = null; - $s->picture3 = null; - } elseif ($presentationType === "2") { - $s->video_link = null; - if ($picture1 !== null) { - $s->picture1 = 'uploads/images/elevages/' . date('Y') . '/' . date('m') . '/' . $imageNameSite1; - } - if ($picture2 !== null) { - $s->picture2 = 'uploads/images/elevages/' . date('Y') . '/' . date('m') . '/' . $imageNameSite2; - } - if ($picture3 !== null) { - $s->picture3 = 'uploads/images/elevages/' . date('Y') . '/' . date('m') . '/' . $imageNameSite3; - } - } - - // Ajout en BDD - $b->inuavs()->delete(); - - if ($inuavs !== null) { - array_filter($inuavs); - foreach ($inuavs as $inuav) { - $b->inuavs()->create([ - 'inuav' => $inuav, - ]); - } - } - - $s->save(); - $b->save(); - - return redirect()->route('bo.breeders.edit', $b->id)->with('success', 'Enregistré !'); - } - - public function destroy($id) - { - $b = Breeders::findOrFail($id); - - if (file_exists(public_path() . '/' . $b->picture)) { - unlink(public_path() . '/' . $b->picture); - } - if ($b->site->picture1 !== null && file_exists(public_path() . '/' . $b->site->picture1)) { - unlink(public_path() . '/' . $b->site->picture1); - } - if ($b->site->picture2 !== null && file_exists(public_path() . '/' . $b->site->picture2)) { - unlink(public_path() . '/' . $b->site->picture2); - } - if ($b->site->picture3 !== null && file_exists(public_path() . '/' . $b->site->picture3)) { - unlink(public_path() . '/' . $b->site->picture3); - } - - $i = BreedersInuav::where('breeder_id', $id); - $i->delete(); - $s = BreedersSites::where('breeder_id', $id); - $s->delete(); - - $b->delete(); - - return redirect()->route('bo.breeders.content', 'volaille'); - } -} diff --git a/app/Http/Controllers/Bo/OCBBreedersController.php b/app/Http/Controllers/Bo/OCBBreedersController.php new file mode 100644 index 00000000..87d5113f --- /dev/null +++ b/app/Http/Controllers/Bo/OCBBreedersController.php @@ -0,0 +1,129 @@ +value)->paginate(); + return view('bo.ocbbreeders.index', compact('b', 'type')); + } + + public function create() + { + return view('bo.ocbbreeders.create'); + } + + public function store(StoreOcbBreeder $request) + { + $b = new OCBBreeder(); + $b->fill($request->validated()); + + if (!strlen($b->valid_marketing_date)) { + $b->valid_marketing_date = null; + } + + $file = $request->file('picture'); + $fileName = sprintf( + '%s-%s-le-gaulois.%s', + Str::slug($b->first_name), + Str::slug($b->last_name), + $file->extension() + ); + $b->picture = $file->storeAs('images/elevages', $fileName, 'public'); + + for ($i = 1; $i <= 3; $i++) { + if ($request->has('picture' . $i)) { + $file = $request->file('picture' . $i); + $fileName = sprintf( + '%s-%s-site%d-elevage-le-gaulois.%s', + Str::slug($b->first_name), + Str::slug($b->last_name), + $i, + $file->extension() + ); + $b->{'picture' . $i} = $request->file('UploadIMG')->storeAs('images/elevages', $fileName, 'public'); + } + } + + $b->saveOrFail(); + + return redirect()->route('bo.ocbbreeders.edit', ['type' => $b->ocbType, 'breeder' => $b]) + ->with('success', trans('Enregistré !')); + } + + public function edit(OCBType $type, OCBBreeder $breeder) + { + return view('bo.ocbbreeders.edit', [ + 'type' => $type, + 'breeder' => $breeder + ]); + } + + public function update(UpdateOcbBreeder $request, OCBBreeder $breeder) + { + $breeder->fill($request->validated()); + + if (!strlen($breeder->valid_marketing_date)) { + $breeder->valid_marketing_date = null; + } + + if ($request->has('picture')) { + $file = $request->file('picture'); + $fileName = sprintf( + '%s-%s-le-gaulois.%s', + Str::slug($breeder->first_name), + Str::slug($breeder->last_name), + $file->extension() + ); + $breeder->picture = $file->storeAs('images/elevages', $fileName, 'public'); + } + + for ($i = 1; $i <= 3; $i++) { + if ($request->has('picture' . $i)) { + $file = $request->file('picture' . $i); + $fileName = sprintf( + '%s-%s-site%d-elevage-le-gaulois.%s', + Str::slug($breeder->first_name), + Str::slug($breeder->last_name), + $i, + $file->extension() + ); + $breeder->{'picture' . $i} = $request->file('UploadIMG') + ->storeAs('images/elevages', $fileName, 'public'); + } + } + + $breeder->saveOrFail(); + + return redirect()->route('bo.ocbbreeders.edit', ['type' => $breeder->ocbType, 'breeder' => $breeder]) + ->with('success', trans('Enregistré !')); + } + + public function destroy($id) + { + $b = OCBBreeder::findOrFail($id); + if ($b->picture) { + Storage::disk('public')->delete($b->resolveOriginalUrl($b->picture)); + } + for ($i = 1; $i <= 3; $i++) { + if ($b->{'picture' . $i}) { + Storage::disk('public')->delete($b->resolveOriginalUrl($b->{'picture' . $i})); + } + } + + $b->delete(); + + return redirect()->route('bo.ocbbreeders.index', $b->ocbType); + } +} diff --git a/app/Http/Controllers/BrandController.php b/app/Http/Controllers/BrandController.php index 1e2aa564..cd45c7bf 100644 --- a/app/Http/Controllers/BrandController.php +++ b/app/Http/Controllers/BrandController.php @@ -3,14 +3,13 @@ namespace App\Http\Controllers; use App\Models\Ads; -use App\Models\Breeders; -use Illuminate\Http\Request; +use App\Models\OCBBreeder; class BrandController extends Controller { public function index() { - $breeder = Breeders::where('status', true) + $breeder = OCBBreeder::where('status', true) ->where('picture', '!=', '')->inRandomOrder()->first(); return view('front.brand.index', compact('breeder')); } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 52306e00..15a39d9c 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -3,10 +3,9 @@ namespace App\Http\Controllers; use App\Enums\Days; -use App\Enums\EleveurOcbStatus; -use App\Models\Breeders; use App\Models\HomeSliderPictures; use App\Models\NewsSliderPictures; +use App\Models\OCBBreeder; use App\Models\Products; use App\Models\Reductions; use Illuminate\Http\Request; @@ -25,7 +24,7 @@ class HomeController extends Controller $newsSlides = NewsSliderPictures::where('status', 1)->orderBy('order', 'ASC')->get(); // Images d'éleveur - $breeder = Breeders::ocbValidated()->select('picture', 'first_name', 'last_name') + $breeder = OCBBreeder::ocbValidated()->select('picture', 'first_name', 'last_name') ->inRandomOrder()->first(); // Les produits star diff --git a/app/Http/Controllers/MapController.php b/app/Http/Controllers/MapController.php index 27119411..9a5388fc 100644 --- a/app/Http/Controllers/MapController.php +++ b/app/Http/Controllers/MapController.php @@ -3,32 +3,27 @@ namespace App\Http\Controllers; use App\Enums\EleveurOcbStatus; -use App\Enums\OCBType; use App\Http\Requests\GetMapBreeders; use App\Http\Resources\BreederMapCollection; -use App\Models\Breeders; -use App\Models\BreedersSites; -use Illuminate\Http\Request; +use App\Models\OCBBreeder; +use App\Models\XmlBreeder; class MapController extends Controller { public function breeders(GetMapBreeders $request) { - $sites = BreedersSites::query(); if ($request->isocb) { - $sites = $sites - ->whereHas('breeder', function ($q) { - $q->where('display', true)->where('show_on_non_ocb', false); - })->with('breeder') + $breeders = OCBBreeder::where('display', true) ->where('ocbStatus', EleveurOcbStatus::yes()->value) ->where('ocbType', $request->ocbtype)->get(); } else { - $sites = $sites - ->whereHas('breeder', function ($q) { - $q->where('display', true)->where('show_on_non_ocb', true); - })->with('breeder') - ->where('ocbType', EleveurOcbStatus::no()->value)->get(); + // TODO: Regular BREEDER + // $sites = XmlBreeder + // ->whereHas('breeder', function ($q) { + // $q->where('display', true)->where('show_on_non_ocb', true); + // })->with('breeder') + // ->where('ocbType', EleveurOcbStatus::no()->value)->get(); } - return new BreederMapCollection($sites); + return new BreederMapCollection($breeders); } } diff --git a/app/Http/Controllers/OCBController.php b/app/Http/Controllers/OCBController.php index 814ae9e7..8f87165b 100644 --- a/app/Http/Controllers/OCBController.php +++ b/app/Http/Controllers/OCBController.php @@ -3,20 +3,19 @@ namespace App\Http\Controllers; use App\Enums\OCBType; -use App\Models\Breeders; -use Illuminate\Http\Request; +use App\Models\OCBBreeder; class OCBController extends Controller { public function testimonials() { - $breeders = Breeders::ocbValidated()->select('slug', 'picture', 'first_name', 'last_name') + $breeders = OCBBreeder::ocbValidated()->select('slug', 'picture', 'first_name', 'last_name') ->inRandomOrder()->limit(8)->get(); return view('front.ocb.testimonials', compact('breeders')); } - public function breeder(Breeders $breeder) + public function breeder(OCBBreeder $breeder) { // Contient les images de l'exploitation de l'éleveur $pictures = []; @@ -37,7 +36,7 @@ class OCBController extends Controller public function poultry() { - $breeder = Breeders::inRandomOrder()->first(); + $breeder = OCBBreeder::inRandomOrder()->first(); $ocbType = OCBType::poultry(); return view('front.ocb.poultry', compact('breeder', 'ocbType')); } diff --git a/app/Http/Controllers/TraceabilityController.php b/app/Http/Controllers/TraceabilityController.php index 3ee14cb2..98aa27b8 100644 --- a/app/Http/Controllers/TraceabilityController.php +++ b/app/Http/Controllers/TraceabilityController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers; -use App\Models\Breeders; +use App\Models\OCBBreeder; use App\Models\XmlBreeder; use App\Models\Traceability; use App\Models\XmlTraceability; @@ -31,7 +31,7 @@ class TraceabilityController extends Controller } // Si éleveur trouvé, alors c'est un éleveur OCB publié - $breeder = Breeders::where([ + $breeder = OCBBreeder::where([ ['status', 1], [ 'breeder_code', 'LIKE', '%' . $tracaDatas->opa_code . $tracaDatas->inuav_code ] diff --git a/app/Http/Requests/StoreOcbBreeder.php b/app/Http/Requests/StoreOcbBreeder.php new file mode 100644 index 00000000..0ecccd8e --- /dev/null +++ b/app/Http/Requests/StoreOcbBreeder.php @@ -0,0 +1,108 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'breeder_code' => 'required|string|min:2|max:50', + 'first_name' => 'required|string|min:2|max:150', + 'last_name' => 'required|string|min:2|max:150', + + 'picture' => 'required|image|mimes:jpeg,png,jpg|max:2048', + + 'postal_code' => 'required|string|min:5|max:20', + 'place' => 'required|string|min:2|max:255', + 'testimony' => 'required|string', + 'latitude' => 'required|numeric|between:-99.99,99.99', + 'longitude' => 'required|numeric|between:-99.99,99.99', + 'geo_type' => [ + 'required', + // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed + function ($attribute, $value, $fail) { + if (!in_array($value, GeoType::toValues())) { + $fail(__('Veuillez choisir entre :values', [ + 'value' => implode(',', GeoType::toLabels()) + ])); + } + } + ], + 'ocbStatus' => [ + 'required', + // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed + function ($attribute, $value, $fail) { + if (!in_array($value, EleveurOcbStatus::toValues())) { + $fail(__('Veuillez choisir entre :values', [ + 'value' => implode(',', EleveurOcbStatus::toLabels()) + ])); + } + } + ], + 'ocbType' => [ + 'required', + // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed + function ($attribute, $value, $fail) { + if (!in_array($value, OCBType::toValues())) { + $fail(__('Veuillez choisir entre :values', [ + 'value' => implode(',', OCBType::toLabels()) + ])); + } + } + ], + 'presentation_type' => [ + 'required', + // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed + function ($attribute, $value, $fail) { + if (!in_array($value, PresentationType::toValues())) { + $fail(__('Veuillez choisir entre :values', [ + 'value' => implode(',', PresentationType::toLabels()) + ])); + } + } + ], + 'audit' => 'boolean', + 'valid_marketing_date' => 'nullable|date', + 'video_link' => 'string|max:255', + 'picture1' => 'image|mimes:jpeg,png,jpg|max:2048', + 'picture2' => 'image|mimes:jpeg,png,jpg|max:2048', + 'picture3' => 'image|mimes:jpeg,png,jpg|max:2048', + 'status' => 'boolean', + 'display_random' => 'boolean', + 'inuavs' => 'array', + 'inuavs.*' => [ + // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed + function ($attribute, $value, $fail) { + if (strpos(trim($value), ' ') !== false) { + $fail(trans('Les espaces ne sont pas autorisés dans les codes INUAV')); + } + if (count($this->inuavs) > count(array_unique($this->inuavs))) { + $fail(trans('Les codes INUAVS doinvent être uniques')); + } + } + ], + ]; + } +} diff --git a/app/Http/Requests/UpdateOcbBreeder.php b/app/Http/Requests/UpdateOcbBreeder.php new file mode 100644 index 00000000..162f557d --- /dev/null +++ b/app/Http/Requests/UpdateOcbBreeder.php @@ -0,0 +1,23 @@ + [ + Rule::requiredIf(!$this->breeder->picture), + 'image', 'mimes:jpeg,png,jpg', 'max:2048' + ] + ]); + } +} diff --git a/app/Models/OCBBreeder.php b/app/Models/OCBBreeder.php index 64509006..bf3f68e4 100644 --- a/app/Models/OCBBreeder.php +++ b/app/Models/OCBBreeder.php @@ -7,6 +7,8 @@ use App\Enums\GeoType; use App\Enums\OCBType; use App\Enums\PresentationType; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Str; use Kwaadpepper\Enum\Traits\CastsEnums; // old Breeders @@ -15,7 +17,8 @@ class OCBBreeder extends Model use CastsEnums; protected $casts = [ - 'display' => 'boolean' + 'display' => 'boolean', + 'inuavs' => 'array' ]; protected $enumCasts = [ @@ -27,6 +30,53 @@ class OCBBreeder extends Model protected $table = 'ocb_breeders'; + protected $fillable = [ + 'breeder_code', + 'first_name', + 'last_name', + 'postal_code', + 'place', + 'testimony', + 'latitude', + 'longitude', + 'geo_type', + 'ocbStatus', + 'ocbType', + 'presentation_type', + 'audit', + 'valid_marketing_date', + 'video_link', + 'status', + 'display_random', + 'inuavs', + ]; + + protected static function booted() + { + static::creating(function ($breeder) { + $breeder->slug = Str::slug(sprintf( + '%s %s %s', + $breeder->id, + $breeder->last_name, + $breeder->id + )); + }); + static::updating(function ($breeder) { + $breeder->slug = Str::slug(sprintf( + '%s %s %s', + $breeder->id, + $breeder->last_name, + $breeder->id + )); + }); + static::retrieved(function ($breeder) { + $breeder->picture = $breeder->resolveImageUrl($breeder->picture); + for ($i = 1; $i <= 3; $i++) { + $breeder->{'picture' . $i} = $breeder->resolveImageUrl($breeder->{'picture' . $i}); + } + }); + } + public function getRouteKeyName() { return "slug"; @@ -43,4 +93,22 @@ class OCBBreeder extends Model $q->where('type', EleveurOcbStatus::yes()->value); }); } + + private function resolveImageUrl($imageUrl) + { + // For migrated urls from 2016 + if (strpos($imageUrl, '/uploads') === 0) { + return $imageUrl; + } + return Storage::url($imageUrl); + } + + public function resolveOriginalUrl($imageUrl) + { + // For migrated urls from 2016 + if (strpos($imageUrl, '/storage') === 0) { + return str_replace('/storage', '', $imageUrl); + } + return $imageUrl; + } } diff --git a/database/migrations/2021_02_04_172518_create_ocb_breeders_table.php b/database/migrations/2021_02_04_172518_create_ocb_breeders_table.php index 52ba3db3..2908f6b9 100644 --- a/database/migrations/2021_02_04_172518_create_ocb_breeders_table.php +++ b/database/migrations/2021_02_04_172518_create_ocb_breeders_table.php @@ -18,7 +18,7 @@ class CreateOcbBreedersTable extends Migration $table->id(); $table->string('breeder_code', 50); - $table->string('slug'); + $table->string('slug')->unique(); $table->string('inuavs')->nullable(); diff --git a/database/migrations/LeGaulois2016Migration.php b/database/migrations/LeGaulois2016Migration.php index dbf94373..c1c41c72 100644 --- a/database/migrations/LeGaulois2016Migration.php +++ b/database/migrations/LeGaulois2016Migration.php @@ -16,25 +16,6 @@ use Symfony\Component\Console\Terminal; * @author Jérémy Munsch * Examples *[ - * 'eleveur' => [ - * 'model' => Breeders::class, - * 'bind' => [ - * 'id' => 'elev_id', - * 'display' => [ - * 'apply' => function ($values) { - * $values = explode('_', $values); - * return - * intval($this->oldDB->table('eleveur_site') - * ->where('eleveur_site.code_eleveur', '=', $values[0]) - * ->where('eleveur_site.nom_eleveur', '=', $values[1]) - * ->first('eleveur_site.eleveur_is_displayed') - * ->eleveur_is_displayed ?? null); - * }, - * 'name' => ['elev_code', 'elev_nom'], //* clé étrangère - * 'default' => '' - * ], - * ] - * ], * 'content_ocb' => [ * 'model' => OCBContent::class, * 'bind' => [ @@ -113,12 +94,16 @@ abstract class LeGaulois2016Migration extends Migration /** @var ConsoleOutput */ private $output = null; + /** @var ConsoleSectionOutput */ private $outputSection = null; + /** @var \Illuminate\Database\ConnectionInterface */ private $oldDB = null; + /** @var \Illuminate\Database\ConnectionInterface */ private $newDB = null; + /** @var array */ private $instructions = null; @@ -233,6 +218,7 @@ abstract class LeGaulois2016Migration extends Migration } $model->save(); } catch (AbortRowImportException $e) { + // DO nothing } finally { ++$rowInserted; if (rand(0, 15) == 10) { // prevent screen ficklering diff --git a/resources/js/app.js b/resources/js/app.js index 638896bc..bf59f3f4 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -3,7 +3,7 @@ * includes Vue and other libraries. It is a great starting point when * building robust, powerful web applications using Vue and Laravel. */ - +window.$ = window.jQuery = require('jquery'); require('@fortawesome/fontawesome-free/js/all'); require('./bootstrap'); require('vue-select-image/dist/vue-select-image.css'); diff --git a/resources/js/components/bo/CKEditorComponent.vue b/resources/js/components/bo/CKEditorComponent.vue index 77774be6..54ed3b1a 100644 --- a/resources/js/components/bo/CKEditorComponent.vue +++ b/resources/js/components/bo/CKEditorComponent.vue @@ -1,7 +1,7 @@ @@ -9,23 +9,16 @@ import ClassicEditor from '@ckeditor/ckeditor5-build-classic'; export default { - mounted() { - console.log('CKEditorComponent Component mounted.'); - }, props: [ + 'id', 'name', 'dbtext', + 'required', ], data() { return { editor: ClassicEditor } - }, - watch: { - - }, - methods: { - } } diff --git a/resources/views/bo/breeders/create.blade.php b/resources/views/bo/breeders/create.blade.php deleted file mode 100644 index aa1ce9aa..00000000 --- a/resources/views/bo/breeders/create.blade.php +++ /dev/null @@ -1,159 +0,0 @@ -@extends('layouts.bo') - -@section('content') - -
-
- Ajout d'un éleveur - Retour -
- -
-
- @csrf -
-
- @if ($errors->any()) -
-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
- -
- -
-
- -
-
- -
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- - -
-
- - -
- -
-
- -
- -
- -
-
- - -
-
- -
-
-
-
-
-
-@endsection - -@section('scripts') - -@endsection diff --git a/resources/views/bo/breeders/edit.blade.php b/resources/views/bo/breeders/edit.blade.php deleted file mode 100644 index d2b632af..00000000 --- a/resources/views/bo/breeders/edit.blade.php +++ /dev/null @@ -1,265 +0,0 @@ -@extends('layouts.bo') - -@section('content') -
-
- {{__('Modification d\'un éleveur') }} - {{ $type->label }} - {{__('Retour') }} -
- @method('DELETE') - @csrf - -
-
- -
-
- @method('PUT') - @csrf -
-
- @if (session('success')) -
- {{ session('success') }} -
- @endif - @if ($errors->any()) -
-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
- - -
- -
- @for($i = 0; $i < count($breeder->inuavs); $i++) - - {{ __('Supprimer') }} - @endfor -
-
- - -
-
- - -
-
-
- -
-
- -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
- -
-
- - - - - - - - - - - - - - - - - - - - -
Photo n°1Photo n°2Photo n°3
- @if ($breeder->site->picture1 !== null) - - @else - - @endif - - @if ($breeder->site->picture2 !== null) - - @else - - @endif - - @if ($breeder->site->picture3 !== null) - - @else - - @endif -
- - - - - -
-
-
- - -
-
-
- status) checked @endif> - -
-
-
- -
-
-
-
-
-
-@endsection - -@section('scripts') - -@endsection diff --git a/resources/views/bo/ocbbreeders/create.blade.php b/resources/views/bo/ocbbreeders/create.blade.php new file mode 100644 index 00000000..27f5d9fb --- /dev/null +++ b/resources/views/bo/ocbbreeders/create.blade.php @@ -0,0 +1,32 @@ +@extends('layouts.bo') + +@section('content') +
+
+ {{ __('Ajout d\'un éleveur OCB') }} +
+ +
+
+ @csrf +
+
+ @if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + @include('bo.ocbbreeders.formInputs') +
+ +
+
+
+
+
+
+@endsection diff --git a/resources/views/bo/ocbbreeders/edit.blade.php b/resources/views/bo/ocbbreeders/edit.blade.php new file mode 100644 index 00000000..2094a724 --- /dev/null +++ b/resources/views/bo/ocbbreeders/edit.blade.php @@ -0,0 +1,46 @@ +@extends('layouts.bo') + +@section('content') +
+
+ {{__('Modification d\'un éleveur') }} - {{ $type->label }} + {{__('Retour') }} +
+ @method('DELETE') + @csrf + +
+
+ +
+
+ @method('PUT') + @csrf +
+
+ @if (session('success')) +
+ {{ session('success') }} +
+ @endif + @if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + @include('bo.ocbbreeders.formInputs') +
+ +
+
+
+
+
+
+@endsection + + diff --git a/resources/views/bo/ocbbreeders/formInputs.blade.php b/resources/views/bo/ocbbreeders/formInputs.blade.php new file mode 100644 index 00000000..3d4daeb5 --- /dev/null +++ b/resources/views/bo/ocbbreeders/formInputs.blade.php @@ -0,0 +1,206 @@ +
+ +
+
+ + +
+ +
+ @if(isset($breeder) and $breeder->inuavs) + @foreach($breeder->inuavs as $inuav) + + {{ __('Supprimer') }} + @endforeach + @endif +
+
+ + +
+
+ + +
+
+
+ +
+
+ @if(isset($breeder->picture)) + + @endif +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + + + + + + @for($i = 1; $i <= 3; $i++) + + + + + @if($breeder ?? false) + + + + @endif + @endfor + +
{{ __('Photos') }}
{{__('Photo n°:number', ['number' => $i]) }} + +
+ @if ($breeder->{'picture' . $i}) + + @else + + @endif +
+
+
+ + +
+
+
+ status ?? false) checked @endif value="1"> + +
+
+ +@section('scripts') + +@endsection diff --git a/resources/views/bo/breeders/index.blade.php b/resources/views/bo/ocbbreeders/index.blade.php similarity index 85% rename from resources/views/bo/breeders/index.blade.php rename to resources/views/bo/ocbbreeders/index.blade.php index dace2ec3..ee7bb842 100644 --- a/resources/views/bo/breeders/index.blade.php +++ b/resources/views/bo/ocbbreeders/index.blade.php @@ -4,7 +4,7 @@
{{ __('Liste des éleveurs') }} - {{ $type->label }} - Ajouter + Ajouter
@@ -36,7 +36,7 @@ @endif - {{ __('Éditer') }} + {{ __('Éditer') }} @endforeach diff --git a/resources/views/layouts/bo.blade.php b/resources/views/layouts/bo.blade.php index ee79522a..fd7015eb 100644 --- a/resources/views/layouts/bo.blade.php +++ b/resources/views/layouts/bo.blade.php @@ -10,11 +10,13 @@ - {{ config('app.name', 'Laravel') }} + {{ config('app.name', 'Laravel') }}@hasSection('title') - @yield('title')@endif - - {{-- TODO : Ajouter jQuery dans app.js --}} - + + + + + @@ -108,11 +110,11 @@ Les éleveurs OCB