* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\PrestaShop\Adapter\Category\CommandHandler; use Category; use PrestaShop\PrestaShop\Core\Domain\Category\Command\BulkDeleteCategoriesCommand; use PrestaShop\PrestaShop\Core\Domain\Category\CommandHandler\BulkDeleteCategoriesHandlerInterface; use PrestaShop\PrestaShop\Core\Domain\Category\Exception\CannotDeleteRootCategoryForShopException; use PrestaShop\PrestaShop\Core\Domain\Category\Exception\CategoryNotFoundException; use PrestaShop\PrestaShop\Core\Domain\Category\Exception\FailedToDeleteCategoryException; /** * Class BulkDeleteCategoriesHandler. */ final class BulkDeleteCategoriesHandler extends AbstractDeleteCategoryHandler implements BulkDeleteCategoriesHandlerInterface { /** * {@inheritdoc} * * @throws CategoryNotFoundException * @throws CannotDeleteRootCategoryForShopException * @throws FailedToDeleteCategoryException */ public function handle(BulkDeleteCategoriesCommand $command) { $deletedCategoryIdsByParent = []; foreach ($command->getCategoryIds() as $categoryId) { $category = new Category($categoryId->getValue()); if (!$category->id) { throw new CategoryNotFoundException($categoryId, sprintf('Category with id %s cannot be found.', var_export($categoryId->getValue(), true))); } if ($category->isRootCategoryForAShop()) { throw new CannotDeleteRootCategoryForShopException(sprintf('Shop\'s root category with id %s cannot be deleted.', var_export($categoryId->getValue(), true))); } if (!$category->delete()) { throw new FailedToDeleteCategoryException(sprintf('Failed to delete category with id %s', var_export($categoryId->getValue(), true))); } $deletedCategoryIdsByParent[(int) $category->id_parent][] = $categoryId->getValue(); } if (empty($deletedCategoryIdsByParent)) { return; } $this->updateProductCategories($deletedCategoryIdsByParent, $command->getDeleteMode()); } }