#1151 Delete sub categories when deleting a parent category [delete all subcats]

This commit is contained in:
Diatrex 2020-03-30 13:22:22 +03:00
parent 767013ffdd
commit 76c38c7f9b
3 changed files with 35 additions and 1 deletions

View File

@ -67,5 +67,38 @@ class CategoryRepository extends EntryRepository implements CategoryRepositoryIn
public function DeleteCategories($id)
{
$this->model->find($id)->delete();
$this->deleteSubcategories($id);
}
public function deleteSubcategories($id)
{
// Get all subcategories
$allSubcategories = array();
$subcategories = $this->getSubCatById($id);
if (count($subcategories)) {
foreach ($subcategories as $subcategory) {
$allSubcategories[$subcategory->id] = ['id' => $subcategory->id, 'processed' => false];
}
do {
$unprocessedCategories = array_filter($allSubcategories, function ($unprocessedCategory) {
return $unprocessedCategory['processed'] === false;
});
foreach ($unprocessedCategories as $unprocessedCategory) {
$subcategories = $this->getSubCatById($unprocessedCategory['id']);
foreach ($subcategories as $subcategory) {
$allSubcategories[$subcategory->id] = ['id' => $subcategory->id, 'processed' => false];
}
$allSubcategories[$unprocessedCategory['id']]['processed'] = true;
}
} while (count($unprocessedCategories));
// Delete all subcategories
$whereIn = array();
foreach ($allSubcategories as $category) {
$whereIn[] = $category['id'];
}
$this->newQuery()->whereIn('id', $whereIn)->delete();
}
}
}

View File

@ -21,4 +21,6 @@ interface CategoryRepositoryInterface extends EntryRepositoryInterface
public function getCategories();
public function DeleteCategories($id);
public function deleteSubcategories($id);
}

View File

@ -209,5 +209,4 @@ class CategoryController extends AdminController
return redirect('admin/cats')->with('success', [$deletedCatsCount . ' categories has been deleted.']);
}
}