* @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\AddFeatureCommand; use PrestaShop\PrestaShop\Core\Domain\Feature\CommandHandler\AddFeatureHandlerInterface; use PrestaShop\PrestaShop\Core\Domain\Feature\Exception\CannotAddFeatureException; use PrestaShop\PrestaShop\Core\Domain\Feature\Exception\FeatureConstraintException; use PrestaShop\PrestaShop\Core\Domain\Feature\ValueObject\FeatureId; /** * Handles adding of features using legacy logic. */ final class AddFeatureHandler extends AbstractObjectModelHandler implements AddFeatureHandlerInterface { /** * {@inheritdoc} */ public function handle(AddFeatureCommand $command) { $feature = new Feature(); $feature->name = $command->getLocalizedNames(); if (false === $feature->validateFields(false)) { throw new FeatureConstraintException('Invalid feature data'); } if (false === $feature->validateFieldsLang(false)) { throw new FeatureConstraintException('Invalid feature data', FeatureConstraintException::INVALID_NAME); } if (false === $feature->add()) { throw new CannotAddFeatureException('Unable to create new feature'); } $this->associateWithShops($feature, $command->getShopAssociation()); return new FeatureId((int) $feature->id); } }