* @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\DeleteCategoryCommand; use PrestaShop\PrestaShop\Core\Domain\Category\CommandHandler\DeleteCategoryHandlerInterface; 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 DeleteCategoryHandler. */ final class DeleteCategoryHandler extends AbstractDeleteCategoryHandler implements DeleteCategoryHandlerInterface { /** * {@inheritdoc} * * @throws CategoryNotFoundException * @throws CannotDeleteRootCategoryForShopException * @throws FailedToDeleteCategoryException */ public function handle(DeleteCategoryCommand $command) { $categoryIdValue = $command->getCategoryId()->getValue(); $category = new Category($categoryIdValue); if (!$category->id) { throw new CategoryNotFoundException($command->getCategoryId(), sprintf('Category with id %s cannot be found.', var_export($categoryIdValue, true))); } if ($category->isRootCategoryForAShop()) { throw new CannotDeleteRootCategoryForShopException(sprintf('Shop\'s root category with id %s cannot be deleted.', var_export($categoryIdValue, true))); } if (!$category->delete()) { throw new FailedToDeleteCategoryException(sprintf('Failed to delete category with id %s', var_export($categoryIdValue, true))); } $this->updateProductCategories([ (int) $category->id_parent => [$categoryIdValue], ], $command->getDeleteMode()); } }