OCB Breeders BO

This commit is contained in:
Jérémy Munsch 2021-04-08 20:06:14 +02:00
parent df1de25e2b
commit 3d2c5d2e28
22 changed files with 659 additions and 850 deletions

View file

@ -1,353 +0,0 @@
<?php
namespace App\Http\Controllers\Bo;
use App\Enums\OCBType;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\Breeders;
use App\Models\BreedersSites;
use App\Models\BreedersInuav;
class BreedersController extends Controller
{
public function index(OCBType $type)
{
$b = Breeders::whereHas('site', function ($q) use ($type) {
$q->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');
}
}

View file

@ -0,0 +1,129 @@
<?php
namespace App\Http\Controllers\Bo;
use App\Enums\OCBType;
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreOcbBreeder;
use App\Http\Requests\UpdateOcbBreeder;
use App\Models\OCBBreeder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
class OCBBreedersController extends Controller
{
public function index(OCBType $type)
{
$b = OCBBreeder::where('ocbType', $type->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);
}
}

View file

@ -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'));
}

View file

@ -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

View file

@ -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);
}
}

View file

@ -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'));
}

View file

@ -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
]

View file

@ -0,0 +1,108 @@
<?php
namespace App\Http\Requests;
use App\Enums\EleveurOcbStatus;
use App\Enums\GeoType;
use App\Enums\OCBType;
use App\Enums\PresentationType;
use Illuminate\Foundation\Http\FormRequest;
class StoreOcbBreeder extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return auth()->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'));
}
}
],
];
}
}

View file

@ -0,0 +1,23 @@
<?php
namespace App\Http\Requests;
use Illuminate\Validation\Rule;
class UpdateOcbBreeder extends StoreOcbBreeder
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return array_merge_recursive(parent::rules(), [
'picture' => [
Rule::requiredIf(!$this->breeder->picture),
'image', 'mimes:jpeg,png,jpg', 'max:2048'
]
]);
}
}

View file

@ -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;
}
}

View file

@ -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();

View file

@ -16,25 +16,6 @@ use Symfony\Component\Console\Terminal;
* @author Jérémy Munsch <jeremy.munsch@ldc.fr>
* 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

2
resources/js/app.js vendored
View file

@ -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');

View file

@ -1,7 +1,7 @@
<template>
<div>
<ckeditor :editor="editor" v-model="dbtext"></ckeditor>
<input type="hidden" :name="name" :value="dbtext">
<input :id="id" type="hidden" :name="name" :value="dbtext" :required="required ? true : false">
</div>
</template>
@ -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: {
}
}
</script>

View file

