From b86b0436048716b4bfec5b75850e1ce8c993095a Mon Sep 17 00:00:00 2001 From: ludo Date: Mon, 13 Nov 2023 23:03:12 +0100 Subject: [PATCH] add validator, optimizations --- .../Admin/Shop/ArticlesDataTable.php | 11 +- .../Admin/Shop/ArticleController.php | 14 +- .../Admin/Shop/OfferController.php | 21 ++- .../Requests/Admin/Shop/StoreArticlePost.php | 3 +- .../Requests/Admin/Shop/StoreOfferPost.php | 23 +++ app/Repositories/Shop/Articles.php | 52 ++---- app/Repositories/Shop/Offers.php | 50 ++---- .../Admin/Shop/Articles/create.blade.php | 12 +- .../views/Admin/Shop/Articles/edit.blade.php | 14 +- .../views/Admin/Shop/Articles/form.blade.php | 41 ++--- .../partials/characteristics.blade.php | 9 +- .../views/Admin/Shop/Offers/create.blade.php | 12 +- .../views/Admin/Shop/Offers/edit.blade.php | 13 +- .../views/Admin/Shop/Offers/form.blade.php | 8 +- .../Shop/Orders/partials/shipping.blade.php | 2 + resources/views/layout/index.blade.php | 152 ++++++++++-------- 16 files changed, 207 insertions(+), 230 deletions(-) create mode 100644 app/Http/Requests/Admin/Shop/StoreOfferPost.php diff --git a/app/Datatables/Admin/Shop/ArticlesDataTable.php b/app/Datatables/Admin/Shop/ArticlesDataTable.php index 5b7c5457..f53ba84c 100644 --- a/app/Datatables/Admin/Shop/ArticlesDataTable.php +++ b/app/Datatables/Admin/Shop/ArticlesDataTable.php @@ -12,7 +12,7 @@ class ArticlesDataTable extends DataTable { public $model_name = 'articles'; - public $sortedColumn = 2; + public $sortedColumn = 3; public function query(Article $model) { @@ -99,15 +99,16 @@ class ArticlesDataTable extends DataTable return [ Column::make('visible')->title('Visible')->searchable(false)->width(50), Column::make('homepage')->title('Accueil')->searchable(false)->width(50), + Column::make('ref')->title('Ref'), Column::make('article_nature.name')->title('Nature'), Column::make('thumb')->title('')->searchable(false)->orderable(false)->width(40)->class('text-center'), Column::make('name')->title('Nom'), - Column::make('tags2')->title('Tags')->searchable(false)->orderable(false), - Column::make('tags_count')->title('#Tag')->class('text-right')->searchable(false)->width(40), + // Column::make('tags2')->title('Tags')->searchable(false)->orderable(false), + // Column::make('tags_count')->title('#Tag')->class('text-right')->searchable(false)->width(40), Column::make('categories_count')->title('#Ray')->class('text-right')->searchable(false)->width(40), Column::make('offers_count')->title('#Ofr')->class('text-right')->searchable(false)->width(40), - Column::make('images_count')->title('#Pho')->class('text-right')->searchable(false)->width(40), - Column::make('images_count2')->title('#PhoH')->class('text-right')->searchable(false)->orderable(false)->width(40), + // Column::make('images_count')->title('#Pho')->class('text-right')->searchable(false)->width(40), + // Column::make('images_count2')->title('#PhoH')->class('text-right')->searchable(false)->orderable(false)->width(40), $this->makeColumnButtons(), ]; } diff --git a/app/Http/Controllers/Admin/Shop/ArticleController.php b/app/Http/Controllers/Admin/Shop/ArticleController.php index 4c728c11..e3b579ed 100644 --- a/app/Http/Controllers/Admin/Shop/ArticleController.php +++ b/app/Http/Controllers/Admin/Shop/ArticleController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Admin\Shop; use App\Datatables\Admin\Shop\ArticlesDataTable; +use App\Http\Requests\Admin\Shop\StoreArticlePost; use App\Repositories\Shop\ArticleNatures; use App\Repositories\Shop\Articles; use App\Repositories\Shop\Categories; @@ -20,9 +21,11 @@ class ArticleController extends Controller public function index(ArticlesDataTable $dataTable) { - $data['article_natures'] = ArticleNatures::getOptions(); - $data['categories'] = Categories::getOptions(); - $data['tags'] = Tags::getOptionsFullName(); + $data = [ + 'article_natures' => ArticleNatures::getOptions(), + 'categories' => Categories::getOptions(), + 'tags' => Tags::getOptionsFullName(), + ]; return $dataTable->render('Admin.Shop.Articles.list', $data); } @@ -34,9 +37,12 @@ class ArticleController extends Controller return view('Admin.Shop.Articles.create', $data); } - public function store(Request $request) + public function store(StoreArticlePost $request) { $data = $request->all(); + $data['visible'] = $data['visible'] ?? false; + $data['homepage'] = $data['homepage'] ?? false; + Articles::storeFull($data); return redirect()->route('Admin.Shop.Articles.index'); diff --git a/app/Http/Controllers/Admin/Shop/OfferController.php b/app/Http/Controllers/Admin/Shop/OfferController.php index 04a9ce03..591c226d 100644 --- a/app/Http/Controllers/Admin/Shop/OfferController.php +++ b/app/Http/Controllers/Admin/Shop/OfferController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin\Shop; use App\Datatables\Admin\Shop\OffersDataTable; use App\Http\Controllers\Controller; +use App\Http\Requests\Admin\Shop\StoreOfferPost; use App\Repositories\Shop\ArticleNatures; use App\Repositories\Shop\Articles; use App\Repositories\Shop\Offers; @@ -16,32 +17,30 @@ class OfferController extends Controller { public function index(OffersDataTable $dataTable) { - $data['article_natures'] = ArticleNatures::getOptions(); - $data['packages'] = Packages::getOptions(); + $data = [ + 'article_natures' => ArticleNatures::getOptions(), + 'packages' => Packages::getOptions(), + ]; return $dataTable->render('Admin.Shop.Offers.list', $data ?? []); } public function create() { - $data['articles'] = Articles::getOptionsWithNature(); - $data['tariffs'] = Tariffs::getOptions(); - $data['variations'] = Variations::getOptions(); + $data = Offers::init(); return view('Admin.Shop.Offers.create', $data); } public function edit($id) { - $data['offer'] = Offers::get($id)->toArray(); - $data['articles'] = Articles::getOptionsWithNature(); - $data['tariffs'] = Tariffs::getOptions(); - $data['variations'] = Variations::getOptions(); + $data = Offers::init(); + $data['offer'] = Offers::getArray($id); return view('Admin.Shop.Offers.edit', $data); } - public function store(Request $request) + public function store(StoreOfferPost $request) { $data = $request->all(); $ret = Offers::store($data); @@ -51,7 +50,7 @@ class OfferController extends Controller public function show($id) { - $data['offer'] = Offers::get($id)->toArray(); + $data['offer'] = Offers::getArray($id); return view('Admin.Shop.Offers.view', $data); } diff --git a/app/Http/Requests/Admin/Shop/StoreArticlePost.php b/app/Http/Requests/Admin/Shop/StoreArticlePost.php index 91f080d4..016338c9 100644 --- a/app/Http/Requests/Admin/Shop/StoreArticlePost.php +++ b/app/Http/Requests/Admin/Shop/StoreArticlePost.php @@ -14,10 +14,11 @@ class StoreArticlePost extends FormRequest public function rules() { return [ - 'ref' => 'required|unique:articles,ref,'.$this->ref, + 'ref' => 'required|unique:shop_articles,ref,'.$this->id, 'product_type' => 'required', 'product_id' => 'required', 'article_nature_id' => 'required', + 'name' => 'required', ]; } } diff --git a/app/Http/Requests/Admin/Shop/StoreOfferPost.php b/app/Http/Requests/Admin/Shop/StoreOfferPost.php new file mode 100644 index 00000000..90e3b6e1 --- /dev/null +++ b/app/Http/Requests/Admin/Shop/StoreOfferPost.php @@ -0,0 +1,23 @@ + 'required', + 'variation_id' => 'required', + 'tariff_id' => 'required', + 'weight' => 'required', + ]; + } +} diff --git a/app/Repositories/Shop/Articles.php b/app/Repositories/Shop/Articles.php index 2727bf75..6a7197e6 100644 --- a/app/Repositories/Shop/Articles.php +++ b/app/Repositories/Shop/Articles.php @@ -4,6 +4,7 @@ namespace App\Repositories\Shop; use App\Models\Shop\Article; use App\Models\Shop\Merchandise; +use App\Traits\Model\Basic; use App\Repositories\Botanic\Species; use App\Repositories\Botanic\Varieties; use App\Repositories\Core\Comments; @@ -13,7 +14,7 @@ use Illuminate\Support\Str; class Articles { - use Imageable; + use Basic, Imageable; public static function autocomplete($str) { @@ -73,11 +74,6 @@ class Articles return Offers::getOffersByArticle($id); } - public static function getOptions() - { - return Article::orderBy('name', 'asc')->pluck('name', 'id')->toArray(); - } - public static function getOptionsWithNature() { $articles = Article::with(['article_nature'])->get(); @@ -391,17 +387,17 @@ class Articles { switch ($product_type) { case 'App\Models\Botanic\Variety': - $data['images'] = Varieties::getImages($product_id); + $images = Varieties::getImages($product_id); break; case 'App\Models\Botanic\Specie': - $data['images'] = Species::getImages($product_id); + $images = Species::getImages($product_id); break; case 'App\Models\Shop\Merchandise': - $data['images'] = Merchandises::getImages($product_id); + $images = Merchandises::getImages($product_id); break; } - return $data ?? false; + return $images ?? false ? ['images' => $images] : false; } public static function getMeta(&$data = []) @@ -516,11 +512,6 @@ class Articles return Prices::getByArticle($article->id); } - public static function get($id) - { - return Article::findOrFail($id); - } - public static function getFullImagesByArticleId($id) { $article = self::get($id); @@ -611,32 +602,6 @@ class Articles return $article->id; } - public static function store($data) - { - $data['visible'] = $data['visible'] ?? false; - - return ($data['id'] ?? false) ? self::update($data) : self::create($data); - } - - public static function create($data) - { - return Article::create($data); - } - - public static function update($data, $id = false) - { - $id = $id ? $id : $data['id']; - $article = self::get($id); - $ret = $article->update($data); - - return $article; - } - - public static function destroy($id) - { - return Article::destroy($id); - } - public static function storeCategories($article, $categories) { if (! $categories) { @@ -677,4 +642,9 @@ class Articles return $name ? hash('crc32c', Str::slug($name)) : false; } + + public static function getModel() + { + return Article::query(); + } } diff --git a/app/Repositories/Shop/Offers.php b/app/Repositories/Shop/Offers.php index 3ce58d6c..5968d3db 100644 --- a/app/Repositories/Shop/Offers.php +++ b/app/Repositories/Shop/Offers.php @@ -3,12 +3,19 @@ namespace App\Repositories\Shop; use App\Models\Shop\Offer; +use App\Traits\Model\Basic; class Offers { - public static function count() + use Basic; + + public static function init() { - return Offer::count(); + return [ + 'articles' => Articles::getOptionsWithNature(), + 'tariffs' => Tariffs::getOptions(), + 'variations' => Variations::getOptions(), + ]; } public static function getWeight($id, $quantity = 1) @@ -116,42 +123,13 @@ class Offers return Offer::with(['article.tags'])->byTags($tags)->get(); } - public static function getAll() - { - return Offer::get(); - } - - public static function get($id, $relations = false) - { - return $relations ? Offer::with($relations)->findOrFail($id) : Offer::findOrFail($id); - } - - public static function store($data) - { - return ($data['id'] ?? false) ? self::update($data) : self::create($data); - } - - public static function create($data) - { - return Offer::create($data); - } - - public static function update($data, $id = false) - { - $id = $id ? $id : $data['id']; - $item = self::get($id); - $item->update($data); - - return $item; - } - - public static function destroy($id) - { - return Offer::destroy($id); - } - public static function toggle_active($id, $status_id) { return self::update(['status_id' => $status_id], $id); } + + public static function getModel() + { + return Offer::query(); + } } diff --git a/resources/views/Admin/Shop/Articles/create.blade.php b/resources/views/Admin/Shop/Articles/create.blade.php index 6ca79c5a..5ac2ddd7 100644 --- a/resources/views/Admin/Shop/Articles/create.blade.php +++ b/resources/views/Admin/Shop/Articles/create.blade.php @@ -1,13 +1,9 @@ @extends('layout.index', [ - 'title' => __('shop.articles.title'), - 'subtitle' => __('shop.articles.add'), - 'breadcrumb' => [__('shop.articles.title'), __('shop.articles.add')] + 'title' => __('shop.articles.title'), + 'subtitle' => __('shop.articles.add'), + 'breadcrumb' => [__('shop.articles.title'), __('shop.articles.add')], ]) @section('content') - - {{ Form::open(['route' => 'Admin.Shop.Articles.store', 'id' => 'article-form', 'autocomplete' => 'off', 'files' => true]) }} - @include('Admin.Shop.Articles.form') - - + @include('Admin.Shop.Articles.form') @endsection diff --git a/resources/views/Admin/Shop/Articles/edit.blade.php b/resources/views/Admin/Shop/Articles/edit.blade.php index 6a131753..d1c6c28a 100644 --- a/resources/views/Admin/Shop/Articles/edit.blade.php +++ b/resources/views/Admin/Shop/Articles/edit.blade.php @@ -1,15 +1,9 @@ @extends('layout.index', [ - 'title' => __('shop.articles.title'), - 'subtitle' => __('shop.articles.edit'), - 'breadcrumb' => [__('shop.articles.title'), __('shop.articles.edit')] + 'title' => __('shop.articles.title'), + 'subtitle' => __('shop.articles.edit'), + 'breadcrumb' => [__('shop.articles.title'), __('shop.articles.edit')], ]) @section('content') - - {{ Form::open(['route' => 'Admin.Shop.Articles.store', 'id' => 'article-form', 'autocomplete' => 'off', 'files' => true]) }} - - - @include('Admin.Shop.Articles.form') - {{ Form::close() }} - + @include('Admin.Shop.Articles.form') @endsection diff --git a/resources/views/Admin/Shop/Articles/form.blade.php b/resources/views/Admin/Shop/Articles/form.blade.php index 28ab643d..195fee3d 100644 --- a/resources/views/Admin/Shop/Articles/form.blade.php +++ b/resources/views/Admin/Shop/Articles/form.blade.php @@ -1,10 +1,9 @@ -
-
- @include('Admin.Shop.Articles.partials.characteristics') -
-
+{{ Form::open(['route' => 'Admin.Shop.Articles.store', 'id' => 'article-form', 'autocomplete' => 'off', 'files' => true]) }} + +@include('Admin.Shop.Articles.partials.characteristics') +{{ Form::close() }} -@include('components.save') + @include('load.form.appender') @include('load.form.editor') @@ -17,20 +16,22 @@ @include('load.layout.modal') @push('js') - -@endpush \ No newline at end of file + initChevron(); + initEditor(); + initSaveForm('#article-form'); + initSelect2(); + + }); + +@endpush diff --git a/resources/views/Admin/Shop/Articles/partials/characteristics.blade.php b/resources/views/Admin/Shop/Articles/partials/characteristics.blade.php index 61554c65..3d865302 100644 --- a/resources/views/Admin/Shop/Articles/partials/characteristics.blade.php +++ b/resources/views/Admin/Shop/Articles/partials/characteristics.blade.php @@ -166,18 +166,17 @@ var product_type = $(this).val(); switch (product_type) { case 'App\\Models\\Botanic\\Specie': - var url = '{{ route('Admin.Botanic.Species.getSelect') }}'; + var url = "{{ route('Admin.Botanic.Species.getSelect') }}"; break; case 'App\\Models\\Botanic\\Variety': - var url = '{{ route('Admin.Botanic.Varieties.getSelect') }}'; + var url = "{{ route('Admin.Botanic.Varieties.getSelect') }}"; break; case 'App\\Models\\Shop\\Merchandise': - var url = '{{ route('Admin.Shop.Merchandises.getSelect') }}'; + var url = "{{ route('Admin.Shop.Merchandises.getSelect') }}"; break; } loadProducts(url); - var url = '{{ route('Admin.Shop.ArticleNatures.getOptions') }}'; - loadArticleNatures(url); + loadArticleNatures("{{ route('Admin.Shop.ArticleNatures.getOptions') }}"); }); function loadArticleNatures(url) { diff --git a/resources/views/Admin/Shop/Offers/create.blade.php b/resources/views/Admin/Shop/Offers/create.blade.php index 387f019c..742154a2 100644 --- a/resources/views/Admin/Shop/Offers/create.blade.php +++ b/resources/views/Admin/Shop/Offers/create.blade.php @@ -1,13 +1,9 @@ @extends('layout.index', [ - 'title' => __('shop.offers.title'), - 'subtitle' => __('shop.offers.add'), - 'breadcrumb' => [__('shop.offers.title'), __('shop.offers.add')] + 'title' => __('shop.offers.title'), + 'subtitle' => __('shop.offers.add'), + 'breadcrumb' => [__('shop.offers.title'), __('shop.offers.add')], ]) @section('content') - - {{ Form::open(['route' => 'Admin.Shop.Offers.store', 'id' => 'offer-form', 'autocomplete' => 'off']) }} - @include('Admin.Shop.Offers.form') - - + @include('Admin.Shop.Offers.form') @endsection diff --git a/resources/views/Admin/Shop/Offers/edit.blade.php b/resources/views/Admin/Shop/Offers/edit.blade.php index 928f3118..115ba8b1 100644 --- a/resources/views/Admin/Shop/Offers/edit.blade.php +++ b/resources/views/Admin/Shop/Offers/edit.blade.php @@ -1,14 +1,9 @@ @extends('layout.index', [ - 'title' => __('shop.offers.title'), - 'subtitle' => __('shop.offers.edit'), - 'breadcrumb' => [__('shop.offers.title'), __('shop.offers.edit')] + 'title' => __('shop.offers.title'), + 'subtitle' => __('shop.offers.edit'), + 'breadcrumb' => [__('shop.offers.title'), __('shop.offers.edit')], ]) @section('content') - - {{ Form::open(['route' => 'Admin.Shop.Offers.store', 'id' => 'offer-form', 'autocomplete' => 'off']) }} - - @include('Admin.Shop.Offers.form') - - + @include('Admin.Shop.Offers.form') @endsection diff --git a/resources/views/Admin/Shop/Offers/form.blade.php b/resources/views/Admin/Shop/Offers/form.blade.php index 8e7c239f..eda9754f 100644 --- a/resources/views/Admin/Shop/Offers/form.blade.php +++ b/resources/views/Admin/Shop/Offers/form.blade.php @@ -1,3 +1,6 @@ +{{ Form::open(['route' => 'Admin.Shop.Offers.store', 'id' => 'offer-form', 'autocomplete' => 'off']) }} + +
@@ -103,13 +106,16 @@
-@include('components.save') +{{ form::close() }} + @include('load.layout.chevron') @include('load.form.save') @include('load.form.select2') @push('js') + {!! JsValidator::formRequest('App\Http\Requests\Admin\Shop\StoreOfferPost', '#offer-form') !!} + - - - - + - $.ajaxSetup({headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'}}); - - bootbox.setLocale('{{ App::getLocale() }}'); + + var session = { + keepalive: "{{ route('boilerplate.keepalive', null, false) }}", + expire: {{ time() + config('session.lifetime') * 60 }}, + lifetime: {{ config('session.lifetime') * 60 }}, + id: "{{ session()->getId() }}" + } + - @if(Session::has('growl')) - - @endif + @if (Session::has('growl')) + + @endif - @stack('scripts') - @stack('js') + @stack('scripts') + @stack('js') +