From 6d4145d0875473c00aa2691c9fbd4f37a6894b76 Mon Sep 17 00:00:00 2001 From: Diatrex Date: Mon, 30 Mar 2020 14:58:56 +0300 Subject: [PATCH] #1151 Delete sub categories when deleting a parent category --- .../src/Category/CategoryModel.php | 4 ++- .../src/Category/CategoryRepository.php | 27 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/addons/default/visiosoft/cats-module/src/Category/CategoryModel.php b/addons/default/visiosoft/cats-module/src/Category/CategoryModel.php index 469589679..b5b4ee545 100644 --- a/addons/default/visiosoft/cats-module/src/Category/CategoryModel.php +++ b/addons/default/visiosoft/cats-module/src/Category/CategoryModel.php @@ -83,7 +83,9 @@ class CategoryModel extends CatsCategoryEntryModel implements CategoryInterface public function deleteSubCategories($id) { $subCategories = $this->getAllSubCategories($id); - $this->newQuery()->whereIn('id', $subCategories)->delete(); + if (count($subCategories)) { + $this->newQuery()->whereIn('id', $subCategories)->delete(); + } return true; } diff --git a/addons/default/visiosoft/cats-module/src/Category/CategoryRepository.php b/addons/default/visiosoft/cats-module/src/Category/CategoryRepository.php index ca7e41751..be73e968b 100644 --- a/addons/default/visiosoft/cats-module/src/Category/CategoryRepository.php +++ b/addons/default/visiosoft/cats-module/src/Category/CategoryRepository.php @@ -1,6 +1,7 @@ model = $model; + $this->advRepository = $advRepository; } public function findById($id) @@ -64,10 +68,31 @@ class CategoryRepository extends EntryRepository implements CategoryRepositoryIn return $this->model->orderBy('sort_order')->get(); } + public function removeCatFromAds($id) + { + $category = $this->find($id); + $catLevelNum = is_null($category->parent_category_id) ? 1 : $this->model->getCatLevel($category->id); + $catLevelText = "cat" . $catLevelNum; + + $advs = $this->advRepository->newQuery()->where($catLevelText, $category->id)->get(); + foreach ($advs as $adv) { + $nullableCats = array(); + for ($i = $catLevelNum; $i <= 10; $i++) { + $nullableCats['cat' . $i] = null; + } + $adv->update($nullableCats); + } + } + public function DeleteCategories($id) { + // Remove deleted category from ads + $this->removeCatFromAds($id); + + // Delete the category $this->model->find($id)->delete(); + // Delete the subcategories $this->model->deleteSubCategories($id); } }