@ -1,159 +0,0 @@
@extends('layouts.bo')
@section('content')
<div class="card">
<div class="card-header">
Ajout d'un éleveur
<a href="{{route('bo.breeders.content', 'volaille')}}" class="btn btn-sm btn-primary float-right">Retour</a>
</div>
<div class="card-body">
<form action="{{route('bo.breeders.store')}}" method="POST" enctype="multipart/form-data">
@csrf
<div class="row">
<div class="col-md-8 offset-md-2">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="form-group">
<label class="col-form-label">
<input type="checkbox" name="display" @if (old('display') !== null)checked @endif>
Afficher l'éleveur sur le site
</label>
</div>
<div class="form-group">
<input class="form-control" type="text" name="breeder_code" placeholder="Code éleveur *" value="{{ old('breeder_code') }}" required>
</div>
<div class="form-group text-center">
<a class="btn btn-primary text-white" onclick="addInput()" id="addInuav" role="button">Ajouter un code INUAV</a>
</div>
<div class="form-group row" id="inuavs"></div>
<div class="form-group">
<input class="form-control" type="text" name="last_name" placeholder="Nom de l'éleveur *" value="{{ old('last_name') }}" required>
</div>
<div class="form-group">
<input class="form-control" type="text" name="first_name" placeholder="Prénom de l'éleveur *" value="{{ old('first_name') }}" required>
</div>
<div class="form-group">
<label>Photo de l'éleveur * de type JPEG/PNG - 2Mo max.</label></br>
<input type="file" name="picture" accept="image/png, image/jpeg" required>
</div>
<div class="form-group">
<input class="form-control" type="text" name="postal_code" placeholder="Code postal de l'éleveur *" value="{{ old('postal_code') }}" required>
</div>
<div class="form-group">
<input class="form-control" type="text" name="town" placeholder="Commune de l'éleveur *" value="{{ old('town') }}" required>
</div>
<div class="form-group">
<input class="form-control" type="text" name="testimony" placeholder="Témoignage de l'éleveur *" value="{{ old('testimony') }}" required>
</div>
<div class="form-group">
<input class="form-control" type="text" name="latitude" placeholder="Latitude *" value="{{ old('latitude') }}" required>
</div>
<div class="form-group">
<input class="form-control" type="text" name="longitude" placeholder="Longitude *" value="{{ old('longitude') }}" required>
</div>
<div class="form-group">
<input class="form-control" type="text" name="geo_type" placeholder="Type de géolocalisation" value="{{ old('geo_type') }}">
</div>
<div class="form-group">
<input class="form-control" type="text" name="audit" placeholder="Audit de l'éleveur" value="{{ old('audit') }}">
</div>
<div class="form-group">
<input class="form-control" type="text" name="valid_breeder" placeholder="Éleveur validé" value="{{ old('valid_breeder') }}">
</div>
<div class="form-group row">
<label class="col-form-label col-md-6">Date de validation marketing</label>
<input class="form-control col-md-6" type="date" name="valid_marketing_date" value="{{ old('valid_marketing_date') }}">
</div>
<div class="form-group row">
<label class="col-form-label col-md-6">Type de présentation de l'élevage</label>
<select class="custom-select col-md-6" name="presentation_type" onchange="changeType(this)">
<option value="1">Vidéo</option>
<option value="2">Photos</option>
</select>
</div>
<div class="form-group" id="div_video_link">
<input class="form-control" type="text" name="video_link" placeholder="Lien de la vidéo *">
</div>
<div class="form-group" id="div_picture_site">
<label>Photo de l'élevage n°1 de type JPEG/PNG - 2Mo max. - 1000 x 667px</label></br>
<input type="file" name="picture1" accept="image/png, image/jpeg">
<label>Photo de l'élevage n°2 de type JPEG/PNG - 2Mo max. - 1000 x 667px</label></br>
<input type="file" name="picture2" accept="image/png, image/jpeg">
<label>Photo de l'élevage n°3 de type JPEG/PNG - 2Mo max. - 1000 x 667px</label></br>
<input type="file" name="picture3" accept="image/png, image/jpeg">
</div>
<div class="form-group row">
<label class="col-form-label col-md-6">Type *</label>
<select class="custom-select col-md-6" name="type">
@foreach ($types as $idType => $nomType)
<option value="{{$idType}}" @if (old('type') == $idType)selected @endif>{{$nomType}}</option>
@endforeach
</select>
</div>
<div class="form-group text-center">
<input type="submit" class="btn btn-secondary" value="Ajouter">
</div>
</div>
</div>
</form>
</div>
</div>
@endsection
@section('scripts')
<script type="text/javascript">
var addId = 0;
function addInput() {
addId++;
var inuavDiv = document.getElementById('inuavs');
var input = document.createElement('input');
input.id = "inuav_" + addId;
input.className = "form-control col-md-3";
input.name = "inuavs[]";
input.placeholder = "Code INUAV";
var a = document.createElement('a');
a.href = "#";
a.id = "inuav_" + addId + "_a";
a.setAttribute("onclick", "deleteInuav('inuav_" + addId + "')");
a.className = "col-form-label col-md-3";
a.innerHTML = "Supprimer"
inuavDiv.appendChild(input);
inuavDiv.appendChild(a);
}
// Supprime un input INUAV avec son bouton supprimer, affiche le bouton ajouter un INUAV si il y a moins de 10 champs présents sur la page
function deleteInuav(elementId) {
var input = document.getElementById(elementId);
input.parentNode.removeChild(input);
var a = document.getElementById(elementId + "_a");
a.parentNode.removeChild(a);
}
var videoDiv = document.getElementById('div_video_link');
var pictureSiteDiv = document.getElementById('div_picture_site');
pictureSiteDiv.style.display = "none";
function changeType(select) {
if (select.value === "1") {
videoDiv.style.display = "inline";
pictureSiteDiv.style.display = "none";
} else if (select.value === "2") {
videoDiv.style.display = "none";
pictureSiteDiv.style.display = "inline";
}
}
</script>
@endsection

View file

