From ea5ce7f02b0931845849c5c9d87480fe556fa4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Mon, 10 Oct 2022 17:46:50 +0300 Subject: [PATCH] refs #2662 - ( #39afx2h ) --- app/Http/Controllers/Settings/Categories.php | 43 ++++++++++++-------- app/Models/Setting/Category.php | 1 + app/Traits/Categories.php | 15 +++++++ 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/Settings/Categories.php b/app/Http/Controllers/Settings/Categories.php index 542be10b9..915ea8f77 100644 --- a/app/Http/Controllers/Settings/Categories.php +++ b/app/Http/Controllers/Settings/Categories.php @@ -146,14 +146,31 @@ class Categories extends Controller $categories[$type] = []; } - Category::enabled()->orderBy('name')->get()->each(function ($category) use (&$categories, $edited_category_id) { - if ($edited_category_id != $category->id) { - $categories[$category->type][] = [ - 'id' => $category->id, - 'title' => $category->name, - 'level' => $category->level, - ]; + $skip_categories = []; + $skip_categories[] = $edited_category_id; + + foreach ($category->sub_categories as $sub_category) { + $skip_categories[] = $sub_category->id; + + if ($sub_category->sub_categories) { + $skips = $this->getChildrenCategoryIds($sub_category); + + foreach ($skips as $skip) { + $skip_categories[] = $skip; + } } + } + + Category::enabled()->orderBy('name')->get()->each(function ($category) use (&$categories, &$skip_categories) { + if (in_array($category->id, $skip_categories)) { + return; + } + + $categories[$category->type][] = [ + 'id' => $category->id, + 'title' => $category->name, + 'level' => $category->level, + ]; }); return view('settings.categories.edit', compact('category', 'types', 'type_disabled', 'categories')); @@ -167,10 +184,8 @@ class Categories extends Controller * * @return Response */ - public function update($category_id, Request $request) + public function update(Category $category, Request $request) { - $category = $this->getCategoryWithoutChildren($category_id); - $response = $this->ajaxDispatch(new UpdateCategory($category, $request)); if ($response['success']) { @@ -197,10 +212,8 @@ class Categories extends Controller * * @return Response */ - public function enable($category_id) + public function enable(Category $category) { - $category = $this->getCategoryWithoutChildren($category_id); - $response = $this->ajaxDispatch(new UpdateCategory($category, request()->merge(['enabled' => 1]))); if ($response['success']) { @@ -217,10 +230,8 @@ class Categories extends Controller * * @return Response */ - public function disable($category_id) + public function disable(Category $category) { - $category = $this->getCategoryWithoutChildren($category_id); - $response = $this->ajaxDispatch(new UpdateCategory($category, request()->merge(['enabled' => 0]))); if ($response['success']) { diff --git a/app/Models/Setting/Category.php b/app/Models/Setting/Category.php index e2c31549f..68b0a70fa 100644 --- a/app/Models/Setting/Category.php +++ b/app/Models/Setting/Category.php @@ -94,6 +94,7 @@ class Category extends Model { return $this->resolveRouteBindingQuery($this, $value, $field) ->withoutGlobalScope(Scope::class) + ->getWithoutChildren() ->first(); } diff --git a/app/Traits/Categories.php b/app/Traits/Categories.php index dc2696259..14789fdd8 100644 --- a/app/Traits/Categories.php +++ b/app/Traits/Categories.php @@ -43,4 +43,19 @@ trait Categories return $id == $this->getTransferCategoryId(); } + + public function getChildrenCategoryIds($category) + { + $ids = []; + + foreach ($category->sub_categories as $sub_category) { + $ids[] = $sub_category->id; + + if ($sub_category->sub_categories) { + $ids = array_merge($ids, $this->getChildrenCategoryIds($sub_category)); + } + } + + return $ids; + } }