* @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\Feature\CommandHandler; use Feature; use PrestaShop\PrestaShop\Adapter\Domain\AbstractObjectModelHandler; use PrestaShop\PrestaShop\Core\Domain\Feature\Command\EditFeatureCommand; use PrestaShop\PrestaShop\Core\Domain\Feature\CommandHandler\EditFeatureHandlerInterface; use PrestaShop\PrestaShop\Core\Domain\Feature\Exception\CannotEditFeatureException; use PrestaShop\PrestaShop\Core\Domain\Feature\Exception\FeatureConstraintException; use PrestaShop\PrestaShop\Core\Domain\Feature\Exception\FeatureNotFoundException; /** * Handles feature editing. */ final class EditFeatureHandler extends AbstractObjectModelHandler implements EditFeatureHandlerInterface { /** * {@inheritdoc} */ public function handle(EditFeatureCommand $command) { $feature = new Feature($command->getFeatureId()->getValue()); if (empty($feature->id)) { throw new FeatureNotFoundException('Feature could not be found.'); } if (null !== $command->getLocalizedNames()) { $feature->name = $command->getLocalizedNames(); } if (null !== $command->getAssociatedShopIds()) { $this->associateWithShops($feature, $command->getAssociatedShopIds()); } if (false === $feature->validateFields(false)) { throw new FeatureConstraintException('Invalid data when updating feature'); } if (false === $feature->validateFieldsLang(false)) { throw new FeatureConstraintException('Invalid data when updating feature', FeatureConstraintException::INVALID_NAME); } if (false === $feature->update()) { throw new CannotEditFeatureException(sprintf('Failed to edit Feature with id "%s".', $feature->id)); } } }