@ -1,265 +0,0 @@
@extends('layouts.bo')
@section('content')
<div class="card">
<div class="card-header">
{{__('Modification d\'un éleveur') }} - <b>{{ $type->label }}</b>
<a href="{{route('bo.breeders.index', $type)}}" class="btn btn-sm btn-primary float-right ml-2">{{__('Retour') }}</a>
<form action="{{route('bo.breeders.destroy', $breeder)}}" method="POST" class="d-inline">
@method('DELETE')
@csrf
<input type="submit" class="btn btn-sm btn-danger float-right" value="Supprimer" onclick="return confirm('Êtes-vous sûr(e) ?')">
</form>
</div>
<div class="card-body">
<form action="{{route('bo.breeders.update', $breeder)}}" method="POST" enctype="multipart/form-data">
@method('PUT')
@csrf
<div class="row">
<div class="col-md-8 offset-md-2">
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="form-group">
<label class="col-form-label">
@if ($breeder->display === 1)
<input type="checkbox" name="display" checked>
@else
<input type="checkbox" name="display">
@endif
{{__('Afficher l\'éleveur sur le site') }}
</label>
</div>
<div class="form-group">
<label for="breeder_code"><small>{{__('Code éleveur *') }}</small></label>
<input id="breeder_code" class="form-control" type="text" name="breeder_code" placeholder="Code éleveur *" value="{{$breeder->breeder_code}}" required>
</div>
<div class="form-group text-center">
<a class="btn btn-primary text-white" onclick="addInput()" id="addInuav" role="button">{{ __('Ajouter un code INUAV') }}</a>
</div>
<div class="form-group row" id="inuavs">
@for($i = 0; $i < count($breeder->inuavs); $i++)
<input id="inuav_{{$i}}" class="form-control col-md-3" name="inuavs[]" placeholder="Code INUAV" value="{{$breeder->inuavs[$i]->inuav}}">
<a href="#" id="inuav_{{$i}}_a" onclick="deleteInuav('inuav_{{$i}}')" class="col-form-label col-md-3">{{ __('Supprimer') }}</a>
@endfor
</div>
<div class="form-group">
<label for="last_name"><small>{{ __('Nom de l\'éleveur *') }}</small></label>
<input id="last_name" class="form-control" type="text" name="last_name" placeholder="{{ __('Nom de l\'éleveur *') }}" value="{{$breeder->last_name}}" required>
</div>
<div class="form-group">
<label for="first_name"><small>{{ __('Prénom de l\'éleveur *') }}</small></label>
<input id="first_name" class="form-control" type="text" name="first_name" placeholder="{{ __('Prénom de l\'éleveur *') }}" value="{{$breeder->first_name}}" required>
</div>
<div class="form-group">
<label>Photo de l'éleveur * de type JPEG/PNG - 2Mo max.</label></br>
<input type="file" name="picture" accept="image/png, image/jpeg">
</br>
</br>
<img src="{{ asset($breeder->picture) }}" style="max-height: 200px;">
</div>
<div class="form-group">
<label for="postal_code"><small>{{ __('Code postal de l\'éleveur *') }}</small></label>
<input id="postal_code" class="form-control" type="text" name="postal_code" placeholder="{{ __('Code postal de l\'éleveur *') }}" value="{{$breeder->postal_code}}" required>
</div>
<div class="form-group">
<label for="town"><small>{{ __('Commune de l\'éleveur *') }}</small></label>
<input id="town" class="form-control" type="text" name="town" placeholder="{{ __('Commune de l\'éleveur *') }}" value="{{$breeder->town}}" required>
</div>
<div class="form-group">
<label for="testimony"><small>{{ __('Témoignage de l\'éleveur *') }}</small></label>
<input id="testimony" class="form-control" type="text" name="testimony" placeholder="{{ __('Témoignage de l\'éleveur *') }}" value="{{$breeder->testimony}}" required>
</div>
<div class="form-group">
<label for="latitude"><small>{{ __('Latitude *') }}</small></label>
<input id="latitude" class="form-control" type="text" name="latitude" placeholder="{{ __('Latitude *') }}" value="{{$breeder->site->latitude}}" required>
</div>
<div class="form-group">
<label for="longitude"><small>{{ __('Longitude *') }}</small></label>
<input id="longitude" class="form-control" type="text" name="longitude" placeholder="{{ __('Longitude *') }}" value="{{$breeder->site->longitude}}" required>
</div>
<div class="form-group row">
<label for="geo_type" class="col-form-label col-md-6">{{ __('Type de géolocalisation') }}</label>
<select id="geo_type" class="custom-select col-md-6" name="geo_type">
@foreach(GeoType::toArray() as $geoType)
<option value="{{ $geoType->value }}" @if($breeder->site->geo_type->equals($geoType)) selected @endif>{{ $geoType->label }}</option>
@endforeach
</select>
</div>
<div class="form-group row">
<label for="audit" class="col-form-label col-md-6">{{ __('Audit de l\'éleveur') }}</label>
<select id="audit" class="custom-select col-md-6" name="audit">
<option value="0" @if(!$breeder->site->audit) selected @endif>{{ __('Non réalisé') }}</option>
<option value="1" @if($breeder->site->audit) selected @endif>{{ __('Validé') }}</option>
</select>
</div>
<div class="form-group row">
<label for="ocbStatus" class="col-form-label col-md-6">{{ __('Éleveur validé OCB') }}</label>
<select id="ocbStatus" class="custom-select col-md-6" name="ocbStatus">
@foreach(EleveurOcbStatus::toArray() as $ocbStatus)
<option value="{{ $ocbStatus->value }}" @if($breeder->site->ocbStatus->equals($ocbStatus)) selected @endif>{{ $ocbStatus->label }}</option>
@endforeach
</select>
</div>
<div class="form-group row">
<label for="valid_marketing_date" class="col-form-label col-md-6">{{__('Date de validation marketing') }}</label>
<input id="valid_marketing_date" class="form-control col-md-6" type="date" name="valid_marketing_date" value="{{$breeder->site->valid_marketing_date}}" >
</div>
<div class="form-group row">
<label for="presentation_type" class="col-form-label col-md-6">{{__('Type de présentation de l\'élevage') }}</label>
<select id="presentation_type" class="custom-select col-md-6" name="presentation_type" onchange="changeType(this)">
@foreach(PresentationType::toArray() as $presType)
<option value="{{ $presType->value }}" @if($breeder->site->presentation_type->equals($presType)) selected @endif>{{ $presType->label }}</option>
@endforeach
</select>
</div>
<div class="form-group" id="div_video_link">
<input class="form-control" type="text" name="video_link" placeholder="Lien de la vidéo" value="{{$breeder->site->video_link}}">
</div>
<div class="form-group" id="div_picture_site">
<label>Photo(s) de l'élevage de type JPEG/PNG - 2Mo max. - 1000 x 667px</label></br>
<table class="table text-center">
<thead>
<tr>
<th scope="col">Photo n°1</th>
<th scope="col">Photo n°2</th>
<th scope="col">Photo n°3</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-center">
@if ($breeder->site->picture1 !== null)
<img src="{{ asset($breeder->site->picture1) }}" style="max-height: 100px;">
@else
<label>Aucune photo.</label>
@endif
</td>
<td class="text-center">
@if ($breeder->site->picture2 !== null)
<img src="{{ asset($breeder->site->picture2) }}" style="max-height: 100px;">
@else
<label>Aucune photo.</label>
@endif
</td>
<td class="text-center">
@if ($breeder->site->picture3 !== null)
<img src="{{ asset($breeder->site->picture3) }}" style="max-height: 100px;">
@else
<label>Aucune photo.</label>
@endif
</td>
</tr>
<tr>
<td class="text-center">
<input class="form-control-file" type="file" name="picture1" accept="image/png, image/jpeg">
</td>
<td class="text-center">
<input class="form-control-file" type="file" name="picture2" accept="image/png, image/jpeg">
</td>
<td class="text-center">
<input class="form-control-file" type="file" name="picture3" accept="image/png, image/jpeg">
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-group row">
<label class="col-form-label col-md-6">Type *</label>
<select class="custom-select col-md-6" name="type">
@foreach (OCBType::toArray() as $ocbType)
<option value="{{ $ocbType->value }}" @if ($type->equals($ocbType))selected @endif>{{ $ocbType->label }}</option>
@endforeach
</select>
</div>
<div class="form-group">
<div class="form-check">
<input id="status" class="form-check-input" type="checkbox" name="status" @if($breeder->status) checked @endif>
<label for="status" class="form-check-label">{{ __('Publié ?') }}</label>
</div>
</div>
<div class="form-group text-center">
<input type="submit" class="btn btn-secondary" value="Modifier">
</div>
</div>
</div>
</form>
</div>
</div>
@endsection
@section('scripts')
<script type="text/javascript" defer>
var addId = 1;
var videoDiv = $("#div_video_link");
var pictureSiteDiv = $("#div_picture_site");
$(document).ready(function() {
videoDiv = $("#div_video_link");
pictureSiteDiv = $("#div_picture_site");
if ($("#presentation_type").val() === "{{ PresentationType::picture()->value }}") {
videoDiv.hide();
pictureSiteDiv.show();
} else if ($("#presentation_type").val() === "{{ PresentationType::video()->value }}") {
videoDiv.show();
pictureSiteDiv.hide();
}
addId = $('[name*= "inuavs"]').length;
})
function addInput() {
var inuavDiv = $("#inuavs");
var input = document.createElement('input');
input.id = "inuav_" + addId;
input.className = "form-control col-md-3";
input.name = "inuavs[]";
input.placeholder = "Code INUAV";
var a = document.createElement('a');
a.href = "javascript:void(0)";
a.id = "inuav_" + addId + "_a";
a.setAttribute("onclick", "deleteInuav('inuav_" + addId + "')");
a.className = "col-form-label col-md-3";
a.innerHTML = "Supprimer"
inuavDiv.append(input);
inuavDiv.append(a);
addId++;
}
// Supprime un input INUAV avec son bouton supprimer, affiche le bouton ajouter un INUAV si il y a moins de 10 champs présents sur la page
function deleteInuav(elementId) {
var input = $("#" + elementId);
input.remove();
var a = $("#" + elementId + "_a");
a.remove();
}
function changeType(select) {
if (select.value === "{{ PresentationType::picture()->value }}") {
videoDiv.hide();
pictureSiteDiv.show();
} else if (select.value === "{{ PresentationType::video()->value }}") {
videoDiv.show();
pictureSiteDiv.hide();
}
}
</script>
@endsection

