diff --git a/.gitignore b/.gitignore
index 6f5461e..4b3f96e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,10 @@
/node_modules
-/integration
/public/hot
/public/storage
/public/images/content
/public/images/gammes
/public/images/produits
+/public/images/slides
/storage/*.key
/vendor
.env
diff --git a/app/Http/Controllers/Bo/SlidersController.php b/app/Http/Controllers/Bo/SlidersController.php
new file mode 100644
index 0000000..6b30c2b
--- /dev/null
+++ b/app/Http/Controllers/Bo/SlidersController.php
@@ -0,0 +1,123 @@
+label;
+ $slug = $request->slug;
+ if (empty($slug)) {
+ $slug = Str::slug($label);
+ }
+ $commentaire = $request->commentaire;
+
+
+ $request->validate([
+ 'label' => 'required|string|max:255',
+ 'slug' => 'sometimes|unique:sliders',
+ ]);
+
+ $slider = new Slider();
+ $slider->label = $label;
+ $slider->slug = $slug;
+ $slider->commentaire = $commentaire;
+ $slider->save();
+ return redirect()->route('bo.sliders.edit', $slider->id)->with('success', 'Slider créé !');
+ }
+
+ /**
+ * Display the specified resource.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function show($id)
+ {
+ //
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function edit($id)
+ {
+ $slider = Slider::findOrFail($id);
+ return view('bo.sliders.edit', compact('slider'));
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function update(Request $request, $id)
+ {
+ $slider = Slider::findOrFail($id);
+ $label = $request->label;
+ $slug = $request->slug;
+ $commentaire = $request->commentaire;
+
+
+ $request->validate([
+ 'label' => 'required|string|max:255',
+ 'slug' => 'required|unique:sliders,slug,' . $slider->id,
+ ]);
+
+ $slider->label = $label;
+ $slider->slug = $slug;
+ $slider->commentaire = $commentaire;
+ $slider->save();
+
+ return redirect()->route('bo.sliders.edit', $slider->id)->with('success', 'Modifications enregistrées !');
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function destroy($id)
+ {
+ //
+ }
+}
diff --git a/app/Http/Controllers/Bo/SlidesController.php b/app/Http/Controllers/Bo/SlidesController.php
new file mode 100644
index 0000000..595b8ae
--- /dev/null
+++ b/app/Http/Controllers/Bo/SlidesController.php
@@ -0,0 +1,247 @@
+get();;
+ return view('bo.slides.index', compact('slides'));
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function create()
+ {
+ $sliders = Slider::all();
+ return view('bo.slides.create', compact('sliders'));
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @todo : validation des dates
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return \Illuminate\Http\Response
+ */
+ public function store(Request $request)
+ {
+ $title = $request->title;
+ $picture = $request->picture;
+ $text = $request->text;
+ $linkLabel = $request->link_label;
+ $link = $request->link;
+ $newTab = $request->link_new_tab === null ? 0 : 1;
+ $sliderId = $request->slider_id;
+
+ if (empty($request->date_start_date)) {
+ $date_start = null;
+ } else {
+ if(emty($request->date_start_time)) {
+ $date_start = $request->date_start_date . " 00:00";
+ } else {
+ $date_start = $request->date_start_date . " " . $request->date_start_time;
+ }
+ }
+
+ if (empty($request->date_end_date)) {
+ $date_end = null;
+ } else {
+ if(empty($request->date_end_time)) {
+ $date_end = $request->date_end_date . " 23:59";
+ } else {
+ $date_end = $request->date_end_date . " " . $request->date_end_time;
+ }
+
+ }
+
+ $request->validate([
+ 'title' => 'required|max:255',
+ 'picture' => 'image|mimes:jpeg,png,jpg|max:2048|dimensions:max-width=' .
+ config('theme.slide_image_maxwidth') . ',max-height=' .
+ config('theme.slide_image_maxheight'),
+ 'link_label' => 'sometimes|max:255',
+ 'link' => 'sometimes|max:255',
+ ]);
+
+ $slide = new Slide();
+ $slide->title = $title;
+ $slide->text = $text;
+ $slide->link_label = $linkLabel;
+ $slide->link = $link;
+ $slide->link_new_tab = $newTab;
+ $slide->date_start = $date_start;
+ $slide->date_end = $date_end;
+ $slide->slider_id = $sliderId;
+ $slide->order = $this->getLastOrder();
+ $slide->save();
+
+ if ($picture !== null) {
+ $imageName = $slide->id . '.' . $picture->extension();
+ $picture->move(public_path('images/slides'), $imageName);
+ $slide->picture = $imageName;
+ $slide->save();
+ }
+
+ return redirect()->route('bo.slides.edit', $slide->id)->with('success', 'Slide créé !');
+ }
+
+ /**
+ * Display the specified resource.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function show($id)
+ {
+ //
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function edit($id)
+ {
+ $slide = Slide::findOrFail($id);
+ $sliders = Slider::all();
+ return view('bo.slides.edit', compact('slide','sliders'));
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function update(Request $request, $id)
+ {
+ $title = $request->title;
+ $picture = $request->picture;
+ $text = $request->text;
+ $linkLabel = $request->link_label;
+ $link = $request->link;
+ $newTab = $request->link_new_tab === null ? 0 : 1;
+ $sliderId = $request->slider_id;
+
+ if (empty($request->date_start_date)) {
+ $date_start = null;
+ } else {
+ if (empty($request->date_start_time)) {
+ $date_start = $request->date_start_date . " 00:00";
+ } else {
+ $date_start = $request->date_start_date . " " . $request->date_start_time;
+ }
+ }
+
+ if (empty($request->date_end_date)) {
+ $date_end = null;
+ } else {
+ if (empty($request->date_end_time)) {
+ $date_end = $request->date_end_date . " 23:59";
+ } else {
+ $date_end = $request->date_end_date . " " . $request->date_end_time;
+ }
+
+ }
+
+ $request->validate([
+ 'title' => 'required|max:255',
+ 'picture' => 'image|mimes:jpeg,png,jpg|max:2048|dimensions:max-width=' .
+ config('theme.slide_image_maxwidth') . ',max-height=' .
+ config('theme.slide_image_maxheight'),
+ 'link_label' => 'sometimes|max:255',
+ 'link' => 'sometimes|max:255',
+ ]);
+
+ $slide = Slide::findOrFail($id);
+ $slide->title = $title;
+ $slide->text = $text;
+ $slide->link_label = $linkLabel;
+ $slide->link = $link;
+ $slide->link_new_tab = $newTab;
+ $slide->date_start = $date_start;
+ $slide->date_end = $date_end;
+ $slide->slider_id = $sliderId;
+ $slide->save();
+
+ if ($picture !== null) {
+ if(file_exists(public_path() . 'images/slides/' . $slide->picture))
+ unlink(public_path() . 'images/slides/' . $slide->picture);
+ $imageName = $slide->id . '.' . $picture->extension();
+ $picture->move(public_path('images/slides'), $imageName);
+ $slide->picture = $imageName;
+ $slide->save();
+ }
+
+ return redirect()->route('bo.slides.edit', $slide->id)->with('success', 'Modifications enregistrées !');
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function destroy($id)
+ {
+ $s = Slide::findOrFail($id);
+
+ $s->delete();
+
+ return redirect()->route('bo.slides.index');
+ }
+
+
+ public function changeOrder($id, $action)
+ {
+ $current = Slide::findOrFail($id);
+
+ if ($action === 'up'){
+ $tmp = Slide::where('order', '<', $current->order)->orderBy('order', 'DESC')->first();
+ $newOrder = $tmp->order;
+ $tmp->order = $current->order;
+ $current->order = $newOrder;
+ }else{
+ $tmp = Slide::where('order', '>', $current->order)->orderBy('order', 'ASC')->first();
+ $newOrder = $tmp->order;
+ $tmp->order = $current->order;
+ $current->order = $newOrder;
+ }
+ $tmp->save();
+ $current->save();
+
+ return back();
+ //return redirect()->route('bo.slides.index');
+ }
+
+ /**
+ * retreive order position to put a new slide to
+ */
+ private function getLastOrder()
+ {
+ $order = Slide::select('order')->orderBy('order', 'DESC')->first();
+ if ($order === NULL)
+ return 1;
+ return $order->order + 1;
+ }
+}
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
index c2157fd..4b1c521 100644
--- a/app/Http/Controllers/HomeController.php
+++ b/app/Http/Controllers/HomeController.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Models\Content;
use App\Models\Product;
+use App\Models\Slider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
@@ -16,7 +17,10 @@ class HomeController extends Controller
//star products
$products = Product::where('status', 1)->where('star', 1)->get();
- return view('home', compact('content', 'products'));
+ $slider = Slider::where('slug','home')->first();
+ $slides = $slider->showableSlides;
+
+ return view('home', compact('content', 'products', 'slides'));
}
/**
diff --git a/app/Models/Slide.php b/app/Models/Slide.php
new file mode 100644
index 0000000..292a876
--- /dev/null
+++ b/app/Models/Slide.php
@@ -0,0 +1,25 @@
+ 'datetime',
+ 'date_end' => 'datetime',
+ ];
+
+ public function slider() {
+ return $this->belongsTo(Slider::class);
+ }
+}
diff --git a/app/Models/Slider.php b/app/Models/Slider.php
new file mode 100644
index 0000000..abfb30c
--- /dev/null
+++ b/app/Models/Slider.php
@@ -0,0 +1,31 @@
+hasMany(Slide::class, 'slider_id')->orderBy('order', 'ASC');
+ }
+
+ public function showableSlides()
+ {
+ $now = Carbon::now();
+ return $this->hasMany(Slide::class, 'slider_id')
+ ->orderBy('order', 'ASC')->where(function ($q) use ($now) {
+ $q->whereDate('date_start', '<=', $now)
+ ->orWhereNull('date_start');
+ })->where(function ($q) use ($now) {
+ $q->whereDate('date_end', '>=', $now)
+ ->orWhereNull('date_end');
+ });
+
+ }
+}
diff --git a/database/migrations/2021_04_14_115938_create_sliders_table.php b/database/migrations/2021_04_14_115938_create_sliders_table.php
new file mode 100644
index 0000000..ab3d332
--- /dev/null
+++ b/database/migrations/2021_04_14_115938_create_sliders_table.php
@@ -0,0 +1,39 @@
+id();
+ $table->string('label');
+ $table->string('slug');
+ $table->unique('slug');
+ $table->string('commentaire')->nullable();
+ $table->timestamps();
+ });
+
+ $seeder = new SlidersSeeder();
+ $seeder->run();
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('sliders');
+ }
+}
diff --git a/database/migrations/2021_04_14_115954_create_slides_table.php b/database/migrations/2021_04_14_115954_create_slides_table.php
new file mode 100644
index 0000000..f3a7111
--- /dev/null
+++ b/database/migrations/2021_04_14_115954_create_slides_table.php
@@ -0,0 +1,44 @@
+id();
+ $table->foreignId('slider_id')->default(1)->constrained('sliders');
+
+ $table->string('title');
+ $table->text('text')->nullable();
+ $table->string('picture')->nullable();
+ $table->string('link_label')->nullable();
+ $table->string('link')->nullable();
+ $table->boolean('link_new_tab')->default(false);
+ $table->integer('order')->default(1);
+
+ $table->timestamp('date_start')->nullable();
+ $table->timestamp('date_end')->nullable();
+
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('slides');
+ }
+}
diff --git a/database/seeders/SlidersSeeder.php b/database/seeders/SlidersSeeder.php
new file mode 100644
index 0000000..db0e439
--- /dev/null
+++ b/database/seeders/SlidersSeeder.php
@@ -0,0 +1,24 @@
+label = "Home";
+ $homeslider->slug = Str::slug($homeslider->label);
+ $homeslider->commentaire = 'Slider de la home';
+ $homeslider->save();
+ }
+}
diff --git a/resources/views/bo/promotions/index.blade.php b/resources/views/bo/promotions/index.blade.php
index ea20917..1660db4 100644
--- a/resources/views/bo/promotions/index.blade.php
+++ b/resources/views/bo/promotions/index.blade.php
@@ -23,8 +23,8 @@
@foreach ($promotions as $promotion)
- {{$promotion->discountType->label}}>
- {{$promotion->discount_value}}>
+ {{$promotion->discountType->label}}
+ {{$promotion->discount_value}}
{{$promotion->date_start}}
{{$promotion->date_end}}
diff --git a/resources/views/bo/sliders/create.blade.php b/resources/views/bo/sliders/create.blade.php
new file mode 100644
index 0000000..cdb2e7c
--- /dev/null
+++ b/resources/views/bo/sliders/create.blade.php
@@ -0,0 +1,36 @@
+@extends('layouts.bo-layout')
+
+@section('content')
+
+@endsection
diff --git a/resources/views/bo/sliders/edit.blade.php b/resources/views/bo/sliders/edit.blade.php
new file mode 100644
index 0000000..9f15e6d
--- /dev/null
+++ b/resources/views/bo/sliders/edit.blade.php
@@ -0,0 +1,90 @@
+@extends('layouts.bo-layout')
+
+@section('content')
+
+
+
Slides
+
+
+
+
+ Titre
+ Texte
+ Image
+ Lien
+ Début
+ Fin
+ Slider de regroupement
+ Ordre
+
+
+
+
+ @foreach($slider->slides as $slide)
+
+ {{$slide->title}}
+ {!! $slide->text !!}
+
+ {{ $slide->link_label }}
+ {{$slide->date_start}}
+ {{$slide->date_end}}
+ {{$slide->slider->label}}
+
+ @if ($loop->first)
+
+
+
+ @elseif($loop->last)
+
+
+
+ @else
+
+
+
+
+
+
+ @endif
+
+ Éditer
+
+ @endforeach
+
+
+@endsection
diff --git a/resources/views/bo/sliders/index.blade.php b/resources/views/bo/sliders/index.blade.php
new file mode 100644
index 0000000..313c382
--- /dev/null
+++ b/resources/views/bo/sliders/index.blade.php
@@ -0,0 +1,40 @@
+@extends('layouts.bo-layout')
+
+@section('content')
+
+
Sliders Liste
+
+ @if ($errors->any())
+ @foreach($errors->all() as $error)
+
{{ $error }}
+ @endforeach
+ @endif
+
Créer un slider
+
+
+
+ Label
+ Slug
+ Commentaire
+
+
+
+ @foreach ($sliders as $slider)
+
+ {{$slider->label}}
+ {{$slider->slug}}
+ {{$slider->commentaire}}
+
+ Éditer
+
+
+
+ @endforeach
+
+
+@endsection
diff --git a/resources/views/bo/slides/create.blade.php b/resources/views/bo/slides/create.blade.php
new file mode 100644
index 0000000..f1d0dc7
--- /dev/null
+++ b/resources/views/bo/slides/create.blade.php
@@ -0,0 +1,110 @@
+@extends('layouts.bo-layout')
+
+@section('content')
+
+@endsection
+
+@section('scripts')
+
+@endsection
diff --git a/resources/views/bo/slides/edit.blade.php b/resources/views/bo/slides/edit.blade.php
new file mode 100644
index 0000000..214a0e3
--- /dev/null
+++ b/resources/views/bo/slides/edit.blade.php
@@ -0,0 +1,129 @@
+@extends('layouts.bo-layout')
+
+@section('content')
+
+ @method('PUT')
+ @csrf
+
+
< Slides Création
+ @if (session('success'))
+
{{ session('success') }}
+ @endif
+
+ Enregistrer
+
+
+ @if ($errors->any())
+
+
+ @foreach ($errors->all() as $error)
+ {{ $error }}
+ @endforeach
+
+
+ @endif
+
+
+ Titre *
+
+
+
+ Texte
+ {{ old('text', $slide->text) }}
+
+
+
+
+
+
+
Période de parution
+
+
+
+
+
Options de lien
+
+
+ Texte du lien
+
+
+
+ Cible du lien
+
+
+
+ link_new_tab) !== 0)checked @endif>
+ Ouvrir dans un nouvel onglet
+
+
+
+@endsection
+
+@section('scripts')
+
+@endsection
diff --git a/resources/views/bo/slides/index.blade.php b/resources/views/bo/slides/index.blade.php
new file mode 100644
index 0000000..26028bb
--- /dev/null
+++ b/resources/views/bo/slides/index.blade.php
@@ -0,0 +1,69 @@
+@extends('layouts.bo-layout')
+
+@section('content')
+
+
Slides Liste
+
+ @if ($errors->any())
+ @foreach($errors->all() as $error)
+
{{ $error }}
+ @endforeach
+ @endif
+
Créer un slide
+
+
+@endsection
diff --git a/resources/views/front/canard/auth/register-success.blade.php b/resources/views/front/canard/auth/register-success.blade.php
index 62a9f07..8fba90b 100644
--- a/resources/views/front/canard/auth/register-success.blade.php
+++ b/resources/views/front/canard/auth/register-success.blade.php
@@ -14,7 +14,7 @@
Félicitations
Votre compte a bien été créé ! Vous allez recevoir un mail de confirmation sur l’adresse {{ $mail }}
-
Connexion
+
Connexion
diff --git a/resources/views/front/canard/home.blade.php b/resources/views/front/canard/home.blade.php
index 55b5737..b3ba078 100644
--- a/resources/views/front/canard/home.blade.php
+++ b/resources/views/front/canard/home.blade.php
@@ -10,7 +10,7 @@
{{-- sert de spacer car ici pas de breadcrumb --}}
{{-- Slider --}}
- @yield('main-slider', view('partials.main-slider'))
+ @include('partials.main-slider')
{{-- Fin du Slider --}}
diff --git a/resources/views/front/canard/partials/main-slider.blade.php b/resources/views/front/canard/partials/main-slider.blade.php
index 49bd414..48ad45e 100644
--- a/resources/views/front/canard/partials/main-slider.blade.php
+++ b/resources/views/front/canard/partials/main-slider.blade.php
@@ -2,17 +2,27 @@
-
-
-
-
-
Des saveurs qui donnent envie
-
Cras scelerisque imperdiet nisl, non malesuada felis. Fusce ullamcorper mi sed dapibus dignissim. Maecenas pellentesque auctor sem nec volutpat...
-
Accédez à la boutique
-
-
-
-
+ @foreach ($slides as $slide)
+
+ @if(!empty($slide->picture))
+
+ @else
+
+ @endif
+
+
{{ $slide->title }}
+
{!! $slide->text !!}
+ @if(!empty($slide->link_label))
+
+ @endif
+
+
+
+ @endforeach
diff --git a/resources/views/front/canard/theme.config.php b/resources/views/front/canard/theme.config.php
index 7499784..4ae5ab6 100644
--- a/resources/views/front/canard/theme.config.php
+++ b/resources/views/front/canard/theme.config.php
@@ -18,4 +18,7 @@ return [
'enum_product_types' => [
'foodProduct' => 'Alimentaire',
],
+ 'slide_image_maxwidth' => '1180',
+ 'slide_image_maxheight' => '449',
+
];
diff --git a/resources/views/layouts/bo-layout.blade.php b/resources/views/layouts/bo-layout.blade.php
index 0346214..c584803 100644
--- a/resources/views/layouts/bo-layout.blade.php
+++ b/resources/views/layouts/bo-layout.blade.php
@@ -66,6 +66,24 @@