* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\PrestaShop\Core\ConstraintValidator; use PrestaShop\PrestaShop\Core\ConstraintValidator\Constraints\AddressStateRequired; use PrestaShop\PrestaShop\Core\Country\CountryRequiredFieldsProviderInterface; use PrestaShop\PrestaShop\Core\Domain\Country\Exception\CountryConstraintException; use PrestaShop\PrestaShop\Core\Domain\Country\ValueObject\CountryId; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\Constraints\NotBlank; use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\Validator\ConstraintViolationInterface; /** * Validates address state choice by selected country value */ class AddressStateRequiredValidator extends ConstraintValidator { /** * @var CountryRequiredFieldsProviderInterface */ private $countryRequiredFieldsProvider; /** * @param CountryRequiredFieldsProviderInterface $countryRequiredFieldsProvider */ public function __construct(CountryRequiredFieldsProviderInterface $countryRequiredFieldsProvider) { $this->countryRequiredFieldsProvider = $countryRequiredFieldsProvider; } /** * {@inheritdoc} * * @throws CountryConstraintException */ public function validate($value, Constraint $constraint) { if (!($constraint instanceof AddressStateRequired)) { return; } $countryId = new CountryId((int) $constraint->id_country); if ($this->countryRequiredFieldsProvider->isStatesRequired($countryId)) { $constraints = [ new NotBlank([ 'message' => $constraint->message, ]), ]; /** @var ConstraintViolationInterface[] $violations */ $violations = $this->context->getValidator()->validate($value, $constraints); foreach ($violations as $violation) { $this->context->buildViolation($violation->getMessage()) ->setTranslationDomain('Admin.Notifications.Error') ->addViolation(); } } } }