View file

@ -0,0 +1,32 @@
@extends('layouts.bo')
@section('content')
<div class="card">
<div class="card-header">
{{ __('Ajout d\'un éleveur OCB') }}
</div>
<div class="card-body">
<form action="{{route('bo.ocbbreeders.store')}}" method="POST" enctype="multipart/form-data">
@csrf
<div class="row">
<div class="col-md-8 offset-md-2">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@include('bo.ocbbreeders.formInputs')
<div class="form-group text-center">
<input type="submit" class="btn btn-secondary" value="Ajouter">
</div>
</div>
</div>
</form>
</div>
</div>
@endsection

View file

@ -0,0 +1,46 @@
@extends('layouts.bo')
@section('content')
<div class="card">
<div class="card-header">
{{__('Modification d\'un éleveur') }} - <b>{{ $type->label }}</b>
<a href="{{route('bo.ocbbreeders.index', $type)}}" class="btn btn-sm btn-primary float-right ml-2">{{__('Retour') }}</a>
<form action="{{route('bo.ocbbreeders.destroy', $breeder->id)}}" method="POST" class="d-inline">
@method('DELETE')
@csrf
<input type="submit" class="btn btn-sm btn-danger float-right" value="Supprimer" onclick="return confirm('Êtes-vous sûr(e) ?')">
</form>
</div>
<div class="card-body">
<form action="{{route('bo.ocbbreeders.update', $breeder)}}" method="POST" enctype="multipart/form-data">
@method('PUT')
@csrf
<div class="row">
<div class="col-md-8 offset-md-2">
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@include('bo.ocbbreeders.formInputs')
<div class="form-group text-center">
<input type="submit" class="btn btn-secondary" value="Modifier">
</div>
</div>
</div>
</form>
</div>
</div>
@endsection

View file

@ -0,0 +1,206 @@
<div class="form-group">
<label class="col-form-label">
<input type="checkbox" name="display_random" @if($breeder->display_random ?? false)checked @endif>
{{__('Afficher l\'éleveur sur le site en aléatoire') }}
</label>
</div>
<div class="form-group">
<label for="breeder_code"><small>{{__('Code éleveur *') }}</small></label>
<input id="breeder_code" class="form-control" type="text" name="breeder_code" placeholder="{{__('Code éleveur *') }}" value="{{ old('breeder_code') ?? $breeder->breeder_code ?? ''}}" required>
</div>
<div class="form-group text-center">
<a class="btn btn-primary text-white" onclick="addInput()" id="addInuav" role="button">{{ __('Ajouter un code INUAV') }}</a>
</div>
<div class="form-group row" id="inuavs">
@if(isset($breeder) and $breeder->inuavs)
@foreach($breeder->inuavs as $inuav)
<input id="inuav_{{ $loop->index }}" class="form-control col-md-3" name="inuavs[]" placeholder="Code INUAV" value="{{ $inuav }}">
<a href="#" id="inuav_{{ $loop->index }}_a" onclick="deleteInuav('inuav_{{ $loop->index }}')" class="col-form-label col-md-3">{{ __('Supprimer') }}</a>
@endforeach
@endif
</div>
<div class="form-group">
<label for="last_name"><small>{{ __('Nom de l\'éleveur *') }}</small></label>
<input id="last_name" class="form-control" type="text" name="last_name" placeholder="{{ __('Nom de l\'éleveur *') }}" value="{{ old('last_name') ?? $breeder->last_name ?? ''}}" required>
</div>
<div class="form-group">
<label for="first_name"><small>{{ __('Prénom de l\'éleveur *') }}</small></label>
<input id="first_name" class="form-control" type="text" name="first_name" placeholder="{{ __('Prénom de l\'éleveur *') }}" value="{{ old('first_name') ?? $breeder->first_name ?? ''}}" required>
</div>
<div class="form-group">
<label>{{__('Photo de l\'éleveur * de type') }} JPEG/PNG - 2Mo max.</label></br>
<input type="file" name="picture" accept="image/png, image/jpeg">
</br>
</br>
@if(isset($breeder->picture))
<img src="{{ asset($breeder->picture ?? '') }}" style="max-height: 200px;">
@endif
</div>
<div class="form-group">
<label for="postal_code"><small>{{ __('Code postal de l\'éleveur *') }}</small></label>
<input id="postal_code" class="form-control" type="text" name="postal_code" placeholder="{{ __('Code postal de l\'éleveur *') }}" value="{{ old('postal_code') ?? $breeder->postal_code ?? ''}}" required>
</div>
<div class="form-group">
<label for="place"><small>{{ __('Commune de l\'éleveur *') }}</small></label>
<input id="place" class="form-control" type="text" name="place" placeholder="{{ __('Commune de l\'éleveur *') }}" value="{{ old('place') ?? $breeder->place ?? ''}}" required>
</div>
<div class="form-group">
<label for="testimony"><small>{{ __('Témoignage de l\'éleveur *') }}</small></label>
<custom-ckeditor id="testimony" name="testimony" dbtext="{{ old('testimony') ?? $breeder->testimony ?? '' }}"></custom-ckeditor>
</div>
<div class="form-group">
<label for="latitude"><small>{{ __('Latitude *') }}</small></label>
<input id="latitude" class="form-control" type="text" name="latitude" placeholder="{{ __('Latitude *') }}" value="{{ old('latitude') ?? $breeder->latitude ?? ''}}" required>
</div>
<div class="form-group">
<label for="longitude"><small>{{ __('Longitude *') }}</small></label>
<input id="longitude" class="form-control" type="text" name="longitude" placeholder="{{ __('Longitude *') }}" value="{{ old('longitude') ?? $breeder->longitude ?? ''}}" required>
</div>
<div class="form-group row">
<label for="geo_type" class="col-form-label col-md-6">{{ __('Type de géolocalisation') }}</label>
<select id="geo_type" class="custom-select col-md-6" name="geo_type">
@foreach(GeoType::toArray() as $geoType)
<option value="{{ $geoType->value }}" @if(isset($breeder) and $breeder->geo_type->equals($geoType)) selected @endif>{{ old('geo_type') ?? $geoType->label }}</option>
@endforeach
</select>
</div>
<div class="form-group row">
<label for="audit" class="col-form-label col-md-6">{{ __('Audit de l\'éleveur') }}</label>
<select id="audit" class="custom-select col-md-6" name="audit">
<option value="0" @if( isset($breeder) and !$breeder->audit) selected @endif>{{ __('Non réalisé') }}</option>
<option value="1" @if( isset($breeder) and $breeder->audit) selected @endif>{{ __('Validé') }}</option>
</select>
</div>
<div class="form-group row">
<label for="ocbStatus" class="col-form-label col-md-6">{{ __('Éleveur validé OCB') }}</label>
<select id="ocbStatus" class="custom-select col-md-6" name="ocbStatus">
@foreach(EleveurOcbStatus::toArray() as $ocbStatus)
<option value="{{ $ocbStatus->value }}" @if(isset($breeder) and $breeder->ocbStatus->equals($ocbStatus)) selected @endif>{{ $ocbStatus->label }}</option>
@endforeach
</select>
</div>
<div class="form-group row">
<label for="valid_marketing_date" class="col-form-label col-md-6">{{__('Date de validation marketing') }}</label>
<input id="valid_marketing_date" class="form-control col-md-6" type="date" name="valid_marketing_date" value="{{ old('valid_marketing_date') or $breeder->valid_marketing_date ?? '' }}" >
</div>
<div class="form-group row">
<label for="presentation_type" class="col-form-label col-md-6">{{__('Type de présentation de l\'élevage') }}</label>
<select id="presentation_type" class="custom-select col-md-6" name="presentation_type" onchange="changeType(this)">
@foreach(PresentationType::toArray() as $presType)
<option value="{{ $presType->value }}" @if(isset($breeder) and $breeder->presentation_type->equals($presType)) selected @endif>{{ $presType->label }}</option>
@endforeach
</select>
</div>
<div class="form-group" id="div_video_link">
<label for="video_link" class="col-form-label col-md-6">{{ __('Lien de la vidéo') }}</label>
<input id="video_link" class="form-control" type="text" name="video_link" placeholder="{{ __('Lien de la vidéo') }}" value="{{ old('video_link') or $breeder->video_link ?? ''}}">
</div>
<div class="form-group" id="div_picture_site">
<label>{{ __('Photo(s) de l\'élevage de type') }} JPEG/PNG - 2Mo max. - 1000 x 667px</label></br>
<table class="table text-center">
<thead>
<tr>
<th scope="col" colspan="2">{{ __('Photos') }}</th>
</tr>
</thead>
<tbody>
@for($i = 1; $i <= 3; $i++)
<tr>
<td>{{__('Photo n°:number', ['number' => $i]) }}</td>
<td class="text-center">
<input class="form-control-file" type="file" name="picture{{$i}}" accept="image/png, image/jpeg">
</td>
</tr>
@if($breeder ?? false)
<tr colspan="2">
<td class="text-center">
@if ($breeder->{'picture' . $i})
<img src="{{ asset($breeder->{'picture' . $i}) }}" style="max-height: 100px;">
@else
<label>{{__('Aucune photo') }}.</label>
@endif
</td>
</tr>
@endif
@endfor
</tbody>
</table>
</div>
<div class="form-group row">
<label class="col-form-label col-md-6">{{ __('Type *') }}</label>
<select class="custom-select col-md-6" name="ocbType">
@foreach (OCBType::toArray() as $ocbType)
<option value="{{ $ocbType->value }}" @if (isset($type) and $type->equals($ocbType))selected @endif>{{ $ocbType->label }}</option>
@endforeach
</select>
</div>
<div class="form-group">
<div class="form-check">
<input id="status" class="form-check-input" type="checkbox" name="status" @if( old('status') or $breeder->status ?? false) checked @endif value="1">
<label for="status" class="form-check-label">{{ __('Publié ?') }}</label>
</div>
</div>
@section('scripts')
<script type="text/javascript" defer>
var addId = 1;
var videoDiv = $("#div_video_link");
var pictureSiteDiv = $("#div_picture_site");
$(document).ready(function() {
videoDiv = $("#div_video_link");
pictureSiteDiv = $("#div_picture_site");
if ($("#presentation_type").val() === "{{ PresentationType::picture()->value }}") {
videoDiv.hide();
pictureSiteDiv.show();
} else if ($("#presentation_type").val() === "{{ PresentationType::video()->value }}") {
videoDiv.show();
pictureSiteDiv.hide();
}
addId = $('[name*= "inuavs"]').length;
})
function addInput() {
var inuavDiv = $("#inuavs");
var input = document.createElement('input');
input.id = "inuav_" + addId;
input.className = "form-control col-md-3";
input.name = "inuavs[]";
input.placeholder = "Code INUAV";
var a = document.createElement('a');
a.href = "javascript:void(0)";
a.id = "inuav_" + addId + "_a";
a.setAttribute("onclick", "deleteInuav('inuav_" + addId + "')");
a.className = "col-form-label col-md-3";
a.innerHTML = "Supprimer"
inuavDiv.append(input);
inuavDiv.append(a);
addId++;
}
// Supprime un input INUAV avec son bouton supprimer, affiche le bouton ajouter un INUAV si il y a moins de 10 champs présents sur la page
function deleteInuav(elementId) {
var input = $("#" + elementId);
input.remove();
var a = $("#" + elementId + "_a");
a.remove();
}
function changeType(select) {
if (select.value === "{{ PresentationType::picture()->value }}") {
videoDiv.hide();
pictureSiteDiv.show();
} else if (select.value === "{{ PresentationType::video()->value }}") {
videoDiv.show();
pictureSiteDiv.hide();
}
}
</script>
@endsection

View file

@ -4,7 +4,7 @@
<div class="card">
<div class="card-header">
{{ __('Liste des éleveurs') }} - {{ $type->label }}
<a href="{{route('bo.breeders.create')}}" class="btn btn-sm btn-primary float-right">Ajouter</a>
<a href="{{route('bo.ocbbreeders.create')}}" class="btn btn-sm btn-primary float-right">Ajouter</a>
</div>
<div class="card-body">
@ -36,7 +36,7 @@
<i class="fas fa-check check-green"></i>
@endif
</td>
<td><a href="{{route('bo.breeders.edit', compact('breeder', 'type'))}}" class="btn btn-sm btn-primary">{{ __('Éditer') }}</a></td>
<td><a href="{{route('bo.ocbbreeders.edit', compact('breeder', 'type'))}}" class="btn btn-sm btn-primary">{{ __('Éditer') }}</a></td>
</tr>
@endforeach
</tbody>

View file

@ -10,11 +10,13 @@
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<title>{{ config('app.name', 'Laravel') }}@hasSection('title') - @yield('title')@endif</title>
<!-- Scripts -->
{{-- TODO : Ajouter jQuery dans app.js --}}
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<!-- Favicon -->
<link rel="icon" href="{{ asset('assets/images/favicon.png') }}" type="image/png">
<link rel="icon" sizes="16x16" href="{{ asset('assets/images/LG-favicons_16x16.png') }}" type="image/png">
<link rel="icon" sizes="32x32" href="{{ asset('assets/images/LG-favicons_32x32.png') }}" type="image/png">
<link rel="icon" sizes="48x48" href="{{ asset('assets/images/LG-favicons_48x48.png') }}" type="image/png">
<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
@ -108,11 +110,11 @@
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">Les éleveurs OCB</a>
<div class="dropdown-menu">
@foreach(OCBType::toArray() as $ocbType)
<a class="dropdown-item" href="{{route('bo.breeders.index', $ocbType )}}">{{ __('Éleveur :ocbtype', [
<a class="dropdown-item" href="{{route('bo.ocbbreeders.index', $ocbType )}}">{{ __('Éleveur :ocbtype', [
'ocbtype' => $ocbType->label
])}}</a>
@endforeach
<a class="dropdown-item" href="{{route('bo.breeders.create')}}">Ajouter un éleveur</a>
<a class="dropdown-item" href="{{route('bo.ocbbreeders.create')}}">Ajouter un éleveur</a>
</div>
</li>
<li class="nav-item dropdown">

View file

@ -1,6 +1,6 @@
<?php
use App\Http\Controllers\Bo\BreedersController;
use App\Http\Controllers\Bo\OCBBreedersController;
use App\Http\Controllers\Bo\OCBContentController;
use App\Http\Controllers\Bo\DashboardController;
use App\Http\Controllers\Bo\FaqThemesController;
@ -68,8 +68,8 @@ Route::prefix('bo')
Route::resource('ads', 'AdsController');
Route::resource('articles', 'ArticlesController');
Route::resource('balanced-menus', 'BalancedMenusController');
Route::resource('breeders', 'BreedersController')->except([
'index', 'edit', 'show'
Route::resource('ocbbreeders', 'OCBBreedersController')->except([
'index', 'edit', 'show', 'update'
]);
Route::resource('consumption-times', 'ConsumptionTimesController');
Route::resource('faq-questions', 'FaqQuestionsController');
@ -88,8 +88,9 @@ Route::prefix('bo')
});
Route::get('/', [DashboardController::class, 'index'])->name('dashboard');
Route::get('/breeders/{type}/{breeder}', [BreedersController::class, 'edit'])->name('breeders.edit');
Route::get('/breeders/{type}', [BreedersController::class, 'index'])->name('breeders.index');
Route::put('/ocbbreeders/{breeder}', [OCBBreedersController::class, 'update'])->name('ocbbreeders.update');
Route::get('/ocbbreeders/{type}/{breeder}', [OCBBreedersController::class, 'edit'])->name('ocbbreeders.edit');
Route::get('/ocbbreeders/{type}', [OCBBreedersController::class, 'index'])->name('ocbbreeders.index');
Route::get('/faq-themes/change-order/{id}/{action}', [FaqThemesController::class, 'changeOrder'])->name('faq-themes.change-order');
Route::get('/home-slider-pictures/change-order/{id}/{action}', [HomeSliderPicturesController::class, 'changeOrder'])->name('home-slider-pictures.change-order');
Route::get('/moments/change-star/{id}', [MomentsController::class, 'setStar'])->name('moments.change-star');