diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-05-05 19:34:39 +0200 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-05-05 19:34:39 +0200 |
| commit | 705c4cb50eea66585cc95c7314001fce9dd197cd (patch) | |
| tree | 4a448f4e30b117e12306b643121f49da15e6376b /vendor/symfony/validator/Symfony | |
| download | Catalog-705c4cb50eea66585cc95c7314001fce9dd197cd.tar.gz Catalog-705c4cb50eea66585cc95c7314001fce9dd197cd.zip | |
Initial commit
Diffstat (limited to 'vendor/symfony/validator/Symfony')
450 files changed, 46533 insertions, 0 deletions
diff --git a/vendor/symfony/validator/Symfony/Component/Validator/.gitignore b/vendor/symfony/validator/Symfony/Component/Validator/.gitignore new file mode 100644 index 0000000..c49a5d8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/.gitignore @@ -0,0 +1,3 @@ +vendor/ +composer.lock +phpunit.xml diff --git a/vendor/symfony/validator/Symfony/Component/Validator/CHANGELOG.md b/vendor/symfony/validator/Symfony/Component/Validator/CHANGELOG.md new file mode 100644 index 0000000..329eaf3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/CHANGELOG.md @@ -0,0 +1,159 @@ +CHANGELOG +========= + +2.6.0 +----- + + * [BC BREAK] `FileValidator` disallow empty files + * [BC BREAK] `UserPasswordValidator` source message change + * [BC BREAK] added internal `ExecutionContextInterface::setConstraint()` + * added `ConstraintViolation::getConstraint()` + * [BC BREAK] The `ExpressionValidator` will now evaluate the Expression even when the property value is null or an empty string + * deprecated `ClassMetadata::hasMemberMetadatas()` + * deprecated `ClassMetadata::getMemberMetadatas()` + * deprecated `ClassMetadata::addMemberMetadata()` + * [BC BREAK] added `Mapping\MetadataInterface::getConstraints()` + * added generic "payload" option to all constraints for attaching domain-specific data + * [BC BREAK] added `ConstraintViolationBuilderInterface::setCause()` + +2.5.0 +----- + + * deprecated `ApcCache` in favor of `DoctrineCache` + * added `DoctrineCache` to adapt any Doctrine cache + * `GroupSequence` now implements `ArrayAccess`, `Countable` and `Traversable` + * [BC BREAK] changed `ClassMetadata::getGroupSequence()` to return a `GroupSequence` instance instead of an array + * `Callback` can now be put onto properties (useful when you pass a closure to the constraint) + * deprecated `ClassBasedInterface` + * deprecated `MetadataInterface` + * deprecated `PropertyMetadataInterface` + * deprecated `PropertyMetadataContainerInterface` + * deprecated `Mapping\ElementMetadata` + * added `Mapping\MetadataInterface` + * added `Mapping\ClassMetadataInterface` + * added `Mapping\PropertyMetadataInterface` + * added `Mapping\GenericMetadata` + * added `Mapping\CascadingStrategy` + * added `Mapping\TraversalStrategy` + * deprecated `Mapping\ClassMetadata::accept()` + * deprecated `Mapping\MemberMetadata::accept()` + * removed array type hint of `Mapping\ClassMetadata::setGroupSequence()` + * deprecated `MetadataFactoryInterface` + * deprecated `Mapping\BlackholeMetadataFactory` + * deprecated `Mapping\ClassMetadataFactory` + * added `Mapping\Factory\MetadataFactoryInterface` + * added `Mapping\Factory\BlackHoleMetadataFactory` + * added `Mapping\Factory\LazyLoadingMetadataFactory` + * deprecated `ExecutionContextInterface` + * deprecated `ExecutionContext` + * deprecated `GlobalExecutionContextInterface` + * added `Context\ExecutionContextInterface` + * added `Context\ExecutionContext` + * added `Context\ExecutionContextFactoryInterface` + * added `Context\ExecutionContextFactory` + * deprecated `ValidatorInterface` + * deprecated `Validator` + * deprecated `ValidationVisitorInterface` + * deprecated `ValidationVisitor` + * added `Validator\ValidatorInterface` + * added `Validator\RecursiveValidator` + * added `Validator\ContextualValidatorInterface` + * added `Validator\RecursiveContextualValidator` + * added `Violation\ConstraintViolationBuilderInterface` + * added `Violation\ConstraintViolationBuilder` + * added `ConstraintViolation::getParameters()` + * added `ConstraintViolation::getPlural()` + * added `Constraints\Traverse` + * deprecated `$deep` property in `Constraints\Valid` + * added `ValidatorBuilderInterface::setApiVersion()` + * added `Validation::API_VERSION_2_4` + * added `Validation::API_VERSION_2_5` + * added `Exception\OutOfBoundsException` + * added `Exception\UnsupportedMetadataException` + * made `Exception\ValidatorException` extend `Exception\RuntimeException` + * added `Util\PropertyPath` + * made the PropertyAccess component an optional dependency + * deprecated `ValidatorBuilder::setPropertyAccessor()` + + +2.4.0 +----- + + * added a constraint the uses the expression language + * added `minRatio`, `maxRatio`, `allowSquare`, `allowLandscape`, and `allowPortrait` to Image validator + +2.3.0 +----- + + * added the ISBN, ISSN, and IBAN validators + * copied the constraints `Optional` and `Required` to the + `Symfony\Component\Validator\Constraints\` namespace and deprecated the original + classes. + * added comparison validators (EqualTo, NotEqualTo, LessThan, LessThanOrEqualTo, GreaterThan, GreaterThanOrEqualTo, IdenticalTo, NotIdenticalTo) + +2.2.0 +----- + + * added a CardScheme validator + * added a Luhn validator + * moved @api-tags from `Validator` to `ValidatorInterface` + * moved @api-tags from `ConstraintViolation` to the new `ConstraintViolationInterface` + * moved @api-tags from `ConstraintViolationList` to the new `ConstraintViolationListInterface` + * moved @api-tags from `ExecutionContext` to the new `ExecutionContextInterface` + * [BC BREAK] `ConstraintValidatorInterface::initialize` is now type hinted against `ExecutionContextInterface` instead of `ExecutionContext` + * [BC BREAK] changed the visibility of the properties in `Validator` from protected to private + * deprecated `ClassMetadataFactoryInterface` in favor of the new `MetadataFactoryInterface` + * deprecated `ClassMetadataFactory::getClassMetadata` in favor of `getMetadataFor` + * created `MetadataInterface`, `PropertyMetadataInterface`, `ClassBasedInterface` and `PropertyMetadataContainerInterface` + * deprecated `GraphWalker` in favor of the new `ValidationVisitorInterface` + * deprecated `ExecutionContext::addViolationAtPath` + * deprecated `ExecutionContext::addViolationAtSubPath` in favor of `ExecutionContextInterface::addViolationAt` + * deprecated `ExecutionContext::getCurrentClass` in favor of `ExecutionContextInterface::getClassName` + * deprecated `ExecutionContext::getCurrentProperty` in favor of `ExecutionContextInterface::getPropertyName` + * deprecated `ExecutionContext::getCurrentValue` in favor of `ExecutionContextInterface::getValue` + * deprecated `ExecutionContext::getGraphWalker` in favor of `ExecutionContextInterface::validate` and `ExecutionContextInterface::validateValue` + * improved `ValidatorInterface::validateValue` to accept arrays of constraints + * changed `ValidatorInterface::getMetadataFactory` to return a `MetadataFactoryInterface` instead of a `ClassMetadataFactoryInterface` + * removed `ClassMetadataFactoryInterface` type hint from `ValidatorBuilderInterface::setMetadataFactory`. + As of Symfony 2.3, this method will be typed against `MetadataFactoryInterface` instead. + * [BC BREAK] the switches `traverse` and `deep` in the `Valid` constraint and in `GraphWalker::walkReference` + are ignored for arrays now. Arrays are always traversed recursively. + * added dependency to Translation component + * violation messages are now translated with a TranslatorInterface implementation + * [BC BREAK] inserted argument `$message` in the constructor of `ConstraintViolation` + * [BC BREAK] inserted arguments `$translator` and `$translationDomain` in the constructor of `ExecutionContext` + * [BC BREAK] inserted arguments `$translator` and `$translationDomain` in the constructor of `GraphWalker` + * [BC BREAK] inserted arguments `$translator` and `$translationDomain` in the constructor of `ValidationVisitor` + * [BC BREAK] inserted arguments `$translator` and `$translationDomain` in the constructor of `Validator` + * [BC BREAK] added `setTranslator()` and `setTranslationDomain()` to `ValidatorBuilderInterface` + * improved the Validator to support pluralized messages by default + * [BC BREAK] changed the source of all pluralized messages in the translation files to the pluralized version + * added ExceptionInterface, BadMethodCallException and InvalidArgumentException + +2.1.0 +----- + + * added support for `ctype_*` assertions in `TypeValidator` + * improved the ImageValidator with min width, max width, min height, and max height constraints + * added support for MIME with wildcard in FileValidator + * changed Collection validator to add "missing" and "extra" errors to + individual fields + * changed default value for `extraFieldsMessage` and `missingFieldsMessage` + in Collection constraint + * made ExecutionContext immutable + * deprecated Constraint methods `setMessage`, `getMessageTemplate` and + `getMessageParameters` + * added support for dynamic group sequences with the GroupSequenceProvider pattern + * [BC BREAK] ConstraintValidatorInterface method `isValid` has been renamed to + `validate`, its return value was dropped. ConstraintValidator still contains + `isValid` for BC + * [BC BREAK] collections in fields annotated with `Valid` are not traversed + recursively anymore by default. `Valid` contains a new property `deep` + which enables the BC behavior. + * added Count constraint + * added Length constraint + * added Range constraint + * deprecated the Min and Max constraints + * deprecated the MinLength and MaxLength constraints + * added Validation and ValidatorBuilderInterface + * deprecated ValidatorContext, ValidatorContextInterface and ValidatorFactory diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ClassBasedInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ClassBasedInterface.php new file mode 100644 index 0000000..fe532ef --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ClassBasedInterface.php @@ -0,0 +1,30 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * An object backed by a PHP class. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Mapping\ClassMetadataInterface} instead. + */ +interface ClassBasedInterface +{ + /** + * Returns the name of the backing PHP class. + * + * @return string The name of the backing class. + */ + public function getClassName(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraint.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraint.php new file mode 100644 index 0000000..a8ae634 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraint.php @@ -0,0 +1,321 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; +use Symfony\Component\Validator\Exception\InvalidArgumentException; +use Symfony\Component\Validator\Exception\InvalidOptionsException; +use Symfony\Component\Validator\Exception\MissingOptionsException; + +/** + * Contains the properties of a constraint definition. + * + * A constraint can be defined on a class, an option or a getter method. + * The Constraint class encapsulates all the configuration required for + * validating this class, option or getter result successfully. + * + * Constraint instances are immutable and serializable. + * + * @property array $groups The groups that the constraint belongs to + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +abstract class Constraint +{ + /** + * The name of the group given to all constraints with no explicit group. + * + * @var string + */ + const DEFAULT_GROUP = 'Default'; + + /** + * Marks a constraint that can be put onto classes. + * + * @var string + */ + const CLASS_CONSTRAINT = 'class'; + + /** + * Marks a constraint that can be put onto properties. + * + * @var string + */ + const PROPERTY_CONSTRAINT = 'property'; + + /** + * Maps error codes to the names of their constants + * @var array + */ + protected static $errorNames = array(); + + /** + * Domain-specific data attached to a constraint + * @var mixed + */ + public $payload; + + /** + * Returns the name of the given error code. + * + * @param int $errorCode The error code + * + * @return string The name of the error code + * + * @throws InvalidArgumentException If the error code does not exist + */ + public static function getErrorName($errorCode) + { + if (!isset(static::$errorNames[$errorCode])) { + throw new InvalidArgumentException(sprintf( + 'The error code "%s" does not exist for constraint of type "%s".', + $errorCode, + get_called_class() + )); + } + + return static::$errorNames[$errorCode]; + } + + /** + * Initializes the constraint with options. + * + * You should pass an associative array. The keys should be the names of + * existing properties in this class. The values should be the value for these + * properties. + * + * Alternatively you can override the method getDefaultOption() to return the + * name of an existing property. If no associative array is passed, this + * property is set instead. + * + * You can force that certain options are set by overriding + * getRequiredOptions() to return the names of these options. If any + * option is not set here, an exception is thrown. + * + * @param mixed $options The options (as associative array) + * or the value for the default + * option (any other type) + * + * @throws InvalidOptionsException When you pass the names of non-existing + * options + * @throws MissingOptionsException When you don't pass any of the options + * returned by getRequiredOptions() + * @throws ConstraintDefinitionException When you don't pass an associative + * array, but getDefaultOption() returns + * null + * + * @api + */ + public function __construct($options = null) + { + $invalidOptions = array(); + $missingOptions = array_flip((array) $this->getRequiredOptions()); + $knownOptions = get_object_vars($this); + + // The "groups" option is added to the object lazily + $knownOptions['groups'] = true; + + if (is_array($options) && count($options) >= 1 && isset($options['value']) && !property_exists($this, 'value')) { + $options[$this->getDefaultOption()] = $options['value']; + unset($options['value']); + } + + if (is_array($options) && count($options) > 0 && is_string(key($options))) { + foreach ($options as $option => $value) { + if (array_key_exists($option, $knownOptions)) { + $this->$option = $value; + unset($missingOptions[$option]); + } else { + $invalidOptions[] = $option; + } + } + } elseif (null !== $options && !(is_array($options) && count($options) === 0)) { + $option = $this->getDefaultOption(); + + if (null === $option) { + throw new ConstraintDefinitionException( + sprintf('No default option is configured for constraint %s', get_class($this)) + ); + } + + if (array_key_exists($option, $knownOptions)) { + $this->$option = $options; + unset($missingOptions[$option]); + } else { + $invalidOptions[] = $option; + } + } + + if (count($invalidOptions) > 0) { + throw new InvalidOptionsException( + sprintf('The options "%s" do not exist in constraint %s', implode('", "', $invalidOptions), get_class($this)), + $invalidOptions + ); + } + + if (count($missingOptions) > 0) { + throw new MissingOptionsException( + sprintf('The options "%s" must be set for constraint %s', implode('", "', array_keys($missingOptions)), get_class($this)), + array_keys($missingOptions) + ); + } + } + + /** + * Sets the value of a lazily initialized option. + * + * Corresponding properties are added to the object on first access. Hence + * this method will be called at most once per constraint instance and + * option name. + * + * @param string $option The option name + * @param mixed $value The value to set + * + * @throws InvalidOptionsException If an invalid option name is given + */ + public function __set($option, $value) + { + if ('groups' === $option) { + $this->groups = (array) $value; + + return; + } + + throw new InvalidOptionsException(sprintf('The option "%s" does not exist in constraint %s', $option, get_class($this)), array($option)); + } + + /** + * Returns the value of a lazily initialized option. + * + * Corresponding properties are added to the object on first access. Hence + * this method will be called at most once per constraint instance and + * option name. + * + * @param string $option The option name + * + * @return mixed The value of the option + * + * @throws InvalidOptionsException If an invalid option name is given + * + * @internal This method should not be used or overwritten in userland code. + * + * @since 2.6 + */ + public function __get($option) + { + if ('groups' === $option) { + $this->groups = array(self::DEFAULT_GROUP); + + return $this->groups; + } + + throw new InvalidOptionsException(sprintf('The option "%s" does not exist in constraint %s', $option, get_class($this)), array($option)); + } + + /** + * Adds the given group if this constraint is in the Default group. + * + * @param string $group + * + * @api + */ + public function addImplicitGroupName($group) + { + if (in_array(Constraint::DEFAULT_GROUP, $this->groups) && !in_array($group, $this->groups)) { + $this->groups[] = $group; + } + } + + /** + * Returns the name of the default option. + * + * Override this method to define a default option. + * + * @return string + * + * @see __construct() + * + * @api + */ + public function getDefaultOption() + { + } + + /** + * Returns the name of the required options. + * + * Override this method if you want to define required options. + * + * @return array + * + * @see __construct() + * + * @api + */ + public function getRequiredOptions() + { + return array(); + } + + /** + * Returns the name of the class that validates this constraint. + * + * By default, this is the fully qualified name of the constraint class + * suffixed with "Validator". You can override this method to change that + * behaviour. + * + * @return string + * + * @api + */ + public function validatedBy() + { + return get_class($this).'Validator'; + } + + /** + * Returns whether the constraint can be put onto classes, properties or + * both. + * + * This method should return one or more of the constants + * Constraint::CLASS_CONSTRAINT and Constraint::PROPERTY_CONSTRAINT. + * + * @return string|array One or more constant values + * + * @api + */ + public function getTargets() + { + return self::PROPERTY_CONSTRAINT; + } + + /** + * Optimizes the serialized value to minimize storage space. + * + * @return array The properties to serialize + * + * @internal This method may be replaced by an implementation of + * {@link \Serializable} in the future. Please don't use or + * overwrite it. + * + * @since 2.6 + */ + public function __sleep() + { + // Initialize "groups" option if it is not set + $this->groups; + + return array_keys(get_object_vars($this)); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php new file mode 100644 index 0000000..61c994a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php @@ -0,0 +1,216 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +use Symfony\Component\Validator\Context\ExecutionContextInterface as ExecutionContextInterface2Dot5; +use Symfony\Component\Validator\Violation\ConstraintViolationBuilderInterface; +use Symfony\Component\Validator\Violation\LegacyConstraintViolationBuilder; + +/** + * Base class for constraint validators. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +abstract class ConstraintValidator implements ConstraintValidatorInterface +{ + /** + * Whether to format {@link \DateTime} objects as RFC-3339 dates + * ("Y-m-d H:i:s"). + * + * @var int + */ + const PRETTY_DATE = 1; + + /** + * Whether to cast objects with a "__toString()" method to strings. + * + * @var int + */ + const OBJECT_TO_STRING = 2; + + /** + * @var ExecutionContextInterface + */ + protected $context; + + /** + * {@inheritdoc} + */ + public function initialize(ExecutionContextInterface $context) + { + $this->context = $context; + } + + /** + * Wrapper for {@link ExecutionContextInterface::buildViolation} that + * supports the 2.4 context API. + * + * @param string $message The violation message + * @param array $parameters The message parameters + * + * @return ConstraintViolationBuilderInterface The violation builder + * + * @deprecated This method will be removed in Symfony 3.0. + */ + protected function buildViolation($message, array $parameters = array()) + { + if ($this->context instanceof ExecutionContextInterface2Dot5) { + return $this->context->buildViolation($message, $parameters); + } + + return new LegacyConstraintViolationBuilder($this->context, $message, $parameters); + } + + /** + * Wrapper for {@link ExecutionContextInterface::buildViolation} that + * supports the 2.4 context API. + * + * @param ExecutionContextInterface $context The context to use + * @param string $message The violation message + * @param array $parameters The message parameters + * + * @return ConstraintViolationBuilderInterface The violation builder + * + * @deprecated This method will be removed in Symfony 3.0. + */ + protected function buildViolationInContext(ExecutionContextInterface $context, $message, array $parameters = array()) + { + if ($context instanceof ExecutionContextInterface2Dot5) { + return $context->buildViolation($message, $parameters); + } + + return new LegacyConstraintViolationBuilder($context, $message, $parameters); + } + + /** + * Returns a string representation of the type of the value. + * + * This method should be used if you pass the type of a value as + * message parameter to a constraint violation. Note that such + * parameters should usually not be included in messages aimed at + * non-technical people. + * + * @param mixed $value The value to return the type of + * + * @return string The type of the value + */ + protected function formatTypeOf($value) + { + return is_object($value) ? get_class($value) : gettype($value); + } + + /** + * Returns a string representation of the value. + * + * This method returns the equivalent PHP tokens for most scalar types + * (i.e. "false" for false, "1" for 1 etc.). Strings are always wrapped + * in double quotes ("). Objects, arrays and resources are formatted as + * "object", "array" and "resource". If the parameter $prettyDateTime + * is set to true, {@link \DateTime} objects will be formatted as + * RFC-3339 dates ("Y-m-d H:i:s"). + * + * Be careful when passing message parameters to a constraint violation + * that (may) contain objects, arrays or resources. These parameters + * should only be displayed for technical users. Non-technical users + * won't know what an "object", "array" or "resource" is and will be + * confused by the violation message. + * + * @param mixed $value The value to format as string + * @param int $format A bitwise combination of the format + * constants in this class + * + * @return string The string representation of the passed value + */ + protected function formatValue($value, $format = 0) + { + $isDateTime = $value instanceof \DateTime || $value instanceof \DateTimeInterface; + + if (($format & self::PRETTY_DATE) && $isDateTime) { + if (class_exists('IntlDateFormatter')) { + $locale = \Locale::getDefault(); + $formatter = new \IntlDateFormatter($locale, \IntlDateFormatter::MEDIUM, \IntlDateFormatter::SHORT); + + // neither the native nor the stub IntlDateFormatter support + // DateTimeImmutable as of yet + if (!$value instanceof \DateTime) { + $value = new \DateTime( + $value->format('Y-m-d H:i:s.u e'), + $value->getTimezone() + ); + } + + return $formatter->format($value); + } + + return $value->format('Y-m-d H:i:s'); + } + + if (is_object($value)) { + if ($format & self::OBJECT_TO_STRING && method_exists($value, '__toString')) { + return $value->__toString(); + } + + return 'object'; + } + + if (is_array($value)) { + return 'array'; + } + + if (is_string($value)) { + return '"'.$value.'"'; + } + + if (is_resource($value)) { + return 'resource'; + } + + if (null === $value) { + return 'null'; + } + + if (false === $value) { + return 'false'; + } + + if (true === $value) { + return 'true'; + } + + return (string) $value; + } + + /** + * Returns a string representation of a list of values. + * + * Each of the values is converted to a string using + * {@link formatValue()}. The values are then concatenated with commas. + * + * @param array $values A list of values + * @param int $format A bitwise combination of the format + * constants in this class + * + * @return string The string representation of the value list + * + * @see formatValue() + */ + protected function formatValues(array $values, $format = 0) + { + foreach ($values as $key => $value) { + $values[$key] = $this->formatValue($value, $format); + } + + return implode(', ', $values); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php new file mode 100644 index 0000000..cc6981b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php @@ -0,0 +1,51 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +use Symfony\Component\Validator\Constraints\ExpressionValidator; + +/** + * Default implementation of the ConstraintValidatorFactoryInterface. + * + * This enforces the convention that the validatedBy() method on any + * Constraint will return the class name of the ConstraintValidator that + * should validate the Constraint. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class ConstraintValidatorFactory implements ConstraintValidatorFactoryInterface +{ + protected $validators = array(); + + private $propertyAccessor; + + public function __construct($propertyAccessor = null) + { + $this->propertyAccessor = $propertyAccessor; + } + + /** + * {@inheritdoc} + */ + public function getInstance(Constraint $constraint) + { + $className = $constraint->validatedBy(); + + if (!isset($this->validators[$className])) { + $this->validators[$className] = 'validator.expression' === $className + ? new ExpressionValidator($this->propertyAccessor) + : new $className(); + } + + return $this->validators[$className]; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactoryInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactoryInterface.php new file mode 100644 index 0000000..5e21627 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactoryInterface.php @@ -0,0 +1,29 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Specifies an object able to return the correct ConstraintValidatorInterface + * instance given a Constraint object. + */ +interface ConstraintValidatorFactoryInterface +{ + /** + * Given a Constraint, this returns the ConstraintValidatorInterface + * object that should be used to verify its validity. + * + * @param Constraint $constraint The source constraint + * + * @return ConstraintValidatorInterface + */ + public function getInstance(Constraint $constraint); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorInterface.php new file mode 100644 index 0000000..f7538a1 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorInterface.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +interface ConstraintValidatorInterface +{ + /** + * Initializes the constraint validator. + * + * @param ExecutionContextInterface $context The current validation context + */ + public function initialize(ExecutionContextInterface $context); + + /** + * Checks if the passed value is valid. + * + * @param mixed $value The value that should be validated + * @param Constraint $constraint The constraint for the validation + * + * @api + */ + public function validate($value, Constraint $constraint); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolation.php b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolation.php new file mode 100644 index 0000000..8f4744f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolation.php @@ -0,0 +1,233 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Default implementation of {@ConstraintViolationInterface}. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class ConstraintViolation implements ConstraintViolationInterface +{ + /** + * @var string + */ + private $message; + + /** + * @var string + */ + private $messageTemplate; + + /** + * @var array + */ + private $parameters; + + /** + * @var int|null + */ + private $plural; + + /** + * @var mixed + */ + private $root; + + /** + * @var string + */ + private $propertyPath; + + /** + * @var mixed + */ + private $invalidValue; + + /** + * @var Constraint|null + */ + private $constraint; + + /** + * @var mixed + */ + private $code; + + /** + * @var mixed + */ + private $cause; + + /** + * Creates a new constraint violation. + * + * @param string $message The violation message + * @param string $messageTemplate The raw violation message + * @param array $parameters The parameters to substitute in the + * raw violation message + * @param mixed $root The value originally passed to the + * validator + * @param string $propertyPath The property path from the root + * value to the invalid value + * @param mixed $invalidValue The invalid value that caused this + * violation + * @param int|null $plural The number for determining the plural + * form when translating the message + * @param mixed $code The error code of the violation + * @param Constraint|null $constraint The constraint whose validation + * caused the violation + * @param mixed $cause The cause of the violation + */ + public function __construct($message, $messageTemplate, array $parameters, $root, $propertyPath, $invalidValue, $plural = null, $code = null, Constraint $constraint = null, $cause = null) + { + $this->message = $message; + $this->messageTemplate = $messageTemplate; + $this->parameters = $parameters; + $this->plural = $plural; + $this->root = $root; + $this->propertyPath = $propertyPath; + $this->invalidValue = $invalidValue; + $this->constraint = $constraint; + $this->code = $code; + $this->cause = $cause; + } + + /** + * Converts the violation into a string for debugging purposes. + * + * @return string The violation as string. + */ + public function __toString() + { + if (is_object($this->root)) { + $class = 'Object('.get_class($this->root).')'; + } elseif (is_array($this->root)) { + $class = 'Array'; + } else { + $class = (string) $this->root; + } + + $propertyPath = (string) $this->propertyPath; + $code = $this->code; + + if ('' !== $propertyPath && '[' !== $propertyPath[0] && '' !== $class) { + $class .= '.'; + } + + if (!empty($code)) { + $code = ' (code '.$code.')'; + } + + return $class.$propertyPath.":\n ".$this->getMessage().$code; + } + + /** + * {@inheritdoc} + */ + public function getMessageTemplate() + { + return $this->messageTemplate; + } + + /** + * {@inheritdoc} + */ + public function getMessageParameters() + { + return $this->parameters; + } + + /** + * Alias of {@link getMessageParameters()}. + */ + public function getParameters() + { + return $this->parameters; + } + + /** + * {@inheritdoc} + */ + public function getMessagePluralization() + { + return $this->plural; + } + + /** + * Alias of {@link getMessagePluralization()}. + */ + public function getPlural() + { + return $this->plural; + } + + /** + * {@inheritdoc} + */ + public function getMessage() + { + return $this->message; + } + + /** + * {@inheritdoc} + */ + public function getRoot() + { + return $this->root; + } + + /** + * {@inheritdoc} + */ + public function getPropertyPath() + { + return $this->propertyPath; + } + + /** + * {@inheritdoc} + */ + public function getInvalidValue() + { + return $this->invalidValue; + } + + /** + * Returns the constraint whose validation caused the violation. + * + * @return Constraint|null The constraint or null if it is not known + */ + public function getConstraint() + { + return $this->constraint; + } + + /** + * Returns the cause of the violation. + * + * @return mixed + */ + public function getCause() + { + return $this->cause; + } + + /** + * {@inheritdoc} + */ + public function getCode() + { + return $this->code; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationInterface.php new file mode 100644 index 0000000..232fb55 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationInterface.php @@ -0,0 +1,136 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * A violation of a constraint that happened during validation. + * + * For each constraint that fails during validation one or more violations are + * created. The violations store the violation message, the path to the failing + * element in the validation graph and the root element that was originally + * passed to the validator. For example, take the following graph: + * + * <pre> + * (Person)---(firstName: string) + * \ + * (address: Address)---(street: string) + * </pre> + * + * If the <tt>Person</tt> object is validated and validation fails for the + * "firstName" property, the generated violation has the <tt>Person</tt> + * instance as root and the property path "firstName". If validation fails + * for the "street" property of the related <tt>Address</tt> instance, the root + * element is still the person, but the property path is "address.street". + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +interface ConstraintViolationInterface +{ + /** + * Returns the violation message. + * + * @return string The violation message. + * + * @api + */ + public function getMessage(); + + /** + * Returns the raw violation message. + * + * The raw violation message contains placeholders for the parameters + * returned by {@link getMessageParameters}. Typically you'll pass the + * message template and parameters to a translation engine. + * + * @return string The raw violation message. + * + * @api + */ + public function getMessageTemplate(); + + /** + * Returns the parameters to be inserted into the raw violation message. + * + * @return array A possibly empty list of parameters indexed by the names + * that appear in the message template. + * + * @see getMessageTemplate() + * + * @api + */ + public function getMessageParameters(); + + /** + * Returns a number for pluralizing the violation message. + * + * For example, the message template could have different translation based + * on a parameter "choices": + * + * <ul> + * <li>Please select exactly one entry. (choices=1)</li> + * <li>Please select two entries. (choices=2)</li> + * </ul> + * + * This method returns the value of the parameter for choosing the right + * pluralization form (in this case "choices"). + * + * @return int|null The number to use to pluralize of the message. + */ + public function getMessagePluralization(); + + /** + * Returns the root element of the validation. + * + * @return mixed The value that was passed originally to the validator when + * the validation was started. Because the validator traverses + * the object graph, the value at which the violation occurs + * is not necessarily the value that was originally validated. + * + * @api + */ + public function getRoot(); + + /** + * Returns the property path from the root element to the violation. + * + * @return string The property path indicates how the validator reached + * the invalid value from the root element. If the root + * element is a <tt>Person</tt> instance with a property + * "address" that contains an <tt>Address</tt> instance + * with an invalid property "street", the generated property + * path is "address.street". Property access is denoted by + * dots, while array access is denoted by square brackets, + * for example "addresses[1].street". + * + * @api + */ + public function getPropertyPath(); + + /** + * Returns the value that caused the violation. + * + * @return mixed The invalid value that caused the validated constraint to + * fail. + * + * @api + */ + public function getInvalidValue(); + + /** + * Returns a machine-digestible error code for the violation. + * + * @return mixed The error code. + */ + public function getCode(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationList.php b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationList.php new file mode 100644 index 0000000..cccfa86 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationList.php @@ -0,0 +1,159 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Default implementation of {@ConstraintViolationListInterface}. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class ConstraintViolationList implements \IteratorAggregate, ConstraintViolationListInterface +{ + /** + * @var ConstraintViolationInterface[] + */ + private $violations = array(); + + /** + * Creates a new constraint violation list. + * + * @param ConstraintViolationInterface[] $violations The constraint violations to add to the list + */ + public function __construct(array $violations = array()) + { + foreach ($violations as $violation) { + $this->add($violation); + } + } + + /** + * Converts the violation into a string for debugging purposes. + * + * @return string The violation as string. + */ + public function __toString() + { + $string = ''; + + foreach ($this->violations as $violation) { + $string .= $violation."\n"; + } + + return $string; + } + + /** + * {@inheritdoc} + */ + public function add(ConstraintViolationInterface $violation) + { + $this->violations[] = $violation; + } + + /** + * {@inheritdoc} + */ + public function addAll(ConstraintViolationListInterface $otherList) + { + foreach ($otherList as $violation) { + $this->violations[] = $violation; + } + } + + /** + * {@inheritdoc} + */ + public function get($offset) + { + if (!isset($this->violations[$offset])) { + throw new \OutOfBoundsException(sprintf('The offset "%s" does not exist.', $offset)); + } + + return $this->violations[$offset]; + } + + /** + * {@inheritdoc} + */ + public function has($offset) + { + return isset($this->violations[$offset]); + } + + /** + * {@inheritdoc} + */ + public function set($offset, ConstraintViolationInterface $violation) + { + $this->violations[$offset] = $violation; + } + + /** + * {@inheritdoc} + */ + public function remove($offset) + { + unset($this->violations[$offset]); + } + + /** + * {@inheritdoc} + */ + public function getIterator() + { + return new \ArrayIterator($this->violations); + } + + /** + * {@inheritdoc} + */ + public function count() + { + return count($this->violations); + } + + /** + * {@inheritdoc} + */ + public function offsetExists($offset) + { + return $this->has($offset); + } + + /** + * {@inheritdoc} + */ + public function offsetGet($offset) + { + return $this->get($offset); + } + + /** + * {@inheritdoc} + */ + public function offsetSet($offset, $violation) + { + if (null === $offset) { + $this->add($violation); + } else { + $this->set($offset, $violation); + } + } + + /** + * {@inheritdoc} + */ + public function offsetUnset($offset) + { + $this->remove($offset); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationListInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationListInterface.php new file mode 100644 index 0000000..088c70c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationListInterface.php @@ -0,0 +1,83 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * A list of constraint violations. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +interface ConstraintViolationListInterface extends \Traversable, \Countable, \ArrayAccess +{ + /** + * Adds a constraint violation to this list. + * + * @param ConstraintViolationInterface $violation The violation to add. + * + * @api + */ + public function add(ConstraintViolationInterface $violation); + + /** + * Merges an existing violation list into this list. + * + * @param ConstraintViolationListInterface $otherList The list to merge. + * + * @api + */ + public function addAll(ConstraintViolationListInterface $otherList); + + /** + * Returns the violation at a given offset. + * + * @param int $offset The offset of the violation. + * + * @return ConstraintViolationInterface The violation. + * + * @throws \OutOfBoundsException If the offset does not exist. + * + * @api + */ + public function get($offset); + + /** + * Returns whether the given offset exists. + * + * @param int $offset The violation offset. + * + * @return bool Whether the offset exists. + * + * @api + */ + public function has($offset); + + /** + * Sets a violation at a given offset. + * + * @param int $offset The violation offset. + * @param ConstraintViolationInterface $violation The violation. + * + * @api + */ + public function set($offset, ConstraintViolationInterface $violation); + + /** + * Removes a violation at a given offset. + * + * @param int $offset The offset to remove. + * + * @api + */ + public function remove($offset); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparison.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparison.php new file mode 100644 index 0000000..fb1f1f3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparison.php @@ -0,0 +1,49 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; + +/** + * Used for the comparison of values. + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +abstract class AbstractComparison extends Constraint +{ + public $message; + public $value; + + /** + * {@inheritdoc} + */ + public function __construct($options = null) + { + if (is_array($options) && !isset($options['value'])) { + throw new ConstraintDefinitionException(sprintf( + 'The %s constraint requires the "value" option to be set.', + get_class($this) + )); + } + + parent::__construct($options); + } + + /** + * {@inheritdoc} + */ + public function getDefaultOption() + { + return 'value'; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php new file mode 100644 index 0000000..ec734b3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php @@ -0,0 +1,74 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Provides a base class for the validation of property comparisons. + * + * @author Daniel Holmes <daniel@danielholmes.org> + * @author Bernhard Schussek <bschussek@gmail.com> + */ +abstract class AbstractComparisonValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof AbstractComparison) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\AbstractComparison'); + } + + if (null === $value) { + return; + } + + $comparedValue = $constraint->value; + + // Convert strings to DateTimes if comparing another DateTime + // This allows to compare with any date/time value supported by + // the DateTime constructor: + // http://php.net/manual/en/datetime.formats.php + if (is_string($comparedValue)) { + if ($value instanceof \DatetimeImmutable) { + // If $value is immutable, convert the compared value to a + // DateTimeImmutable too + $comparedValue = new \DatetimeImmutable($comparedValue); + } elseif ($value instanceof \DateTime || $value instanceof \DateTimeInterface) { + // Otherwise use DateTime + $comparedValue = new \DateTime($comparedValue); + } + } + + if (!$this->compareValues($value, $comparedValue)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value, self::OBJECT_TO_STRING | self::PRETTY_DATE)) + ->setParameter('{{ compared_value }}', $this->formatValue($comparedValue, self::OBJECT_TO_STRING | self::PRETTY_DATE)) + ->setParameter('{{ compared_value_type }}', $this->formatTypeOf($comparedValue)) + ->addViolation(); + } + } + + /** + * Compares the two given values to find if their relationship is valid. + * + * @param mixed $value1 The first value to compare + * @param mixed $value2 The second value to compare + * + * @return bool true if the relationship is valid, false otherwise + */ + abstract protected function compareValues($value1, $value2); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/All.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/All.php new file mode 100644 index 0000000..3250fcf --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/All.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class All extends Composite +{ + public $constraints = array(); + + public function getDefaultOption() + { + return 'constraints'; + } + + public function getRequiredOptions() + { + return array('constraints'); + } + + protected function getCompositeOption() + { + return 'constraints'; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AllValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AllValidator.php new file mode 100644 index 0000000..a655afc --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AllValidator.php @@ -0,0 +1,58 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Context\ExecutionContextInterface; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class AllValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof All) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\All'); + } + + if (null === $value) { + return; + } + + if (!is_array($value) && !$value instanceof \Traversable) { + throw new UnexpectedTypeException($value, 'array or Traversable'); + } + + $context = $this->context; + + if ($context instanceof ExecutionContextInterface) { + $validator = $context->getValidator()->inContext($context); + + foreach ($value as $key => $element) { + $validator->atPath('['.$key.']')->validate($element, $constraint->constraints); + } + } else { + // 2.4 API + foreach ($value as $key => $element) { + $context->validateValue($element, $constraint->constraints, '['.$key.']'); + } + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Blank.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Blank.php new file mode 100644 index 0000000..766ce6c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Blank.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Blank extends Constraint +{ + public $message = 'This value should be blank.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php new file mode 100644 index 0000000..031c7a5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class BlankValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Blank) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Blank'); + } + + if ('' !== $value && null !== $value) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Callback.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Callback.php new file mode 100644 index 0000000..312952a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Callback.php @@ -0,0 +1,77 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"CLASS", "PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Callback extends Constraint +{ + /** + * @var string|callable + * + * @since 2.4 + */ + public $callback; + + /** + * @var array + * + * @deprecated Deprecated since version 2.4, to be removed in Symfony 3.0. + */ + public $methods; + + /** + * {@inheritdoc} + */ + public function __construct($options = null) + { + // Invocation through annotations with an array parameter only + if (is_array($options) && 1 === count($options) && isset($options['value'])) { + $options = $options['value']; + } + + if (is_array($options) && !isset($options['callback']) && !isset($options['methods']) && !isset($options['groups'])) { + if (is_callable($options)) { + $options = array('callback' => $options); + } else { + // BC with Symfony < 2.4 + $options = array('methods' => $options); + } + } + + parent::__construct($options); + } + + /** + * {@inheritdoc} + */ + public function getDefaultOption() + { + return 'callback'; + } + + /** + * {@inheritdoc} + */ + public function getTargets() + { + return array(self::CLASS_CONSTRAINT, self::PROPERTY_CONSTRAINT); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CallbackValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CallbackValidator.php new file mode 100644 index 0000000..9939306 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CallbackValidator.php @@ -0,0 +1,76 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validator for Callback constraint. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class CallbackValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($object, Constraint $constraint) + { + if (!$constraint instanceof Callback) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Callback'); + } + + if (null !== $constraint->callback && null !== $constraint->methods) { + throw new ConstraintDefinitionException( + 'The Callback constraint supports either the option "callback" '. + 'or "methods", but not both at the same time.' + ); + } + + // has to be an array so that we can differentiate between callables + // and method names + if (null !== $constraint->methods && !is_array($constraint->methods)) { + throw new UnexpectedTypeException($constraint->methods, 'array'); + } + + $methods = $constraint->methods ?: array($constraint->callback); + + foreach ($methods as $method) { + if ($method instanceof \Closure) { + $method($object, $this->context); + } elseif (is_array($method)) { + if (!is_callable($method)) { + throw new ConstraintDefinitionException(sprintf('"%s::%s" targeted by Callback constraint is not a valid callable', $method[0], $method[1])); + } + + call_user_func($method, $object, $this->context); + } elseif (null !== $object) { + if (!method_exists($object, $method)) { + throw new ConstraintDefinitionException(sprintf('Method "%s" targeted by Callback constraint does not exist', $method)); + } + + $reflMethod = new \ReflectionMethod($object, $method); + + if ($reflMethod->isStatic()) { + $reflMethod->invoke(null, $object, $this->context); + } else { + $reflMethod->invoke($object, $this->context); + } + } + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardScheme.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardScheme.php new file mode 100644 index 0000000..14f3b5d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardScheme.php @@ -0,0 +1,47 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * Metadata for the CardSchemeValidator. + * + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Tim Nagel <t.nagel@infinite.net.au> + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class CardScheme extends Constraint +{ + const NOT_NUMERIC_ERROR = 1; + const INVALID_FORMAT_ERROR = 2; + + protected static $errorNames = array( + self::NOT_NUMERIC_ERROR => 'NOT_NUMERIC_ERROR', + self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR', + ); + + public $message = 'Unsupported card type or invalid card number.'; + public $schemes; + + public function getDefaultOption() + { + return 'schemes'; + } + + public function getRequiredOptions() + { + return array('schemes'); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardSchemeValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardSchemeValidator.php new file mode 100644 index 0000000..0e7de08 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardSchemeValidator.php @@ -0,0 +1,122 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates that a card number belongs to a specified scheme. + * + * @author Tim Nagel <t.nagel@infinite.net.au> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see http://en.wikipedia.org/wiki/Bank_card_number + * @see http://www.regular-expressions.info/creditcard.html + */ +class CardSchemeValidator extends ConstraintValidator +{ + protected $schemes = array( + // American Express card numbers start with 34 or 37 and have 15 digits. + 'AMEX' => array( + '/^3[47][0-9]{13}$/', + ), + // China UnionPay cards start with 62 and have between 16 and 19 digits. + // Please note that these cards do not follow Luhn Algorithm as a checksum. + 'CHINA_UNIONPAY' => array( + '/^62[0-9]{14,17}$/', + ), + // Diners Club card numbers begin with 300 through 305, 36 or 38. All have 14 digits. + // There are Diners Club cards that begin with 5 and have 16 digits. + // These are a joint venture between Diners Club and MasterCard, and should be processed like a MasterCard. + 'DINERS' => array( + '/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/', + ), + // Discover card numbers begin with 6011, 622126 through 622925, 644 through 649 or 65. + // All have 16 digits. + 'DISCOVER' => array( + '/^6011[0-9]{12}$/', + '/^64[4-9][0-9]{13}$/', + '/^65[0-9]{14}$/', + '/^622(12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|91[0-9]|92[0-5])[0-9]{10}$/', + ), + // InstaPayment cards begin with 637 through 639 and have 16 digits. + 'INSTAPAYMENT' => array( + '/^63[7-9][0-9]{13}$/', + ), + // JCB cards beginning with 2131 or 1800 have 15 digits. + // JCB cards beginning with 35 have 16 digits. + 'JCB' => array( + '/^(?:2131|1800|35[0-9]{3})[0-9]{11}$/', + ), + // Laser cards begin with either 6304, 6706, 6709 or 6771 and have between 16 and 19 digits. + 'LASER' => array( + '/^(6304|670[69]|6771)[0-9]{12,15}$/', + ), + // Maestro cards begin with either 5018, 5020, 5038, 5893, 6304, 6759, 6761, 6762, 6763 or 0604 + // They have between 12 and 19 digits. + 'MAESTRO' => array( + '/^(5018|5020|5038|6304|6759|6761|676[23]|0604)[0-9]{8,15}$/', + ), + // All MasterCard numbers start with the numbers 51 through 55. All have 16 digits. + 'MASTERCARD' => array( + '/^5[1-5][0-9]{14}$/', + ), + // All Visa card numbers start with a 4. New cards have 16 digits. Old cards have 13. + 'VISA' => array( + '/^4([0-9]{12}|[0-9]{15})$/', + ), + ); + + /** + * Validates a creditcard belongs to a specified scheme. + * + * @param mixed $value + * @param Constraint $constraint + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof CardScheme) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\CardScheme'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_numeric($value)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(CardScheme::NOT_NUMERIC_ERROR) + ->addViolation(); + + return; + } + + $schemes = array_flip((array) $constraint->schemes); + $schemeRegexes = array_intersect_key($this->schemes, $schemes); + + foreach ($schemeRegexes as $regexes) { + foreach ($regexes as $regex) { + if (preg_match($regex, $value)) { + return; + } + } + } + + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(CardScheme::INVALID_FORMAT_ERROR) + ->addViolation(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Choice.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Choice.php new file mode 100644 index 0000000..39a6457 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Choice.php @@ -0,0 +1,54 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Choice extends Constraint +{ + const NO_SUCH_CHOICE_ERROR = 1; + const TOO_FEW_ERROR = 2; + const TOO_MANY_ERROR = 3; + + protected static $errorNames = array( + self::NO_SUCH_CHOICE_ERROR => 'NO_SUCH_CHOICE_ERROR', + self::TOO_FEW_ERROR => 'TOO_FEW_ERROR', + self::TOO_MANY_ERROR => 'TOO_MANY_ERROR', + ); + + public $choices; + public $callback; + public $multiple = false; + public $strict = false; + public $min; + public $max; + public $message = 'The value you selected is not a valid choice.'; + public $multipleMessage = 'One or more of the given values is invalid.'; + public $minMessage = 'You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.'; + public $maxMessage = 'You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.'; + + /** + * {@inheritdoc} + */ + public function getDefaultOption() + { + return 'choices'; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ChoiceValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ChoiceValidator.php new file mode 100644 index 0000000..cf5774c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ChoiceValidator.php @@ -0,0 +1,103 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * ChoiceValidator validates that the value is one of the expected values. + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Florian Eckerstorfer <florian@eckerstorfer.org> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class ChoiceValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Choice) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Choice'); + } + + if (!$constraint->choices && !$constraint->callback) { + throw new ConstraintDefinitionException('Either "choices" or "callback" must be specified on constraint Choice'); + } + + if (null === $value) { + return; + } + + if ($constraint->multiple && !is_array($value)) { + throw new UnexpectedTypeException($value, 'array'); + } + + if ($constraint->callback) { + if (!is_callable($choices = array($this->context->getClassName(), $constraint->callback)) + && !is_callable($choices = $constraint->callback) + ) { + throw new ConstraintDefinitionException('The Choice constraint expects a valid callback'); + } + $choices = call_user_func($choices); + } else { + $choices = $constraint->choices; + } + + if ($constraint->multiple) { + foreach ($value as $_value) { + if (!in_array($_value, $choices, $constraint->strict)) { + $this->buildViolation($constraint->multipleMessage) + ->setParameter('{{ value }}', $this->formatValue($_value)) + ->setCode(Choice::NO_SUCH_CHOICE_ERROR) + ->setInvalidValue($_value) + ->addViolation(); + + return; + } + } + + $count = count($value); + + if ($constraint->min !== null && $count < $constraint->min) { + $this->buildViolation($constraint->minMessage) + ->setParameter('{{ limit }}', $constraint->min) + ->setPlural((int) $constraint->min) + ->setCode(Choice::TOO_FEW_ERROR) + ->addViolation(); + + return; + } + + if ($constraint->max !== null && $count > $constraint->max) { + $this->buildViolation($constraint->maxMessage) + ->setParameter('{{ limit }}', $constraint->max) + ->setPlural((int) $constraint->max) + ->setCode(Choice::TOO_MANY_ERROR) + ->addViolation(); + + return; + } + } elseif (!in_array($value, $choices, $constraint->strict)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Choice::NO_SUCH_CHOICE_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php new file mode 100644 index 0000000..708c8ed --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php @@ -0,0 +1,87 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Collection extends Composite +{ + const MISSING_FIELD_ERROR = 1; + const NO_SUCH_FIELD_ERROR = 2; + + protected static $errorNames = array( + self::MISSING_FIELD_ERROR => 'MISSING_FIELD_ERROR', + self::NO_SUCH_FIELD_ERROR => 'NO_SUCH_FIELD_ERROR', + ); + + public $fields = array(); + public $allowExtraFields = false; + public $allowMissingFields = false; + public $extraFieldsMessage = 'This field was not expected.'; + public $missingFieldsMessage = 'This field is missing.'; + + /** + * {@inheritdoc} + */ + public function __construct($options = null) + { + // no known options set? $options is the fields array + if (is_array($options) + && !array_intersect(array_keys($options), array('groups', 'fields', 'allowExtraFields', 'allowMissingFields', 'extraFieldsMessage', 'missingFieldsMessage'))) { + $options = array('fields' => $options); + } + + parent::__construct($options); + } + + /** + * {@inheritdoc} + */ + protected function initializeNestedConstraints() + { + parent::initializeNestedConstraints(); + + if (!is_array($this->fields)) { + throw new ConstraintDefinitionException(sprintf('The option "fields" is expected to be an array in constraint %s', __CLASS__)); + } + + foreach ($this->fields as $fieldName => $field) { + // the XmlFileLoader and YamlFileLoader pass the field Optional + // and Required constraint as an array with exactly one element + if (is_array($field) && count($field) == 1) { + $this->fields[$fieldName] = $field = $field[0]; + } + + if (!$field instanceof Optional && !$field instanceof Required) { + $this->fields[$fieldName] = $field = new Required($field); + } + } + } + + public function getRequiredOptions() + { + return array('fields'); + } + + protected function getCompositeOption() + { + return 'fields'; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Optional.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Optional.php new file mode 100644 index 0000000..f7a9204 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Optional.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints\Collection; + +use Symfony\Component\Validator\Constraints\Optional as BaseOptional; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated in 2.3, to be removed in 3.0. Use + * {@link \Symfony\Component\Validator\Constraints\Optional} instead. + */ +class Optional extends BaseOptional +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Required.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Required.php new file mode 100644 index 0000000..e358343 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Required.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints\Collection; + +use Symfony\Component\Validator\Constraints\Required as BaseRequired; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated in 2.3, to be removed in 3.0. Use + * {@link \Symfony\Component\Validator\Constraints\Required} instead. + */ +class Required extends BaseRequired +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php new file mode 100644 index 0000000..c3180d2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php @@ -0,0 +1,94 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Context\ExecutionContextInterface; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class CollectionValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Collection) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Collection'); + } + + if (null === $value) { + return; + } + + if (!is_array($value) && !($value instanceof \Traversable && $value instanceof \ArrayAccess)) { + throw new UnexpectedTypeException($value, 'array or Traversable and ArrayAccess'); + } + + // We need to keep the initialized context when CollectionValidator + // calls itself recursively (Collection constraints can be nested). + // Since the context of the validator is overwritten when initialize() + // is called for the nested constraint, the outer validator is + // acting on the wrong context when the nested validation terminates. + // + // A better solution - which should be approached in Symfony 3.0 - is to + // remove the initialize() method and pass the context as last argument + // to validate() instead. + $context = $this->context; + + foreach ($constraint->fields as $field => $fieldConstraint) { + // bug fix issue #2779 + $existsInArray = is_array($value) && array_key_exists($field, $value); + $existsInArrayAccess = $value instanceof \ArrayAccess && $value->offsetExists($field); + + if ($existsInArray || $existsInArrayAccess) { + if (count($fieldConstraint->constraints) > 0) { + if ($context instanceof ExecutionContextInterface) { + $context->getValidator() + ->inContext($context) + ->atPath('['.$field.']') + ->validate($value[$field], $fieldConstraint->constraints); + } else { + // 2.4 API + $context->validateValue($value[$field], $fieldConstraint->constraints, '['.$field.']'); + } + } + } elseif (!$fieldConstraint instanceof Optional && !$constraint->allowMissingFields) { + $this->buildViolationInContext($context, $constraint->missingFieldsMessage) + ->atPath('['.$field.']') + ->setParameter('{{ field }}', $this->formatValue($field)) + ->setInvalidValue(null) + ->setCode(Collection::MISSING_FIELD_ERROR) + ->addViolation(); + } + } + + if (!$constraint->allowExtraFields) { + foreach ($value as $field => $fieldValue) { + if (!isset($constraint->fields[$field])) { + $this->buildViolationInContext($context, $constraint->extraFieldsMessage) + ->atPath('['.$field.']') + ->setParameter('{{ field }}', $this->formatValue($field)) + ->setInvalidValue($fieldValue) + ->setCode(Collection::NO_SUCH_FIELD_ERROR) + ->addViolation(); + } + } + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Composite.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Composite.php new file mode 100644 index 0000000..22a748c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Composite.php @@ -0,0 +1,152 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; + +/** + * A constraint that is composed of other constraints. + * + * You should never use the nested constraint instances anywhere else, because + * their groups are adapted when passed to the constructor of this class. + * + * If you want to create your own composite constraint, extend this class and + * let {@link getCompositeOption()} return the name of the property which + * contains the nested constraints. + * + * @since 2.6 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +abstract class Composite extends Constraint +{ + /** + * {@inheritdoc} + * + * The groups of the composite and its nested constraints are made + * consistent using the following strategy: + * + * - If groups are passed explicitly to the composite constraint, but + * not to the nested constraints, the options of the composite + * constraint are copied to the nested constraints; + * + * - If groups are passed explicitly to the nested constraints, but not + * to the composite constraint, the groups of all nested constraints + * are merged and used as groups for the composite constraint; + * + * - If groups are passed explicitly to both the composite and its nested + * constraints, the groups of the nested constraints must be a subset + * of the groups of the composite constraint. If not, a + * {@link ConstraintDefinitionException} is thrown. + * + * All this is done in the constructor, because constraints can then be + * cached. When constraints are loaded from the cache, no more group + * checks need to be done. + */ + public function __construct($options = null) + { + parent::__construct($options); + + $this->initializeNestedConstraints(); + + /** @var Constraint[] $nestedConstraints */ + $compositeOption = $this->getCompositeOption(); + $nestedConstraints = $this->$compositeOption; + + if (!is_array($nestedConstraints)) { + $nestedConstraints = array($nestedConstraints); + } + + foreach ($nestedConstraints as $constraint) { + if (!$constraint instanceof Constraint) { + throw new ConstraintDefinitionException(sprintf('The value %s is not an instance of Constraint in constraint %s', $constraint, get_class($this))); + } + + if ($constraint instanceof Valid) { + throw new ConstraintDefinitionException(sprintf('The constraint Valid cannot be nested inside constraint %s. You can only declare the Valid constraint directly on a field or method.', get_class($this))); + } + } + + if (!property_exists($this, 'groups')) { + $mergedGroups = array(); + + foreach ($nestedConstraints as $constraint) { + foreach ($constraint->groups as $group) { + $mergedGroups[$group] = true; + } + } + + $this->groups = array_keys($mergedGroups); + $this->$compositeOption = $nestedConstraints; + + return; + } + + foreach ($nestedConstraints as $constraint) { + if (property_exists($constraint, 'groups')) { + $excessGroups = array_diff($constraint->groups, $this->groups); + + if (count($excessGroups) > 0) { + throw new ConstraintDefinitionException(sprintf( + 'The group(s) "%s" passed to the constraint %s '. + 'should also be passed to its containing constraint %s', + implode('", "', $excessGroups), + get_class($constraint), + get_class($this) + )); + } + } else { + $constraint->groups = $this->groups; + } + } + + $this->$compositeOption = $nestedConstraints; + } + + /** + * {@inheritdoc} + * + * Implicit group names are forwarded to nested constraints. + * + * @param string $group + */ + public function addImplicitGroupName($group) + { + parent::addImplicitGroupName($group); + + /** @var Constraint[] $nestedConstraints */ + $nestedConstraints = $this->{$this->getCompositeOption()}; + + foreach ($nestedConstraints as $constraint) { + $constraint->addImplicitGroupName($group); + } + } + + /** + * Returns the name of the property that contains the nested constraints. + * + * @return string The property name + */ + abstract protected function getCompositeOption(); + + /** + * Initializes the nested constraints. + * + * This method can be overwritten in subclasses to clean up the nested + * constraints passed to the constructor. + * + * @see Collection::initializeNestedConstraints() + */ + protected function initializeNestedConstraints() + { + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Count.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Count.php new file mode 100644 index 0000000..a3e12fe --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Count.php @@ -0,0 +1,56 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\MissingOptionsException; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Count extends Constraint +{ + const TOO_FEW_ERROR = 1; + const TOO_MANY_ERROR = 2; + + protected static $errorNames = array( + self::TOO_FEW_ERROR => 'TOO_FEW_ERROR', + self::TOO_MANY_ERROR => 'TOO_MANY_ERROR', + ); + + public $minMessage = 'This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.'; + public $maxMessage = 'This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.'; + public $exactMessage = 'This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.'; + public $min; + public $max; + + public function __construct($options = null) + { + if (null !== $options && !is_array($options)) { + $options = array( + 'min' => $options, + 'max' => $options, + ); + } + + parent::__construct($options); + + if (null === $this->min && null === $this->max) { + throw new MissingOptionsException(sprintf('Either option "min" or "max" must be given for constraint %s', __CLASS__), array('min', 'max')); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountValidator.php new file mode 100644 index 0000000..d44f537 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountValidator.php @@ -0,0 +1,60 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class CountValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (null === $value) { + return; + } + + if (!is_array($value) && !$value instanceof \Countable) { + throw new UnexpectedTypeException($value, 'array or \Countable'); + } + + $count = count($value); + + if (null !== $constraint->max && $count > $constraint->max) { + $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage) + ->setParameter('{{ count }}', $count) + ->setParameter('{{ limit }}', $constraint->max) + ->setInvalidValue($value) + ->setPlural((int) $constraint->max) + ->setCode(Count::TOO_MANY_ERROR) + ->addViolation(); + + return; + } + + if (null !== $constraint->min && $count < $constraint->min) { + $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->minMessage) + ->setParameter('{{ count }}', $count) + ->setParameter('{{ limit }}', $constraint->min) + ->setInvalidValue($value) + ->setPlural((int) $constraint->min) + ->setCode(Count::TOO_FEW_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Country.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Country.php new file mode 100644 index 0000000..ff6f3d0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Country.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Country extends Constraint +{ + public $message = 'This value is not a valid country.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountryValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountryValidator.php new file mode 100644 index 0000000..0d001f7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountryValidator.php @@ -0,0 +1,54 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Intl\Intl; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether a value is a valid country code. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class CountryValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Country) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Country'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + $countries = Intl::getRegionBundle()->getCountryNames(); + + if (!isset($countries[$value])) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Currency.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Currency.php new file mode 100644 index 0000000..c09fe88 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Currency.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Miha Vrhovnik <miha.vrhovnik@pagein.si> + * + * @api + */ +class Currency extends Constraint +{ + public $message = 'This value is not a valid currency.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CurrencyValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CurrencyValidator.php new file mode 100644 index 0000000..5585426 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CurrencyValidator.php @@ -0,0 +1,54 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Intl\Intl; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether a value is a valid currency. + * + * @author Miha Vrhovnik <miha.vrhovnik@pagein.si> + * + * @api + */ +class CurrencyValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Currency) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Currency'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + $currencies = Intl::getCurrencyBundle()->getCurrencyNames(); + + if (!isset($currencies[$value])) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Date.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Date.php new file mode 100644 index 0000000..2bc444f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Date.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Date extends Constraint +{ + const INVALID_FORMAT_ERROR = 1; + const INVALID_DATE_ERROR = 2; + + protected static $errorNames = array( + self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR', + self::INVALID_DATE_ERROR => 'INVALID_DATE_ERROR', + ); + + public $message = 'This value is not a valid date.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTime.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTime.php new file mode 100644 index 0000000..ae67ff3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTime.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class DateTime extends Constraint +{ + const INVALID_FORMAT_ERROR = 1; + const INVALID_DATE_ERROR = 2; + const INVALID_TIME_ERROR = 3; + + protected static $errorNames = array( + self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR', + self::INVALID_DATE_ERROR => 'INVALID_DATE_ERROR', + self::INVALID_TIME_ERROR => 'INVALID_TIME_ERROR', + ); + + public $message = 'This value is not a valid datetime.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTimeValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTimeValidator.php new file mode 100644 index 0000000..b459c78 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTimeValidator.php @@ -0,0 +1,68 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class DateTimeValidator extends DateValidator +{ + const PATTERN = '/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/'; + + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof DateTime) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\DateTime'); + } + + if (null === $value || '' === $value || $value instanceof \DateTime) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + + if (!preg_match(static::PATTERN, $value, $matches)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(DateTime::INVALID_FORMAT_ERROR) + ->addViolation(); + + return; + } + + if (!DateValidator::checkDate($matches[1], $matches[2], $matches[3])) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(DateTime::INVALID_DATE_ERROR) + ->addViolation(); + } + + if (!TimeValidator::checkTime($matches[4], $matches[5], $matches[6])) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(DateTime::INVALID_TIME_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateValidator.php new file mode 100644 index 0000000..77f0111 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateValidator.php @@ -0,0 +1,78 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class DateValidator extends ConstraintValidator +{ + const PATTERN = '/^(\d{4})-(\d{2})-(\d{2})$/'; + + /** + * Checks whether a date is valid. + * + * @param int $year The year + * @param int $month The month + * @param int $day The day + * + * @return bool Whether the date is valid + * + * @internal + */ + public static function checkDate($year, $month, $day) + { + return checkdate($month, $day, $year); + } + + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Date) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Date'); + } + + if (null === $value || '' === $value || $value instanceof \DateTime) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + + if (!preg_match(static::PATTERN, $value, $matches)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Date::INVALID_FORMAT_ERROR) + ->addViolation(); + + return; + } + + if (!self::checkDate($matches[1], $matches[2], $matches[3])) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Date::INVALID_DATE_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Email.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Email.php new file mode 100644 index 0000000..3697717 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Email.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Email extends Constraint +{ + const INVALID_FORMAT_ERROR = 1; + const MX_CHECK_FAILED_ERROR = 2; + const HOST_CHECK_FAILED_ERROR = 3; + + protected static $errorNames = array( + self::INVALID_FORMAT_ERROR => 'STRICT_CHECK_FAILED_ERROR', + self::MX_CHECK_FAILED_ERROR => 'MX_CHECK_FAILED_ERROR', + self::HOST_CHECK_FAILED_ERROR => 'HOST_CHECK_FAILED_ERROR', + ); + + public $message = 'This value is not a valid email address.'; + public $checkMX = false; + public $checkHost = false; + public $strict; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EmailValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EmailValidator.php new file mode 100644 index 0000000..8d3a7c5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EmailValidator.php @@ -0,0 +1,130 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\RuntimeException; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class EmailValidator extends ConstraintValidator +{ + /** + * isStrict + * + * @var bool + */ + private $isStrict; + + public function __construct($strict = false) + { + $this->isStrict = $strict; + } + + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Email) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Email'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + + if (null === $constraint->strict) { + $constraint->strict = $this->isStrict; + } + + if ($constraint->strict) { + if (!class_exists('\Egulias\EmailValidator\EmailValidator')) { + throw new RuntimeException('Strict email validation requires egulias/email-validator'); + } + + $strictValidator = new \Egulias\EmailValidator\EmailValidator(); + + if (!$strictValidator->isValid($value, false, true)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Email::INVALID_FORMAT_ERROR) + ->addViolation(); + + return; + } + } elseif (!preg_match('/.+\@.+\..+/', $value)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Email::INVALID_FORMAT_ERROR) + ->addViolation(); + + return; + } + + $host = substr($value, strpos($value, '@') + 1); + + // Check for host DNS resource records + if ($constraint->checkMX) { + if (!$this->checkMX($host)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Email::MX_CHECK_FAILED_ERROR) + ->addViolation(); + } + + return; + } + + if ($constraint->checkHost && !$this->checkHost($host)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Email::HOST_CHECK_FAILED_ERROR) + ->addViolation(); + } + } + + /** + * Check DNS Records for MX type. + * + * @param string $host Host + * + * @return bool + */ + private function checkMX($host) + { + return checkdnsrr($host, 'MX'); + } + + /** + * Check if one of MX, A or AAAA DNS RR exists. + * + * @param string $host Host + * + * @return bool + */ + private function checkHost($host) + { + return $this->checkMX($host) || (checkdnsrr($host, 'A') || checkdnsrr($host, 'AAAA')); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualTo.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualTo.php new file mode 100644 index 0000000..8d3d752 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualTo.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class EqualTo extends AbstractComparison +{ + public $message = 'This value should be equal to {{ compared_value }}.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualToValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualToValidator.php new file mode 100644 index 0000000..3739dbe --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualToValidator.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * Validates values are equal (==). + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class EqualToValidator extends AbstractComparisonValidator +{ + /** + * {@inheritdoc} + */ + protected function compareValues($value1, $value2) + { + return $value1 == $value2; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Existence.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Existence.php new file mode 100644 index 0000000..5ea6ffe --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Existence.php @@ -0,0 +1,30 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +abstract class Existence extends Composite +{ + public $constraints = array(); + + public function getDefaultOption() + { + return 'constraints'; + } + + protected function getCompositeOption() + { + return 'constraints'; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Expression.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Expression.php new file mode 100644 index 0000000..dfa242c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Expression.php @@ -0,0 +1,59 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"CLASS", "PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Expression extends Constraint +{ + public $message = 'This value is not valid.'; + public $expression; + + /** + * {@inheritdoc} + */ + public function getDefaultOption() + { + return 'expression'; + } + + /** + * {@inheritdoc} + */ + public function getRequiredOptions() + { + return array('expression'); + } + + /** + * {@inheritdoc} + */ + public function getTargets() + { + return array(self::CLASS_CONSTRAINT, self::PROPERTY_CONSTRAINT); + } + + /** + * {@inheritdoc} + */ + public function validatedBy() + { + return 'validator.expression'; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ExpressionValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ExpressionValidator.php new file mode 100644 index 0000000..fd3e903 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ExpressionValidator.php @@ -0,0 +1,117 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\ExpressionLanguage\ExpressionLanguage; +use Symfony\Component\PropertyAccess\PropertyAccess; +use Symfony\Component\PropertyAccess\PropertyAccessorInterface; +use Symfony\Component\PropertyAccess\PropertyPath; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Context\ExecutionContextInterface; +use Symfony\Component\Validator\Exception\RuntimeException; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Fabien Potencier <fabien@symfony.com> + * @author Bernhard Schussek <bschussek@symfony.com> + */ +class ExpressionValidator extends ConstraintValidator +{ + /** + * @var PropertyAccessorInterface + */ + private $propertyAccessor; + + /** + * @var ExpressionLanguage + */ + private $expressionLanguage; + + /** + * @param PropertyAccessorInterface|null $propertyAccessor Optional as of Symfony 2.5 + * + * @throws UnexpectedTypeException If the property accessor is invalid + */ + public function __construct($propertyAccessor = null) + { + if (null !== $propertyAccessor && !$propertyAccessor instanceof PropertyAccessorInterface) { + throw new UnexpectedTypeException($propertyAccessor, 'null or \Symfony\Component\PropertyAccess\PropertyAccessorInterface'); + } + + $this->propertyAccessor = $propertyAccessor; + } + + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Expression) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Expression'); + } + + $variables = array(); + + // Symfony 2.5+ + if ($this->context instanceof ExecutionContextInterface) { + $variables['value'] = $value; + $variables['this'] = $this->context->getObject(); + } elseif (null === $this->context->getPropertyName()) { + $variables['value'] = $value; + $variables['this'] = $value; + } else { + $root = $this->context->getRoot(); + $variables['value'] = $value; + + if (is_object($root)) { + // Extract the object that the property belongs to from the object + // graph + $path = new PropertyPath($this->context->getPropertyPath()); + $parentPath = $path->getParent(); + $variables['this'] = $parentPath ? $this->getPropertyAccessor()->getValue($root, $parentPath) : $root; + } else { + $variables['this'] = null; + } + } + + if (!$this->getExpressionLanguage()->evaluate($constraint->expression, $variables)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } + + private function getExpressionLanguage() + { + if (null === $this->expressionLanguage) { + if (!class_exists('Symfony\Component\ExpressionLanguage\ExpressionLanguage')) { + throw new RuntimeException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.'); + } + $this->expressionLanguage = new ExpressionLanguage(); + } + + return $this->expressionLanguage; + } + + private function getPropertyAccessor() + { + if (null === $this->propertyAccessor) { + if (!class_exists('Symfony\Component\PropertyAccess\PropertyAccess')) { + throw new RuntimeException('Unable to use expressions as the Symfony PropertyAccess component is not installed.'); + } + $this->propertyAccessor = PropertyAccess::createPropertyAccessor(); + } + + return $this->propertyAccessor; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/False.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/False.php new file mode 100644 index 0000000..fc2e3e4 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/False.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class False extends Constraint +{ + public $message = 'This value should be false.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FalseValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FalseValidator.php new file mode 100644 index 0000000..206780c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FalseValidator.php @@ -0,0 +1,42 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class FalseValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof False) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\False'); + } + + if (null === $value || false === $value || 0 === $value || '0' === $value) { + return; + } + + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/File.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/File.php new file mode 100644 index 0000000..ae0ad67 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/File.php @@ -0,0 +1,86 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class File extends Constraint +{ + // Check the Image constraint for clashes if adding new constants here + + const NOT_FOUND_ERROR = 1; + const NOT_READABLE_ERROR = 2; + const EMPTY_ERROR = 3; + const TOO_LARGE_ERROR = 4; + const INVALID_MIME_TYPE_ERROR = 5; + + protected static $errorNames = array( + self::NOT_FOUND_ERROR => 'NOT_FOUND_ERROR', + self::NOT_READABLE_ERROR => 'NOT_READABLE_ERROR', + self::EMPTY_ERROR => 'EMPTY_ERROR', + self::TOO_LARGE_ERROR => 'TOO_LARGE_ERROR', + self::INVALID_MIME_TYPE_ERROR => 'INVALID_MIME_TYPE_ERROR', + ); + + public $maxSize; + public $binaryFormat; + public $mimeTypes = array(); + public $notFoundMessage = 'The file could not be found.'; + public $notReadableMessage = 'The file is not readable.'; + public $maxSizeMessage = 'The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.'; + public $mimeTypesMessage = 'The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.'; + public $disallowEmptyMessage = 'An empty file is not allowed.'; + + public $uploadIniSizeErrorMessage = 'The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.'; + public $uploadFormSizeErrorMessage = 'The file is too large.'; + public $uploadPartialErrorMessage = 'The file was only partially uploaded.'; + public $uploadNoFileErrorMessage = 'No file was uploaded.'; + public $uploadNoTmpDirErrorMessage = 'No temporary folder was configured in php.ini.'; + public $uploadCantWriteErrorMessage = 'Cannot write temporary file to disk.'; + public $uploadExtensionErrorMessage = 'A PHP extension caused the upload to fail.'; + public $uploadErrorMessage = 'The file could not be uploaded.'; + + public function __construct($options = null) + { + parent::__construct($options); + + if ($this->maxSize) { + if (ctype_digit((string) $this->maxSize)) { + $this->maxSize = (int) $this->maxSize; + $this->binaryFormat = null === $this->binaryFormat ? false : $this->binaryFormat; + } elseif (preg_match('/^\d++k$/i', $this->maxSize)) { + $this->maxSize = $this->maxSize * 1000; + $this->binaryFormat = null === $this->binaryFormat ? false : $this->binaryFormat; + } elseif (preg_match('/^\d++M$/i', $this->maxSize)) { + $this->maxSize = $this->maxSize * 1000000; + $this->binaryFormat = null === $this->binaryFormat ? false : $this->binaryFormat; + } elseif (preg_match('/^\d++Ki$/i', $this->maxSize)) { + $this->maxSize = $this->maxSize << 10; + $this->binaryFormat = null === $this->binaryFormat ? true : $this->binaryFormat; + } elseif (preg_match('/^\d++Mi$/i', $this->maxSize)) { + $this->maxSize = $this->maxSize << 20; + $this->binaryFormat = null === $this->binaryFormat ? true : $this->binaryFormat; + } else { + throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum size', $this->maxSize)); + } + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FileValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FileValidator.php new file mode 100644 index 0000000..9d225a9 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FileValidator.php @@ -0,0 +1,240 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\HttpFoundation\File\File as FileObject; +use Symfony\Component\HttpFoundation\File\UploadedFile; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class FileValidator extends ConstraintValidator +{ + const KB_BYTES = 1000; + const MB_BYTES = 1000000; + const KIB_BYTES = 1024; + const MIB_BYTES = 1048576; + + private static $suffices = array( + 1 => 'bytes', + self::KB_BYTES => 'kB', + self::MB_BYTES => 'MB', + self::KIB_BYTES => 'KiB', + self::MIB_BYTES => 'MiB', + ); + + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof File) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\File'); + } + + if (null === $value || '' === $value) { + return; + } + + if ($value instanceof UploadedFile && !$value->isValid()) { + switch ($value->getError()) { + case UPLOAD_ERR_INI_SIZE: + $iniLimitSize = UploadedFile::getMaxFilesize(); + if ($constraint->maxSize && $constraint->maxSize < $iniLimitSize) { + $limitInBytes = $constraint->maxSize; + $binaryFormat = $constraint->binaryFormat; + } else { + $limitInBytes = $iniLimitSize; + $binaryFormat = true; + } + + list($sizeAsString, $limitAsString, $suffix) = $this->factorizeSizes(0, $limitInBytes, $binaryFormat); + $this->buildViolation($constraint->uploadIniSizeErrorMessage) + ->setParameter('{{ limit }}', $limitAsString) + ->setParameter('{{ suffix }}', $suffix) + ->setCode(UPLOAD_ERR_INI_SIZE) + ->addViolation(); + + return; + case UPLOAD_ERR_FORM_SIZE: + $this->buildViolation($constraint->uploadFormSizeErrorMessage) + ->setCode(UPLOAD_ERR_FORM_SIZE) + ->addViolation(); + + return; + case UPLOAD_ERR_PARTIAL: + $this->buildViolation($constraint->uploadPartialErrorMessage) + ->setCode(UPLOAD_ERR_PARTIAL) + ->addViolation(); + + return; + case UPLOAD_ERR_NO_FILE: + $this->buildViolation($constraint->uploadNoFileErrorMessage) + ->setCode(UPLOAD_ERR_NO_FILE) + ->addViolation(); + + return; + case UPLOAD_ERR_NO_TMP_DIR: + $this->buildViolation($constraint->uploadNoTmpDirErrorMessage) + ->setCode(UPLOAD_ERR_NO_TMP_DIR) + ->addViolation(); + + return; + case UPLOAD_ERR_CANT_WRITE: + $this->buildViolation($constraint->uploadCantWriteErrorMessage) + ->setCode(UPLOAD_ERR_CANT_WRITE) + ->addViolation(); + + return; + case UPLOAD_ERR_EXTENSION: + $this->buildViolation($constraint->uploadExtensionErrorMessage) + ->setCode(UPLOAD_ERR_EXTENSION) + ->addViolation(); + + return; + default: + $this->buildViolation($constraint->uploadErrorMessage) + ->setCode($value->getError()) + ->addViolation(); + + return; + } + } + + if (!is_scalar($value) && !$value instanceof FileObject && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $path = $value instanceof FileObject ? $value->getPathname() : (string) $value; + + if (!is_file($path)) { + $this->buildViolation($constraint->notFoundMessage) + ->setParameter('{{ file }}', $this->formatValue($path)) + ->setCode(File::NOT_FOUND_ERROR) + ->addViolation(); + + return; + } + + if (!is_readable($path)) { + $this->buildViolation($constraint->notReadableMessage) + ->setParameter('{{ file }}', $this->formatValue($path)) + ->setCode(File::NOT_READABLE_ERROR) + ->addViolation(); + + return; + } + + $sizeInBytes = filesize($path); + + if (0 === $sizeInBytes) { + $this->buildViolation($constraint->disallowEmptyMessage) + ->setParameter('{{ file }}', $this->formatValue($path)) + ->setCode(File::EMPTY_ERROR) + ->addViolation(); + + return; + } + + if ($constraint->maxSize) { + $limitInBytes = $constraint->maxSize; + + if ($sizeInBytes > $limitInBytes) { + list($sizeAsString, $limitAsString, $suffix) = $this->factorizeSizes($sizeInBytes, $limitInBytes, $constraint->binaryFormat); + $this->buildViolation($constraint->maxSizeMessage) + ->setParameter('{{ file }}', $this->formatValue($path)) + ->setParameter('{{ size }}', $sizeAsString) + ->setParameter('{{ limit }}', $limitAsString) + ->setParameter('{{ suffix }}', $suffix) + ->setCode(File::TOO_LARGE_ERROR) + ->addViolation(); + + return; + } + } + + if ($constraint->mimeTypes) { + if (!$value instanceof FileObject) { + $value = new FileObject($value); + } + + $mimeTypes = (array) $constraint->mimeTypes; + $mime = $value->getMimeType(); + + foreach ($mimeTypes as $mimeType) { + if ($mimeType === $mime) { + return; + } + + if ($discrete = strstr($mimeType, '/*', true)) { + if (strstr($mime, '/', true) === $discrete) { + return; + } + } + } + + $this->buildViolation($constraint->mimeTypesMessage) + ->setParameter('{{ file }}', $this->formatValue($path)) + ->setParameter('{{ type }}', $this->formatValue($mime)) + ->setParameter('{{ types }}', $this->formatValues($mimeTypes)) + ->setCode(File::INVALID_MIME_TYPE_ERROR) + ->addViolation(); + } + } + + private static function moreDecimalsThan($double, $numberOfDecimals) + { + return strlen((string) $double) > strlen(round($double, $numberOfDecimals)); + } + + /** + * Convert the limit to the smallest possible number + * (i.e. try "MB", then "kB", then "bytes") + */ + private function factorizeSizes($size, $limit, $binaryFormat) + { + if ($binaryFormat) { + $coef = self::MIB_BYTES; + $coefFactor = self::KIB_BYTES; + } else { + $coef = self::MB_BYTES; + $coefFactor = self::KB_BYTES; + } + + $limitAsString = (string) ($limit / $coef); + + // Restrict the limit to 2 decimals (without rounding! we + // need the precise value) + while (self::moreDecimalsThan($limitAsString, 2)) { + $coef /= $coefFactor; + $limitAsString = (string) ($limit / $coef); + } + + // Convert size to the same measure, but round to 2 decimals + $sizeAsString = (string) round($size / $coef, 2); + + // If the size and limit produce the same string output + // (due to rounding), reduce the coefficient + while ($sizeAsString === $limitAsString) { + $coef /= $coefFactor; + $limitAsString = (string) ($limit / $coef); + $sizeAsString = (string) round($size / $coef, 2); + } + + return array($sizeAsString, $limitAsString, self::$suffices[$coef]); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThan.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThan.php new file mode 100644 index 0000000..ec7fafb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThan.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class GreaterThan extends AbstractComparison +{ + public $message = 'This value should be greater than {{ compared_value }}.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqual.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqual.php new file mode 100644 index 0000000..36fdd9c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqual.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class GreaterThanOrEqual extends AbstractComparison +{ + public $message = 'This value should be greater than or equal to {{ compared_value }}.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqualValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqualValidator.php new file mode 100644 index 0000000..2363204 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqualValidator.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * Validates values are greater than or equal to the previous (>=). + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class GreaterThanOrEqualValidator extends AbstractComparisonValidator +{ + /** + * {@inheritdoc} + */ + protected function compareValues($value1, $value2) + { + return $value1 >= $value2; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanValidator.php new file mode 100644 index 0000000..fdcf0c1 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanValidator.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * Validates values are greater than the previous (>). + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class GreaterThanValidator extends AbstractComparisonValidator +{ + /** + * {@inheritdoc} + */ + protected function compareValues($value1, $value2) + { + return $value1 > $value2; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequence.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequence.php new file mode 100644 index 0000000..72bfb16 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequence.php @@ -0,0 +1,196 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Exception\OutOfBoundsException; + +/** + * A sequence of validation groups. + * + * When validating a group sequence, each group will only be validated if all + * of the previous groups in the sequence succeeded. For example: + * + * $validator->validate($address, null, new GroupSequence('Basic', 'Strict')); + * + * In the first step, all constraints that belong to the group "Basic" will be + * validated. If none of the constraints fail, the validator will then validate + * the constraints in group "Strict". This is useful, for example, if "Strict" + * contains expensive checks that require a lot of CPU or slow, external + * services. You usually don't want to run expensive checks if any of the cheap + * checks fail. + * + * When adding metadata to a class, you can override the "Default" group of + * that class with a group sequence: + * + * /** + * * @GroupSequence({"Address", "Strict"}) + * *\/ + * class Address + * { + * // ... + * } + * + * Whenever you validate that object in the "Default" group, the group sequence + * will be validated: + * + * $validator->validate($address); + * + * If you want to execute the constraints of the "Default" group for a class + * with an overridden default group, pass the class name as group name instead: + * + * $validator->validate($address, null, "Address") + * + * @Annotation + * @Target({"CLASS", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + * + * Implementing \ArrayAccess, \IteratorAggregate and \Countable is @deprecated since 2.5 and will be removed in 3.0. + */ +class GroupSequence implements \ArrayAccess, \IteratorAggregate, \Countable +{ + /** + * The groups in the sequence. + * + * @var string[]|GroupSequence[] + */ + public $groups; + + /** + * The group in which cascaded objects are validated when validating + * this sequence. + * + * By default, cascaded objects are validated in each of the groups of + * the sequence. + * + * If a class has a group sequence attached, that sequence replaces the + * "Default" group. When validating that class in the "Default" group, the + * group sequence is used instead, but still the "Default" group should be + * cascaded to other objects. + * + * @var string|GroupSequence + */ + public $cascadedGroup; + + /** + * Creates a new group sequence. + * + * @param string[] $groups The groups in the sequence + */ + public function __construct(array $groups) + { + // Support for Doctrine annotations + $this->groups = isset($groups['value']) ? $groups['value'] : $groups; + } + + /** + * Returns an iterator for this group. + * + * @return \Traversable The iterator + * + * @see \IteratorAggregate::getIterator() + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * To be removed in Symfony 3.0. + */ + public function getIterator() + { + return new \ArrayIterator($this->groups); + } + + /** + * Returns whether the given offset exists in the sequence. + * + * @param int $offset The offset + * + * @return bool Whether the offset exists + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * To be removed in Symfony 3.0. + */ + public function offsetExists($offset) + { + return isset($this->groups[$offset]); + } + + /** + * Returns the group at the given offset. + * + * @param int $offset The offset + * + * @return string The group a the given offset + * + * @throws OutOfBoundsException If the object does not exist + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * To be removed in Symfony 3.0. + */ + public function offsetGet($offset) + { + if (!isset($this->groups[$offset])) { + throw new OutOfBoundsException(sprintf( + 'The offset "%s" does not exist.', + $offset + )); + } + + return $this->groups[$offset]; + } + + /** + * Sets the group at the given offset. + * + * @param int $offset The offset + * @param string $value The group name + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * To be removed in Symfony 3.0. + */ + public function offsetSet($offset, $value) + { + if (null !== $offset) { + $this->groups[$offset] = $value; + + return; + } + + $this->groups[] = $value; + } + + /** + * Removes the group at the given offset. + * + * @param int $offset The offset + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * To be removed in Symfony 3.0. + */ + public function offsetUnset($offset) + { + unset($this->groups[$offset]); + } + + /** + * Returns the number of groups in the sequence. + * + * @return int The number of groups + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * To be removed in Symfony 3.0. + */ + public function count() + { + return count($this->groups); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequenceProvider.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequenceProvider.php new file mode 100644 index 0000000..3904473 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequenceProvider.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * Annotation to define a group sequence provider. + * + * @Annotation + * @Target({"CLASS", "ANNOTATION"}) + */ +class GroupSequenceProvider +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Iban.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Iban.php new file mode 100644 index 0000000..66ce09a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Iban.php @@ -0,0 +1,41 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Manuel Reinhard <manu@sprain.ch> + * @author Michael Schummel + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Iban extends Constraint +{ + const TOO_SHORT_ERROR = 1; + const INVALID_COUNTRY_CODE_ERROR = 2; + const INVALID_CHARACTERS_ERROR = 3; + const INVALID_CASE_ERROR = 4; + const CHECKSUM_FAILED_ERROR = 5; + + protected static $errorNames = array( + self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR', + self::INVALID_COUNTRY_CODE_ERROR => 'INVALID_COUNTRY_CODE_ERROR', + self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR', + self::INVALID_CASE_ERROR => 'INVALID_CASE_ERROR', + self::CHECKSUM_FAILED_ERROR => 'CHECKSUM_FAILED_ERROR', + ); + + public $message = 'This is not a valid International Bank Account Number (IBAN).'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php new file mode 100644 index 0000000..35995d2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php @@ -0,0 +1,143 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Manuel Reinhard <manu@sprain.ch> + * @author Michael Schummel + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @link http://www.michael-schummel.de/2007/10/05/iban-prufung-mit-php/ + */ +class IbanValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Iban) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Iban'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + + // Remove spaces + $canonicalized = str_replace(' ', '', $value); + + // The IBAN must have at least 4 characters... + if (strlen($canonicalized) < 4) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Iban::TOO_SHORT_ERROR) + ->addViolation(); + + return; + } + + // ...start with a country code... + if (!ctype_alpha($canonicalized{0}) || !ctype_alpha($canonicalized{1})) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Iban::INVALID_COUNTRY_CODE_ERROR) + ->addViolation(); + + return; + } + + // ...contain only digits and characters... + if (!ctype_alnum($canonicalized)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Iban::INVALID_CHARACTERS_ERROR) + ->addViolation(); + + return; + } + + // ...and contain uppercase characters only + if ($canonicalized !== strtoupper($canonicalized)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Iban::INVALID_CASE_ERROR) + ->addViolation(); + + return; + } + + // Move the first four characters to the end + // e.g. CH93 0076 2011 6238 5295 7 + // -> 0076 2011 6238 5295 7 CH93 + $canonicalized = substr($canonicalized, 4).substr($canonicalized, 0, 4); + + // Convert all remaining letters to their ordinals + // The result is an integer, which is too large for PHP's int + // data type, so we store it in a string instead. + // e.g. 0076 2011 6238 5295 7 CH93 + // -> 0076 2011 6238 5295 7 121893 + $checkSum = $this->toBigInt($canonicalized); + + // Do a modulo-97 operation on the large integer + // We cannot use PHP's modulo operator, so we calculate the + // modulo step-wisely instead + if (1 !== $this->bigModulo97($checkSum)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Iban::CHECKSUM_FAILED_ERROR) + ->addViolation(); + } + } + + private function toBigInt($string) + { + $chars = str_split($string); + $bigInt = ''; + + foreach ($chars as $char) { + // Convert uppercase characters to ordinals, starting with 10 for "A" + if (ctype_upper($char)) { + $bigInt .= (ord($char) - 55); + + continue; + } + + // Simply append digits + $bigInt .= $char; + } + + return $bigInt; + } + + private function bigModulo97($bigInt) + { + $parts = str_split($bigInt, 7); + $rest = 0; + + foreach ($parts as $part) { + $rest = ($rest.$part) % 97; + } + + return $rest; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalTo.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalTo.php new file mode 100644 index 0000000..6d00286 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalTo.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class IdenticalTo extends AbstractComparison +{ + public $message = 'This value should be identical to {{ compared_value_type }} {{ compared_value }}.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalToValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalToValidator.php new file mode 100644 index 0000000..a186726 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalToValidator.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * Validates values are identical (===). + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class IdenticalToValidator extends AbstractComparisonValidator +{ + /** + * {@inheritdoc} + */ + protected function compareValues($value1, $value2) + { + return $value1 === $value2; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Image.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Image.php new file mode 100644 index 0000000..904ef97 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Image.php @@ -0,0 +1,81 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Benjamin Dulau <benjamin.dulau@gmail.com> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Image extends File +{ + // Don't reuse values used in File + + const SIZE_NOT_DETECTED_ERROR = 10; + const TOO_WIDE_ERROR = 11; + const TOO_NARROW_ERROR = 12; + const TOO_HIGH_ERROR = 13; + const TOO_LOW_ERROR = 14; + const RATIO_TOO_BIG_ERROR = 15; + const RATIO_TOO_SMALL_ERROR = 16; + const SQUARE_NOT_ALLOWED_ERROR = 17; + const LANDSCAPE_NOT_ALLOWED_ERROR = 18; + const PORTRAIT_NOT_ALLOWED_ERROR = 19; + + // Include the mapping from the base class + + protected static $errorNames = array( + self::NOT_FOUND_ERROR => 'NOT_FOUND_ERROR', + self::NOT_READABLE_ERROR => 'NOT_READABLE_ERROR', + self::EMPTY_ERROR => 'EMPTY_ERROR', + self::TOO_LARGE_ERROR => 'TOO_LARGE_ERROR', + self::INVALID_MIME_TYPE_ERROR => 'INVALID_MIME_TYPE_ERROR', + self::SIZE_NOT_DETECTED_ERROR => 'SIZE_NOT_DETECTED_ERROR', + self::TOO_WIDE_ERROR => 'TOO_WIDE_ERROR', + self::TOO_NARROW_ERROR => 'TOO_NARROW_ERROR', + self::TOO_HIGH_ERROR => 'TOO_HIGH_ERROR', + self::TOO_LOW_ERROR => 'TOO_LOW_ERROR', + self::RATIO_TOO_BIG_ERROR => 'RATIO_TOO_BIG_ERROR', + self::RATIO_TOO_SMALL_ERROR => 'RATIO_TOO_SMALL_ERROR', + self::SQUARE_NOT_ALLOWED_ERROR => 'SQUARE_NOT_ALLOWED_ERROR', + self::LANDSCAPE_NOT_ALLOWED_ERROR => 'LANDSCAPE_NOT_ALLOWED_ERROR', + self::PORTRAIT_NOT_ALLOWED_ERROR => 'PORTRAIT_NOT_ALLOWED_ERROR', + ); + + public $mimeTypes = 'image/*'; + public $minWidth; + public $maxWidth; + public $maxHeight; + public $minHeight; + public $maxRatio; + public $minRatio; + public $allowSquare = true; + public $allowLandscape = true; + public $allowPortrait = true; + + // The constant for a wrong MIME type is taken from the parent class. + public $mimeTypesMessage = 'This file is not a valid image.'; + public $sizeNotDetectedMessage = 'The size of the image could not be detected.'; + public $maxWidthMessage = 'The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.'; + public $minWidthMessage = 'The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.'; + public $maxHeightMessage = 'The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.'; + public $minHeightMessage = 'The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.'; + public $maxRatioMessage = 'The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.'; + public $minRatioMessage = 'The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.'; + public $allowSquareMessage = 'The image is square ({{ width }}x{{ height }}px). Square images are not allowed.'; + public $allowLandscapeMessage = 'The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.'; + public $allowPortraitMessage = 'The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ImageValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ImageValidator.php new file mode 100644 index 0000000..e183e27 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ImageValidator.php @@ -0,0 +1,182 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether a value is a valid image file and is valid + * against minWidth, maxWidth, minHeight and maxHeight constraints. + * + * @author Benjamin Dulau <benjamin.dulau@gmail.com> + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class ImageValidator extends FileValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Image) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Image'); + } + + $violations = count($this->context->getViolations()); + + parent::validate($value, $constraint); + + $failed = count($this->context->getViolations()) !== $violations; + + if ($failed || null === $value || '' === $value) { + return; + } + + if (null === $constraint->minWidth && null === $constraint->maxWidth + && null === $constraint->minHeight && null === $constraint->maxHeight + && null === $constraint->minRatio && null === $constraint->maxRatio + && $constraint->allowSquare && $constraint->allowLandscape && $constraint->allowPortrait) { + return; + } + + $size = @getimagesize($value); + + if (empty($size) || ($size[0] === 0) || ($size[1] === 0)) { + $this->buildViolation($constraint->sizeNotDetectedMessage) + ->setCode(Image::SIZE_NOT_DETECTED_ERROR) + ->addViolation(); + + return; + } + + $width = $size[0]; + $height = $size[1]; + + if ($constraint->minWidth) { + if (!ctype_digit((string) $constraint->minWidth)) { + throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum width', $constraint->minWidth)); + } + + if ($width < $constraint->minWidth) { + $this->buildViolation($constraint->minWidthMessage) + ->setParameter('{{ width }}', $width) + ->setParameter('{{ min_width }}', $constraint->minWidth) + ->setCode(Image::TOO_NARROW_ERROR) + ->addViolation(); + + return; + } + } + + if ($constraint->maxWidth) { + if (!ctype_digit((string) $constraint->maxWidth)) { + throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum width', $constraint->maxWidth)); + } + + if ($width > $constraint->maxWidth) { + $this->buildViolation($constraint->maxWidthMessage) + ->setParameter('{{ width }}', $width) + ->setParameter('{{ max_width }}', $constraint->maxWidth) + ->setCode(Image::TOO_WIDE_ERROR) + ->addViolation(); + + return; + } + } + + if ($constraint->minHeight) { + if (!ctype_digit((string) $constraint->minHeight)) { + throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum height', $constraint->minHeight)); + } + + if ($height < $constraint->minHeight) { + $this->buildViolation($constraint->minHeightMessage) + ->setParameter('{{ height }}', $height) + ->setParameter('{{ min_height }}', $constraint->minHeight) + ->setCode(Image::TOO_LOW_ERROR) + ->addViolation(); + + return; + } + } + + if ($constraint->maxHeight) { + if (!ctype_digit((string) $constraint->maxHeight)) { + throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum height', $constraint->maxHeight)); + } + + if ($height > $constraint->maxHeight) { + $this->buildViolation($constraint->maxHeightMessage) + ->setParameter('{{ height }}', $height) + ->setParameter('{{ max_height }}', $constraint->maxHeight) + ->setCode(Image::TOO_HIGH_ERROR) + ->addViolation(); + } + } + + $ratio = round($width / $height, 2); + + if (null !== $constraint->minRatio) { + if (!is_numeric((string) $constraint->minRatio)) { + throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum ratio', $constraint->minRatio)); + } + + if ($ratio < $constraint->minRatio) { + $this->buildViolation($constraint->minRatioMessage) + ->setParameter('{{ ratio }}', $ratio) + ->setParameter('{{ min_ratio }}', $constraint->minRatio) + ->setCode(Image::RATIO_TOO_SMALL_ERROR) + ->addViolation(); + } + } + + if (null !== $constraint->maxRatio) { + if (!is_numeric((string) $constraint->maxRatio)) { + throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum ratio', $constraint->maxRatio)); + } + + if ($ratio > $constraint->maxRatio) { + $this->buildViolation($constraint->maxRatioMessage) + ->setParameter('{{ ratio }}', $ratio) + ->setParameter('{{ max_ratio }}', $constraint->maxRatio) + ->setCode(Image::RATIO_TOO_BIG_ERROR) + ->addViolation(); + } + } + + if (!$constraint->allowSquare && $width == $height) { + $this->buildViolation($constraint->allowSquareMessage) + ->setParameter('{{ width }}', $width) + ->setParameter('{{ height }}', $height) + ->setCode(Image::SQUARE_NOT_ALLOWED_ERROR) + ->addViolation(); + } + + if (!$constraint->allowLandscape && $width > $height) { + $this->buildViolation($constraint->allowLandscapeMessage) + ->setParameter('{{ width }}', $width) + ->setParameter('{{ height }}', $height) + ->setCode(Image::LANDSCAPE_NOT_ALLOWED_ERROR) + ->addViolation(); + } + + if (!$constraint->allowPortrait && $width < $height) { + $this->buildViolation($constraint->allowPortraitMessage) + ->setParameter('{{ width }}', $width) + ->setParameter('{{ height }}', $height) + ->setCode(Image::PORTRAIT_NOT_ALLOWED_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Ip.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Ip.php new file mode 100644 index 0000000..27f0b2d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Ip.php @@ -0,0 +1,82 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; + +/** + * Validates that a value is a valid IP address. + * + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * @author Joseph Bielawski <stloyd@gmail.com> + * + * @api + */ +class Ip extends Constraint +{ + const V4 = '4'; + const V6 = '6'; + const ALL = 'all'; + + // adds FILTER_FLAG_NO_PRIV_RANGE flag (skip private ranges) + const V4_NO_PRIV = '4_no_priv'; + const V6_NO_PRIV = '6_no_priv'; + const ALL_NO_PRIV = 'all_no_priv'; + + // adds FILTER_FLAG_NO_RES_RANGE flag (skip reserved ranges) + const V4_NO_RES = '4_no_res'; + const V6_NO_RES = '6_no_res'; + const ALL_NO_RES = 'all_no_res'; + + // adds FILTER_FLAG_NO_PRIV_RANGE and FILTER_FLAG_NO_RES_RANGE flags (skip both) + const V4_ONLY_PUBLIC = '4_public'; + const V6_ONLY_PUBLIC = '6_public'; + const ALL_ONLY_PUBLIC = 'all_public'; + + protected static $versions = array( + self::V4, + self::V6, + self::ALL, + + self::V4_NO_PRIV, + self::V6_NO_PRIV, + self::ALL_NO_PRIV, + + self::V4_NO_RES, + self::V6_NO_RES, + self::ALL_NO_RES, + + self::V4_ONLY_PUBLIC, + self::V6_ONLY_PUBLIC, + self::ALL_ONLY_PUBLIC, + ); + + public $version = self::V4; + + public $message = 'This is not a valid IP address.'; + + /** + * {@inheritdoc} + */ + public function __construct($options = null) + { + parent::__construct($options); + + if (!in_array($this->version, self::$versions)) { + throw new ConstraintDefinitionException(sprintf('The option "version" must be one of "%s"', implode('", "', self::$versions))); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IpValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IpValidator.php new file mode 100644 index 0000000..2bbe7e4 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IpValidator.php @@ -0,0 +1,103 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether a value is a valid IP address. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * @author Joseph Bielawski <stloyd@gmail.com> + * + * @api + */ +class IpValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Ip) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Ip'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + + switch ($constraint->version) { + case Ip::V4: + $flag = FILTER_FLAG_IPV4; + break; + + case Ip::V6: + $flag = FILTER_FLAG_IPV6; + break; + + case Ip::V4_NO_PRIV: + $flag = FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE; + break; + + case Ip::V6_NO_PRIV: + $flag = FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE; + break; + + case Ip::ALL_NO_PRIV: + $flag = FILTER_FLAG_NO_PRIV_RANGE; + break; + + case Ip::V4_NO_RES: + $flag = FILTER_FLAG_IPV4 | FILTER_FLAG_NO_RES_RANGE; + break; + + case Ip::V6_NO_RES: + $flag = FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE; + break; + + case Ip::ALL_NO_RES: + $flag = FILTER_FLAG_NO_RES_RANGE; + break; + + case Ip::V4_ONLY_PUBLIC: + $flag = FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE; + break; + + case Ip::V6_ONLY_PUBLIC: + $flag = FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE; + break; + + case Ip::ALL_ONLY_PUBLIC: + $flag = FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE; + break; + + default: + $flag = null; + break; + } + + if (!filter_var($value, FILTER_VALIDATE_IP, $flag)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Isbn.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Isbn.php new file mode 100644 index 0000000..67d177f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Isbn.php @@ -0,0 +1,65 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author The Whole Life To Learn <thewholelifetolearn@gmail.com> + * @author Manuel Reinhard <manu@sprain.ch> + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Isbn extends Constraint +{ + const TOO_SHORT_ERROR = 1; + const TOO_LONG_ERROR = 2; + const INVALID_CHARACTERS_ERROR = 3; + const CHECKSUM_FAILED_ERROR = 4; + const TYPE_NOT_RECOGNIZED_ERROR = 5; + + protected static $errorNames = array( + self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR', + self::TOO_LONG_ERROR => 'TOO_LONG_ERROR', + self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR', + self::CHECKSUM_FAILED_ERROR => 'CHECKSUM_FAILED_ERROR', + self::TYPE_NOT_RECOGNIZED_ERROR => 'TYPE_NOT_RECOGNIZED_ERROR', + ); + + public $isbn10Message = 'This value is not a valid ISBN-10.'; + public $isbn13Message = 'This value is not a valid ISBN-13.'; + public $bothIsbnMessage = 'This value is neither a valid ISBN-10 nor a valid ISBN-13.'; + public $type; + public $message; + + /** + * @deprecated Deprecated since version 2.5, to be removed in 3.0. Use option "type" instead. + * @var bool + */ + public $isbn10 = false; + + /** + * @deprecated Deprecated since version 2.5, to be removed in 3.0. Use option "type" instead. + * @var bool + */ + public $isbn13 = false; + + /** + * {@inheritdoc} + */ + public function getDefaultOption() + { + return 'type'; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IsbnValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IsbnValidator.php new file mode 100644 index 0000000..5980857 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IsbnValidator.php @@ -0,0 +1,192 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether the value is a valid ISBN-10 or ISBN-13 + * + * @author The Whole Life To Learn <thewholelifetolearn@gmail.com> + * @author Manuel Reinhard <manu@sprain.ch> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see https://en.wikipedia.org/wiki/Isbn + */ +class IsbnValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Isbn) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Isbn'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + $canonical = str_replace('-', '', $value); + + if (null === $constraint->type) { + if ($constraint->isbn10 && !$constraint->isbn13) { + $constraint->type = 'isbn10'; + } elseif ($constraint->isbn13 && !$constraint->isbn10) { + $constraint->type = 'isbn13'; + } + } + + // Explicitly validate against ISBN-10 + if ('isbn10' === $constraint->type) { + if (true !== ($code = $this->validateIsbn10($canonical))) { + $this->buildViolation($this->getMessage($constraint, $constraint->type)) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode($code) + ->addViolation(); + } + + return; + } + + // Explicitly validate against ISBN-13 + if ('isbn13' === $constraint->type) { + if (true !== ($code = $this->validateIsbn13($canonical))) { + $this->buildViolation($this->getMessage($constraint, $constraint->type)) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode($code) + ->addViolation(); + } + + return; + } + + // Try both ISBNs + + // First, try ISBN-10 + $code = $this->validateIsbn10($canonical); + + // The ISBN can only be an ISBN-13 if the value was too long for ISBN-10 + if (Isbn::TOO_LONG_ERROR === $code) { + // Try ISBN-13 now + $code = $this->validateIsbn13($canonical); + + // If too short, this means we have 11 or 12 digits + if (Isbn::TOO_SHORT_ERROR === $code) { + $code = Isbn::TYPE_NOT_RECOGNIZED_ERROR; + } + } + + if (true !== $code) { + $this->buildViolation($this->getMessage($constraint)) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode($code) + ->addViolation(); + } + } + + protected function validateIsbn10($isbn) + { + // Choose an algorithm so that ERROR_INVALID_CHARACTERS is preferred + // over ERROR_TOO_SHORT/ERROR_TOO_LONG + // Otherwise "0-45122-5244" passes, but "0-45122_5244" reports + // "too long" + + // Error priority: + // 1. ERROR_INVALID_CHARACTERS + // 2. ERROR_TOO_SHORT/ERROR_TOO_LONG + // 3. ERROR_CHECKSUM_FAILED + + $checkSum = 0; + + for ($i = 0; $i < 10; ++$i) { + // If we test the length before the loop, we get an ERROR_TOO_SHORT + // when actually an ERROR_INVALID_CHARACTERS is wanted, e.g. for + // "0-45122_5244" (typo) + if (!isset($isbn{$i})) { + return Isbn::TOO_SHORT_ERROR; + } + + if ('X' === $isbn{$i}) { + $digit = 10; + } elseif (ctype_digit($isbn{$i})) { + $digit = $isbn{$i}; + } else { + return Isbn::INVALID_CHARACTERS_ERROR; + } + + $checkSum += $digit * (10 - $i); + } + + if (isset($isbn{$i})) { + return Isbn::TOO_LONG_ERROR; + } + + return 0 === $checkSum % 11 ? true : Isbn::CHECKSUM_FAILED_ERROR; + } + + protected function validateIsbn13($isbn) + { + // Error priority: + // 1. ERROR_INVALID_CHARACTERS + // 2. ERROR_TOO_SHORT/ERROR_TOO_LONG + // 3. ERROR_CHECKSUM_FAILED + + if (!ctype_digit($isbn)) { + return Isbn::INVALID_CHARACTERS_ERROR; + } + + $length = strlen($isbn); + + if ($length < 13) { + return Isbn::TOO_SHORT_ERROR; + } + + if ($length > 13) { + return Isbn::TOO_LONG_ERROR; + } + + $checkSum = 0; + + for ($i = 0; $i < 13; $i += 2) { + $checkSum += $isbn{$i}; + } + + for ($i = 1; $i < 12; $i += 2) { + $checkSum += $isbn{$i} + * 3; + } + + return 0 === $checkSum % 10 ? true : Isbn::CHECKSUM_FAILED_ERROR; + } + + protected function getMessage($constraint, $type = null) + { + if (null !== $constraint->message) { + return $constraint->message; + } elseif ('isbn10' === $type) { + return $constraint->isbn10Message; + } elseif ('isbn13' === $type) { + return $constraint->isbn13Message; + } + + return $constraint->bothIsbnMessage; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Issn.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Issn.php new file mode 100644 index 0000000..39716a2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Issn.php @@ -0,0 +1,44 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Antonio J. García Lagar <aj@garcialagar.es> + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Issn extends Constraint +{ + const TOO_SHORT_ERROR = 1; + const TOO_LONG_ERROR = 2; + const MISSING_HYPHEN_ERROR = 3; + const INVALID_CHARACTERS_ERROR = 4; + const INVALID_CASE_ERROR = 5; + const CHECKSUM_FAILED_ERROR = 6; + + protected static $errorNames = array( + self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR', + self::TOO_LONG_ERROR => 'TOO_LONG_ERROR', + self::MISSING_HYPHEN_ERROR => 'MISSING_HYPHEN_ERROR', + self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR', + self::INVALID_CASE_ERROR => 'INVALID_CASE_ERROR', + self::CHECKSUM_FAILED_ERROR => 'CHECKSUM_FAILED_ERROR', + ); + + public $message = 'This value is not a valid ISSN.'; + public $caseSensitive = false; + public $requireHyphen = false; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IssnValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IssnValidator.php new file mode 100644 index 0000000..1f17c38 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IssnValidator.php @@ -0,0 +1,132 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether the value is a valid ISSN. + * + * @author Antonio J. García Lagar <aj@garcialagar.es> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see https://en.wikipedia.org/wiki/Issn + */ +class IssnValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Issn) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Issn'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + $canonical = $value; + + // 1234-567X + // ^ + if (isset($canonical{4}) && '-' === $canonical{4}) { + // remove hyphen + $canonical = substr($canonical, 0, 4).substr($canonical, 5); + } elseif ($constraint->requireHyphen) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Issn::MISSING_HYPHEN_ERROR) + ->addViolation(); + + return; + } + + $length = strlen($canonical); + + if ($length < 8) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Issn::TOO_SHORT_ERROR) + ->addViolation(); + + return; + } + + if ($length > 8) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Issn::TOO_LONG_ERROR) + ->addViolation(); + + return; + } + + // 1234567X + // ^^^^^^^ digits only + if (!ctype_digit(substr($canonical, 0, 7))) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Issn::INVALID_CHARACTERS_ERROR) + ->addViolation(); + + return; + } + + // 1234567X + // ^ digit, x or X + if (!ctype_digit($canonical{7}) && 'x' !== $canonical{7} && 'X' !== $canonical{7}) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Issn::INVALID_CHARACTERS_ERROR) + ->addViolation(); + + return; + } + + // 1234567X + // ^ case-sensitive? + if ($constraint->caseSensitive && 'x' === $canonical{7}) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Issn::INVALID_CASE_ERROR) + ->addViolation(); + + return; + } + + // Calculate a checksum. "X" equals 10. + $checkSum = 'X' === $canonical{7} || 'x' === $canonical{7} + ? 10 + : $canonical{7}; + + for ($i = 0; $i < 7; ++$i) { + // Multiply the first digit by 8, the second by 7, etc. + $checkSum += (8 - $i) * $canonical{$i}; + } + + if (0 !== $checkSum % 11) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Issn::CHECKSUM_FAILED_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Language.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Language.php new file mode 100644 index 0000000..e7c29dc --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Language.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Language extends Constraint +{ + public $message = 'This value is not a valid language.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LanguageValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LanguageValidator.php new file mode 100644 index 0000000..be7ad28 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LanguageValidator.php @@ -0,0 +1,54 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Intl\Intl; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether a value is a valid language code. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class LanguageValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Language) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Language'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + $languages = Intl::getLanguageBundle()->getLanguageNames(); + + if (!isset($languages[$value])) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Length.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Length.php new file mode 100644 index 0000000..8d00480 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Length.php @@ -0,0 +1,58 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\MissingOptionsException; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Length extends Constraint +{ + const TOO_SHORT_ERROR = 1; + const TOO_LONG_ERROR = 2; + + protected static $errorNames = array( + self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR', + self::TOO_LONG_ERROR => 'TOO_LONG_ERROR', + ); + + public $maxMessage = 'This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.'; + public $minMessage = 'This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.'; + public $exactMessage = 'This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.'; + public $charsetMessage = 'This value does not match the expected {{ charset }} charset.'; + public $max; + public $min; + public $charset = 'UTF-8'; + + public function __construct($options = null) + { + if (null !== $options && !is_array($options)) { + $options = array( + 'min' => $options, + 'max' => $options, + ); + } + + parent::__construct($options); + + if (null === $this->min && null === $this->max) { + throw new MissingOptionsException(sprintf('Either option "min" or "max" must be given for constraint %s', __CLASS__), array('min', 'max')); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LengthValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LengthValidator.php new file mode 100644 index 0000000..f822047 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LengthValidator.php @@ -0,0 +1,98 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class LengthValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Length) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Length'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $stringValue = (string) $value; + $invalidCharset = false; + + if ('UTF8' === $charset = strtoupper($constraint->charset)) { + $charset = 'UTF-8'; + } + + if (function_exists('iconv_strlen')) { + $length = @iconv_strlen($stringValue, $constraint->charset); + $invalidCharset = false === $length; + } elseif (function_exists('mb_strlen')) { + if (mb_check_encoding($stringValue, $constraint->charset)) { + $length = mb_strlen($stringValue, $constraint->charset); + } else { + $invalidCharset = true; + } + } elseif ('UTF-8' !== $charset) { + $length = strlen($stringValue); + } elseif (!preg_match('//u', $stringValue)) { + $invalidCharset = true; + } elseif (function_exists('utf8_decode')) { + $length = strlen(utf8_decode($stringValue)); + } else { + preg_replace('/./u', '', $stringValue, -1, $length); + } + + if ($invalidCharset) { + $this->buildViolation($constraint->charsetMessage) + ->setParameter('{{ value }}', $this->formatValue($stringValue)) + ->setParameter('{{ charset }}', $constraint->charset) + ->setInvalidValue($value) + ->addViolation(); + + return; + } + + if (null !== $constraint->max && $length > $constraint->max) { + $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage) + ->setParameter('{{ value }}', $this->formatValue($stringValue)) + ->setParameter('{{ limit }}', $constraint->max) + ->setInvalidValue($value) + ->setPlural((int) $constraint->max) + ->setCode(Length::TOO_LONG_ERROR) + ->addViolation(); + + return; + } + + if (null !== $constraint->min && $length < $constraint->min) { + $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->minMessage) + ->setParameter('{{ value }}', $this->formatValue($stringValue)) + ->setParameter('{{ limit }}', $constraint->min) + ->setInvalidValue($value) + ->setPlural((int) $constraint->min) + ->setCode(Length::TOO_SHORT_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThan.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThan.php new file mode 100644 index 0000000..b116320 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThan.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class LessThan extends AbstractComparison +{ + public $message = 'This value should be less than {{ compared_value }}.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqual.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqual.php new file mode 100644 index 0000000..7faca84 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqual.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class LessThanOrEqual extends AbstractComparison +{ + public $message = 'This value should be less than or equal to {{ compared_value }}.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqualValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqualValidator.php new file mode 100644 index 0000000..dcc93b2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqualValidator.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * Validates values are less than or equal to the previous (<=). + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class LessThanOrEqualValidator extends AbstractComparisonValidator +{ + /** + * {@inheritdoc} + */ + protected function compareValues($value1, $value2) + { + return $value1 <= $value2; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanValidator.php new file mode 100644 index 0000000..081316a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanValidator.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * Validates values are less than the previous (<). + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class LessThanValidator extends AbstractComparisonValidator +{ + /** + * {@inheritdoc} + */ + protected function compareValues($value1, $value2) + { + return $value1 < $value2; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Locale.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Locale.php new file mode 100644 index 0000000..12a5546 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Locale.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Locale extends Constraint +{ + public $message = 'This value is not a valid locale.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LocaleValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LocaleValidator.php new file mode 100644 index 0000000..748e5cf --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LocaleValidator.php @@ -0,0 +1,54 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Intl\Intl; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether a value is a valid locale code. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class LocaleValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Locale) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Locale'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + $locales = Intl::getLocaleBundle()->getLocaleNames(); + + if (!isset($locales[$value])) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Luhn.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Luhn.php new file mode 100644 index 0000000..24f5bc7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Luhn.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * Metadata for the LuhnValidator. + * + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Tim Nagel <t.nagel@infinite.net.au> + * @author Greg Knapp http://gregk.me/2011/php-implementation-of-bank-card-luhn-algorithm/ + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Luhn extends Constraint +{ + const INVALID_CHARACTERS_ERROR = 1; + const CHECKSUM_FAILED_ERROR = 2; + + protected static $errorNames = array( + self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR', + self::CHECKSUM_FAILED_ERROR => 'CHECKSUM_FAILED_ERROR', + ); + + public $message = 'Invalid card number.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LuhnValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LuhnValidator.php new file mode 100644 index 0000000..d58bfbf --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LuhnValidator.php @@ -0,0 +1,96 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates a PAN using the LUHN Algorithm. + * + * For a list of example card numbers that are used to test this + * class, please see the LuhnValidatorTest class. + * + * @see http://en.wikipedia.org/wiki/Luhn_algorithm + * + * @author Tim Nagel <t.nagel@infinite.net.au> + * @author Greg Knapp http://gregk.me/2011/php-implementation-of-bank-card-luhn-algorithm/ + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class LuhnValidator extends ConstraintValidator +{ + /** + * Validates a credit card number with the Luhn algorithm. + * + * @param mixed $value + * @param Constraint $constraint + * + * @throws UnexpectedTypeException when the given credit card number is no string + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Luhn) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Luhn'); + } + + if (null === $value || '' === $value) { + return; + } + + // Work with strings only, because long numbers are represented as floats + // internally and don't work with strlen() + if (!is_string($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + + if (!ctype_digit($value)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Luhn::INVALID_CHARACTERS_ERROR) + ->addViolation(); + + return; + } + + $checkSum = 0; + $length = strlen($value); + + // Starting with the last digit and walking left, add every second + // digit to the check sum + // e.g. 7 9 9 2 7 3 9 8 7 1 3 + // ^ ^ ^ ^ ^ ^ + // = 7 + 9 + 7 + 9 + 7 + 3 + for ($i = $length - 1; $i >= 0; $i -= 2) { + $checkSum += $value{$i}; + } + + // Starting with the second last digit and walking left, double every + // second digit and add it to the check sum + // For doubles greater than 9, sum the individual digits + // e.g. 7 9 9 2 7 3 9 8 7 1 3 + // ^ ^ ^ ^ ^ + // = 1+8 + 4 + 6 + 1+6 + 2 + for ($i = $length - 2; $i >= 0; $i -= 2) { + $checkSum += array_sum(str_split($value{$i} * 2)); + } + + if (0 === $checkSum || 0 !== $checkSum % 10) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Luhn::CHECKSUM_FAILED_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlank.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlank.php new file mode 100644 index 0000000..c578c6d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlank.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class NotBlank extends Constraint +{ + public $message = 'This value should not be blank.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlankValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlankValidator.php new file mode 100644 index 0000000..9deab15 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlankValidator.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class NotBlankValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof NotBlank) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\NotBlank'); + } + + if (false === $value || (empty($value) && '0' != $value)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualTo.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualTo.php new file mode 100644 index 0000000..abd8092 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualTo.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class NotEqualTo extends AbstractComparison +{ + public $message = 'This value should not be equal to {{ compared_value }}.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualToValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualToValidator.php new file mode 100644 index 0000000..5710a85 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualToValidator.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * Validates values are all unequal (!=). + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class NotEqualToValidator extends AbstractComparisonValidator +{ + /** + * {@inheritdoc} + */ + protected function compareValues($value1, $value2) + { + return $value1 != $value2; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalTo.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalTo.php new file mode 100644 index 0000000..fb4ef3f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalTo.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class NotIdenticalTo extends AbstractComparison +{ + public $message = 'This value should not be identical to {{ compared_value_type }} {{ compared_value }}.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalToValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalToValidator.php new file mode 100644 index 0000000..ed8dc1c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalToValidator.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * Validates values aren't identical (!==). + * + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class NotIdenticalToValidator extends AbstractComparisonValidator +{ + /** + * {@inheritdoc} + */ + protected function compareValues($value1, $value2) + { + return $value1 !== $value2; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNull.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNull.php new file mode 100644 index 0000000..60416c7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNull.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class NotNull extends Constraint +{ + public $message = 'This value should not be null.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNullValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNullValidator.php new file mode 100644 index 0000000..a7a905a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNullValidator.php @@ -0,0 +1,38 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class NotNullValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof NotNull) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\NotNull'); + } + + if (null === $value) { + $this->context->addViolation($constraint->message); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Null.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Null.php new file mode 100644 index 0000000..3104550 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Null.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Null extends Constraint +{ + public $message = 'This value should be null.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NullValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NullValidator.php new file mode 100644 index 0000000..1e6c3a5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NullValidator.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class NullValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Null) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Null'); + } + + if (null !== $value) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Optional.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Optional.php new file mode 100644 index 0000000..dab8b43 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Optional.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Optional extends Existence +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Range.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Range.php new file mode 100644 index 0000000..a12afff --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Range.php @@ -0,0 +1,51 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\MissingOptionsException; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Range extends Constraint +{ + const INVALID_VALUE_ERROR = 1; + const BEYOND_RANGE_ERROR = 2; + const BELOW_RANGE_ERROR = 3; + + protected static $errorNames = array( + self::INVALID_VALUE_ERROR => 'INVALID_VALUE_ERROR', + self::BEYOND_RANGE_ERROR => 'BEYOND_RANGE_ERROR', + self::BELOW_RANGE_ERROR => 'BELOW_RANGE_ERROR', + ); + + public $minMessage = 'This value should be {{ limit }} or more.'; + public $maxMessage = 'This value should be {{ limit }} or less.'; + public $invalidMessage = 'This value should be a valid number.'; + public $min; + public $max; + + public function __construct($options = null) + { + parent::__construct($options); + + if (null === $this->min && null === $this->max) { + throw new MissingOptionsException(sprintf('Either option "min" or "max" must be given for constraint %s', __CLASS__), array('min', 'max')); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RangeValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RangeValidator.php new file mode 100644 index 0000000..ebae112 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RangeValidator.php @@ -0,0 +1,80 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class RangeValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Range) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Range'); + } + + if (null === $value) { + return; + } + + if (!is_numeric($value) && !$value instanceof \DateTime && !$value instanceof \DateTimeInterface) { + $this->buildViolation($constraint->invalidMessage) + ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE)) + ->setCode(Range::INVALID_VALUE_ERROR) + ->addViolation(); + + return; + } + + $min = $constraint->min; + $max = $constraint->max; + + // Convert strings to DateTimes if comparing another DateTime + // This allows to compare with any date/time value supported by + // the DateTime constructor: + // http://php.net/manual/en/datetime.formats.php + if ($value instanceof \DateTime || $value instanceof \DateTimeInterface) { + if (is_string($min)) { + $min = new \DateTime($min); + } + + if (is_string($max)) { + $max = new \DateTime($max); + } + } + + if (null !== $constraint->max && $value > $max) { + $this->buildViolation($constraint->maxMessage) + ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE)) + ->setParameter('{{ limit }}', $this->formatValue($max, self::PRETTY_DATE)) + ->setCode(Range::BEYOND_RANGE_ERROR) + ->addViolation(); + + return; + } + + if (null !== $constraint->min && $value < $min) { + $this->buildViolation($constraint->minMessage) + ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE)) + ->setParameter('{{ limit }}', $this->formatValue($min, self::PRETTY_DATE)) + ->setCode(Range::BELOW_RANGE_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Regex.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Regex.php new file mode 100644 index 0000000..3cdf514 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Regex.php @@ -0,0 +1,98 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Regex extends Constraint +{ + public $message = 'This value is not valid.'; + public $pattern; + public $htmlPattern; + public $match = true; + + /** + * {@inheritdoc} + */ + public function getDefaultOption() + { + return 'pattern'; + } + + /** + * {@inheritdoc} + */ + public function getRequiredOptions() + { + return array('pattern'); + } + + /** + * Converts the htmlPattern to a suitable format for HTML5 pattern. + * Example: /^[a-z]+$/ would be converted to [a-z]+ + * However, if options are specified, it cannot be converted. + * + * Pattern is also ignored if match=false since the pattern should + * then be reversed before application. + * + * @link http://dev.w3.org/html5/spec/single-page.html#the-pattern-attribute + * + * @return string|null + */ + public function getHtmlPattern() + { + // If htmlPattern is specified, use it + if (null !== $this->htmlPattern) { + return empty($this->htmlPattern) + ? null + : $this->htmlPattern; + } + + // Quit if delimiters not at very beginning/end (e.g. when options are passed) + if ($this->pattern[0] !== $this->pattern[strlen($this->pattern) - 1]) { + return; + } + + $delimiter = $this->pattern[0]; + + // Unescape the delimiter + $pattern = str_replace('\\'.$delimiter, $delimiter, substr($this->pattern, 1, -1)); + + // If the pattern is inverted, we can simply wrap it in + // ((?!pattern).)* + if (!$this->match) { + return '((?!'.$pattern.').)*'; + } + + // If the pattern contains an or statement, wrap the pattern in + // .*(pattern).* and quit. Otherwise we'd need to parse the pattern + if (false !== strpos($pattern, '|')) { + return '.*('.$pattern.').*'; + } + + // Trim leading ^, otherwise prepend .* + $pattern = '^' === $pattern[0] ? substr($pattern, 1) : '.*'.$pattern; + + // Trim trailing $, otherwise append .* + $pattern = '$' === $pattern[strlen($pattern) - 1] ? substr($pattern, 0, -1) : $pattern.'.*'; + + return $pattern; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RegexValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RegexValidator.php new file mode 100644 index 0000000..5916e85 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RegexValidator.php @@ -0,0 +1,53 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether a value match or not given regexp pattern. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * @author Joseph Bielawski <stloyd@gmail.com> + * + * @api + */ +class RegexValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Regex) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Regex'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + + if ($constraint->match xor preg_match($constraint->pattern, $value)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Required.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Required.php new file mode 100644 index 0000000..bd77a90 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Required.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +/** + * @Annotation + * @Target({"ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Required extends Existence +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Time.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Time.php new file mode 100644 index 0000000..7998c6f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Time.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Time extends Constraint +{ + const INVALID_FORMAT_ERROR = 1; + const INVALID_TIME_ERROR = 2; + + protected static $errorNames = array( + self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR', + self::INVALID_TIME_ERROR => 'INVALID_TIME_ERROR', + ); + + public $message = 'This value is not a valid time.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TimeValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TimeValidator.php new file mode 100644 index 0000000..bfecf95 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TimeValidator.php @@ -0,0 +1,78 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class TimeValidator extends ConstraintValidator +{ + const PATTERN = '/^(\d{2}):(\d{2}):(\d{2})$/'; + + /** + * Checks whether a time is valid. + * + * @param int $hour The hour + * @param int $minute The minute + * @param int $second The second + * + * @return bool Whether the time is valid + * + * @internal + */ + public static function checkTime($hour, $minute, $second) + { + return $hour >= 0 && $hour < 24 && $minute >= 0 && $minute < 60 && $second >= 0 && $second < 60; + } + + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Time) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Time'); + } + + if (null === $value || '' === $value || $value instanceof \DateTime) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + + if (!preg_match(static::PATTERN, $value, $matches)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Time::INVALID_FORMAT_ERROR) + ->addViolation(); + + return; + } + + if (!self::checkTime($matches[1], $matches[2], $matches[3])) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Time::INVALID_TIME_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Traverse.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Traverse.php new file mode 100644 index 0000000..4abae6c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Traverse.php @@ -0,0 +1,54 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; + +/** + * @Annotation + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Traverse extends Constraint +{ + public $traverse = true; + + public function __construct($options = null) + { + if (is_array($options) && array_key_exists('groups', $options)) { + throw new ConstraintDefinitionException(sprintf( + 'The option "groups" is not supported by the constraint %s', + __CLASS__ + )); + } + + parent::__construct($options); + } + + /** + * {@inheritdoc} + */ + public function getDefaultOption() + { + return 'traverse'; + } + + /** + * {@inheritdoc} + */ + public function getTargets() + { + return self::CLASS_CONSTRAINT; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/True.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/True.php new file mode 100644 index 0000000..788e36a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/True.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class True extends Constraint +{ + public $message = 'This value should be true.'; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TrueValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TrueValidator.php new file mode 100644 index 0000000..a01f5bb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TrueValidator.php @@ -0,0 +1,44 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class TrueValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof True) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\True'); + } + + if (null === $value) { + return; + } + + if (true !== $value && 1 !== $value && '1' !== $value) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Type.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Type.php new file mode 100644 index 0000000..fc4cc72 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Type.php @@ -0,0 +1,44 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Type extends Constraint +{ + public $message = 'This value should be of type {{ type }}.'; + public $type; + + /** + * {@inheritdoc} + */ + public function getDefaultOption() + { + return 'type'; + } + + /** + * {@inheritdoc} + */ + public function getRequiredOptions() + { + return array('type'); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TypeValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TypeValidator.php new file mode 100644 index 0000000..66217d0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TypeValidator.php @@ -0,0 +1,56 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class TypeValidator extends ConstraintValidator +{ + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Type) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Type'); + } + + if (null === $value) { + return; + } + + $type = strtolower($constraint->type); + $type = $type == 'boolean' ? 'bool' : $constraint->type; + $isFunction = 'is_'.$type; + $ctypeFunction = 'ctype_'.$type; + + if (function_exists($isFunction) && $isFunction($value)) { + return; + } elseif (function_exists($ctypeFunction) && $ctypeFunction($value)) { + return; + } elseif ($value instanceof $constraint->type) { + return; + } + + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setParameter('{{ type }}', $constraint->type) + ->addViolation(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Url.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Url.php new file mode 100644 index 0000000..e867ee1 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Url.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Url extends Constraint +{ + public $message = 'This value is not a valid URL.'; + public $protocols = array('http', 'https'); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UrlValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UrlValidator.php new file mode 100644 index 0000000..3d18477 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UrlValidator.php @@ -0,0 +1,67 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class UrlValidator extends ConstraintValidator +{ + const PATTERN = '~^ + (%s):// # protocol + (([\pL\pN-]+:)?([\pL\pN-]+)@)? # basic auth + ( + ([\pL\pN\pS-\.])+(\.?([\pL]|xn\-\-[\pL\pN-]+)+\.?) # a domain name + | # or + \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # a IP address + | # or + \[ + (?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::)))) + \] # a IPv6 address + ) + (:[0-9]+)? # a port (optional) + (/?|/\S+) # a /, nothing or a / with something + $~ixu'; + + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (!$constraint instanceof Url) { + throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Url'); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + $pattern = sprintf(static::PATTERN, implode('|', $constraint->protocols)); + + if (!preg_match($pattern, $value)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Uuid.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Uuid.php new file mode 100644 index 0000000..3c67a3a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Uuid.php @@ -0,0 +1,77 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * @Annotation + * + * @author Colin O'Dell <colinodell@gmail.com> + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Uuid extends Constraint +{ + const TOO_SHORT_ERROR = 1; + const TOO_LONG_ERROR = 2; + const INVALID_CHARACTERS_ERROR = 3; + const INVALID_HYPHEN_PLACEMENT_ERROR = 4; + const INVALID_VERSION_ERROR = 5; + const INVALID_VARIANT_ERROR = 6; + + protected static $errorNames = array( + self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR', + self::TOO_LONG_ERROR => 'TOO_LONG_ERROR', + self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR', + self::INVALID_HYPHEN_PLACEMENT_ERROR => 'INVALID_HYPHEN_PLACEMENT_ERROR', + self::INVALID_VERSION_ERROR => 'INVALID_VERSION_ERROR', + self::INVALID_VARIANT_ERROR => 'INVALID_VARIANT_ERROR', + ); + + // Possible versions defined by RFC 4122 + const V1_MAC = 1; + const V2_DCE = 2; + const V3_MD5 = 3; + const V4_RANDOM = 4; + const V5_SHA1 = 5; + + /** + * Message to display when validation fails + * + * @var string + */ + public $message = 'This is not a valid UUID.'; + + /** + * Strict mode only allows UUIDs that meet the formal definition and formatting per RFC 4122 + * + * Set this to `false` to allow legacy formats with different dash positioning or wrapping characters + * + * @var bool + */ + public $strict = true; + + /** + * Array of allowed versions (see version constants above) + * + * All UUID versions are allowed by default + * + * @var int[] + */ + public $versions = array( + self::V1_MAC, + self::V2_DCE, + self::V3_MD5, + self::V4_RANDOM, + self::V5_SHA1, + ); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UuidValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UuidValidator.php new file mode 100644 index 0000000..0ae04e2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UuidValidator.php @@ -0,0 +1,264 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Validates whether the value is a valid UUID per RFC 4122. + * + * @author Colin O'Dell <colinodell@gmail.com> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see http://tools.ietf.org/html/rfc4122 + * @see https://en.wikipedia.org/wiki/Universally_unique_identifier + */ +class UuidValidator extends ConstraintValidator +{ + // The strict pattern matches UUIDs like this: + // xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx + + // Roughly speaking: + // x = any hexadecimal character + // M = any allowed version {1..5} + // N = any allowed variant {8, 9, a, b} + + const STRICT_LENGTH = 36; + const STRICT_FIRST_HYPHEN_POSITION = 8; + const STRICT_LAST_HYPHEN_POSITION = 23; + const STRICT_VERSION_POSITION = 14; + const STRICT_VARIANT_POSITION = 19; + + // The loose pattern validates similar yet non-compliant UUIDs. + // Hyphens are completely optional. If present, they should only appear + // between every fourth character: + // xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx + // xxxxxxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx + // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + // The value can also be wrapped with characters like []{}: + // {xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx} + + // Neither the version nor the variant is validated by this pattern. + + const LOOSE_MAX_LENGTH = 39; + const LOOSE_FIRST_HYPHEN_POSITION = 4; + + /** + * @deprecated Deprecated since Symfony 2.6, to be removed in 3.0 + */ + const STRICT_PATTERN = '/^[a-f0-9]{8}-[a-f0-9]{4}-[%s][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/i'; + + /** + * @deprecated Deprecated since Symfony 2.6, to be removed in 3.0 + */ + const LOOSE_PATTERN = '/^[a-f0-9]{4}(?:-?[a-f0-9]{4}){7}$/i'; + + /** + * @deprecated Deprecated since Symfony 2.6, to be removed in 3.0 + */ + const STRICT_UUID_LENGTH = self::STRICT_LENGTH; + + /** + * {@inheritdoc} + */ + public function validate($value, Constraint $constraint) + { + if (null === $value || '' === $value) { + return; + } + + if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { + throw new UnexpectedTypeException($value, 'string'); + } + + $value = (string) $value; + + if ($constraint->strict) { + $this->validateStrict($value, $constraint); + + return; + } + + $this->validateLoose($value, $constraint); + } + + private function validateLoose($value, Uuid $constraint) + { + // Error priority: + // 1. ERROR_INVALID_CHARACTERS + // 2. ERROR_INVALID_HYPHEN_PLACEMENT + // 3. ERROR_TOO_SHORT/ERROR_TOO_LONG + + // Trim any wrapping characters like [] or {} used by some legacy systems + $trimmed = trim($value, '[]{}'); + + // Position of the next expected hyphen + $h = self::LOOSE_FIRST_HYPHEN_POSITION; + + // Expected length + $l = self::LOOSE_MAX_LENGTH; + + for ($i = 0; $i < $l; ++$i) { + // Check length + if (!isset($trimmed{$i})) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::TOO_SHORT_ERROR) + ->addViolation(); + + return; + } + + // Hyphens must occur every fifth position + // xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx + // ^ ^ ^ ^ ^ ^ ^ + if ('-' === $trimmed{$i}) { + if ($i !== $h) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR) + ->addViolation(); + + return; + } + + $h += 5; + + continue; + } + + // Missing hyphens are ignored + if ($i === $h) { + $h += 4; + --$l; + } + + // Check characters + if (!ctype_xdigit($trimmed{$i})) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::INVALID_CHARACTERS_ERROR) + ->addViolation(); + + return; + } + } + + // Check length again + if (isset($trimmed{$i})) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::TOO_LONG_ERROR) + ->addViolation(); + } + } + + private function validateStrict($value, Uuid $constraint) + { + // Error priority: + // 1. ERROR_INVALID_CHARACTERS + // 2. ERROR_INVALID_HYPHEN_PLACEMENT + // 3. ERROR_TOO_SHORT/ERROR_TOO_LONG + // 4. ERROR_INVALID_VERSION + // 5. ERROR_INVALID_VARIANT + + // Position of the next expected hyphen + $h = self::STRICT_FIRST_HYPHEN_POSITION; + + for ($i = 0; $i < self::STRICT_LENGTH; ++$i) { + // Check length + if (!isset($value{$i})) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::TOO_SHORT_ERROR) + ->addViolation(); + + return; + } + + // Check hyphen placement + // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + // ^ ^ ^ ^ + if ('-' === $value{$i}) { + if ($i !== $h) { + $this->buildViolation($constraint->message) + ->setParameter( + '{{ value }}', + $this->formatValue($value) + ) + ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR) + ->addViolation(); + + return; + } + + // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + // ^ + if ($h < self::STRICT_LAST_HYPHEN_POSITION) { + $h += 5; + } + + continue; + } + + // Check characters + if (!ctype_xdigit($value{$i})) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::INVALID_CHARACTERS_ERROR) + ->addViolation(); + + return; + } + + // Missing hyphen + if ($i === $h) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR) + ->addViolation(); + + return; + } + } + + // Check length again + if (isset($value{$i})) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::TOO_LONG_ERROR) + ->addViolation(); + } + + // Check version + if (!in_array($value{self::STRICT_VERSION_POSITION}, $constraint->versions)) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::INVALID_VERSION_ERROR) + ->addViolation(); + } + + // Check variant - first two bits must equal "10" + // 0b10xx + // & 0b1100 (12) + // = 0b1000 (8) + if ((hexdec($value{self::STRICT_VARIANT_POSITION}) & 12) !== 8) { + $this->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Uuid::INVALID_VARIANT_ERROR) + ->addViolation(); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Valid.php b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Valid.php new file mode 100644 index 0000000..b0f518b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Valid.php @@ -0,0 +1,45 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +class Valid extends Constraint +{ + public $traverse = true; + + /** + * @deprecated Deprecated as of version 2.5, to be removed in Symfony 3.0. + */ + public $deep = true; + + public function __construct($options = null) + { + if (is_array($options) && array_key_exists('groups', $options)) { + throw new ConstraintDefinitionException(sprintf( + 'The option "groups" is not supported by the constraint %s', + __CLASS__ + )); + } + + parent::__construct($options); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContext.php b/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContext.php new file mode 100644 index 0000000..f329615 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContext.php @@ -0,0 +1,404 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Context; + +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\ClassBasedInterface; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; +use Symfony\Component\Validator\Exception\BadMethodCallException; +use Symfony\Component\Validator\Mapping\MetadataInterface; +use Symfony\Component\Validator\Mapping\PropertyMetadataInterface; +use Symfony\Component\Validator\Util\PropertyPath; +use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Component\Validator\Violation\ConstraintViolationBuilder; + +/** + * The context used and created by {@link ExecutionContextFactory}. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see ExecutionContextInterface + * + * @internal You should not instantiate or use this class. Code against + * {@link ExecutionContextInterface} instead. + */ +class ExecutionContext implements ExecutionContextInterface +{ + /** + * @var ValidatorInterface + */ + private $validator; + + /** + * The root value of the validated object graph. + * + * @var mixed + */ + private $root; + + /** + * @var TranslatorInterface + */ + private $translator; + + /** + * @var string + */ + private $translationDomain; + + /** + * The violations generated in the current context. + * + * @var ConstraintViolationList + */ + private $violations; + + /** + * The currently validated value. + * + * @var mixed + */ + private $value; + + /** + * The currently validated object. + * + * @var object|null + */ + private $object; + + /** + * The property path leading to the current value. + * + * @var string + */ + private $propertyPath = ''; + + /** + * The current validation metadata. + * + * @var MetadataInterface|null + */ + private $metadata; + + /** + * The currently validated group. + * + * @var string|null + */ + private $group; + + /** + * The currently validated constraint. + * + * @var Constraint|null + */ + private $constraint; + + /** + * Stores which objects have been validated in which group. + * + * @var array + */ + private $validatedObjects = array(); + + /** + * Stores which class constraint has been validated for which object. + * + * @var array + */ + private $validatedConstraints = array(); + + /** + * Stores which objects have been initialized. + * + * @var array + */ + private $initializedObjects; + + /** + * Creates a new execution context. + * + * @param ValidatorInterface $validator The validator + * @param mixed $root The root value of the + * validated object graph + * @param TranslatorInterface $translator The translator + * @param string|null $translationDomain The translation domain to + * use for translating + * violation messages + * + * @internal Called by {@link ExecutionContextFactory}. Should not be used + * in user code. + */ + public function __construct(ValidatorInterface $validator, $root, TranslatorInterface $translator, $translationDomain = null) + { + $this->validator = $validator; + $this->root = $root; + $this->translator = $translator; + $this->translationDomain = $translationDomain; + $this->violations = new ConstraintViolationList(); + } + + /** + * {@inheritdoc} + */ + public function setNode($value, $object, MetadataInterface $metadata = null, $propertyPath) + { + $this->value = $value; + $this->object = $object; + $this->metadata = $metadata; + $this->propertyPath = (string) $propertyPath; + } + + /** + * {@inheritdoc} + */ + public function setGroup($group) + { + $this->group = $group; + } + + /** + * {@inheritdoc} + */ + public function setConstraint(Constraint $constraint) + { + $this->constraint = $constraint; + } + + /** + * {@inheritdoc} + */ + public function addViolation($message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null) + { + // The parameters $invalidValue and following are ignored by the new + // API, as they are not present in the new interface anymore. + // You should use buildViolation() instead. + if (func_num_args() > 2) { + throw new BadMethodCallException( + 'The parameters $invalidValue, $pluralization and $code are '. + 'not supported anymore as of Symfony 2.5. Please use '. + 'buildViolation() instead or enable the legacy mode.' + ); + } + + $this->violations->add(new ConstraintViolation( + $this->translator->trans($message, $parameters, $this->translationDomain), + $message, + $parameters, + $this->root, + $this->propertyPath, + $this->value, + null, + null, + $this->constraint + )); + } + + /** + * {@inheritdoc} + */ + public function buildViolation($message, array $parameters = array()) + { + return new ConstraintViolationBuilder( + $this->violations, + $this->constraint, + $message, + $parameters, + $this->root, + $this->propertyPath, + $this->value, + $this->translator, + $this->translationDomain + ); + } + + /** + * {@inheritdoc} + */ + public function getViolations() + { + return $this->violations; + } + + /** + * {@inheritdoc} + */ + public function getValidator() + { + return $this->validator; + } + + /** + * {@inheritdoc} + */ + public function getRoot() + { + return $this->root; + } + + /** + * {@inheritdoc} + */ + public function getValue() + { + return $this->value; + } + + /** + * {@inheritdoc} + */ + public function getObject() + { + return $this->object; + } + + /** + * {@inheritdoc} + */ + public function getMetadata() + { + return $this->metadata; + } + + /** + * {@inheritdoc} + */ + public function getGroup() + { + return $this->group; + } + + /** + * {@inheritdoc} + */ + public function getClassName() + { + return $this->metadata instanceof ClassBasedInterface ? $this->metadata->getClassName() : null; + } + + /** + * {@inheritdoc} + */ + public function getPropertyName() + { + return $this->metadata instanceof PropertyMetadataInterface ? $this->metadata->getPropertyName() : null; + } + + /** + * {@inheritdoc} + */ + public function getPropertyPath($subPath = '') + { + return PropertyPath::append($this->propertyPath, $subPath); + } + + /** + * {@inheritdoc} + */ + public function addViolationAt($subPath, $message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null) + { + throw new BadMethodCallException( + 'addViolationAt() is not supported anymore as of Symfony 2.5. '. + 'Please use buildViolation() instead or enable the legacy mode.' + ); + } + + /** + * {@inheritdoc} + */ + public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false) + { + throw new BadMethodCallException( + 'validate() is not supported anymore as of Symfony 2.5. '. + 'Please use getValidator() instead or enable the legacy mode.' + ); + } + + /** + * {@inheritdoc} + */ + public function validateValue($value, $constraints, $subPath = '', $groups = null) + { + throw new BadMethodCallException( + 'validateValue() is not supported anymore as of Symfony 2.5. '. + 'Please use getValidator() instead or enable the legacy mode.' + ); + } + + /** + * {@inheritdoc} + */ + public function getMetadataFactory() + { + throw new BadMethodCallException( + 'getMetadataFactory() is not supported anymore as of Symfony 2.5. '. + 'Please use getValidator() in combination with getMetadataFor() '. + 'or hasMetadataFor() instead or enable the legacy mode.' + ); + } + + /** + * {@inheritdoc} + */ + public function markGroupAsValidated($cacheKey, $groupHash) + { + if (!isset($this->validatedObjects[$cacheKey])) { + $this->validatedObjects[$cacheKey] = array(); + } + + $this->validatedObjects[$cacheKey][$groupHash] = true; + } + + /** + * {@inheritdoc} + */ + public function isGroupValidated($cacheKey, $groupHash) + { + return isset($this->validatedObjects[$cacheKey][$groupHash]); + } + + /** + * {@inheritdoc} + */ + public function markConstraintAsValidated($cacheKey, $constraintHash) + { + $this->validatedConstraints[$cacheKey.':'.$constraintHash] = true; + } + + /** + * {@inheritdoc} + */ + public function isConstraintValidated($cacheKey, $constraintHash) + { + return isset($this->validatedConstraints[$cacheKey.':'.$constraintHash]); + } + + /** + * {@inheritdoc} + */ + public function markObjectAsInitialized($cacheKey) + { + $this->initializedObjects[$cacheKey] = true; + } + + /** + * {@inheritdoc} + */ + public function isObjectInitialized($cacheKey) + { + return isset($this->initializedObjects[$cacheKey]); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactory.php b/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactory.php new file mode 100644 index 0000000..d94a806 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactory.php @@ -0,0 +1,64 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Context; + +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\Validator\ValidatorInterface; + +/** + * Creates new {@link ExecutionContext} instances. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @internal You should not instantiate or use this class. Code against + * {@link ExecutionContextFactoryInterface} instead. + */ +class ExecutionContextFactory implements ExecutionContextFactoryInterface +{ + /** + * @var TranslatorInterface + */ + private $translator; + + /** + * @var string|null + */ + private $translationDomain; + + /** + * Creates a new context factory. + * + * @param TranslatorInterface $translator The translator + * @param string|null $translationDomain The translation domain to + * use for translating + * violation messages + */ + public function __construct(TranslatorInterface $translator, $translationDomain = null) + { + $this->translator = $translator; + $this->translationDomain = $translationDomain; + } + + /** + * {@inheritdoc} + */ + public function createContext(ValidatorInterface $validator, $root) + { + return new ExecutionContext( + $validator, + $root, + $this->translator, + $this->translationDomain + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactoryInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactoryInterface.php new file mode 100644 index 0000000..f0ee001 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactoryInterface.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Context; + +use Symfony\Component\Validator\Validator\ValidatorInterface; + +/** + * Creates instances of {@link ExecutionContextInterface}. + * + * You can use a custom factory if you want to customize the execution context + * that is passed through the validation run. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface ExecutionContextFactoryInterface +{ + /** + * Creates a new execution context. + * + * @param ValidatorInterface $validator The validator + * @param mixed $root The root value of the validated + * object graph + * + * @return ExecutionContextInterface The new execution context + */ + public function createContext(ValidatorInterface $validator, $root); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextInterface.php new file mode 100644 index 0000000..4865204 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextInterface.php @@ -0,0 +1,226 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Context; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ExecutionContextInterface as LegacyExecutionContextInterface; +use Symfony\Component\Validator\Mapping\MetadataInterface; +use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Component\Validator\Violation\ConstraintViolationBuilderInterface; + +/** + * The context of a validation run. + * + * The context collects all violations generated during the validation. By + * default, validators execute all validations in a new context: + * + * $violations = $validator->validate($object); + * + * When you make another call to the validator, while the validation is in + * progress, the violations will be isolated from each other: + * + * public function validate($value, Constraint $constraint) + * { + * $validator = $this->context->getValidator(); + * + * // The violations are not added to $this->context + * $violations = $validator->validate($value); + * } + * + * However, if you want to add the violations to the current context, use the + * {@link ValidatorInterface::inContext()} method: + * + * public function validate($value, Constraint $constraint) + * { + * $validator = $this->context->getValidator(); + * + * // The violations are added to $this->context + * $validator + * ->inContext($this->context) + * ->validate($value) + * ; + * } + * + * Additionally, the context provides information about the current state of + * the validator, such as the currently validated class, the name of the + * currently validated property and more. These values change over time, so you + * cannot store a context and expect that the methods still return the same + * results later on. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface ExecutionContextInterface extends LegacyExecutionContextInterface +{ + /** + * Returns a builder for adding a violation with extended information. + * + * Call {@link ConstraintViolationBuilderInterface::addViolation()} to + * add the violation when you're done with the configuration: + * + * $context->buildViolation('Please enter a number between %min% and %max%.') + * ->setParameter('%min%', 3) + * ->setParameter('%max%', 10) + * ->setTranslationDomain('number_validation') + * ->addViolation(); + * + * @param string $message The error message + * @param array $parameters The parameters substituted in the error message + * + * @return ConstraintViolationBuilderInterface The violation builder + */ + public function buildViolation($message, array $parameters = array()); + + /** + * Returns the validator. + * + * Useful if you want to validate additional constraints: + * + * public function validate($value, Constraint $constraint) + * { + * $validator = $this->context->getValidator(); + * + * $violations = $validator->validateValue($value, new Length(array('min' => 3))); + * + * if (count($violations) > 0) { + * // ... + * } + * } + * + * @return ValidatorInterface + */ + public function getValidator(); + + /** + * Returns the currently validated object. + * + * If the validator is currently validating a class constraint, the + * object of that class is returned. If it is a validating a property or + * getter constraint, the object that the property/getter belongs to is + * returned. + * + * In other cases, null is returned. + * + * @return object|null The currently validated object or null. + */ + public function getObject(); + + /** + * Sets the currently validated value. + * + * @param mixed $value The validated value + * @param object|null $object The currently validated object + * @param MetadataInterface|null $metadata The validation metadata + * @param string $propertyPath The property path to the current value + * + * @internal Used by the validator engine. Should not be called by user + * code. + */ + public function setNode($value, $object, MetadataInterface $metadata = null, $propertyPath); + + /** + * Sets the currently validated group. + * + * @param string|null $group The validated group + * + * @internal Used by the validator engine. Should not be called by user + * code. + */ + public function setGroup($group); + + /** + * Sets the currently validated constraint. + * + * @param Constraint $constraint The validated constraint + * + * @internal Used by the validator engine. Should not be called by user + * code. + */ + public function setConstraint(Constraint $constraint); + + /** + * Marks an object as validated in a specific validation group. + * + * @param string $cacheKey The hash of the object + * @param string $groupHash The group's name or hash, if it is group + * sequence + * + * @internal Used by the validator engine. Should not be called by user + * code. + */ + public function markGroupAsValidated($cacheKey, $groupHash); + + /** + * Returns whether an object was validated in a specific validation group. + * + * @param string $cacheKey The hash of the object + * @param string $groupHash The group's name or hash, if it is group + * sequence + * + * @return bool Whether the object was already validated for that + * group + * + * @internal Used by the validator engine. Should not be called by user + * code. + */ + public function isGroupValidated($cacheKey, $groupHash); + + /** + * Marks a constraint as validated for an object. + * + * @param string $cacheKey The hash of the object + * @param string $constraintHash The hash of the constraint + * + * @internal Used by the validator engine. Should not be called by user + * code. + */ + public function markConstraintAsValidated($cacheKey, $constraintHash); + + /** + * Returns whether a constraint was validated for an object. + * + * @param string $cacheKey The hash of the object + * @param string $constraintHash The hash of the constraint + * + * @return bool Whether the constraint was already validated + * + * @internal Used by the validator engine. Should not be called by user + * code. + */ + public function isConstraintValidated($cacheKey, $constraintHash); + + /** + * Marks that an object was initialized. + * + * @param string $cacheKey The hash of the object + * + * @internal Used by the validator engine. Should not be called by user + * code. + * + * @see ObjectInitializerInterface + */ + public function markObjectAsInitialized($cacheKey); + + /** + * Returns whether an object was initialized. + * + * @param string $cacheKey The hash of the object + * + * @return bool Whether the object was already initialized + * + * @internal Used by the validator engine. Should not be called by user + * code. + * + * @see ObjectInitializerInterface + */ + public function isObjectInitialized($cacheKey); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContext.php b/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContext.php new file mode 100644 index 0000000..de34b1f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContext.php @@ -0,0 +1,156 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Context; + +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\Validator\ValidatorInterface; + +/** + * An execution context that is compatible with the legacy API (< 2.5). + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * To be removed in Symfony 3.0. + */ +class LegacyExecutionContext extends ExecutionContext +{ + /** + * @var MetadataFactoryInterface + */ + private $metadataFactory; + + /** + * Creates a new context. + * + * @see ExecutionContext::__construct() + * + * @internal Called by {@link LegacyExecutionContextFactory}. Should not be used + * in user code. + */ + public function __construct(ValidatorInterface $validator, $root, MetadataFactoryInterface $metadataFactory, TranslatorInterface $translator, $translationDomain = null) + { + parent::__construct( + $validator, + $root, + $translator, + $translationDomain + ); + + $this->metadataFactory = $metadataFactory; + } + + /** + * {@inheritdoc} + */ + public function addViolation($message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null) + { + if (func_num_args() > 2) { + $this + ->buildViolation($message, $parameters) + ->setInvalidValue($invalidValue) + ->setPlural($plural) + ->setCode($code) + ->addViolation() + ; + + return; + } + + parent::addViolation($message, $parameters); + } + + /** + * {@inheritdoc} + */ + public function addViolationAt($subPath, $message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null) + { + if (func_num_args() > 2) { + $this + ->buildViolation($message, $parameters) + ->atPath($subPath) + ->setInvalidValue($invalidValue) + ->setPlural($plural) + ->setCode($code) + ->addViolation() + ; + + return; + } + + $this + ->buildViolation($message, $parameters) + ->atPath($subPath) + ->addViolation() + ; + } + + /** + * {@inheritdoc} + */ + public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false) + { + if (is_array($value)) { + // The $traverse flag is ignored for arrays + $constraint = new Valid(array('traverse' => true, 'deep' => $deep)); + + return $this + ->getValidator() + ->inContext($this) + ->atPath($subPath) + ->validate($value, $constraint, $groups) + ; + } + + if ($traverse && $value instanceof \Traversable) { + $constraint = new Valid(array('traverse' => true, 'deep' => $deep)); + + return $this + ->getValidator() + ->inContext($this) + ->atPath($subPath) + ->validate($value, $constraint, $groups) + ; + } + + return $this + ->getValidator() + ->inContext($this) + ->atPath($subPath) + ->validate($value, null, $groups) + ; + } + + /** + * {@inheritdoc} + */ + public function validateValue($value, $constraints, $subPath = '', $groups = null) + { + return $this + ->getValidator() + ->inContext($this) + ->atPath($subPath) + ->validate($value, $constraints, $groups) + ; + } + + /** + * {@inheritdoc} + */ + public function getMetadataFactory() + { + return $this->metadataFactory; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContextFactory.php b/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContextFactory.php new file mode 100644 index 0000000..cf5cd07 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContextFactory.php @@ -0,0 +1,73 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Context; + +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\Validator\ValidatorInterface; + +/** + * Creates new {@link LegacyExecutionContext} instances. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * To be removed in Symfony 3.0. + */ +class LegacyExecutionContextFactory implements ExecutionContextFactoryInterface +{ + /** + * @var MetadataFactoryInterface + */ + private $metadataFactory; + + /** + * @var TranslatorInterface + */ + private $translator; + + /** + * @var string|null + */ + private $translationDomain; + + /** + * Creates a new context factory. + * + * @param MetadataFactoryInterface $metadataFactory The metadata factory + * @param TranslatorInterface $translator The translator + * @param string|null $translationDomain The translation domain + * to use for translating + * violation messages + */ + public function __construct(MetadataFactoryInterface $metadataFactory, TranslatorInterface $translator, $translationDomain = null) + { + $this->metadataFactory = $metadataFactory; + $this->translator = $translator; + $this->translationDomain = $translationDomain; + } + + /** + * {@inheritdoc} + */ + public function createContext(ValidatorInterface $validator, $root) + { + return new LegacyExecutionContext( + $validator, + $root, + $this->metadataFactory, + $this->translator, + $this->translationDomain + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/DefaultTranslator.php b/vendor/symfony/validator/Symfony/Component/Validator/DefaultTranslator.php new file mode 100644 index 0000000..06967de --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/DefaultTranslator.php @@ -0,0 +1,167 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\Exception\BadMethodCallException; +use Symfony\Component\Validator\Exception\InvalidArgumentException; + +/** + * Simple translator implementation that simply replaces the parameters in + * the message IDs. + * + * Example usage: + * + * $translator = new DefaultTranslator(); + * + * echo $translator->trans( + * 'This is a {{ var }}.', + * array('{{ var }}' => 'donkey') + * ); + * + * // -> This is a donkey. + * + * echo $translator->transChoice( + * 'This is {{ count }} donkey.|These are {{ count }} donkeys.', + * 3, + * array('{{ count }}' => 'three') + * ); + * + * // -> These are three donkeys. + * + * This translator does not support message catalogs, translation domains or + * locales. Instead, it implements a subset of the capabilities of + * {@link \Symfony\Component\Translation\Translator} and can be used in places + * where translation is not required by default but should be optional. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class DefaultTranslator implements TranslatorInterface +{ + /** + * Interpolates the given message. + * + * Parameters are replaced in the message in the same manner that + * {@link strtr()} uses. + * + * Example usage: + * + * $translator = new DefaultTranslator(); + * + * echo $translator->trans( + * 'This is a {{ var }}.', + * array('{{ var }}' => 'donkey') + * ); + * + * // -> This is a donkey. + * + * @param string $id The message id + * @param array $parameters An array of parameters for the message + * @param string $domain Ignored + * @param string $locale Ignored + * + * @return string The interpolated string + */ + public function trans($id, array $parameters = array(), $domain = null, $locale = null) + { + return strtr($id, $parameters); + } + + /** + * Interpolates the given choice message by choosing a variant according to a number. + * + * The variants are passed in the message ID using the format + * "<singular>|<plural>". "<singular>" is chosen if the passed $number is + * exactly 1. "<plural>" is chosen otherwise. + * + * This format is consistent with the format supported by + * {@link \Symfony\Component\Translation\Translator}, but it does not + * have the same expressiveness. While Translator supports intervals in + * message translations, which are needed for languages other than English, + * this translator does not. You should use Translator or a custom + * implementation of {@link TranslatorInterface} if you need this or similar + * functionality. + * + * Example usage: + * + * echo $translator->transChoice( + * 'This is {{ count }} donkey.|These are {{ count }} donkeys.', + * 0, + * array('{{ count }}' => 0) + * ); + * + * // -> These are 0 donkeys. + * + * echo $translator->transChoice( + * 'This is {{ count }} donkey.|These are {{ count }} donkeys.', + * 1, + * array('{{ count }}' => 1) + * ); + * + * // -> This is 1 donkey. + * + * echo $translator->transChoice( + * 'This is {{ count }} donkey.|These are {{ count }} donkeys.', + * 3, + * array('{{ count }}' => 3) + * ); + * + * // -> These are 3 donkeys. + * + * @param string $id The message id + * @param int $number The number to use to find the index of the message + * @param array $parameters An array of parameters for the message + * @param string $domain Ignored + * @param string $locale Ignored + * + * @return string The translated string + * + * @throws InvalidArgumentException If the message id does not have the format + * "singular|plural". + */ + public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null) + { + $ids = explode('|', $id); + + if (1 == $number) { + return strtr($ids[0], $parameters); + } + + if (!isset($ids[1])) { + throw new InvalidArgumentException(sprintf('The message "%s" cannot be pluralized, because it is missing a plural (e.g. "There is one apple|There are %%count%% apples").', $id)); + } + + return strtr($ids[1], $parameters); + } + + /** + * Not supported. + * + * @param string $locale The locale + * + * @throws BadMethodCallException + */ + public function setLocale($locale) + { + throw new BadMethodCallException('Unsupported method.'); + } + + /** + * Returns the locale of the translator. + * + * @return string Always returns 'en' + */ + public function getLocale() + { + return 'en'; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/BadMethodCallException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/BadMethodCallException.php new file mode 100644 index 0000000..939161b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/BadMethodCallException.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +/** + * Base BadMethodCallException for the Validator component. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/ConstraintDefinitionException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/ConstraintDefinitionException.php new file mode 100644 index 0000000..b24fdd6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/ConstraintDefinitionException.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +class ConstraintDefinitionException extends ValidatorException +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/ExceptionInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/ExceptionInterface.php new file mode 100644 index 0000000..77d09b9 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +/** + * Base ExceptionInterface for the Validator component. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface ExceptionInterface +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/GroupDefinitionException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/GroupDefinitionException.php new file mode 100644 index 0000000..ab7e91d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/GroupDefinitionException.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +class GroupDefinitionException extends ValidatorException +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidArgumentException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidArgumentException.php new file mode 100644 index 0000000..22da39b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidArgumentException.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +/** + * Base InvalidArgumentException for the Validator component. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidOptionsException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidOptionsException.php new file mode 100644 index 0000000..ce87c42 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidOptionsException.php @@ -0,0 +1,29 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +class InvalidOptionsException extends ValidatorException +{ + private $options; + + public function __construct($message, array $options) + { + parent::__construct($message); + + $this->options = $options; + } + + public function getOptions() + { + return $this->options; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/MappingException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/MappingException.php new file mode 100644 index 0000000..4c8c057 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/MappingException.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +class MappingException extends ValidatorException +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/MissingOptionsException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/MissingOptionsException.php new file mode 100644 index 0000000..07c5d9e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/MissingOptionsException.php @@ -0,0 +1,29 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +class MissingOptionsException extends ValidatorException +{ + private $options; + + public function __construct($message, array $options) + { + parent::__construct($message); + + $this->options = $options; + } + + public function getOptions() + { + return $this->options; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/NoSuchMetadataException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/NoSuchMetadataException.php new file mode 100644 index 0000000..4cac74c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/NoSuchMetadataException.php @@ -0,0 +1,19 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class NoSuchMetadataException extends ValidatorException +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/OutOfBoundsException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/OutOfBoundsException.php new file mode 100644 index 0000000..30906e8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/OutOfBoundsException.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +/** + * Base OutOfBoundsException for the Validator component. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class OutOfBoundsException extends \OutOfBoundsException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/RuntimeException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/RuntimeException.php new file mode 100644 index 0000000..df4a50c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/RuntimeException.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +/** + * Base RuntimeException for the Validator component. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnexpectedTypeException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnexpectedTypeException.php new file mode 100644 index 0000000..49d8cc2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnexpectedTypeException.php @@ -0,0 +1,20 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +class UnexpectedTypeException extends ValidatorException +{ + public function __construct($value, $expectedType) + { + parent::__construct(sprintf('Expected argument of type "%s", "%s" given', $expectedType, is_object($value) ? get_class($value) : gettype($value))); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnsupportedMetadataException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnsupportedMetadataException.php new file mode 100644 index 0000000..c6ece50 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnsupportedMetadataException.php @@ -0,0 +1,20 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +/** + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class UnsupportedMetadataException extends InvalidArgumentException +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Exception/ValidatorException.php b/vendor/symfony/validator/Symfony/Component/Validator/Exception/ValidatorException.php new file mode 100644 index 0000000..28bd470 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Exception/ValidatorException.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Exception; + +class ValidatorException extends RuntimeException +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContext.php b/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContext.php new file mode 100644 index 0000000..31911b8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContext.php @@ -0,0 +1,293 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +use Symfony\Component\Translation\TranslatorInterface; + +/** + * Default implementation of {@link ExecutionContextInterface}. + * + * This class is immutable by design. + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Context\ExecutionContext} instead. + */ +class ExecutionContext implements ExecutionContextInterface +{ + /** + * @var GlobalExecutionContextInterface + */ + private $globalContext; + + /** + * @var TranslatorInterface + */ + private $translator; + + /** + * @var null|string + */ + private $translationDomain; + + /** + * @var MetadataInterface + */ + private $metadata; + + /** + * @var mixed + */ + private $value; + + /** + * @var string + */ + private $group; + + /** + * @var string + */ + private $propertyPath; + + /** + * Creates a new execution context. + * + * @param GlobalExecutionContextInterface $globalContext The global context storing node-independent state. + * @param TranslatorInterface $translator The translator for translating violation messages. + * @param null|string $translationDomain The domain of the validation messages. + * @param MetadataInterface $metadata The metadata of the validated node. + * @param mixed $value The value of the validated node. + * @param string $group The current validation group. + * @param string $propertyPath The property path to the current node. + */ + public function __construct(GlobalExecutionContextInterface $globalContext, TranslatorInterface $translator, $translationDomain = null, MetadataInterface $metadata = null, $value = null, $group = null, $propertyPath = '') + { + if (null === $group) { + $group = Constraint::DEFAULT_GROUP; + } + + $this->globalContext = $globalContext; + $this->translator = $translator; + $this->translationDomain = $translationDomain; + $this->metadata = $metadata; + $this->value = $value; + $this->propertyPath = $propertyPath; + $this->group = $group; + } + + /** + * {@inheritdoc} + */ + public function addViolation($message, array $params = array(), $invalidValue = null, $plural = null, $code = null) + { + if (null === $plural) { + $translatedMessage = $this->translator->trans($message, $params, $this->translationDomain); + } else { + try { + $translatedMessage = $this->translator->transChoice($message, $plural, $params, $this->translationDomain); + } catch (\InvalidArgumentException $e) { + $translatedMessage = $this->translator->trans($message, $params, $this->translationDomain); + } + } + + $this->globalContext->getViolations()->add(new ConstraintViolation( + $translatedMessage, + $message, + $params, + $this->globalContext->getRoot(), + $this->propertyPath, + // check using func_num_args() to allow passing null values + func_num_args() >= 3 ? $invalidValue : $this->value, + $plural, + $code + )); + } + + /** + * {@inheritdoc} + */ + public function addViolationAt($subPath, $message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null) + { + $this->globalContext->getViolations()->add(new ConstraintViolation( + null === $plural + ? $this->translator->trans($message, $parameters, $this->translationDomain) + : $this->translator->transChoice($message, $plural, $parameters, $this->translationDomain), + $message, + $parameters, + $this->globalContext->getRoot(), + $this->getPropertyPath($subPath), + // check using func_num_args() to allow passing null values + func_num_args() >= 4 ? $invalidValue : $this->value, + $plural, + $code + )); + } + + /** + * {@inheritdoc} + */ + public function getViolations() + { + return $this->globalContext->getViolations(); + } + + /** + * {@inheritdoc} + */ + public function getRoot() + { + return $this->globalContext->getRoot(); + } + + /** + * {@inheritdoc} + */ + public function getPropertyPath($subPath = '') + { + if ('' != $subPath && '' !== $this->propertyPath && '[' !== $subPath[0]) { + return $this->propertyPath.'.'.$subPath; + } + + return $this->propertyPath.$subPath; + } + + /** + * {@inheritdoc} + */ + public function getClassName() + { + if ($this->metadata instanceof ClassBasedInterface) { + return $this->metadata->getClassName(); + } + } + + /** + * {@inheritdoc} + */ + public function getPropertyName() + { + if ($this->metadata instanceof PropertyMetadataInterface) { + return $this->metadata->getPropertyName(); + } + } + + /** + * {@inheritdoc} + */ + public function getValue() + { + return $this->value; + } + + /** + * {@inheritdoc} + */ + public function getGroup() + { + return $this->group; + } + + /** + * {@inheritdoc} + */ + public function getMetadata() + { + return $this->metadata; + } + + /** + * {@inheritdoc} + */ + public function getMetadataFor($value) + { + return $this->globalContext->getMetadataFactory()->getMetadataFor($value); + } + + /** + * {@inheritdoc} + */ + public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false) + { + $propertyPath = $this->getPropertyPath($subPath); + + foreach ($this->resolveGroups($groups) as $group) { + $this->globalContext->getVisitor()->validate($value, $group, $propertyPath, $traverse, $deep); + } + } + + /** + * {@inheritdoc} + */ + public function validateValue($value, $constraints, $subPath = '', $groups = null) + { + $constraints = is_array($constraints) ? $constraints : array($constraints); + + if (null === $groups && '' === $subPath) { + $context = clone $this; + $context->value = $value; + $context->executeConstraintValidators($value, $constraints); + + return; + } + + $propertyPath = $this->getPropertyPath($subPath); + + foreach ($this->resolveGroups($groups) as $group) { + $context = clone $this; + $context->value = $value; + $context->group = $group; + $context->propertyPath = $propertyPath; + $context->executeConstraintValidators($value, $constraints); + } + } + + /** + * {@inheritdoc} + */ + public function getMetadataFactory() + { + return $this->globalContext->getMetadataFactory(); + } + + /** + * Executes the validators of the given constraints for the given value. + * + * @param mixed $value The value to validate. + * @param Constraint[] $constraints The constraints to match against. + */ + private function executeConstraintValidators($value, array $constraints) + { + foreach ($constraints as $constraint) { + $validator = $this->globalContext->getValidatorFactory()->getInstance($constraint); + $validator->initialize($this); + $validator->validate($value, $constraint); + } + } + + /** + * Returns an array of group names. + * + * @param null|string|string[] $groups The groups to resolve. If a single string is + * passed, it is converted to an array. If null + * is passed, an array containing the current + * group of the context is returned. + * + * @return array An array of validation groups. + */ + private function resolveGroups($groups) + { + return $groups ? (array) $groups : (array) $this->group; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContextInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContextInterface.php new file mode 100644 index 0000000..ebef4bd --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContextInterface.php @@ -0,0 +1,329 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Stores the validator's state during validation. + * + * For example, let's validate the following object graph: + * + * <pre> + * (Person)---($firstName: string) + * \ + * ($address: Address)---($street: string) + * </pre> + * + * We validate the <tt>Person</tt> instance, which becomes the "root" of the + * validation run (see {@link getRoot}). The state of the context after the + * first step will be like this: + * + * <pre> + * (Person)---($firstName: string) + * ^ \ + * ($address: Address)---($street: string) + * </pre> + * + * The validator is stopped at the <tt>Person</tt> node, both the root and the + * value (see {@link getValue}) of the context point to the <tt>Person</tt> + * instance. The property path is empty at this point (see {@link getPropertyPath}). + * The metadata of the context is the metadata of the <tt>Person</tt> node + * (see {@link getMetadata}). + * + * After advancing to the property <tt>$firstName</tt> of the <tt>Person</tt> + * instance, the state of the context looks like this: + * + * <pre> + * (Person)---($firstName: string) + * \ ^ + * ($address: Address)---($street: string) + * </pre> + * + * The validator is stopped at the property <tt>$firstName</tt>. The root still + * points to the <tt>Person</tt> instance, because this is where the validation + * started. The property path is now "firstName" and the current value is the + * value of that property. + * + * After advancing to the <tt>$address</tt> property and then to the + * <tt>$street</tt> property of the <tt>Address</tt> instance, the context state + * looks like this: + * + * <pre> + * (Person)---($firstName: string) + * \ + * ($address: Address)---($street: string) + * ^ + * </pre> + * + * The validator is stopped at the property <tt>$street</tt>. The root still + * points to the <tt>Person</tt> instance, but the property path is now + * "address.street" and the validated value is the value of that property. + * + * Apart from the root, the property path and the currently validated value, + * the execution context also knows the metadata of the current node (see + * {@link getMetadata}) which for example returns a {@link Mapping\PropertyMetadata} + * or a {@link Mapping\ClassMetadata} object. he context also contains the + * validation group that is currently being validated (see {@link getGroup}) and + * the violations that happened up until now (see {@link getViolations}). + * + * Apart from reading the execution context, you can also use + * {@link addViolation} or {@link addViolationAt} to add new violations and + * {@link validate} or {@link validateValue} to validate values that the + * validator otherwise would not reach. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Context\ExecutionContextInterface} instead. + */ +interface ExecutionContextInterface +{ + /** + * Adds a violation at the current node of the validation graph. + * + * @param string $message The error message + * @param array $params The parameters substituted in the error message + * @param mixed $invalidValue The invalid, validated value + * @param int|null $plural The number to use to pluralize of the message + * @param int|null $code The violation code + * + * @api + * + * @deprecated The parameters $invalidValue, $pluralization and $code are + * deprecated since version 2.5 and will be removed in + * Symfony 3.0. + */ + public function addViolation($message, array $params = array(), $invalidValue = null, $plural = null, $code = null); + + /** + * Adds a violation at the validation graph node with the given property + * path relative to the current property path. + * + * @param string $subPath The relative property path for the violation + * @param string $message The error message + * @param array $parameters The parameters substituted in the error message + * @param mixed $invalidValue The invalid, validated value + * @param int|null $plural The number to use to pluralize of the message + * @param int|null $code The violation code + * + * @api + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Context\ExecutionContextInterface::buildViolation()} + * instead. + */ + public function addViolationAt($subPath, $message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null); + + /** + * Validates the given value within the scope of the current validation. + * + * The value may be any value recognized by the used metadata factory + * (see {@link MetadataFactoryInterface::getMetadata}), or an array or a + * traversable object of such values. + * + * Usually you validate a value that is not the current node of the + * execution context. For this case, you can pass the {@link $subPath} + * argument which is appended to the current property path when a violation + * is created. For example, take the following object graph: + * + * <pre> + * (Person)---($address: Address)---($phoneNumber: PhoneNumber) + * ^ + * </pre> + * + * When the execution context stops at the <tt>Person</tt> instance, the + * property path is "address". When you validate the <tt>PhoneNumber</tt> + * instance now, pass "phoneNumber" as sub path to correct the property path + * to "address.phoneNumber": + * + * <pre> + * $context->validate($address->phoneNumber, 'phoneNumber'); + * </pre> + * + * Any violations generated during the validation will be added to the + * violation list that you can access with {@link getViolations}. + * + * @param mixed $value The value to validate. + * @param string $subPath The path to append to the context's property path. + * @param null|string|string[] $groups The groups to validate in. If you don't pass any + * groups here, the current group of the context + * will be used. + * @param bool $traverse Whether to traverse the value if it is an array + * or an instance of <tt>\Traversable</tt>. + * @param bool $deep Whether to traverse the value recursively if + * it is a collection of collections. + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Context\ExecutionContextInterface::getValidator()} + * instead. + */ + public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false); + + /** + * Validates a value against a constraint. + * + * Use the parameter <tt>$subPath</tt> to adapt the property path for the + * validated value. For example, take the following object graph: + * + * <pre> + * (Person)---($address: Address)---($street: string) + * ^ + * </pre> + * + * When the validator validates the <tt>Address</tt> instance, the + * property path stored in the execution context is "address". When you + * manually validate the property <tt>$street</tt> now, pass the sub path + * "street" to adapt the full property path to "address.street": + * + * <pre> + * $context->validate($address->street, new NotNull(), 'street'); + * </pre> + * + * @param mixed $value The value to validate. + * @param Constraint|Constraint[] $constraints The constraint(s) to validate against. + * @param string $subPath The path to append to the context's property path. + * @param null|string|string[] $groups The groups to validate in. If you don't pass any + * groups here, the current group of the context + * will be used. + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Context\ExecutionContextInterface::getValidator()} + * instead. + */ + public function validateValue($value, $constraints, $subPath = '', $groups = null); + + /** + * Returns the violations generated by the validator so far. + * + * @return ConstraintViolationListInterface The constraint violation list. + * + * @api + */ + public function getViolations(); + + /** + * Returns the value at which validation was started in the object graph. + * + * The validator, when given an object, traverses the properties and + * related objects and their properties. The root of the validation is the + * object from which the traversal started. + * + * The current value is returned by {@link getValue}. + * + * @return mixed The root value of the validation. + */ + public function getRoot(); + + /** + * Returns the value that the validator is currently validating. + * + * If you want to retrieve the object that was originally passed to the + * validator, use {@link getRoot}. + * + * @return mixed The currently validated value. + */ + public function getValue(); + + /** + * Returns the metadata for the currently validated value. + * + * With the core implementation, this method returns a + * {@link Mapping\ClassMetadata} instance if the current value is an object, + * a {@link Mapping\PropertyMetadata} instance if the current value is + * the value of a property and a {@link Mapping\GetterMetadata} instance if + * the validated value is the result of a getter method. + * + * If the validated value is neither of these, for example if the validator + * has been called with a plain value and constraint, this method returns + * null. + * + * @return MetadataInterface|null The metadata of the currently validated + * value. + */ + public function getMetadata(); + + /** + * Returns the used metadata factory. + * + * @return MetadataFactoryInterface The metadata factory. + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Context\ExecutionContextInterface::getValidator()} + * instead and call + * {@link Validator\ValidatorInterface::getMetadataFor()} or + * {@link Validator\ValidatorInterface::hasMetadataFor()} there. + */ + public function getMetadataFactory(); + + /** + * Returns the validation group that is currently being validated. + * + * @return string The current validation group. + */ + public function getGroup(); + + /** + * Returns the class name of the current node. + * + * If the metadata of the current node does not implement + * {@link ClassBasedInterface} or if no metadata is available for the + * current node, this method returns null. + * + * @return string|null The class name or null, if no class name could be found. + */ + public function getClassName(); + + /** + * Returns the property name of the current node. + * + * If the metadata of the current node does not implement + * {@link PropertyMetadataInterface} or if no metadata is available for the + * current node, this method returns null. + * + * @return string|null The property name or null, if no property name could be found. + */ + public function getPropertyName(); + + /** + * Returns the property path to the value that the validator is currently + * validating. + * + * For example, take the following object graph: + * + * <pre> + * (Person)---($address: Address)---($street: string) + * </pre> + * + * When the <tt>Person</tt> instance is passed to the validator, the + * property path is initially empty. When the <tt>$address</tt> property + * of that person is validated, the property path is "address". When + * the <tt>$street</tt> property of the related <tt>Address</tt> instance + * is validated, the property path is "address.street". + * + * Properties of objects are prefixed with a dot in the property path. + * Indices of arrays or objects implementing the {@link \ArrayAccess} + * interface are enclosed in brackets. For example, if the property in + * the previous example is <tt>$addresses</tt> and contains an array + * of <tt>Address</tt> instance, the property path generated for the + * <tt>$street</tt> property of one of these addresses is for example + * "addresses[0].street". + * + * @param string $subPath Optional. The suffix appended to the current + * property path. + * + * @return string The current property path. The result may be an empty + * string if the validator is currently validating the + * root value of the validation graph. + */ + public function getPropertyPath($subPath = ''); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/GlobalExecutionContextInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/GlobalExecutionContextInterface.php new file mode 100644 index 0000000..06dbf3e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/GlobalExecutionContextInterface.php @@ -0,0 +1,71 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Stores the node-independent state of a validation run. + * + * When the validator validates a graph of objects, it uses two classes to + * store the state during the validation: + * + * <ul> + * <li>For each node in the validation graph (objects, properties, getters) the + * validator creates an instance of {@link ExecutionContextInterface} that + * stores the information about that node.</li> + * <li>One single <tt>GlobalExecutionContextInterface</tt> stores the state + * that is independent of the current node.</li> + * </ul> + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Context\ExecutionContextInterface} instead. + */ +interface GlobalExecutionContextInterface +{ + /** + * Returns the violations generated by the validator so far. + * + * @return ConstraintViolationListInterface A list of constraint violations. + */ + public function getViolations(); + + /** + * Returns the value at which validation was started in the object graph. + * + * @return mixed The root value. + * + * @see ExecutionContextInterface::getRoot() + */ + public function getRoot(); + + /** + * Returns the visitor instance used to validate the object graph nodes. + * + * @return ValidationVisitorInterface The validation visitor. + */ + public function getVisitor(); + + /** + * Returns the factory for constraint validators. + * + * @return ConstraintValidatorFactoryInterface The constraint validator factory. + */ + public function getValidatorFactory(); + + /** + * Returns the factory for validation metadata objects. + * + * @return MetadataFactoryInterface The metadata factory. + */ + public function getMetadataFactory(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/GroupSequenceProviderInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/GroupSequenceProviderInterface.php new file mode 100644 index 0000000..62e8a5e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/GroupSequenceProviderInterface.php @@ -0,0 +1,26 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Defines the interface for a group sequence provider. + */ +interface GroupSequenceProviderInterface +{ + /** + * Returns which validation groups should be used for a certain state + * of the object. + * + * @return array An array of validation groups + */ + public function getGroupSequence(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/LICENSE b/vendor/symfony/validator/Symfony/Component/Validator/LICENSE new file mode 100644 index 0000000..43028bc --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2015 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/BlackholeMetadataFactory.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/BlackholeMetadataFactory.php new file mode 100644 index 0000000..7913e15 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/BlackholeMetadataFactory.php @@ -0,0 +1,24 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +/** + * Alias of {@link Factory\BlackHoleMetadataFactory}. + * + * @author Fabien Potencier <fabien@symfony.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Factory\BlackHoleMetadataFactory} instead. + */ +class BlackholeMetadataFactory extends \Symfony\Component\Validator\Mapping\Factory\BlackHoleMetadataFactory +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/ApcCache.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/ApcCache.php new file mode 100644 index 0000000..64929b0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/ApcCache.php @@ -0,0 +1,55 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Cache; + +use Symfony\Component\Validator\Mapping\ClassMetadata; + +/** + * @deprecated Deprecated since version 2.5, to be removed in 3.0. + * Use DoctrineCache with Doctrine\Common\Cache\ApcCache instead. + */ +class ApcCache implements CacheInterface +{ + private $prefix; + + public function __construct($prefix) + { + if (!extension_loaded('apc')) { + throw new \RuntimeException('Unable to use ApcCache to cache validator mappings as APC is not enabled.'); + } + + $this->prefix = $prefix; + } + + public function has($class) + { + if (!function_exists('apc_exists')) { + $exists = false; + + apc_fetch($this->prefix.$class, $exists); + + return $exists; + } + + return apc_exists($this->prefix.$class); + } + + public function read($class) + { + return apc_fetch($this->prefix.$class); + } + + public function write(ClassMetadata $metadata) + { + apc_store($this->prefix.$metadata->getClassName(), $metadata); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php new file mode 100644 index 0000000..e8047c6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php @@ -0,0 +1,45 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Cache; + +use Symfony\Component\Validator\Mapping\ClassMetadata; + +/** + * Persists ClassMetadata instances in a cache. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface CacheInterface +{ + /** + * Returns whether metadata for the given class exists in the cache. + * + * @param string $class + */ + public function has($class); + + /** + * Returns the metadata for the given class from the cache. + * + * @param string $class Class Name + * + * @return ClassMetadata|false A ClassMetadata instance or false on miss + */ + public function read($class); + + /** + * Stores a class metadata in the cache. + * + * @param ClassMetadata $metadata A Class Metadata + */ + public function write(ClassMetadata $metadata); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php new file mode 100644 index 0000000..6dd5447 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php @@ -0,0 +1,69 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Cache; + +use Doctrine\Common\Cache\Cache; +use Symfony\Component\Validator\Mapping\ClassMetadata; + +/** + * Adapts a Doctrine cache to a CacheInterface. + * + * @author Florian Voutzinos <florian@voutzinos.com> + */ +final class DoctrineCache implements CacheInterface +{ + private $cache; + + /** + * Creates a new Doctrine cache. + * + * @param Cache $cache The cache to adapt + */ + public function __construct(Cache $cache) + { + $this->cache = $cache; + } + + /** + * Sets the cache to adapt. + * + * @param Cache $cache The cache to adapt + */ + public function setCache(Cache $cache) + { + $this->cache = $cache; + } + + /** + * {@inheritdoc} + */ + public function has($class) + { + return $this->cache->contains($class); + } + + /** + * {@inheritdoc} + */ + public function read($class) + { + return $this->cache->fetch($class); + } + + /** + * {@inheritdoc} + */ + public function write(ClassMetadata $metadata) + { + $this->cache->save($metadata->getClassName(), $metadata); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/CascadingStrategy.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/CascadingStrategy.php new file mode 100644 index 0000000..ff2853f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/CascadingStrategy.php @@ -0,0 +1,53 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +/** + * Specifies whether an object should be cascaded. + * + * Cascading is relevant for any node type but class nodes. If such a node + * contains an object of value, and if cascading is enabled, then the node + * traverser will try to find class metadata for that object and validate the + * object against that metadata. + * + * If no metadata is found for a cascaded object, and if that object implements + * {@link \Traversable}, the node traverser will iterate over the object and + * cascade each object or collection contained within, unless iteration is + * prohibited by the specified {@link TraversalStrategy}. + * + * Although the constants currently represent a boolean switch, they are + * implemented as bit mask in order to allow future extensions. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see TraversalStrategy + */ +class CascadingStrategy +{ + /** + * Specifies that a node should not be cascaded. + */ + const NONE = 1; + + /** + * Specifies that a node should be cascaded. + */ + const CASCADE = 2; + + /** + * Not instantiable. + */ + private function __construct() + { + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadata.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadata.php new file mode 100644 index 0000000..a234939 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadata.php @@ -0,0 +1,548 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Constraints\GroupSequence; +use Symfony\Component\Validator\Constraints\Traverse; +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; +use Symfony\Component\Validator\Exception\GroupDefinitionException; +use Symfony\Component\Validator\ValidationVisitorInterface; + +/** + * Default implementation of {@link ClassMetadataInterface}. + * + * This class supports serialization and cloning. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * @author Fabien Potencier <fabien@symfony.com> + */ +class ClassMetadata extends ElementMetadata implements ClassMetadataInterface +{ + /** + * @var string + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getClassName()} instead. + */ + public $name; + + /** + * @var string + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getDefaultGroup()} instead. + */ + public $defaultGroup; + + /** + * @var MemberMetadata[] + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getPropertyMetadata()} instead. + */ + public $members = array(); + + /** + * @var PropertyMetadata[] + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getPropertyMetadata()} instead. + */ + public $properties = array(); + + /** + * @var GetterMetadata[] + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getPropertyMetadata()} instead. + */ + public $getters = array(); + + /** + * @var array + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getGroupSequence()} instead. + */ + public $groupSequence = array(); + + /** + * @var bool + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link isGroupSequenceProvider()} instead. + */ + public $groupSequenceProvider = false; + + /** + * The strategy for traversing traversable objects. + * + * By default, only instances of {@link \Traversable} are traversed. + * + * @var int + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getTraversalStrategy()} instead. + */ + public $traversalStrategy = TraversalStrategy::IMPLICIT; + + /** + * @var \ReflectionClass + */ + private $reflClass; + + /** + * Constructs a metadata for the given class. + * + * @param string $class + */ + public function __construct($class) + { + $this->name = $class; + // class name without namespace + if (false !== $nsSep = strrpos($class, '\\')) { + $this->defaultGroup = substr($class, $nsSep + 1); + } else { + $this->defaultGroup = $class; + } + } + + /** + * {@inheritdoc} + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + */ + public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath, $propagatedGroup = null) + { + if (null === $propagatedGroup && Constraint::DEFAULT_GROUP === $group + && ($this->hasGroupSequence() || $this->isGroupSequenceProvider())) { + if ($this->hasGroupSequence()) { + $groups = $this->getGroupSequence(); + } else { + $groups = $value->getGroupSequence(); + } + + foreach ($groups as $group) { + $this->accept($visitor, $value, $group, $propertyPath, Constraint::DEFAULT_GROUP); + + if (count($visitor->getViolations()) > 0) { + break; + } + } + + return; + } + + $visitor->visit($this, $value, $group, $propertyPath); + + if (null !== $value) { + $pathPrefix = empty($propertyPath) ? '' : $propertyPath.'.'; + + foreach ($this->getConstrainedProperties() as $property) { + foreach ($this->getPropertyMetadata($property) as $member) { + $member->accept($visitor, $member->getPropertyValue($value), $group, $pathPrefix.$property, $propagatedGroup); + } + } + } + } + + /** + * {@inheritdoc} + */ + public function __sleep() + { + $parentProperties = parent::__sleep(); + + // Don't store the cascading strategy. Classes never cascade. + unset($parentProperties[array_search('cascadingStrategy', $parentProperties)]); + + return array_merge($parentProperties, array( + 'getters', + 'groupSequence', + 'groupSequenceProvider', + 'members', + 'name', + 'properties', + 'defaultGroup', + )); + } + + /** + * {@inheritdoc} + */ + public function getClassName() + { + return $this->name; + } + + /** + * Returns the name of the default group for this class. + * + * For each class, the group "Default" is an alias for the group + * "<ClassName>", where <ClassName> is the non-namespaced name of the + * class. All constraints implicitly or explicitly assigned to group + * "Default" belong to both of these groups, unless the class defines + * a group sequence. + * + * If a class defines a group sequence, validating the class in "Default" + * will validate the group sequence. The constraints assigned to "Default" + * can still be validated by validating the class in "<ClassName>". + * + * @return string The name of the default group + */ + public function getDefaultGroup() + { + return $this->defaultGroup; + } + + /** + * {@inheritdoc} + */ + public function addConstraint(Constraint $constraint) + { + if (!in_array(Constraint::CLASS_CONSTRAINT, (array) $constraint->getTargets())) { + throw new ConstraintDefinitionException(sprintf( + 'The constraint "%s" cannot be put on classes.', + get_class($constraint) + )); + } + + if ($constraint instanceof Valid) { + throw new ConstraintDefinitionException(sprintf( + 'The constraint "%s" cannot be put on classes.', + get_class($constraint) + )); + } + + if ($constraint instanceof Traverse) { + if ($constraint->traverse) { + // If traverse is true, traversal should be explicitly enabled + $this->traversalStrategy = TraversalStrategy::TRAVERSE; + } else { + // If traverse is false, traversal should be explicitly disabled + $this->traversalStrategy = TraversalStrategy::NONE; + } + + // The constraint is not added + return $this; + } + + $constraint->addImplicitGroupName($this->getDefaultGroup()); + + parent::addConstraint($constraint); + + return $this; + } + + /** + * Adds a constraint to the given property. + * + * @param string $property The name of the property + * @param Constraint $constraint The constraint + * + * @return ClassMetadata This object + */ + public function addPropertyConstraint($property, Constraint $constraint) + { + if (!isset($this->properties[$property])) { + $this->properties[$property] = new PropertyMetadata($this->getClassName(), $property); + + $this->addPropertyMetadata($this->properties[$property]); + } + + $constraint->addImplicitGroupName($this->getDefaultGroup()); + + $this->properties[$property]->addConstraint($constraint); + + return $this; + } + + /** + * @param string $property + * @param Constraint[] $constraints + * + * @return ClassMetadata + */ + public function addPropertyConstraints($property, array $constraints) + { + foreach ($constraints as $constraint) { + $this->addPropertyConstraint($property, $constraint); + } + + return $this; + } + + /** + * Adds a constraint to the getter of the given property. + * + * The name of the getter is assumed to be the name of the property with an + * uppercased first letter and either the prefix "get" or "is". + * + * @param string $property The name of the property + * @param Constraint $constraint The constraint + * + * @return ClassMetadata This object + */ + public function addGetterConstraint($property, Constraint $constraint) + { + if (!isset($this->getters[$property])) { + $this->getters[$property] = new GetterMetadata($this->getClassName(), $property); + + $this->addPropertyMetadata($this->getters[$property]); + } + + $constraint->addImplicitGroupName($this->getDefaultGroup()); + + $this->getters[$property]->addConstraint($constraint); + + return $this; + } + + /** + * @param string $property + * @param Constraint[] $constraints + * + * @return ClassMetadata + */ + public function addGetterConstraints($property, array $constraints) + { + foreach ($constraints as $constraint) { + $this->addGetterConstraint($property, $constraint); + } + + return $this; + } + + /** + * Merges the constraints of the given metadata into this object. + * + * @param ClassMetadata $source The source metadata + */ + public function mergeConstraints(ClassMetadata $source) + { + foreach ($source->getConstraints() as $constraint) { + $this->addConstraint(clone $constraint); + } + + foreach ($source->getConstrainedProperties() as $property) { + foreach ($source->getPropertyMetadata($property) as $member) { + $member = clone $member; + + foreach ($member->getConstraints() as $constraint) { + $constraint->addImplicitGroupName($this->getDefaultGroup()); + } + + $this->addPropertyMetadata($member); + + if ($member instanceof MemberMetadata && !$member->isPrivate($this->name)) { + $property = $member->getPropertyName(); + + if ($member instanceof PropertyMetadata && !isset($this->properties[$property])) { + $this->properties[$property] = $member; + } elseif ($member instanceof GetterMetadata && !isset($this->getters[$property])) { + $this->getters[$property] = $member; + } + } + } + } + } + + /** + * Adds a member metadata. + * + * @param MemberMetadata $metadata + * + * @deprecated Deprecated since version 2.6, to be removed in 3.0. + */ + protected function addMemberMetadata(MemberMetadata $metadata) + { + $this->addPropertyMetadata($metadata); + } + + /** + * Returns true if metadatas of members is present for the given property. + * + * @param string $property The name of the property + * + * @return bool + * + * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use {@link hasPropertyMetadata} instead. + */ + public function hasMemberMetadatas($property) + { + return $this->hasPropertyMetadata($property); + } + + /** + * Returns all metadatas of members describing the given property. + * + * @param string $property The name of the property + * + * @return MemberMetadata[] An array of MemberMetadata + * + * @deprecated Deprecated since version 2.6, to be removed in 3.0. Use {@link getPropertyMetadata} instead. + */ + public function getMemberMetadatas($property) + { + return $this->getPropertyMetadata($property); + } + + /** + * {@inheritdoc} + */ + public function hasPropertyMetadata($property) + { + return array_key_exists($property, $this->members); + } + + /** + * {@inheritdoc} + */ + public function getPropertyMetadata($property) + { + if (!isset($this->members[$property])) { + return array(); + } + + return $this->members[$property]; + } + + /** + * {@inheritdoc} + */ + public function getConstrainedProperties() + { + return array_keys($this->members); + } + + /** + * Sets the default group sequence for this class. + * + * @param array $groupSequence An array of group names + * + * @return ClassMetadata + * + * @throws GroupDefinitionException + */ + public function setGroupSequence($groupSequence) + { + if ($this->isGroupSequenceProvider()) { + throw new GroupDefinitionException('Defining a static group sequence is not allowed with a group sequence provider'); + } + + if (is_array($groupSequence)) { + $groupSequence = new GroupSequence($groupSequence); + } + + if (in_array(Constraint::DEFAULT_GROUP, $groupSequence->groups, true)) { + throw new GroupDefinitionException(sprintf('The group "%s" is not allowed in group sequences', Constraint::DEFAULT_GROUP)); + } + + if (!in_array($this->getDefaultGroup(), $groupSequence->groups, true)) { + throw new GroupDefinitionException(sprintf('The group "%s" is missing in the group sequence', $this->getDefaultGroup())); + } + + $this->groupSequence = $groupSequence; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function hasGroupSequence() + { + return count($this->groupSequence) > 0; + } + + /** + * {@inheritdoc} + */ + public function getGroupSequence() + { + return $this->groupSequence; + } + + /** + * Returns a ReflectionClass instance for this class. + * + * @return \ReflectionClass + */ + public function getReflectionClass() + { + if (!$this->reflClass) { + $this->reflClass = new \ReflectionClass($this->getClassName()); + } + + return $this->reflClass; + } + + /** + * Sets whether a group sequence provider should be used. + * + * @param bool $active + * + * @throws GroupDefinitionException + */ + public function setGroupSequenceProvider($active) + { + if ($this->hasGroupSequence()) { + throw new GroupDefinitionException('Defining a group sequence provider is not allowed with a static group sequence'); + } + + if (!$this->getReflectionClass()->implementsInterface('Symfony\Component\Validator\GroupSequenceProviderInterface')) { + throw new GroupDefinitionException(sprintf('Class "%s" must implement GroupSequenceProviderInterface', $this->name)); + } + + $this->groupSequenceProvider = $active; + } + + /** + * {@inheritdoc} + */ + public function isGroupSequenceProvider() + { + return $this->groupSequenceProvider; + } + + /** + * Class nodes are never cascaded. + * + * {@inheritdoc} + */ + public function getCascadingStrategy() + { + return CascadingStrategy::NONE; + } + + /** + * Adds a property metadata. + * + * @param PropertyMetadataInterface $metadata + */ + private function addPropertyMetadata(PropertyMetadataInterface $metadata) + { + $property = $metadata->getPropertyName(); + + $this->members[$property][] = $metadata; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php new file mode 100644 index 0000000..9b05edd --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php @@ -0,0 +1,26 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory; + +/** + * Alias of {@link LazyLoadingMetadataFactory}. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link LazyLoadingMetadataFactory} instead. + */ +class ClassMetadataFactory extends LazyLoadingMetadataFactory +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataInterface.php new file mode 100644 index 0000000..bb76c2c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataInterface.php @@ -0,0 +1,80 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +use Symfony\Component\Validator\ClassBasedInterface; +use Symfony\Component\Validator\PropertyMetadataContainerInterface as LegacyPropertyMetadataContainerInterface; + +/** + * Stores all metadata needed for validating objects of specific class. + * + * Most importantly, the metadata stores the constraints against which an object + * and its properties should be validated. + * + * Additionally, the metadata stores whether the "Default" group is overridden + * by a group sequence for that class and whether instances of that class + * should be traversed or not. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see MetadataInterface + * @see \Symfony\Component\Validator\Constraints\GroupSequence + * @see \Symfony\Component\Validator\GroupSequenceProviderInterface + * @see TraversalStrategy + */ +interface ClassMetadataInterface extends MetadataInterface, LegacyPropertyMetadataContainerInterface, ClassBasedInterface +{ + /** + * Returns the names of all constrained properties. + * + * @return string[] A list of property names + */ + public function getConstrainedProperties(); + + /** + * Returns whether the "Default" group is overridden by a group sequence. + * + * If it is, you can access the group sequence with {@link getGroupSequence()}. + * + * @return bool Returns true if the "Default" group is overridden + * + * @see \Symfony\Component\Validator\Constraints\GroupSequence + */ + public function hasGroupSequence(); + + /** + * Returns the group sequence that overrides the "Default" group for this + * class. + * + * @return \Symfony\Component\Validator\Constraints\GroupSequence|null The group sequence or null + * + * @see \Symfony\Component\Validator\Constraints\GroupSequence + */ + public function getGroupSequence(); + + /** + * Returns whether the "Default" group is overridden by a dynamic group + * sequence obtained by the validated objects. + * + * If this method returns true, the class must implement + * {@link \Symfony\Component\Validator\GroupSequenceProviderInterface}. + * This interface will be used to obtain the group sequence when an object + * of this class is validated. + * + * @return bool Returns true if the "Default" group is overridden by + * a dynamic group sequence + * + * @see \Symfony\Component\Validator\GroupSequenceProviderInterface + */ + public function isGroupSequenceProvider(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ElementMetadata.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ElementMetadata.php new file mode 100644 index 0000000..1b971c9 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ElementMetadata.php @@ -0,0 +1,24 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +/** + * Contains the metadata of a structural element. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Extend {@link GenericMetadata} instead. + */ +abstract class ElementMetadata extends GenericMetadata +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/BlackHoleMetadataFactory.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/BlackHoleMetadataFactory.php new file mode 100644 index 0000000..5b38d0c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/BlackHoleMetadataFactory.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Factory; + +/** + * Metadata factory that does not store metadata. + * + * This implementation is useful if you want to validate values against + * constraints only and you don't need to add constraints to classes and + * properties. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class BlackHoleMetadataFactory implements MetadataFactoryInterface +{ + /** + * {@inheritdoc} + */ + public function getMetadataFor($value) + { + throw new \LogicException('This class does not support metadata.'); + } + + /** + * {@inheritdoc} + */ + public function hasMetadataFor($value) + { + return false; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php new file mode 100644 index 0000000..b6ef076 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php @@ -0,0 +1,153 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Factory; + +use Symfony\Component\Validator\Exception\NoSuchMetadataException; +use Symfony\Component\Validator\Mapping\Cache\CacheInterface; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\Loader\LoaderInterface; + +/** + * Creates new {@link ClassMetadataInterface} instances. + * + * Whenever {@link getMetadataFor()} is called for the first time with a given + * class name or object of that class, a new metadata instance is created and + * returned. On subsequent requests for the same class, the same metadata + * instance will be returned. + * + * You can optionally pass a {@link LoaderInterface} instance to the constructor. + * Whenever a new metadata instance is created, it is passed to the loader, + * which can configure the metadata based on configuration loaded from the + * filesystem or a database. If you want to use multiple loaders, wrap them in a + * {@link Loader\LoaderChain}. + * + * You can also optionally pass a {@link CacheInterface} instance to the + * constructor. This cache will be used for persisting the generated metadata + * between multiple PHP requests. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class LazyLoadingMetadataFactory implements MetadataFactoryInterface +{ + /** + * The loader for loading the class metadata + * + * @var LoaderInterface|null + */ + protected $loader; + + /** + * The cache for caching class metadata + * + * @var CacheInterface|null + */ + protected $cache; + + /** + * The loaded metadata, indexed by class name + * + * @var ClassMetadata[] + */ + protected $loadedClasses = array(); + + /** + * Creates a new metadata factory. + * + * @param LoaderInterface|null $loader The loader for configuring new metadata + * @param CacheInterface|null $cache The cache for persisting metadata + * between multiple PHP requests + */ + public function __construct(LoaderInterface $loader = null, CacheInterface $cache = null) + { + $this->loader = $loader; + $this->cache = $cache; + } + + /** + * {@inheritdoc} + * + * If the method was called with the same class name (or an object of that + * class) before, the same metadata instance is returned. + * + * If the factory was configured with a cache, this method will first look + * for an existing metadata instance in the cache. If an existing instance + * is found, it will be returned without further ado. + * + * Otherwise, a new metadata instance is created. If the factory was + * configured with a loader, the metadata is passed to the + * {@link LoaderInterface::loadClassMetadata()} method for further + * configuration. At last, the new object is returned. + */ + public function getMetadataFor($value) + { + if (!is_object($value) && !is_string($value)) { + throw new NoSuchMetadataException(sprintf('Cannot create metadata for non-objects. Got: %s', gettype($value))); + } + + $class = ltrim(is_object($value) ? get_class($value) : $value, '\\'); + + if (isset($this->loadedClasses[$class])) { + return $this->loadedClasses[$class]; + } + + if (null !== $this->cache && false !== ($this->loadedClasses[$class] = $this->cache->read($class))) { + return $this->loadedClasses[$class]; + } + + if (!class_exists($class) && !interface_exists($class)) { + throw new NoSuchMetadataException(sprintf('The class or interface "%s" does not exist.', $class)); + } + + $metadata = new ClassMetadata($class); + + // Include constraints from the parent class + if ($parent = $metadata->getReflectionClass()->getParentClass()) { + $metadata->mergeConstraints($this->getMetadataFor($parent->name)); + } + + // Include constraints from all implemented interfaces + foreach ($metadata->getReflectionClass()->getInterfaces() as $interface) { + if ('Symfony\Component\Validator\GroupSequenceProviderInterface' === $interface->name) { + continue; + } + $metadata->mergeConstraints($this->getMetadataFor($interface->name)); + } + + if (null !== $this->loader) { + $this->loader->loadClassMetadata($metadata); + } + + if (null !== $this->cache) { + $this->cache->write($metadata); + } + + return $this->loadedClasses[$class] = $metadata; + } + + /** + * {@inheritdoc} + */ + public function hasMetadataFor($value) + { + if (!is_object($value) && !is_string($value)) { + return false; + } + + $class = ltrim(is_object($value) ? get_class($value) : $value, '\\'); + + if (class_exists($class) || interface_exists($class)) { + return true; + } + + return false; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/MetadataFactoryInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/MetadataFactoryInterface.php new file mode 100644 index 0000000..ef25174 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/MetadataFactoryInterface.php @@ -0,0 +1,24 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Factory; + +use Symfony\Component\Validator\MetadataFactoryInterface as LegacyMetadataFactoryInterface; + +/** + * Returns {@link MetadataInterface} instances for values. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface MetadataFactoryInterface extends LegacyMetadataFactoryInterface +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GenericMetadata.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GenericMetadata.php new file mode 100644 index 0000000..904dcd7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GenericMetadata.php @@ -0,0 +1,243 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Constraints\Traverse; +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\Exception\BadMethodCallException; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; +use Symfony\Component\Validator\ValidationVisitorInterface; + +/** + * A generic container of {@link Constraint} objects. + * + * This class supports serialization and cloning. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class GenericMetadata implements MetadataInterface +{ + /** + * @var Constraint[] + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getConstraints()} and {@link findConstraints()} instead. + */ + public $constraints = array(); + + /** + * @var array + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link findConstraints()} instead. + */ + public $constraintsByGroup = array(); + + /** + * The strategy for cascading objects. + * + * By default, objects are not cascaded. + * + * @var int + * + * @see CascadingStrategy + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getCascadingStrategy()} instead. + */ + public $cascadingStrategy = CascadingStrategy::NONE; + + /** + * The strategy for traversing traversable objects. + * + * By default, traversable objects are not traversed. + * + * @var int + * + * @see TraversalStrategy + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getTraversalStrategy()} instead. + */ + public $traversalStrategy = TraversalStrategy::NONE; + + /** + * Returns the names of the properties that should be serialized. + * + * @return string[] + */ + public function __sleep() + { + return array( + 'constraints', + 'constraintsByGroup', + 'cascadingStrategy', + 'traversalStrategy', + ); + } + + /** + * Clones this object. + */ + public function __clone() + { + $constraints = $this->constraints; + + $this->constraints = array(); + $this->constraintsByGroup = array(); + + foreach ($constraints as $constraint) { + $this->addConstraint(clone $constraint); + } + } + + /** + * Adds a constraint. + * + * If the constraint {@link Valid} is added, the cascading strategy will be + * changed to {@link CascadingStrategy::CASCADE}. Depending on the + * properties $traverse and $deep of that constraint, the traversal strategy + * will be set to one of the following: + * + * - {@link TraversalStrategy::IMPLICIT} if $traverse is enabled and $deep + * is enabled + * - {@link TraversalStrategy::IMPLICIT} | {@link TraversalStrategy::STOP_RECURSION} + * if $traverse is enabled, but $deep is disabled + * - {@link TraversalStrategy::NONE} if $traverse is disabled + * + * @param Constraint $constraint The constraint to add + * + * @return GenericMetadata This object + * + * @throws ConstraintDefinitionException When trying to add the + * {@link Traverse} constraint + */ + public function addConstraint(Constraint $constraint) + { + if ($constraint instanceof Traverse) { + throw new ConstraintDefinitionException(sprintf( + 'The constraint "%s" can only be put on classes. Please use '. + '"Symfony\Component\Validator\Constraints\Valid" instead.', + get_class($constraint) + )); + } + + if ($constraint instanceof Valid) { + $this->cascadingStrategy = CascadingStrategy::CASCADE; + + if ($constraint->traverse) { + // Traverse unless the value is not traversable + $this->traversalStrategy = TraversalStrategy::IMPLICIT; + + if (!$constraint->deep) { + $this->traversalStrategy |= TraversalStrategy::STOP_RECURSION; + } + } else { + $this->traversalStrategy = TraversalStrategy::NONE; + } + + return $this; + } + + $this->constraints[] = $constraint; + + foreach ($constraint->groups as $group) { + $this->constraintsByGroup[$group][] = $constraint; + } + + return $this; + } + + /** + * Adds an list of constraints. + * + * @param Constraint[] $constraints The constraints to add + * + * @return GenericMetadata This object + */ + public function addConstraints(array $constraints) + { + foreach ($constraints as $constraint) { + $this->addConstraint($constraint); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getConstraints() + { + return $this->constraints; + } + + /** + * Returns whether this element has any constraints. + * + * @return bool + */ + public function hasConstraints() + { + return count($this->constraints) > 0; + } + + /** + * {@inheritdoc} + * + * Aware of the global group (* group). + */ + public function findConstraints($group) + { + return isset($this->constraintsByGroup[$group]) + ? $this->constraintsByGroup[$group] + : array(); + } + + /** + * {@inheritdoc} + */ + public function getCascadingStrategy() + { + return $this->cascadingStrategy; + } + + /** + * {@inheritdoc} + */ + public function getTraversalStrategy() + { + return $this->traversalStrategy; + } + + /** + * Exists for compatibility with the deprecated + * {@link Symfony\Component\Validator\MetadataInterface}. + * + * Should not be used. + * + * @throws BadMethodCallException + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * Will be removed in Symfony 3.0. + */ + public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath) + { + throw new BadMethodCallException('Not supported.'); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GetterMetadata.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GetterMetadata.php new file mode 100644 index 0000000..0cf9992 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GetterMetadata.php @@ -0,0 +1,77 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +use Symfony\Component\Validator\Exception\ValidatorException; + +/** + * Stores all metadata needed for validating a class property via its getter + * method. + * + * A property getter is any method that is equal to the property's name, + * prefixed with either "get" or "is". That method will be used to access the + * property's value. + * + * The getter will be invoked by reflection, so the access of private and + * protected getters is supported. + * + * This class supports serialization and cloning. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see PropertyMetadataInterface + */ +class GetterMetadata extends MemberMetadata +{ + /** + * Constructor. + * + * @param string $class The class the getter is defined on + * @param string $property The property which the getter returns + * + * @throws ValidatorException + */ + public function __construct($class, $property) + { + $getMethod = 'get'.ucfirst($property); + $isMethod = 'is'.ucfirst($property); + $hasMethod = 'has'.ucfirst($property); + + if (method_exists($class, $getMethod)) { + $method = $getMethod; + } elseif (method_exists($class, $isMethod)) { + $method = $isMethod; + } elseif (method_exists($class, $hasMethod)) { + $method = $hasMethod; + } else { + throw new ValidatorException(sprintf('Neither of these methods exist in class %s: %s, %s, %s', $class, $getMethod, $isMethod, $hasMethod)); + } + + parent::__construct($class, $method, $property); + } + + /** + * {@inheritdoc} + */ + public function getPropertyValue($object) + { + return $this->newReflectionMember($object)->invoke($object); + } + + /** + * {@inheritdoc} + */ + protected function newReflectionMember($objectOrClassName) + { + return new \ReflectionMethod($objectOrClassName, $this->getName()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AbstractLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AbstractLoader.php new file mode 100644 index 0000000..2ae8988 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AbstractLoader.php @@ -0,0 +1,91 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\MappingException; + +/** + * Base loader for validation metadata. + * + * This loader supports the loading of constraints from Symfony's default + * namespace (see {@link DEFAULT_NAMESPACE}) using the short class names of + * those constraints. Constraints can also be loaded using their fully + * qualified class names. At last, namespace aliases can be defined to load + * constraints with the syntax "alias:ShortName". + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +abstract class AbstractLoader implements LoaderInterface +{ + /** + * The namespace to load constraints from by default. + */ + const DEFAULT_NAMESPACE = '\\Symfony\\Component\\Validator\\Constraints\\'; + + /** + * @var array + */ + protected $namespaces = array(); + + /** + * Adds a namespace alias. + * + * The namespace alias can be used to reference constraints from specific + * namespaces in {@link newConstraint()}: + * + * $this->addNamespaceAlias('mynamespace', '\\Acme\\Package\\Constraints\\'); + * + * $constraint = $this->newConstraint('mynamespace:NotNull'); + * + * @param string $alias The alias + * @param string $namespace The PHP namespace + */ + protected function addNamespaceAlias($alias, $namespace) + { + $this->namespaces[$alias] = $namespace; + } + + /** + * Creates a new constraint instance for the given constraint name. + * + * @param string $name The constraint name. Either a constraint relative + * to the default constraint namespace, or a fully + * qualified class name. Alternatively, the constraint + * may be preceded by a namespace alias and a colon. + * The namespace alias must have been defined using + * {@link addNamespaceAlias()}. + * @param mixed $options The constraint options + * + * @return Constraint + * + * @throws MappingException If the namespace prefix is undefined + */ + protected function newConstraint($name, $options = null) + { + if (strpos($name, '\\') !== false && class_exists($name)) { + $className = (string) $name; + } elseif (strpos($name, ':') !== false) { + list($prefix, $className) = explode(':', $name, 2); + + if (!isset($this->namespaces[$prefix])) { + throw new MappingException(sprintf('Undefined namespace prefix "%s"', $prefix)); + } + + $className = $this->namespaces[$prefix].$className; + } else { + $className = self::DEFAULT_NAMESPACE.$name; + } + + return new $className($options); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php new file mode 100644 index 0000000..af0bf52 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php @@ -0,0 +1,95 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +use Doctrine\Common\Annotations\Reader; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Constraints\Callback; +use Symfony\Component\Validator\Constraints\GroupSequence; +use Symfony\Component\Validator\Constraints\GroupSequenceProvider; +use Symfony\Component\Validator\Exception\MappingException; +use Symfony\Component\Validator\Mapping\ClassMetadata; + +/** + * Loads validation metadata using a Doctrine annotation {@link Reader}. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class AnnotationLoader implements LoaderInterface +{ + /** + * @var Reader + */ + protected $reader; + + public function __construct(Reader $reader) + { + $this->reader = $reader; + } + + /** + * {@inheritdoc} + */ + public function loadClassMetadata(ClassMetadata $metadata) + { + $reflClass = $metadata->getReflectionClass(); + $className = $reflClass->name; + $success = false; + + foreach ($this->reader->getClassAnnotations($reflClass) as $constraint) { + if ($constraint instanceof GroupSequence) { + $metadata->setGroupSequence($constraint->groups); + } elseif ($constraint instanceof GroupSequenceProvider) { + $metadata->setGroupSequenceProvider(true); + } elseif ($constraint instanceof Constraint) { + $metadata->addConstraint($constraint); + } + + $success = true; + } + + foreach ($reflClass->getProperties() as $property) { + if ($property->getDeclaringClass()->name == $className) { + foreach ($this->reader->getPropertyAnnotations($property) as $constraint) { + if ($constraint instanceof Constraint) { + $metadata->addPropertyConstraint($property->name, $constraint); + } + + $success = true; + } + } + } + + foreach ($reflClass->getMethods() as $method) { + if ($method->getDeclaringClass()->name == $className) { + foreach ($this->reader->getMethodAnnotations($method) as $constraint) { + if ($constraint instanceof Callback) { + $constraint->callback = $method->getName(); + $constraint->methods = null; + + $metadata->addConstraint($constraint); + } elseif ($constraint instanceof Constraint) { + if (preg_match('/^(get|is|has)(.+)$/i', $method->name, $matches)) { + $metadata->addGetterConstraint(lcfirst($matches[2]), $constraint); + } else { + throw new MappingException(sprintf('The constraint on "%s::%s" cannot be added. Constraints can only be added on methods beginning with "get", "is" or "has".', $className, $method->name)); + } + } + + $success = true; + } + } + } + + return $success; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FileLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FileLoader.php new file mode 100644 index 0000000..326bbdf --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FileLoader.php @@ -0,0 +1,56 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +use Symfony\Component\Validator\Exception\MappingException; + +/** + * Base loader for loading validation metadata from a file. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see YamlFileLoader + * @see XmlFileLoader + */ +abstract class FileLoader extends AbstractLoader +{ + /** + * The file to load. + * + * @var string + */ + protected $file; + + /** + * Creates a new loader. + * + * @param string $file The mapping file to load + * + * @throws MappingException If the file does not exist or is not readable + */ + public function __construct($file) + { + if (!is_file($file)) { + throw new MappingException(sprintf('The mapping file "%s" does not exist', $file)); + } + + if (!is_readable($file)) { + throw new MappingException(sprintf('The mapping file "%s" is not readable', $file)); + } + + if (!stream_is_local($this->file)) { + throw new MappingException(sprintf('The mapping file "%s" is not a local file', $file)); + } + + $this->file = $file; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FilesLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FilesLoader.php new file mode 100644 index 0000000..571c7e7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FilesLoader.php @@ -0,0 +1,61 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +/** + * Base loader for loading validation metadata from a list of files. + * + * @author Bulat Shakirzyanov <mallluhuct@gmail.com> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see YamlFilesLoader + * @see XmlFilesLoader + */ +abstract class FilesLoader extends LoaderChain +{ + /** + * Creates a new loader. + * + * @param array $paths An array of file paths + */ + public function __construct(array $paths) + { + parent::__construct($this->getFileLoaders($paths)); + } + + /** + * Returns an array of file loaders for the given file paths. + * + * @param array $paths An array of file paths + * + * @return LoaderInterface[] The metadata loaders + */ + protected function getFileLoaders($paths) + { + $loaders = array(); + + foreach ($paths as $path) { + $loaders[] = $this->getFileLoaderInstance($path); + } + + return $loaders; + } + + /** + * Creates a loader for the given file path. + * + * @param string $path The file path + * + * @return LoaderInterface The created loader + */ + abstract protected function getFileLoaderInstance($path); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php new file mode 100644 index 0000000..970d906 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php @@ -0,0 +1,62 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +use Symfony\Component\Validator\Exception\MappingException; +use Symfony\Component\Validator\Mapping\ClassMetadata; + +/** + * Loads validation metadata from multiple {@link LoaderInterface} instances. + * + * Pass the loaders when constructing the chain. Once + * {@link loadClassMetadata()} is called, that method will be called on all + * loaders in the chain. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class LoaderChain implements LoaderInterface +{ + /** + * @var LoaderInterface[] + */ + protected $loaders; + + /** + * @param LoaderInterface[] $loaders The metadata loaders to use + * + * @throws MappingException If any of the loaders has an invalid type + */ + public function __construct(array $loaders) + { + foreach ($loaders as $loader) { + if (!$loader instanceof LoaderInterface) { + throw new MappingException(sprintf('Class %s is expected to implement LoaderInterface', get_class($loader))); + } + } + + $this->loaders = $loaders; + } + + /** + * {@inheritdoc} + */ + public function loadClassMetadata(ClassMetadata $metadata) + { + $success = false; + + foreach ($this->loaders as $loader) { + $success = $loader->loadClassMetadata($metadata) || $success; + } + + return $success; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderInterface.php new file mode 100644 index 0000000..5dadc82 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderInterface.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +use Symfony\Component\Validator\Mapping\ClassMetadata; + +/** + * Loads validation metadata into {@link ClassMetadata} instances. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface LoaderInterface +{ + /** + * Loads validation metadata into a {@link ClassMetadata} instance. + * + * @param ClassMetadata $metadata The metadata to load + * + * @return bool Whether the loader succeeded + */ + public function loadClassMetadata(ClassMetadata $metadata); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php new file mode 100644 index 0000000..4ff2257 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php @@ -0,0 +1,71 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +use Symfony\Component\Validator\Exception\MappingException; +use Symfony\Component\Validator\Mapping\ClassMetadata; + +/** + * Loads validation metadata by calling a static method on the loaded class. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class StaticMethodLoader implements LoaderInterface +{ + /** + * The name of the method to call. + * + * @var string + */ + protected $methodName; + + /** + * Creates a new loader. + * + * @param string $methodName The name of the static method to call + */ + public function __construct($methodName = 'loadValidatorMetadata') + { + $this->methodName = $methodName; + } + + /** + * {@inheritdoc} + */ + public function loadClassMetadata(ClassMetadata $metadata) + { + /** @var \ReflectionClass $reflClass */ + $reflClass = $metadata->getReflectionClass(); + + if (!$reflClass->isInterface() && $reflClass->hasMethod($this->methodName)) { + $reflMethod = $reflClass->getMethod($this->methodName); + + if ($reflMethod->isAbstract()) { + return false; + } + + if (!$reflMethod->isStatic()) { + throw new MappingException(sprintf('The method %s::%s should be static', $reflClass->name, $this->methodName)); + } + + if ($reflMethod->getDeclaringClass()->name != $reflClass->name) { + return false; + } + + $reflMethod->invoke(null, $metadata); + + return true; + } + + return false; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php new file mode 100644 index 0000000..2961b00 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php @@ -0,0 +1,219 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +use Symfony\Component\Config\Util\XmlUtils; +use Symfony\Component\Validator\Exception\MappingException; +use Symfony\Component\Validator\Mapping\ClassMetadata; + +/** + * Loads validation metadata from an XML file. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class XmlFileLoader extends FileLoader +{ + /** + * The XML nodes of the mapping file. + * + * @var \SimpleXMLElement[]|null + */ + protected $classes; + + /** + * {@inheritdoc} + */ + public function loadClassMetadata(ClassMetadata $metadata) + { + if (null === $this->classes) { + // This method may throw an exception. Do not modify the class' + // state before it completes + $xml = $this->parseFile($this->file); + + $this->classes = array(); + + foreach ($xml->namespace as $namespace) { + $this->addNamespaceAlias((string) $namespace['prefix'], trim((string) $namespace)); + } + + foreach ($xml->class as $class) { + $this->classes[(string) $class['name']] = $class; + } + } + + if (isset($this->classes[$metadata->getClassName()])) { + $classDescription = $this->classes[$metadata->getClassName()]; + + $this->loadClassMetadataFromXml($metadata, $classDescription); + + return true; + } + + return false; + } + + /** + * Parses a collection of "constraint" XML nodes. + * + * @param \SimpleXMLElement $nodes The XML nodes + * + * @return array The Constraint instances + */ + protected function parseConstraints(\SimpleXMLElement $nodes) + { + $constraints = array(); + + foreach ($nodes as $node) { + if (count($node) > 0) { + if (count($node->value) > 0) { + $options = $this->parseValues($node->value); + } elseif (count($node->constraint) > 0) { + $options = $this->parseConstraints($node->constraint); + } elseif (count($node->option) > 0) { + $options = $this->parseOptions($node->option); + } else { + $options = array(); + } + } elseif (strlen((string) $node) > 0) { + $options = trim($node); + } else { + $options = null; + } + + $constraints[] = $this->newConstraint((string) $node['name'], $options); + } + + return $constraints; + } + + /** + * Parses a collection of "value" XML nodes. + * + * @param \SimpleXMLElement $nodes The XML nodes + * + * @return array The values + */ + protected function parseValues(\SimpleXMLElement $nodes) + { + $values = array(); + + foreach ($nodes as $node) { + if (count($node) > 0) { + if (count($node->value) > 0) { + $value = $this->parseValues($node->value); + } elseif (count($node->constraint) > 0) { + $value = $this->parseConstraints($node->constraint); + } else { + $value = array(); + } + } else { + $value = trim($node); + } + + if (isset($node['key'])) { + $values[(string) $node['key']] = $value; + } else { + $values[] = $value; + } + } + + return $values; + } + + /** + * Parses a collection of "option" XML nodes. + * + * @param \SimpleXMLElement $nodes The XML nodes + * + * @return array The options + */ + protected function parseOptions(\SimpleXMLElement $nodes) + { + $options = array(); + + foreach ($nodes as $node) { + if (count($node) > 0) { + if (count($node->value) > 0) { + $value = $this->parseValues($node->value); + } elseif (count($node->constraint) > 0) { + $value = $this->parseConstraints($node->constraint); + } else { + $value = array(); + } + } else { + $value = XmlUtils::phpize($node); + if (is_string($value)) { + $value = trim($value); + } + } + + $options[(string) $node['name']] = $value; + } + + return $options; + } + + /** + * Loads the XML class descriptions from the given file. + * + * @param string $path The path of the XML file + * + * @return \SimpleXMLElement The class descriptions + * + * @throws MappingException If the file could not be loaded + */ + protected function parseFile($path) + { + try { + $dom = XmlUtils::loadFile($path, __DIR__.'/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd'); + } catch (\Exception $e) { + throw new MappingException($e->getMessage(), $e->getCode(), $e); + } + + return simplexml_import_dom($dom); + } + + /** + * Loads the validation metadata from the given XML class description. + * + * @param ClassMetadata $metadata The metadata to load + * @param array $classDescription The XML class description + */ + private function loadClassMetadataFromXml(ClassMetadata $metadata, $classDescription) + { + foreach ($classDescription->{'group-sequence-provider'} as $_) { + $metadata->setGroupSequenceProvider(true); + } + + foreach ($classDescription->{'group-sequence'} as $groupSequence) { + if (count($groupSequence->value) > 0) { + $metadata->setGroupSequence($this->parseValues($groupSequence[0]->value)); + } + } + + foreach ($this->parseConstraints($classDescription->constraint) as $constraint) { + $metadata->addConstraint($constraint); + } + + foreach ($classDescription->property as $property) { + foreach ($this->parseConstraints($property->constraint) as $constraint) { + $metadata->addPropertyConstraint((string) $property['name'], $constraint); + } + } + + foreach ($classDescription->getter as $getter) { + foreach ($this->parseConstraints($getter->constraint) as $constraint) { + $metadata->addGetterConstraint((string) $getter['property'], $constraint); + } + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFilesLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFilesLoader.php new file mode 100644 index 0000000..6017c3f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFilesLoader.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +/** + * Loads validation metadata from a list of XML files. + * + * @author Bulat Shakirzyanov <mallluhuct@gmail.com> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see FilesLoader + */ +class XmlFilesLoader extends FilesLoader +{ + /** + * {@inheritdoc} + */ + public function getFileLoaderInstance($file) + { + return new XmlFileLoader($file); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php new file mode 100644 index 0000000..e293a6e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php @@ -0,0 +1,179 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Yaml\Parser as YamlParser; + +/** + * Loads validation metadata from a YAML file. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class YamlFileLoader extends FileLoader +{ + /** + * An array of YAML class descriptions. + * + * @var array + */ + protected $classes = null; + + /** + * Caches the used YAML parser. + * + * @var YamlParser + */ + private $yamlParser; + + /** + * {@inheritdoc} + */ + public function loadClassMetadata(ClassMetadata $metadata) + { + if (null === $this->classes) { + if (null === $this->yamlParser) { + $this->yamlParser = new YamlParser(); + } + + // This method may throw an exception. Do not modify the class' + // state before it completes + if (false === ($classes = $this->parseFile($this->file))) { + return false; + } + + $this->classes = $classes; + + if (isset($this->classes['namespaces'])) { + foreach ($this->classes['namespaces'] as $alias => $namespace) { + $this->addNamespaceAlias($alias, $namespace); + } + + unset($this->classes['namespaces']); + } + } + + if (isset($this->classes[$metadata->getClassName()])) { + $classDescription = $this->classes[$metadata->getClassName()]; + + $this->loadClassMetadataFromYaml($metadata, $classDescription); + + return true; + } + + return false; + } + + /** + * Parses a collection of YAML nodes. + * + * @param array $nodes The YAML nodes + * + * @return array An array of values or Constraint instances + */ + protected function parseNodes(array $nodes) + { + $values = array(); + + foreach ($nodes as $name => $childNodes) { + if (is_numeric($name) && is_array($childNodes) && count($childNodes) == 1) { + $options = current($childNodes); + + if (is_array($options)) { + $options = $this->parseNodes($options); + } + + $values[] = $this->newConstraint(key($childNodes), $options); + } else { + if (is_array($childNodes)) { + $childNodes = $this->parseNodes($childNodes); + } + + $values[$name] = $childNodes; + } + } + + return $values; + } + + /** + * Loads the YAML class descriptions from the given file. + * + * @param string $path The path of the YAML file + * + * @return array|null The class descriptions or null, if the file was empty + * + * @throws \InvalidArgumentException If the file could not be loaded or did + * not contain a YAML array + */ + private function parseFile($path) + { + $classes = $this->yamlParser->parse(file_get_contents($path)); + + // empty file + if (null === $classes) { + return; + } + + // not an array + if (!is_array($classes)) { + throw new \InvalidArgumentException(sprintf('The file "%s" must contain a YAML array.', $this->file)); + } + + return $classes; + } + + /** + * Loads the validation metadata from the given YAML class description. + * + * @param ClassMetadata $metadata The metadata to load + * @param array $classDescription The YAML class description + */ + private function loadClassMetadataFromYaml(ClassMetadata $metadata, array $classDescription) + { + if (isset($classDescription['group_sequence_provider'])) { + $metadata->setGroupSequenceProvider( + (bool) $classDescription['group_sequence_provider'] + ); + } + + if (isset($classDescription['group_sequence'])) { + $metadata->setGroupSequence($classDescription['group_sequence']); + } + + if (isset($classDescription['constraints']) && is_array($classDescription['constraints'])) { + foreach ($this->parseNodes($classDescription['constraints']) as $constraint) { + $metadata->addConstraint($constraint); + } + } + + if (isset($classDescription['properties']) && is_array($classDescription['properties'])) { + foreach ($classDescription['properties'] as $property => $constraints) { + if (null !== $constraints) { + foreach ($this->parseNodes($constraints) as $constraint) { + $metadata->addPropertyConstraint($property, $constraint); + } + } + } + } + + if (isset($classDescription['getters']) && is_array($classDescription['getters'])) { + foreach ($classDescription['getters'] as $getter => $constraints) { + if (null !== $constraints) { + foreach ($this->parseNodes($constraints) as $constraint) { + $metadata->addGetterConstraint($getter, $constraint); + } + } + } + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFilesLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFilesLoader.php new file mode 100644 index 0000000..235856f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFilesLoader.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping\Loader; + +/** + * Loads validation metadata from a list of YAML files. + * + * @author Bulat Shakirzyanov <mallluhuct@gmail.com> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see FilesLoader + */ +class YamlFilesLoader extends FilesLoader +{ + /** + * {@inheritdoc} + */ + public function getFileLoaderInstance($file) + { + return new YamlFileLoader($file); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd new file mode 100644 index 0000000..1ca840b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd @@ -0,0 +1,160 @@ +<?xml version="1.0" ?> + +<xsd:schema xmlns="http://symfony.com/schema/dic/constraint-mapping" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://symfony.com/schema/dic/constraint-mapping" + elementFormDefault="qualified"> + + <xsd:annotation> + <xsd:documentation><![CDATA[ + Symfony Validator Constraint Mapping Schema, version 1.0 + Authors: Bernhard Schussek + + A constraint mapping connects classes, properties and getters with + validation constraints. + ]]></xsd:documentation> + </xsd:annotation> + + <xsd:element name="constraint-mapping" type="constraint-mapping" /> + + <xsd:complexType name="constraint-mapping"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + The root element of the constraint mapping definition. + ]]></xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="namespace" type="namespace" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="class" type="class" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="namespace"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + Contains the abbreviation for a namespace. + ]]></xsd:documentation> + </xsd:annotation> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="prefix" type="xsd:string" use="required" /> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:complexType name="class"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + Contains constraints for a single class. + + Nested elements may be class constraints, property and/or getter + definitions. + ]]></xsd:documentation> + </xsd:annotation> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="group-sequence-provider" type="group-sequence-provider" minOccurs="0" maxOccurs="1" /> + <xsd:element name="group-sequence" type="group-sequence" minOccurs="0" maxOccurs="1" /> + <xsd:element name="constraint" type="constraint" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="property" type="property" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="getter" type="getter" minOccurs="0" maxOccurs="unbounded" /> + </xsd:choice> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + + <xsd:complexType name="group-sequence"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + Contains the group sequence of a class. Each group should be written + into a "value" tag. + ]]></xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="group-sequence-provider"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + Defines the name of the group sequence provider for a class. + ]]></xsd:documentation> + </xsd:annotation> + </xsd:complexType> + + <xsd:complexType name="property"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + Contains constraints for a single property. The name of the property + should be given in the "name" option. + ]]></xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="constraint" type="constraint" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + + <xsd:complexType name="getter"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + Contains constraints for a getter method. The name of the corresponding + property should be given in the "property" option. + ]]></xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="constraint" type="constraint" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:attribute name="property" type="xsd:string" use="required" /> + </xsd:complexType> + + <xsd:complexType name="constraint" mixed="true"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + Contains a constraint definition. The name of the constraint should be + given in the "name" option. + + May contain a single value, multiple "constraint" elements, + multiple "value" elements or multiple "option" elements. + ]]></xsd:documentation> + </xsd:annotation> + <xsd:choice minOccurs="0"> + <xsd:element name="constraint" type="constraint" minOccurs="1" maxOccurs="unbounded" /> + <xsd:element name="option" type="option" minOccurs="1" maxOccurs="unbounded" /> + <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" /> + </xsd:choice> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + + <xsd:complexType name="option" mixed="true"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + Contains a constraint option definition. The name of the option + should be given in the "name" option. + + May contain a single value, multiple "value" elements or multiple + "constraint" elements. + ]]></xsd:documentation> + </xsd:annotation> + <xsd:choice minOccurs="0"> + <xsd:element name="constraint" type="constraint" minOccurs="1" maxOccurs="unbounded" /> + <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" /> + </xsd:choice> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + + <xsd:complexType name="value" mixed="true"> + <xsd:annotation> + <xsd:documentation><![CDATA[ + A value of an element. + + May contain a single value, multiple "value" elements or multiple + "constraint" elements. + ]]></xsd:documentation> + </xsd:annotation> + <xsd:choice minOccurs="0"> + <xsd:element name="constraint" type="constraint" minOccurs="1" maxOccurs="unbounded" /> + <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" /> + </xsd:choice> + <xsd:attribute name="key" type="xsd:string" use="optional" /> + </xsd:complexType> +</xsd:schema> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php new file mode 100644 index 0000000..a0bbe0d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php @@ -0,0 +1,251 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; +use Symfony\Component\Validator\ValidationVisitorInterface; + +/** + * Stores all metadata needed for validating a class property. + * + * The method of accessing the property's value must be specified by subclasses + * by implementing the {@link newReflectionMember()} method. + * + * This class supports serialization and cloning. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see PropertyMetadataInterface + */ +abstract class MemberMetadata extends ElementMetadata implements PropertyMetadataInterface +{ + /** + * @var string + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getClassName()} instead. + */ + public $class; + + /** + * @var string + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getName()} instead. + */ + public $name; + + /** + * @var string + * + * @internal This property is public in order to reduce the size of the + * class' serialized representation. Do not access it. Use + * {@link getPropertyName()} instead. + */ + public $property; + + /** + * @var \ReflectionMethod[]|\ReflectionProperty[] + */ + private $reflMember = array(); + + /** + * Constructor. + * + * @param string $class The name of the class this member is defined on + * @param string $name The name of the member + * @param string $property The property the member belongs to + */ + public function __construct($class, $name, $property) + { + $this->class = $class; + $this->name = $name; + $this->property = $property; + } + + /** + * {@inheritdoc} + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + */ + public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath, $propagatedGroup = null) + { + $visitor->visit($this, $value, $group, $propertyPath); + + if ($this->isCascaded()) { + $visitor->validate($value, $propagatedGroup ?: $group, $propertyPath, $this->isCollectionCascaded(), $this->isCollectionCascadedDeeply()); + } + } + + /** + * {@inheritdoc} + */ + public function addConstraint(Constraint $constraint) + { + if (!in_array(Constraint::PROPERTY_CONSTRAINT, (array) $constraint->getTargets())) { + throw new ConstraintDefinitionException(sprintf( + 'The constraint %s cannot be put on properties or getters', + get_class($constraint) + )); + } + + parent::addConstraint($constraint); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function __sleep() + { + return array_merge(parent::__sleep(), array( + 'class', + 'name', + 'property', + )); + } + + /** + * Returns the name of the member. + * + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function getClassName() + { + return $this->class; + } + + /** + * {@inheritdoc} + */ + public function getPropertyName() + { + return $this->property; + } + + /** + * Returns whether this member is public. + * + * @param object|string $objectOrClassName The object or the class name + * + * @return bool + */ + public function isPublic($objectOrClassName) + { + return $this->getReflectionMember($objectOrClassName)->isPublic(); + } + + /** + * Returns whether this member is protected. + * + * @param object|string $objectOrClassName The object or the class name + * + * @return bool + */ + public function isProtected($objectOrClassName) + { + return $this->getReflectionMember($objectOrClassName)->isProtected(); + } + + /** + * Returns whether this member is private. + * + * @param object|string $objectOrClassName The object or the class name + * + * @return bool + */ + public function isPrivate($objectOrClassName) + { + return $this->getReflectionMember($objectOrClassName)->isPrivate(); + } + + /** + * Returns whether objects stored in this member should be validated. + * + * @return bool + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link getCascadingStrategy()} instead. + */ + public function isCascaded() + { + return (bool) ($this->cascadingStrategy & CascadingStrategy::CASCADE); + } + + /** + * Returns whether arrays or traversable objects stored in this member + * should be traversed and validated in each entry. + * + * @return bool + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link getTraversalStrategy()} instead. + */ + public function isCollectionCascaded() + { + return (bool) ($this->traversalStrategy & (TraversalStrategy::IMPLICIT | TraversalStrategy::TRAVERSE)); + } + + /** + * Returns whether arrays or traversable objects stored in this member + * should be traversed recursively for inner arrays/traversable objects. + * + * @return bool + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link getTraversalStrategy()} instead. + */ + public function isCollectionCascadedDeeply() + { + return !($this->traversalStrategy & TraversalStrategy::STOP_RECURSION); + } + + /** + * Returns the reflection instance for accessing the member's value. + * + * @param object|string $objectOrClassName The object or the class name + * + * @return \ReflectionMethod|\ReflectionProperty The reflection instance + */ + public function getReflectionMember($objectOrClassName) + { + $className = is_string($objectOrClassName) ? $objectOrClassName : get_class($objectOrClassName); + if (!isset($this->reflMember[$className])) { + $this->reflMember[$className] = $this->newReflectionMember($objectOrClassName); + } + + return $this->reflMember[$className]; + } + + /** + * Creates a new reflection instance for accessing the member's value. + * + * Must be implemented by subclasses. + * + * @param object|string $objectOrClassName The object or the class name + * + * @return \ReflectionMethod|\ReflectionProperty The reflection instance + */ + abstract protected function newReflectionMember($objectOrClassName); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MetadataInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MetadataInterface.php new file mode 100644 index 0000000..fda1dbb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MetadataInterface.php @@ -0,0 +1,58 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +use Symfony\Component\Validator\MetadataInterface as LegacyMetadataInterface; + +/** + * A container for validation metadata. + * + * Most importantly, the metadata stores the constraints against which an object + * and its properties should be validated. + * + * Additionally, the metadata stores whether objects should be validated + * against their class' metadata and whether traversable objects should be + * traversed or not. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see CascadingStrategy + * @see TraversalStrategy + */ +interface MetadataInterface extends LegacyMetadataInterface +{ + /** + * Returns the strategy for cascading objects. + * + * @return int The cascading strategy + * + * @see CascadingStrategy + */ + public function getCascadingStrategy(); + + /** + * Returns the strategy for traversing traversable objects. + * + * @return int The traversal strategy + * + * @see TraversalStrategy + */ + public function getTraversalStrategy(); + + /** + * Returns all constraints of this element. + * + * @return Constraint[] A list of Constraint instances + */ + public function getConstraints(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadata.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadata.php new file mode 100644 index 0000000..7319294 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadata.php @@ -0,0 +1,71 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +use Symfony\Component\Validator\Exception\ValidatorException; + +/** + * Stores all metadata needed for validating a class property. + * + * The value of the property is obtained by directly accessing the property. + * The property will be accessed by reflection, so the access of private and + * protected properties is supported. + * + * This class supports serialization and cloning. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see PropertyMetadataInterface + */ +class PropertyMetadata extends MemberMetadata +{ + /** + * Constructor. + * + * @param string $class The class this property is defined on + * @param string $name The name of this property + * + * @throws ValidatorException + */ + public function __construct($class, $name) + { + if (!property_exists($class, $name)) { + throw new ValidatorException(sprintf('Property %s does not exist in class %s', $name, $class)); + } + + parent::__construct($class, $name, $name); + } + + /** + * {@inheritdoc} + */ + public function getPropertyValue($object) + { + return $this->getReflectionMember($object)->getValue($object); + } + + /** + * {@inheritdoc} + */ + protected function newReflectionMember($objectOrClassName) + { + $class = new \ReflectionClass($objectOrClassName); + while (!$class->hasProperty($this->getName())) { + $class = $class->getParentClass(); + } + + $member = new \ReflectionProperty($class->getName(), $this->getName()); + $member->setAccessible(true); + + return $member; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadataInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadataInterface.php new file mode 100644 index 0000000..79e2c79 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadataInterface.php @@ -0,0 +1,36 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +use Symfony\Component\Validator\ClassBasedInterface; +use Symfony\Component\Validator\PropertyMetadataInterface as LegacyPropertyMetadataInterface; + +/** + * Stores all metadata needed for validating the value of a class property. + * + * Most importantly, the metadata stores the constraints against which the + * property's value should be validated. + * + * Additionally, the metadata stores whether objects stored in the property + * should be validated against their class' metadata and whether traversable + * objects should be traversed or not. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see MetadataInterface + * @see CascadingStrategy + * @see TraversalStrategy + */ +interface PropertyMetadataInterface extends MetadataInterface, LegacyPropertyMetadataInterface, ClassBasedInterface +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Mapping/TraversalStrategy.php b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/TraversalStrategy.php new file mode 100644 index 0000000..5122c47 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Mapping/TraversalStrategy.php @@ -0,0 +1,66 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Mapping; + +/** + * Specifies whether and how a traversable object should be traversed. + * + * If the node traverser traverses a node whose value is an instance of + * {@link \Traversable}, and if that node is either a class node or if + * cascading is enabled, then the node's traversal strategy will be checked. + * Depending on the requested traversal strategy, the node traverser will + * iterate over the object and cascade each object or collection returned by + * the iterator. + * + * The traversal strategy is ignored for arrays. Arrays are always iterated. + * + * @since 2.1 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see CascadingStrategy + */ +class TraversalStrategy +{ + /** + * Specifies that a node's value should be iterated only if it is an + * instance of {@link \Traversable}. + */ + const IMPLICIT = 1; + + /** + * Specifies that a node's value should never be iterated. + */ + const NONE = 2; + + /** + * Specifies that a node's value should always be iterated. If the value is + * not an instance of {@link \Traversable}, an exception should be thrown. + */ + const TRAVERSE = 4; + + /** + * Specifies that nested instances of {@link \Traversable} should never be + * iterated. Can be combined with {@link IMPLICIT} or {@link TRAVERSE}. + * + * @deprecated This constant was added for backwards compatibility only. + * It will be removed in Symfony 3.0. + * @internal + */ + const STOP_RECURSION = 8; + + /** + * Not instantiable. + */ + private function __construct() + { + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/MetadataFactoryInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/MetadataFactoryInterface.php new file mode 100644 index 0000000..4c0cbad --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/MetadataFactoryInterface.php @@ -0,0 +1,43 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Returns {@link MetadataInterface} instances for values. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Mapping\Factory\MetadataFactoryInterface} instead. + */ +interface MetadataFactoryInterface +{ + /** + * Returns the metadata for the given value. + * + * @param mixed $value Some value + * + * @return MetadataInterface The metadata for the value + * + * @throws Exception\NoSuchMetadataException If no metadata exists for the given value + */ + public function getMetadataFor($value); + + /** + * Returns whether the class is able to return metadata for the given value. + * + * @param mixed $value Some value + * + * @return bool Whether metadata can be returned for that value + */ + public function hasMetadataFor($value); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/MetadataInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/MetadataInterface.php new file mode 100644 index 0000000..60abfeb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/MetadataInterface.php @@ -0,0 +1,73 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * A container for validation metadata. + * + * The container contains constraints that may belong to different validation + * groups. Constraints for a specific group can be fetched by calling + * {@link findConstraints}. + * + * Implement this interface to add validation metadata to your own metadata + * layer. Each metadata may have named properties. Each property can be + * represented by one or more {@link PropertyMetadataInterface} instances that + * are returned by {@link getPropertyMetadata}. Since + * <tt>PropertyMetadataInterface</tt> inherits from <tt>MetadataInterface</tt>, + * each property may be divided into further properties. + * + * The {@link accept} method of each metadata implements the Visitor pattern. + * The method should forward the call to the visitor's + * {@link ValidationVisitorInterface::visit} method and additionally call + * <tt>accept()</tt> on all structurally related metadata instances. + * + * For example, to store constraints for PHP classes and their properties, + * create a class <tt>ClassMetadata</tt> (implementing <tt>MetadataInterface</tt>) + * and a class <tt>PropertyMetadata</tt> (implementing <tt>PropertyMetadataInterface</tt>). + * <tt>ClassMetadata::getPropertyMetadata($property)</tt> returns all + * <tt>PropertyMetadata</tt> instances for a property of that class. Its + * <tt>accept()</tt>-method simply forwards to <tt>ValidationVisitorInterface::visit()</tt> + * and calls <tt>accept()</tt> on all contained <tt>PropertyMetadata</tt> + * instances, which themselves call <tt>ValidationVisitorInterface::visit()</tt> + * again. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Mapping\MetadataInterface} instead. + */ +interface MetadataInterface +{ + /** + * Implementation of the Visitor design pattern. + * + * Calls {@link ValidationVisitorInterface::visit} and then forwards the + * <tt>accept()</tt>-call to all property metadata instances. + * + * @param ValidationVisitorInterface $visitor The visitor implementing the validation logic + * @param mixed $value The value to validate + * @param string|string[] $group The validation group to validate in + * @param string $propertyPath The current property path in the validation graph + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + */ + public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath); + + /** + * Returns all constraints for a given validation group. + * + * @param string $group The validation group + * + * @return Constraint[] A list of constraint instances + */ + public function findConstraints($group); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ObjectInitializerInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ObjectInitializerInterface.php new file mode 100644 index 0000000..0426bc8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ObjectInitializerInterface.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Prepares an object for validation. + * + * Concrete implementations of this interface are used by {@link ValidationVisitorInterface} + * to initialize objects just before validating them. + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + */ +interface ObjectInitializerInterface +{ + /** + * Initializes an object just before validation. + * + * @param object $object The object to validate + * + * @api + */ + public function initialize($object); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataContainerInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataContainerInterface.php new file mode 100644 index 0000000..91b286a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataContainerInterface.php @@ -0,0 +1,45 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * A container for {@link PropertyMetadataInterface} instances. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Mapping\ClassMetadataInterface} instead. + */ +interface PropertyMetadataContainerInterface +{ + /** + * Check if there's any metadata attached to the given named property. + * + * @param string $property The property name. + * + * @return bool + */ + public function hasPropertyMetadata($property); + + /** + * Returns all metadata instances for the given named property. + * + * If your implementation does not support properties, simply throw an + * exception in this method (for example a <tt>BadMethodCallException</tt>). + * + * @param string $property The property name. + * + * @return PropertyMetadataInterface[] A list of metadata instances. Empty if + * no metadata exists for the property. + */ + public function getPropertyMetadata($property); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataInterface.php new file mode 100644 index 0000000..c18ae83 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataInterface.php @@ -0,0 +1,47 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * A container for validation metadata of a property. + * + * What exactly you define as "property" is up to you. The validator expects + * implementations of {@link MetadataInterface} that contain constraints and + * optionally a list of named properties that also have constraints (and may + * have further sub properties). Such properties are mapped by implementations + * of this interface. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see MetadataInterface + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Mapping\PropertyMetadataInterface} instead. + */ +interface PropertyMetadataInterface extends MetadataInterface +{ + /** + * Returns the name of the property. + * + * @return string The property name. + */ + public function getPropertyName(); + + /** + * Extracts the value of the property from the given container. + * + * @param mixed $containingValue The container to extract the property value from. + * + * @return mixed The value of the property. + */ + public function getPropertyValue($containingValue); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/README.md b/vendor/symfony/validator/Symfony/Component/Validator/README.md new file mode 100644 index 0000000..f6891ff --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/README.md @@ -0,0 +1,126 @@ +Validator Component +=================== + +This component is based on the JSR-303 Bean Validation specification and +enables specifying validation rules for classes using XML, YAML, PHP or +annotations, which can then be checked against instances of these classes. + +Usage +----- + +The component provides "validation constraints", which are simple objects +containing the rules for the validation. Let's validate a simple string +as an example: + +```php +use Symfony\Component\Validator\Validation; +use Symfony\Component\Validator\Constraints\Length; + +$validator = Validation::createValidator(); + +$violations = $validator->validateValue('Bernhard', new Length(array('min' => 10))); +``` + +This validation will fail because the given string is shorter than ten +characters. The precise errors, here called "constraint violations", are +returned by the validator. You can analyze these or return them to the user. +If the violation list is empty, validation succeeded. + +Validation of arrays is possible using the `Collection` constraint: + +```php +use Symfony\Component\Validator\Validation; +use Symfony\Component\Validator\Constraints as Assert; + +$validator = Validation::createValidator(); + +$constraint = new Assert\Collection(array( + 'name' => new Assert\Collection(array( + 'first_name' => new Assert\Length(array('min' => 101)), + 'last_name' => new Assert\Length(array('min' => 1)), + )), + 'email' => new Assert\Email(), + 'simple' => new Assert\Length(array('min' => 102)), + 'gender' => new Assert\Choice(array(3, 4)), + 'file' => new Assert\File(), + 'password' => new Assert\Length(array('min' => 60)), +)); + +$violations = $validator->validateValue($input, $constraint); +``` + +Again, the validator returns the list of violations. + +Validation of objects is possible using "constraint mapping". With such +a mapping you can put constraints onto properties and objects of classes. +Whenever an object of this class is validated, its properties and +method results are matched against the constraints. + +```php +use Symfony\Component\Validator\Validation; +use Symfony\Component\Validator\Constraints as Assert; + +class User +{ + /** + * @Assert\Length(min = 3) + * @Assert\NotBlank + */ + private $name; + + /** + * @Assert\Email + * @Assert\NotBlank + */ + private $email; + + public function __construct($name, $email) + { + $this->name = $name; + $this->email = $email; + } + + /** + * @Assert\True(message = "The user should have a Google Mail account") + */ + public function isGmailUser() + { + return false !== strpos($this->email, '@gmail.com'); + } +} + +$validator = Validation::createValidatorBuilder() + ->enableAnnotationMapping() + ->getValidator(); + +$user = new User('John Doe', 'john@example.com'); + +$violations = $validator->validate($user); +``` + +This example uses the annotation support of Doctrine Common to +map constraints to properties and methods. You can also map constraints +using XML, YAML or plain PHP, if you dislike annotations or don't want +to include Doctrine. Check the documentation for more information about +these drivers. + +Resources +--------- + +Silex integration: + +https://github.com/fabpot/Silex/blob/master/src/Silex/Provider/ValidatorServiceProvider.php + +Documentation: + +http://symfony.com/doc/2.6/book/validation.html + +JSR-303 Specification: + +http://jcp.org/en/jsr/detail?id=303 + +You can run the unit tests with the following command: + + $ cd path/to/Symfony/Component/Validator/ + $ composer install + $ phpunit diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.af.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.af.xlf new file mode 100644 index 0000000..177bb00 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.af.xlf @@ -0,0 +1,227 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Hierdie waarde moet vals wees.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Hierdie waarde moet waar wees.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Hierdie waarde moet van die soort {{type}} wees.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Hierdie waarde moet leeg wees.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Die waarde wat jy gekies het is nie 'n geldige keuse nie.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Jy moet ten minste {{ limit }} kies.|Jy moet ten minste {{ limit }} keuses kies.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Jy moet by die meeste {{ limit }} keuse kies.|Jy moet by die meeste {{ limit }} keuses kies.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Een of meer van die gegewe waardes is ongeldig.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Die veld is nie verwag nie.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Hierdie veld ontbreek.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Hierdie waarde is nie 'n geldige datum nie.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Hierdie waarde is nie 'n geldige datum en tyd nie.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Hierdie waarde is nie 'n geldige e-pos adres nie.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Die lêer kon nie gevind word nie.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Die lêer kan nie gelees word nie.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Die lêer is te groot ({{ size }} {{ suffix }}). Toegelaat maksimum grootte is {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Die MIME-tipe van die lêer is ongeldig ({{ type }}). Toegelaat MIME-tipes is {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Hierdie waarde moet {{ limit }} of minder wees.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Hierdie waarde is te lank. Dit moet {{ limit }} karakter of minder wees.|Hierdie waarde is te lank. Dit moet {{ limit }} karakters of minder wees.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Hierdie waarde moet {{ limit }} of meer wees.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Hierdie waarde is te kort. Dit moet {{ limit }} karakter of meer wees.|Hierdie waarde is te kort. Dit moet {{ limit }} karakters of meer wees.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Hierdie waarde moet nie leeg wees nie.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Hierdie waarde moet nie nul wees nie.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Hierdie waarde moet nul wees.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Hierdie waarde is nie geldig nie.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Hierdie waarde is nie 'n geldige tyd nie.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Hierdie waarde is nie 'n geldige URL nie.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Die twee waardes moet gelyk wees.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Die lêer is te groot. Toegelaat maksimum grootte is {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Die lêer is te groot.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Die lêer kan nie opgelaai word nie.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Hierdie waarde moet 'n geldige nommer wees.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Hierdie lêer is nie 'n geldige beeld nie.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Hierdie is nie 'n geldige IP-adres nie.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Hierdie waarde is nie 'n geldige taal nie.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Hierdie waarde is nie 'n geldige land instelling nie.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Hierdie waarde is nie 'n geldige land nie.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Hierdie waarde word reeds gebruik.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Die grootte van die beeld kon nie opgespoor word nie.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Die beeld breedte is te groot ({{ width }}px). Toegelaat maksimum breedte is {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Die beeld breedte is te klein ({{ width }}px). Minimum breedte verwag is {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Die beeld hoogte is te groot ({{ height }}px). Toegelaat maksimum hoogte is {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Die beeld hoogte is te klein ({{ height }}px). Minimum hoogte verwag is {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Hierdie waarde moet die huidige wagwoord van die gebruiker wees.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Hierdie waarde moet presies {{ limit }} karakter wees.|Hierdie waarde moet presies {{ limit }} karakters wees.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Die lêer is slegs gedeeltelik opgelaai.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Geen lêer is opgelaai nie.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Geen tydelike lêer is ingestel in php.ini nie.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Kan nie tydelike lêer skryf op skyf nie.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>'n PHP-uitbreiding veroorsaak die oplaai van die lêer om te misluk.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Hierdie versameling moet {{ limit }} element of meer bevat.|Hierdie versameling moet {{ limit }} elemente of meer bevat.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Hierdie versameling moet {{ limit }} element of minder bevat.|Hierdie versameling moet {{ limit }} elemente of meer bevat.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Hierdie versameling moet presies {{ limit }} element bevat.|Hierdie versameling moet presies {{ limit }} elemente bevat.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Ongeldige kredietkaart nommer.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Nie-ondersteunde tipe kaart of ongeldige kredietkaart nommer.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ar.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ar.xlf new file mode 100644 index 0000000..b448c2e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ar.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>هذه القيمة يجب أن تكون خاطئة.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>هذه القيمة يجب أن تكون حقيقية.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>هذه القيمة يجب ان تكون من نوع {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>هذه القيمة يجب ان تكون فارغة.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>القيمة المختارة ليست خيارا صحيحا.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>يجب ان تختار {{ limit }} اختيار على الاقل.|يجب ان تختار {{ limit }} اختيار على الاقل.|يجب ان تختار {{ limit }} اختيارات على الاقل.|يجب ان تختار {{ limit }} اختيار على الاقل.|يجب ان تختار {{ limit }} اختيار على الاقل.|يجب ان تختار {{ limit }} اختيار على الاقل.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>يجب ان تختار {{ limit }} اختيار على الاكثر.|يجب ان تختار {{ limit }} اختيار على الاكثر.|يجب ان تختار {{ limit }} اختيارات على الاكثر.|يجب ان تختار {{ limit }} اختيار على الاكثر.|يجب ان تختار {{ limit }} اختيار على الاكثر.|يجب ان تختار {{ limit }} اختيار على الاكثر.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>واحد أو أكثر من القيم المعطاه خاطئ.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>لم يكن من المتوقع هذا المجال.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>هذا المجال مفقود.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>هذه القيمة ليست تاريخا صالحا.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>هذه القيمة ليست تاريخا و وقتا صالحا.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>هذه القيمة ليست عنوان بريد إلكتروني صحيح.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>لا يمكن العثور على الملف.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>الملف غير قابل للقراءة.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>الملف كبير جدا ({{ size }} {{ suffix }}).اقصى مساحه مسموح بها ({{ limit }} {{ suffix }}).</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>نوع الملف غير صحيح ({{ type }}). الانواع المسموح بها هى {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>هذه القيمة يجب ان تكون {{ limit }} او اقل.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حروف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.|هذه القيمة طويلة جدا. يجب ان تكون {{ limit }} حرف او اقل.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>هذه القيمة يجب ان تكون {{ limit }} او اكثر.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حروف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.|هذه القيمة قصيرة جدا. يجب ان تكون {{ limit }} حرف او اكثر.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>هذه القيمة يجب الا تكون فارغة.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>هذه القيمة يجب الا تكون فارغة.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>هذه القيمة يجب ان تكون فارغة.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>هذه القيمة غير صحيحة.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>هذه القيمة ليست وقت صحيح.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>هذه القيمة ليست رابط الكترونى صحيح.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>القيمتان يجب ان تكونا متساويتان.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>الملف كبير جدا. اقصى مساحه مسموح بها {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>الملف كبير جدا.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>لم استطع استقبال الملف.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>هذه القيمة يجب ان تكون رقم.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>هذا الملف ليس صورة صحيحة.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>هذه القيمة ليست عنوان رقمى صحيح.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>هذه القيمة ليست لغة صحيحة.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>هذه القيمة ليست موقع صحيح.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>هذه القيمة ليست بلدا صالحا.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>هذه القيمة مستخدمة بالفعل.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>لم استطع معرفة حجم الصورة.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>عرض الصورة كبير جدا ({{ width }}px). اقصى عرض مسموح به هو{{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>عرض الصورة صغير جدا ({{ width }}px). اقل عرض مسموح به هو{{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>طول الصورة كبير جدا ({{ height }}px). اقصى طول مسموح به هو{{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>طول الصورة صغير جدا ({{ height }}px). اقل طول مسموح به هو{{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>هذه القيمة يجب ان تكون كلمة سر المستخدم الحالية.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حروف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.|هذه القيمة يجب ان تحتوى على {{ limit }} حرف فقط.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>تم استقبال جزء من الملف فقط.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>لم يتم ارسال اى ملف.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>لم يتم تهيئة حافظة مؤقتة فى ملف php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>لم استطع كتابة الملف المؤقت.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>احد اضافات PHP تسببت فى فشل استقبال الملف.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عناصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اكثر.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عناصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر او اقل.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عناصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.|هذه المجموعة يجب ان تحتوى على {{ limit }} عنصر فقط.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>رقم البطاقه غير صحيح.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>نوع البطاقه غير مدعوم او الرقم غير صحيح.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>الرقم IBAN (رقم الحساب المصرفي الدولي) الذي تم إدخاله غير صالح.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>هذه القيمة ليست ISBN-10 صالحة.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>هذه القيمة ليست ISBN-13 صالحة.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>هذه القيمة ليست ISBN-10 صالحة ولا ISBN-13 صالحة.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>هذه القيمة ليست ISSN صالحة.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>العُملة غير صحيحة.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>القيمة يجب ان تساوي {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>القيمة يجب ان تكون اعلي من {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>القيمة يجب ان تكون مساوية او اعلي من {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>القيمة يجب ان تطابق {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>القيمة يجب ان تكون اقل من {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>القيمة يجب ان تساوي او تقل عن {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>القيمة يجب ان لا تساوي {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>القيمة يجب ان لا تطابق {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.az.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.az.xlf new file mode 100644 index 0000000..add868c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.az.xlf @@ -0,0 +1,227 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Bu dəyər false olmalıdır.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Bu dəyər true olmalıdır.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Bu dəyərin tipi {{ type }} olmalıdır.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Bu dəyər boş olmalıdır.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Seçdiyiniz dəyər düzgün bir seçim değil.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Ən az {{ limit }} seçim qeyd edilməlidir.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Ən çox {{ limit }} seçim qeyd edilməlidir.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Təqdim edilən dəyərlərdən bir və ya bir neçəsi yanlışdır.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Bu sahə gözlənilmirdi.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Bu sahə əksikdir.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Bu dəyər düzgün bir tarix deyil.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Bu dəyər düzgün bir tarixsaat deyil.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Bu dəyər düzgün bir e-poçt adresi deyil.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Fayl tapılmadı.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Fayl oxunabilən deyil.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fayl çox böyükdür ({{ size }} {{ suffix }}). İcazə verilən maksimum fayl ölçüsü {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Faylın mime tipi yanlışdr ({{ type }}). İcazə verilən mime tipləri {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Bu dəyər {{ limit }} və ya altında olmalıdır.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Bu dəyər çox uzundur. {{ limit }} və ya daha az simvol olmalıdır.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Bu dəyər {{ limit }} veya daha fazla olmalıdır.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Bu dəyər çox qısadır. {{ limit }} və ya daha çox simvol olmalıdır.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Bu dəyər boş olmamalıdır.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Bu dəyər boş olmamalıdır.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Bu dəyər boş olmamalıdır.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Bu dəyər doğru deyil.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Bu dəyər doğru bir saat deyil.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Bu dəyər doğru bir URL değil.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>İki dəyər eyni olmalıdır.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fayl çox böyükdür. İcazə verilən ən böyük fayl ölçüsü {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Fayl çox böyükdür.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Fayl yüklənəbilmir.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Bu dəyər rəqəm olmalıdır.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Bu fayl düzgün bir şəkil deyil.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Bu düzgün bir IP adresi deyil.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Bu dəyər düzgün bir dil deyil.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Bu dəyər düzgün bir dil deyil.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Bu dəyər düzgün bir ölkə deyil.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Bu dəyər hal-hazırda istifadədədir.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Şəklin ölçüsü hesablana bilmir.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Şəklin genişliyi çox böyükdür ({{ width }}px). İcazə verilən ən böyük genişlik {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Şəklin genişliyi çox kiçikdir ({{ width }}px). Ən az {{ min_width }}px olmalıdır.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Şəklin yüksəkliyi çox böyükdür ({{ height }}px). İcazə verilən ən böyük yüksəklik {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Şəklin yüksəkliyi çox kiçikdir ({{ height }}px). Ən az {{ min_height }}px olmalıdır.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Bu dəyər istifadəçinin hazırkı parolu olmalıdır.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Bu dəyər tam olaraq {{ limit }} simvol olmaldır.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Fayl qismən yükləndi.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Fayl yüklənmədi.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>php.ini'də müvəqqəti qovluq quraşdırılmayıb.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Müvəqqəti fayl diskə yazıla bilmir.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Bir PHP əlavəsi faylın yüklənməsinə mane oldu.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Bu kolleksiyada {{ limit }} və ya daha çox element olmalıdır.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Bu kolleksiyada {{ limit }} və ya daha az element olmalıdır.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Bu kolleksiyada tam olaraq {{ limit }} element olmalıdır.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Yanlış kart nömrəsi.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Dəstəklənməyən kart tipi və ya yanlış kart nömrəsi.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.bg.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.bg.xlf new file mode 100644 index 0000000..7c5da55 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.bg.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Стойността трябва да бъде лъжа (false).</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Стойността трябва да бъде истина (true).</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Стойността трябва да бъде от тип {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Стойността трябва да бъде празна.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Избраната стойност е невалидна.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Трябва да изберете поне {{ limit }} опция.|Трябва да изберете поне {{ limit }} опции.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Трябва да изберете най-много {{ limit }} опция.|Трябва да изберете най-много {{ limit }} опции.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Една или повече от зададените стойности е невалидна.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Това поле не се е очаквало.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Това поле липсва.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Стойността не е валидна дата (date).</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Стойността не е валидна дата (datetime).</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Стойността не е валиден email адрес.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Файлът не беше открит.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Файлът не може да бъде прочетен.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Файлът е твърде голям ({{ size }} {{ suffix }}). Максималният размер е {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Майм типа на файла е невалиден ({{ type }}). Разрешени майм типове са {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Стойността трябва да бъде {{ limit }} или по-малко.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Стойността е твърде дълга. Трябва да съдържа най-много {{ limit }} символ.|Стойността е твърде дълга. Трябва да съдържа най-много {{ limit }} символа.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Стойността трябва да бъде {{ limit }} или повече.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Стойността е твърде кратка. Трябва да съдържа поне {{ limit }} символ.|Стойността е твърде кратка. Трябва да съдържа поне {{ limit }} символа.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Стойността не трябва да бъде празна.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Стойността не трябва да бъде null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Стойността трябва да бъде null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Стойността не е валидна.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Стойността не е валидно време (time).</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Стойността не е валиден URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Двете стойности трябва да бъдат равни.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Файлът е твърде голям. Разрешеният максимален размер е {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Файлът е твърде голям.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Файлът не може да бъде качен.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Стойността трябва да бъде валиден номер.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Файлът не е валидно изображение.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Това не е валиден IP адрес.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Стойността не е валиден език.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Стойността не е валидна локализация.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Стойността не е валидна държава.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Стойността вече е в употреба.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Размера на изображението не може да бъде определен.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Изображението е твърде широко ({{ width }}px). Широчината трябва да бъде максимум {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Изображението е с твърде малка широчина ({{ width }}px). Широчината трябва да бъде минимум {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Изображението е с твърде голяма височина ({{ height }}px). Височината трябва да бъде максимум {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Изображението е с твърде малка височина ({{ height }}px). Височина трябва да бъде минимум {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Стойността трябва да бъде текущата потребителска парола.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Стойността трябва да бъде точно {{ limit }} символ.|Стойността трябва да бъде точно {{ limit }} символа.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Файлът е качен частично.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Файлът не беше качен.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Не е посочена директория за временни файлове в php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Не може да запише временен файл на диска.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP разширение предизвика прекъсване на качването.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Колекцията трябва да съдържа поне {{ limit }} елемент.|Колекцията трябва да съдържа поне {{ limit }} елемента.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Колекцията трябва да съдържа най-много {{ limit }} елемент.|Колекцията трябва да съдържа най-много {{ limit }} елемента.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Колекцията трябва да съдържа точно {{ limit }} елемент.|Колекцията трябва да съдържа точно {{ limit }} елемента.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Невалиден номер на картата.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Неподдържан тип карта или невалиден номер на картата.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Невалиден Международен номер на банкова сметка (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Невалиден ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Невалиден ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Невалидна стойност както за ISBN-10, така и за ISBN-13 .</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Невалиден Международен стандартен сериен номер (ISSN).</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Невалидна валута.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Стойността трябва да бъде равна на {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Стойността трябва да бъде по-голяма от {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Стойността трябва да бъде по-голяма или равна на {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Стойността трябва да бъде идентична с {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Стойността трябва да бъде по-малка {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Стойността трябва да бъде по-малка или равна на {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Стойността не трябва да бъде равна на {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Стойността не трябва да бъде идентична с {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ca.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ca.xlf new file mode 100644 index 0000000..85b6970 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ca.xlf @@ -0,0 +1,307 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Aquest valor hauria de ser fals.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Aquest valor hauria de ser cert.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Aquest valor hauria de ser del tipus {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Aquest valor hauria d'estar buit.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>El valor seleccionat no és una opció vàlida.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Ha de seleccionar almenys {{ limit }} opció.|Ha de seleccionar almenys {{ limit }} opcions.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Ha de seleccionar com a màxim {{ limit }} opció.|Ha de seleccionar com a màxim {{ limit }} opcions.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Un o més dels valors facilitats són incorrectes.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Aquest camp no s'esperava.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Aquest camp està desaparegut.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Aquest valor no és una data vàlida.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Aquest valor no és una data i hora vàlida.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Aquest valor no és una adreça d'email vàlida.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>No s'ha pogut trobar l'arxiu.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>No es pot llegir l'arxiu.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>L'arxiu és massa gran ({{ size }} {{ suffix }}). La grandària màxima permesa és {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>El tipus mime de l'arxiu no és vàlid ({{ type }}). Els tipus mime vàlids són {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Aquest valor hauria de ser {{ limit }} o menys.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Aquest valor és massa llarg. Hauria de tenir {{ limit }} caràcter o menys.|Aquest valor és massa llarg. Hauria de tenir {{ limit }} caràcters o menys.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Aquest valor hauria de ser {{ limit }} o més.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Aquest valor és massa curt. Hauria de tenir {{ limit }} caràcters o més.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Aquest valor no hauria d'estar buit.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Aquest valor no hauria de ser null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Aquest valor hauria de ser null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Aquest valor no és vàlid.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Aquest valor no és una hora vàlida.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Aquest valor no és una URL vàlida.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Els dos valors haurien de ser iguals.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>L'arxiu és massa gran. El tamany màxim permés és {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>L'arxiu és massa gran.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>No es pot pujar l'arxiu.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Aquest valor hauria de ser un nombre vàlid.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>L'arxiu no és una imatge vàlida.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Això no és una adreça IP vàlida.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Aquest valor no és un idioma vàlid.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Aquest valor no és una localització vàlida.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Aquest valor no és un país vàlid.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Aquest valor ja s'ha utilitzat.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>No s'ha pogut determinar la grandària de la imatge.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>L'amplària de la imatge és massa gran ({{ width }}px). L'amplària màxima permesa són {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>L'amplària de la imatge és massa petita ({{ width }}px). L'amplària mínima requerida són {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>L'altura de la imatge és massa gran ({{ height }}px). L'altura màxima permesa són {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>L'altura de la imatge és massa petita ({{ height }}px). L'altura mínima requerida són {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Aquest valor hauria de ser la contrasenya actual de l'usuari.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Aquest valor hauria de tenir exactament {{ limit }} caràcter.|Aquest valor hauria de tenir exactament {{ limit }} caràcters.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>L'arxiu va ser només pujat parcialment.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Cap arxiu va ser pujat.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Cap carpeta temporal va ser configurada en php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>No es va poder escriure l'arxiu temporal en el disc.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Una extensió de PHP va fer que la pujada fallara.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Aquesta col·lecció ha de contenir {{ limit }} element o més.|Aquesta col·lecció ha de contenir {{ limit }} elements o més.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Aquesta col·lecció ha de contenir {{ limit }} element o menys.|Aquesta col·lecció ha de contenir {{ limit }} elements o menys.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Aquesta col·lecció ha de contenir exactament {{ limit }} element.|Aquesta col·lecció ha de contenir exactament {{ limit }} elements.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Número de targeta invàlid.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Tipus de targeta no suportada o número de targeta invàlid.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Això no és un nombre de compte bancari internacional (IBAN) vàlid.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Aquest valor no és un ISBN-10 vàlid.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Aquest valor no és un ISBN-13 vàlid.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Aquest valor no és ni un ISBN-10 vàlid ni un ISBN-13 vàlid.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Aquest valor no és un ISSN vàlid.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Aquest valor no és una divisa vàlida.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Aquest valor hauria de ser igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Aquest valor hauria de ser més gran a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Aquest valor hauria de ser major o igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Aquest valor hauria de ser idèntic a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Aquest valor hauria de ser menor a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Aquest valor hauria de ser menor o igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Aquest valor no hauria de ser igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Aquest valor no hauria de idèntic a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>La proporció de l'imatge és massa gran ({{ ratio }}). La màxima proporció permesa és {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>La proporció de l'imatge és massa petita ({{ ratio }}). La mínima proporció permesa és {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>L'imatge és quadrada({{ width }}x{{ height }}px). Les imatges quadrades no estan permeses.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>L'imatge està orientada horitzontalment ({{ width }}x{{ height }}px). Les imatges orientades horitzontalment no estan permeses.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>L'imatge està orientada verticalment ({{ width }}x{{ height }}px). Les imatges orientades verticalment no estan permeses.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>No està permès un fixter buit.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cs.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cs.xlf new file mode 100644 index 0000000..2ae47b2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cs.xlf @@ -0,0 +1,307 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Tato hodnota musí být nepravdivá (false).</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Tato hodnota musí být pravdivá (true).</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Tato hodnota musí být typu {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Tato hodnota musí být prázdná.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Vybraná hodnota není platnou možností.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Musí být vybrána nejméně {{ limit }} možnost.|Musí být vybrány nejméně {{ limit }} možnosti.|Musí být vybráno nejméně {{ limit }} možností.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Musí být vybrána maximálně {{ limit }} možnost.|Musí být vybrány maximálně {{ limit }} možnosti.|Musí být vybráno maximálně {{ limit }} možností.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Některé z uvedených hodnot jsou neplatné.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Toto pole nebyla očekávána.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Toto pole chybí.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Tato hodnota není platné datum.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Tato hodnota není platné datum s časovým údajem.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Tato hodnota není platná e-mailová adresa.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Soubor nebyl nalezen.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Soubor je nečitelný.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Soubor je příliš velký ({{ size }} {{ suffix }}). Maximální povolená velikost souboru je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Neplatný mime typ souboru ({{ type }}). Povolené mime typy souborů jsou {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Tato hodnota musí být {{ limit }} nebo méně.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Tato hodnota je příliš dlouhá. Musí obsahovat maximálně {{ limit }} znak.|Tato hodnota je příliš dlouhá. Musí obsahovat maximálně {{ limit }} znaky.|Tato hodnota je příliš dlouhá. Musí obsahovat maximálně {{ limit }} znaků.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Tato hodnota musí být {{ limit }} nebo více.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Tato hodnota je příliš krátká. Musí obsahovat minimálně {{ limit }} znak.|Tato hodnota je příliš krátká. Musí obsahovat minimálně {{ limit }} znaky.|Tato hodnota je příliš krátká. Musí obsahovat minimálně {{ limit }} znaků.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Tato hodnota nesmí být prázdná.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Tato hodnota nesmí být null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Tato hodnota musí být null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Tato hodnota není platná.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Tato hodnota není platný časový údaj.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Tato hodnota není platná URL adresa.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Tyto dvě hodnoty musí být stejné.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Soubor je příliš velký. Maximální povolená velikost souboru je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Soubor je příliš velký.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Soubor se nepodařilo nahrát.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Tato hodnota musí být číslo.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Tento soubor není obrázek.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Toto není platná IP adresa.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Tento jazyk neexistuje.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Tato lokalizace neexistuje.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Tato země neexistuje.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Tato hodnota je již používána.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Nepodařily se zjistit rozměry obrázku.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Obrázek je příliš široký ({{ width }}px). Maximální povolená šířka obrázku je {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Obrázek je příliš úzký ({{ width }}px). Minimální šířka musí být {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Obrázek je příliš vysoký ({{ height }}px). Maximální povolená výška obrázku je {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Obrázek je příliš nízký ({{ height }}px). Minimální výška obrázku musí být {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Tato hodnota musí být aktuální heslo uživatele.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Tato hodnota musí mít přesně {{ limit }} znak.|Tato hodnota musí mít přesně {{ limit }} znaky.|Tato hodnota musí mít přesně {{ limit }} znaků.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Byla nahrána jen část souboru.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Žádný soubor nebyl nahrán.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>V php.ini není nastavena cesta k adresáři pro dočasné soubory.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Dočasný soubor se nepodařilo zapsat na disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Rozšíření PHP zabránilo nahrání souboru.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Tato kolekce musí obsahovat minimálně {{ limit }} prvek.|Tato kolekce musí obsahovat minimálně {{ limit }} prvky.|Tato kolekce musí obsahovat minimálně {{ limit }} prvků.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Tato kolekce musí obsahovat maximálně {{ limit }} prvek.|Tato kolekce musí obsahovat maximálně {{ limit }} prvky.|Tato kolekce musí obsahovat maximálně {{ limit }} prvků.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Tato kolekce musí obsahovat přesně {{ limit }} prvek.|Tato kolekce musí obsahovat přesně {{ limit }} prvky.|Tato kolekce musí obsahovat přesně {{ limit }} prvků.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Neplatné číslo karty.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Nepodporovaný typ karty nebo neplatné číslo karty.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Toto je neplatný IBAN.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Tato hodnota není platné ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Tato hodnota není platné ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Tato hodnota není platné ISBN-10 ani ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Tato hodnota není platné ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Tato měna neexistuje.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Tato hodnota musí být rovna {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Tato hodnota musí být větší než {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Tato hodnota musí být větší nebo rovna {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Tato hodnota musí být typu {{ compared_value_type }} a zároveň musí být rovna {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Tato hodnota musí být menší než {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Tato hodnota musí být menší nebo rovna {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Tato hodnota nesmí být rovna {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Tato hodnota nesmí být typu {{ compared_value_type }} a zároveň nesmí být rovna {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Poměr stran obrázku je příliš velký ({{ ratio }}). Maximální povolený poměr stran obrázku je {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Poměr stran obrázku je příliš malý ({{ ratio }}). Minimální povolený poměr stran obrázku je {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Strany obrázku jsou čtvercové ({{ width }}x{{ height }}px). Čtvercové obrázky nejsou povolené.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Obrázek je orientovaný na šířku ({{ width }}x{{ height }}px). Obrázky orientované na šířku nejsou povolené.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Obrázek je orientovaný na výšku ({{ width }}x{{ height }}px). Obrázky orientované na výšku nejsou povolené.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Soubor nesmí být prázdný.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cy.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cy.xlf new file mode 100644 index 0000000..da7cb9a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cy.xlf @@ -0,0 +1,227 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Dylid bod y gwerth hwn yn ffug.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Dylid bod y gwerth hwn yn wir.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Dylid bod y gwerth hwn bod o fath {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Dylid bod y gwerth hwn yn wag.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Nid yw'r gwerth â ddewiswyd yn ddilys.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Rhaid dewis o leiaf {{ limit }} opsiwn.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Rhaid dewis dim mwy na {{ limit }} opsiwn.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Mae un neu fwy o'r gwerthoedd a roddwyd yn annilys.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Nid oedd disgwyl y maes hwn.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Mae'r maes hwn ar goll.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Nid yw'r gwerth yn ddyddiad dilys.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Nid yw'r gwerth yn datetime dilys.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Nid yw'r gwerth yn gyfeiriad ebost dilys.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Ni ddarganfyddwyd y ffeil.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Ni ellir darllen y ffeil.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Mae'r ffeil yn rhy fawr ({{ size }} {{ suffix }}). Yr uchafswm â ganiateir yw {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Nid yw math mime y ffeil yn ddilys ({{ type }}). Dyma'r mathau â ganiateir {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Dylai'r gwerth hwn fod yn {{ limit }} neu lai.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Mae'r gwerth hwn rhy hir. Dylai gynnwys {{ limit }} nodyn cyfrifiadurol neu lai.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Dylai'r gwerth hwn fod yn {{ limit }} neu fwy.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Mae'r gwerth hwn yn rhy fyr. Dylai gynnwys {{ limit }} nodyn cyfrifiadurol neu fwy.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Ni ddylai'r gwerth hwn fod yn wag.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Ni ddylai'r gwerth hwn fod yn null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Dylai'r gwerth fod yn null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Nid yw'r gwerth hwn yn ddilys.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Nid yw'r gwerth hwn yn amser dilys.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Nid yw'r gwerth hwn yn URL dilys.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Rhaid i'r ddau werth fod yn gyfystyr a'u gilydd.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Mae'r ffeil yn rhy fawr. Yr uchafswm â ganiateir yw {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Mae'r ffeil yn rhy fawr.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Methwyd ag uwchlwytho'r ffeil.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Dylai'r gwerth hwn fod yn rif dilys.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Nid yw'r ffeil hon yn ddelwedd dilys.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Nid yw hwn yn gyfeiriad IP dilys.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Nid yw'r gwerth hwn yn iaith ddilys.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Nid yw'r gwerth hwn yn locale dilys.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Nid yw'r gwerth hwn yn wlad dilys.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Mae'r gwerth hwn eisoes yn cael ei ddefnyddio.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Methwyd â darganfod maint y ddelwedd.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Mae lled y ddelwedd yn rhy fawr ({{ width }}px). Y lled mwyaf â ganiateir yw {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Mae lled y ddelwedd yn rhy fach ({{ width }}px). Y lled lleiaf â ganiateir yw {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Mae uchder y ddelwedd yn rhy fawr ({{ width }}px). Yr uchder mwyaf â ganiateir yw {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Mae uchder y ddelwedd yn rhy fach ({{ width }}px). Yr uchder lleiaf â ganiateir yw {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Dylaid bod y gwerth hwn yn gyfrinair presenol y defnyddiwr.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Dylai'r gwerth hwn fod yn union {{ limit }} nodyn cyfrifiadurol o hyd.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Dim ond rhan o'r ffeil ag uwchlwythwyd.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Ni uwchlwythwyd unrhyw ffeil.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Nid oes ffolder dros-dro wedi'i gosod yn php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Methwyd ag ysgrifennu'r ffeil dros-dro ar ddisg.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Methwyd ag uwchlwytho oherwydd ategyn PHP.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Dylai'r casgliad hwn gynnwys {{ limit }} elfen neu fwy.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Dylai'r casgliad hwn gynnwys {{ limit }} elfen neu lai.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Dylai'r casgliad hwn gynnwys union {{ limit }} elfen.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Nid oedd rhif y cerdyn yn ddilys.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Unai ni dderbynir y math yna o gerdyn, neu nid yw rhif y cerdyn yn ddilys.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.da.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.da.xlf new file mode 100644 index 0000000..14e479a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.da.xlf @@ -0,0 +1,247 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Værdien skal være falsk.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Værdien skal være sand.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Værdien skal være af typen {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Værdien skal være blank.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Værdien skal være en af de givne muligheder.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Du skal vælge mindst {{ limit }} muligheder.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Du kan højest vælge {{ limit }} muligheder.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>En eller flere af de oplyste værdier er ugyldige.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Feltet blev ikke forventet.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Dette felt er mangler.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Værdien er ikke en gyldig dato.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Værdien er ikke en gyldig dato og tid.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Værdien er ikke en gyldig e-mail adresse.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Filen kunne ikke findes.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Filen kan ikke læses.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Filen er for stor ({{ size }} {{ suffix }}). Tilladte maksimale størrelse {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Mimetypen af filen er ugyldig ({{ type }}). Tilladte mimetyper er {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Værdien skal være {{ limit }} eller mindre.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Værdien er for lang. Den skal have {{ limit }} bogstaver eller mindre.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Værdien skal være {{ limit }} eller mere.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Værdien er for kort. Den skal have {{ limit }} tegn eller flere.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Værdien må ikke være blank.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Værdien må ikke være tom (null).</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Værdien skal være tom (null).</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Værdien er ikke gyldig.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Værdien er ikke en gyldig tid.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Værdien er ikke en gyldig URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>De to værdier skal være ens.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Filen er for stor. Den maksimale størrelse er {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Filen er for stor.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Filen kunne ikke blive uploadet.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Værdien skal være et gyldigt tal.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Filen er ikke gyldigt billede.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Dette er ikke en gyldig IP adresse.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Værdien er ikke et gyldigt sprog.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Værdien er ikke en gyldig lokalitet.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Værdien er ikke et gyldigt land.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Værdien er allerede i brug.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Størrelsen på billedet kunne ikke detekteres.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Billedbredden er for stor ({{ width }}px). Tilladt maksimumsbredde er {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Billedebredden er for lille ({{ width }}px). Forventet minimumshøjde er {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Billedhøjden er for stor ({{ height }}px). Tilladt maksimumshøjde er {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Billedhøjden er for lille ({{ height }}px). Forventet minimumshøjde er {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Værdien skal være brugerens nuværende password.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Værdien skal have præcis {{ limit }} tegn.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Filen var kun delvis uploadet.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Ingen fil blev uploadet.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Ingen midlertidig mappe er konfigureret i php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Kan ikke skrive midlertidig fil til disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>En PHP udvidelse forårsagede fejl i upload.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Denne samling skal indeholde {{ limit }} element eller flere.|Denne samling skal indeholde {{ limit }} elementer eller flere.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Denne samling skal indeholde {{ limit }} element eller mindre.|Denne samling skal indeholde {{ limit }} elementer eller mindre.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Denne samling skal indeholde præcis {{ limit }} element.|Denne samling skal indeholde præcis {{ limit }} elementer.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Ugyldigt kortnummer.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Ikke-understøttet korttype eller ugyldigt kortnummer.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Det er ikke en gyldig International Bank Account Number (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Værdien er ikke en gyldig ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Værdien er ikke en gyldig ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Værdien er hverken en gyldig ISBN-10 eller en gyldig ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Værdien er ikke en gyldig ISSN.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.de.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.de.xlf new file mode 100644 index 0000000..d2e13c6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.de.xlf @@ -0,0 +1,311 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Dieser Wert sollte false sein.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Dieser Wert sollte true sein.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Dieser Wert sollte vom Typ {{ type }} sein.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Dieser Wert sollte leer sein.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Sie haben einen ungültigen Wert ausgewählt.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Sie müssen mindestens {{ limit }} Möglichkeit wählen.|Sie müssen mindestens {{ limit }} Möglichkeiten wählen.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Sie dürfen höchstens {{ limit }} Möglichkeit wählen.|Sie dürfen höchstens {{ limit }} Möglichkeiten wählen.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Einer oder mehrere der angegebenen Werte sind ungültig.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Dieses Feld wurde nicht erwartet.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Dieses Feld fehlt.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Dieser Wert entspricht keiner gültigen Datumsangabe.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Dieser Wert entspricht keiner gültigen Datums- und Zeitangabe.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Dieser Wert ist keine gültige E-Mail-Adresse.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Die Datei wurde nicht gefunden.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Die Datei ist nicht lesbar.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Die Datei ist zu groß ({{ size }} {{ suffix }}). Die maximal zulässige Größe beträgt {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Der Dateityp ist ungültig ({{ type }}). Erlaubte Dateitypen sind {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Dieser Wert sollte kleiner oder gleich {{ limit }} sein.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Diese Zeichenkette ist zu lang. Sie sollte höchstens {{ limit }} Zeichen haben.|Diese Zeichenkette ist zu lang. Sie sollte höchstens {{ limit }} Zeichen haben.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Dieser Wert sollte größer oder gleich {{ limit }} sein.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Diese Zeichenkette ist zu kurz. Sie sollte mindestens {{ limit }} Zeichen haben.|Diese Zeichenkette ist zu kurz. Sie sollte mindestens {{ limit }} Zeichen haben.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Dieser Wert sollte nicht leer sein.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Dieser Wert sollte nicht null sein.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Dieser Wert sollte null sein.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Dieser Wert ist nicht gültig.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Dieser Wert entspricht keiner gültigen Zeitangabe.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Dieser Wert ist keine gültige URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Die beiden Werte sollten identisch sein.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Die Datei ist zu groß. Die maximal zulässige Größe beträgt {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Die Datei ist zu groß.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Die Datei konnte nicht hochgeladen werden.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Dieser Wert sollte eine gültige Zahl sein.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Diese Datei ist kein gültiges Bild.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Dies ist keine gültige IP-Adresse.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Dieser Wert entspricht keiner gültigen Sprache.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Dieser Wert entspricht keinem gültigen Gebietsschema.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Dieser Wert entspricht keinem gültigen Land.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Dieser Wert wird bereits verwendet.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Die Größe des Bildes konnte nicht ermittelt werden.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Die Bildbreite ist zu groß ({{ width }}px). Die maximal zulässige Breite beträgt {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Die Bildbreite ist zu gering ({{ width }}px). Die erwartete Mindestbreite beträgt {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Die Bildhöhe ist zu groß ({{ height }}px). Die maximal zulässige Höhe beträgt {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Die Bildhöhe ist zu gering ({{ height }}px). Die erwartete Mindesthöhe beträgt {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Dieser Wert sollte dem aktuellen Benutzerpasswort entsprechen.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Dieser Wert sollte genau {{ limit }} Zeichen lang sein.|Dieser Wert sollte genau {{ limit }} Zeichen lang sein.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Die Datei wurde nur teilweise hochgeladen.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Es wurde keine Datei hochgeladen.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Es wurde kein temporärer Ordner in der php.ini konfiguriert.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Kann die temporäre Datei nicht speichern.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Eine PHP-Erweiterung verhinderte den Upload.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Diese Sammlung sollte {{ limit }} oder mehr Elemente beinhalten.|Diese Sammlung sollte {{ limit }} oder mehr Elemente beinhalten.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Diese Sammlung sollte {{ limit }} oder weniger Elemente beinhalten.|Diese Sammlung sollte {{ limit }} oder weniger Elemente beinhalten.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Diese Sammlung sollte genau {{ limit }} Element beinhalten.|Diese Sammlung sollte genau {{ limit }} Elemente beinhalten.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Ungültige Kartennummer.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Nicht unterstützer Kartentyp oder ungültige Kartennummer.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Dieser Wert ist keine gültige IBAN-Kontonummer.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Dieser Wert entspricht keiner gültigen ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Dieser Wert entspricht keiner gültigen ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Dieser Wert ist weder eine gültige ISBN-10 noch eine gültige ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Dieser Wert ist keine gültige ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Dieser Wert ist keine gültige Währung.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Dieser Wert sollte gleich {{ compared_value }} sein.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Dieser Wert sollte größer als {{ compared_value }} sein.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Dieser Wert sollte größer oder gleich {{ compared_value }} sein.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Dieser Wert sollte identisch sein mit {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Dieser Wert sollte kleiner als {{ compared_value }} sein.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Dieser Wert sollte kleiner oder gleich {{ compared_value }} sein.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Dieser Wert sollte nicht {{ compared_value }} sein.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Dieser Wert sollte nicht identisch sein mit {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Das Seitenverhältnis des Bildes ist zu groß ({{ ratio }}). Der erlaubte Maximalwert ist {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Das Seitenverhältnis des Bildes ist zu klein ({{ ratio }}). Der erwartete Minimalwert ist {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Das Bild ist quadratisch ({{ width }}x{{ height }}px). Quadratische Bilder sind nicht erlaubt.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Das Bild ist im Querformat ({{ width }}x{{ height }}px). Bilder im Querformat sind nicht erlaubt.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Das Bild ist im Hochformat ({{ width }}x{{ height }}px). Bilder im Hochformat sind nicht erlaubt.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Eine leere Datei ist nicht erlaubt.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>Dieser Wert entspricht nicht dem erwarteten Zeichensatz {{ charset }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.el.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.el.xlf new file mode 100644 index 0000000..4fa0d42 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.el.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Αυτή η τιμή πρέπει να είναι ψευδής.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Αυτή η τιμή πρέπει να είναι αληθής.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Αυτή η τιμή πρέπει να είναι τύπου {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Αυτή η τιμή πρέπει να είναι κενή.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Η τιμή που επιλέχθηκε δεν αντιστοιχεί σε έγκυρη επιλογή.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Πρέπει να επιλέξετε τουλάχιστον {{ limit }} επιλογή.|Πρέπει να επιλέξετε τουλάχιστον {{ limit }} επιλογές.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Πρέπει να επιλέξετε το πολύ {{ limit }} επιλογή.|Πρέπει να επιλέξετε το πολύ {{ limit }} επιλογές.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Μια ή περισσότερες τιμές δεν είναι έγκυρες.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Αυτό το πεδίο δεν ήταν αναμενόμενο.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Λείπει αυτό το πεδίο.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Η τιμή δεν αντιστοιχεί σε έγκυρη ημερομηνία.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Η τιμή δεν αντιστοιχεί σε έγκυρη ημερομηνία και ώρα.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Η τιμή δεν αντιστοιχεί σε έγκυρο email.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Το αρχείο δε μπορεί να βρεθεί.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Το αρχείο δεν είναι αναγνώσιμο.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Το αρχείο είναι πολύ μεγάλο ({{ size }} {{ suffix }}). Το μέγιστο επιτρεπτό μέγεθος είναι {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Ο τύπος mime του αρχείου δεν είναι έγκυρος ({{ type }}). Οι έγκρυοι τύποι mime είναι {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Αυτή η τιμή θα έπρεπε να είναι {{ limit }} ή λιγότερο.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Αυτή η τιμή είναι πολύ μεγάλη. Θα έπρεπε να έχει {{ limit }} χαρακτήρα ή λιγότερο.|Αυτή η τιμή είναι πολύ μεγάλη. Θα έπρεπε να έχει {{ limit }} χαρακτήρες ή λιγότερο.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Αυτή η τιμή θα έπρεπε να είναι {{ limit }} ή περισσότερο.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Αυτή η τιμή είναι πολύ μικρή. Θα έπρεπε να έχει {{ limit }} χαρακτήρα ή περισσότερο.|Αυτή η τιμή είναι πολύ μικρή. Θα έπρεπε να έχει {{ limit }} χαρακτήρες ή περισσότερο.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Αυτή η τιμή δεν πρέπει να είναι κενή.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Αυτή η τιμή δεν πρέπει να είναι μηδενική.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Αυτή η τιμή πρέπει να είναι μηδενική.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Αυτή η τιμή δεν είναι έκγυρη.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Αυτή η τιμή δεν αντιστοιχεί σε έγκυρη ώρα.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Αυτή η τιμή δεν αντιστοιχεί σε έγκυρο URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Οι δύο τιμές θα πρέπει να είναι ίδιες.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Το αρχείο είναι πολύ μεγάλο. Το μέγιστο επιτρεπτό μέγεθος είναι {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Το αρχείο είναι πολύ μεγάλο.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Το αρχείο δε μπορεί να ανέβει.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Αυτή η τιμή θα πρέπει να είναι ένας έγκυρος αριθμός.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Το αρχείο δεν αποτελεί έγκυρη εικόνα.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Αυτό δεν είναι μια έκγυρη διεύθυνση IP.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Αυτή η τιμή δεν αντιστοιχεί σε μια έκγυρη γλώσσα.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Αυτή η τιμή δεν αντιστοιχεί σε έκγυρο κωδικό τοποθεσίας.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Αυτή η τιμή δεν αντιστοιχεί σε μια έκγυρη χώρα.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Αυτή η τιμή χρησιμοποιείται ήδη.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Το μέγεθος της εικόνας δεν ήταν δυνατό να ανιχνευθεί.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Το πλάτος της εικόνας είναι πολύ μεγάλο ({{ width }}px). Το μέγιστο επιτρεπτό πλάτος είναι {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Το πλάτος της εικόνας είναι πολύ μικρό ({{ width }}px). Το ελάχιστο επιτρεπτό πλάτος είναι {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Το ύψος της εικόνας είναι πολύ μεγάλο ({{ height }}px). Το μέγιστο επιτρεπτό ύψος είναι {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Το ύψος της εικόνας είναι πολύ μικρό ({{ height }}px). Το ελάχιστο επιτρεπτό ύψος είναι {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Αυτή η τιμή θα έπρεπε να είναι ο τρέχων κωδικός.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Αυτή η τιμή θα έπρεπε να έχει ακριβώς {{ limit }} χαρακτήρα.|Αυτή η τιμή θα έπρεπε να έχει ακριβώς {{ limit }} χαρακτήρες.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Το αρχείο δεν ανέβηκε ολόκληρο.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Δεν ανέβηκε κανένα αρχείο.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Κανένας προσωρινός φάκελος δεν έχει ρυθμιστεί στο php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Αδυναμία εγγραφής προσωρινού αρχείου στο δίσκο.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Μια επέκταση PHP προκάλεσε αδυναμία ανεβάσματος.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Αυτή η συλλογή θα πρέπει να περιέχει {{ limit }} στοιχείο ή περισσότερα.|Αυτή η συλλογή θα πρέπει να περιέχει {{ limit }} στοιχεία ή περισσότερα.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Αυτή η συλλογή θα πρέπει να περιέχει {{ limit }} στοιχείo ή λιγότερα.|Αυτή η συλλογή θα πρέπει να περιέχει {{ limit }} στοιχεία ή λιγότερα.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Αυτή η συλλογή θα πρέπει να περιέχει ακριβώς {{ limit }} στοιχείo.|Αυτή η συλλογή θα πρέπει να περιέχει ακριβώς {{ limit }} στοιχεία.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Μη έγκυρος αριθμός κάρτας.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Μη υποστηριζόμενος τύπος κάρτας ή μη έγκυρος αριθμός κάρτας.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Αυτό δεν αντιστοιχεί σε έκγυρο διεθνή αριθμό τραπεζικού λογαριασμού (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Αυτό δεν είναι έγκυρος κωδικός ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Αυτό δεν είναι έγκυρος κωδικός ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Αυτό δεν είναι ούτε έγκυρος κωδικός ISBN-10 ούτε έγκυρος κωδικός ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Αυτό δεν είναι έγκυρος κωδικός ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Αυτό δεν αντιστοιχεί σε έγκυρο νόμισμα.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Αυτή η τιμή θα πρέπει να είναι ίση με {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Αυτή η τιμή θα πρέπει να είναι μεγαλύτερη από {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Αυτή η τιμή θα πρέπει να είναι μεγαλύτερη ή ίση με {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Αυτή η τιμή θα πρέπει να είναι πανομοιότυπη με {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Αυτή η τιμή θα πρέπει να είναι μικρότερη από {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Αυτή η τιμή θα πρέπει να είναι μικρότερη ή ίση με {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Αυτή η τιμή δεν θα πρέπει να είναι ίση με {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Αυτή η τιμή δεν πρέπει να είναι πανομοιότυπη με {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.en.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.en.xlf new file mode 100644 index 0000000..6509ab1 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.en.xlf @@ -0,0 +1,311 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>This value should be false.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>This value should be true.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>This value should be of type {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>This value should be blank.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>The value you selected is not a valid choice.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>One or more of the given values is invalid.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>This field was not expected.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>This field is missing.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>This value is not a valid date.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>This value is not a valid datetime.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>This value is not a valid email address.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>The file could not be found.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>The file is not readable.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>This value should be {{ limit }} or less.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>This value should be {{ limit }} or more.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>This value should not be blank.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>This value should not be null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>This value should be null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>This value is not valid.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>This value is not a valid time.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>This value is not a valid URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>The two values should be equal.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>The file is too large.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>The file could not be uploaded.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>This value should be a valid number.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>This file is not a valid image.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>This is not a valid IP address.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>This value is not a valid language.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>This value is not a valid locale.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>This value is not a valid country.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>This value is already used.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>The size of the image could not be detected.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>This value should be the user's current password.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>The file was only partially uploaded.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>No file was uploaded.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>No temporary folder was configured in php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Cannot write temporary file to disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>A PHP extension caused the upload to fail.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Invalid card number.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Unsupported card type or invalid card number.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>This is not a valid International Bank Account Number (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>This value is not a valid ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>This value is not a valid ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>This value is neither a valid ISBN-10 nor a valid ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>This value is not a valid ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>This value is not a valid currency.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>This value should be equal to {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>This value should be greater than {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>This value should be greater than or equal to {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>This value should be less than {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>This value should be less than or equal to {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>This value should not be equal to {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>An empty file is not allowed.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>This value does not match the expected {{ charset }} charset.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.es.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.es.xlf new file mode 100644 index 0000000..ee8ffe6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.es.xlf @@ -0,0 +1,311 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Este valor debería ser falso.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Este valor debería ser verdadero.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Este valor debería ser de tipo {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Este valor debería estar vacío.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>El valor seleccionado no es una opción válida.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Debe seleccionar al menos {{ limit }} opción.|Debe seleccionar al menos {{ limit }} opciones.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Debe seleccionar como máximo {{ limit }} opción.|Debe seleccionar como máximo {{ limit }} opciones.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Uno o más de los valores indicados no son válidos.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Este campo no se esperaba.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Este campo está desaparecido.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Este valor no es una fecha válida.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Este valor no es una fecha y hora válidas.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Este valor no es una dirección de email válida.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>No se pudo encontrar el archivo.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>No se puede leer el archivo.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>El archivo es demasiado grande ({{ size }} {{ suffix }}). El tamaño máximo permitido es {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>El tipo mime del archivo no es válido ({{ type }}). Los tipos mime válidos son {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Este valor debería ser {{ limit }} o menos.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Este valor es demasiado largo. Debería tener {{ limit }} carácter o menos.|Este valor es demasiado largo. Debería tener {{ limit }} caracteres o menos.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Este valor debería ser {{ limit }} o más.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Este valor es demasiado corto. Debería tener {{ limit }} carácter o más.|Este valor es demasiado corto. Debería tener {{ limit }} caracteres o más.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Este valor no debería estar vacío.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Este valor no debería ser nulo.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Este valor debería ser nulo.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Este valor no es válido.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Este valor no es una hora válida.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Este valor no es una URL válida.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Los dos valores deberían ser iguales.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>El archivo es demasiado grande. El tamaño máximo permitido es {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>El archivo es demasiado grande.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>No se pudo subir el archivo.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Este valor debería ser un número válido.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>El archivo no es una imagen válida.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Esto no es una dirección IP válida.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Este valor no es un idioma válido.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Este valor no es una localización válida.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Este valor no es un país válido.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Este valor ya se ha utilizado.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>No se pudo determinar el tamaño de la imagen.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>El ancho de la imagen es demasiado grande ({{ width }}px). El ancho máximo permitido es de {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>El ancho de la imagen es demasiado pequeño ({{ width }}px). El ancho mínimo requerido es {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>La altura de la imagen es demasiado grande ({{ height }}px). La altura máxima permitida es de {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>La altura de la imagen es demasiado pequeña ({{ height }}px). La altura mínima requerida es de {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Este valor debería ser la contraseña actual del usuario.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Este valor debería tener exactamente {{ limit }} carácter.|Este valor debería tener exactamente {{ limit }} caracteres.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>El archivo fue sólo subido parcialmente.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Ningún archivo fue subido.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Ninguna carpeta temporal fue configurada en php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>No se pudo escribir el archivo temporal en el disco.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Una extensión de PHP hizo que la subida fallara.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Esta colección debe contener {{ limit }} elemento o más.|Esta colección debe contener {{ limit }} elementos o más.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Esta colección debe contener {{ limit }} elemento o menos.|Esta colección debe contener {{ limit }} elementos o menos.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Esta colección debe contener exactamente {{ limit }} elemento.|Esta colección debe contener exactamente {{ limit }} elementos.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Número de tarjeta inválido.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Tipo de tarjeta no soportado o número de tarjeta inválido.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Esto no es un International Bank Account Number (IBAN) válido.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Este valor no es un ISBN-10 válido.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Este valor no es un ISBN-13 válido.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Este valor no es ni un ISBN-10 válido ni un ISBN-13 válido.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Este valor no es un ISSN válido.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Este valor no es una divisa válida.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Este valor debería ser igual que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Este valor debería ser mayor que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Este valor debería ser mayor o igual que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Este valor debería ser idéntico a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Este valor debería ser menor que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Este valor debería ser menor o igual que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Este valor debería ser distinto de {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Este valor no debería ser idéntico a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>La proporción de la imagen es demasiado grande ({{ ratio }}). La máxima proporción permitida es {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>La proporción de la imagen es demasiado pequeña ({{ ratio }}). La mínima proporción permitida es {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>La imagen es cuadrada ({{ width }}x{{ height }}px). Las imágenes cuadradas no están permitidas.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>La imagen está orientada horizontalmente ({{ width }}x{{ height }}px). Las imágenes orientadas horizontalmente no están permitidas.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>La imagen está orientada verticalmente ({{ width }}x{{ height }}px). Las imágenes orientadas verticalmente no están permitidas.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>No está permitido un archivo vacío.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>La codificación de caracteres para este valor debería ser {{ charset }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.et.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.et.xlf new file mode 100644 index 0000000..d047c8b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.et.xlf @@ -0,0 +1,283 @@ +<?xml version='1.0'?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Väärtus peaks olema väär.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Väärtus peaks oleme tõene.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Väärtus peaks olema {{ type }}-tüüpi.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Väärtus peaks olema tühi.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Väärtus peaks olema üks etteantud valikutest.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Valima peaks vähemalt {{ limit }} valikut.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Valima peaks mitte rohkem kui {{ limit }} valikut.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>One or more of the given values is invalid.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>See väli ei oodatud.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>See väli on puudu.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Väärtus pole korrektne kuupäev.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Väärtus pole korrektne kuupäev ja kellaeg.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Väärtus pole korrektne e-maili aadress.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Faili ei leita.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Fail ei ole loetav.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fail on liiga suur ({{ size }} {{ suffix }}). Suurim lubatud suurus on {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Faili sisutüüp on vigane ({{ type }}). Lubatud sisutüübid on {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Väärtus peaks olema {{ limit }} või vähem.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Väärtus on liiga pikk. Pikkus peaks olema {{ limit }} tähemärki või vähem.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Väärtus peaks olema {{ limit }} või rohkem.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Väärtus on liiga lühike. Pikkus peaks olema {{ limit }} tähemärki või rohkem.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Väärtus ei tohiks olla tühi.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Väärtus ei tohiks olla 'null'.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Väärtus peaks olema 'null'.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Väärtus on vigane.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Väärtus pole korrektne aeg.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Väärtus pole korrektne URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Väärtused peaksid olema võrdsed.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fail on liiga suur. Maksimaalne lubatud suurus on {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Fail on liiga suur.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Faili ei saa üles laadida.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Väärtus peaks olema korrektne number.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Fail ei ole korrektne pilt.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>IP aadress pole korrektne.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Väärtus pole korrektne keel.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Väärtus pole korrektne asukohakeel.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Väärtus pole olemasolev riik.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Väärtust on juba kasutatud.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Pildi suurust polnud võimalik tuvastada.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Pilt on liiga lai ({{ width }}px). Suurim lubatud laius on {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Pilt on liiga kitsas ({{ width }}px). Vähim lubatud laius on {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Pilt on liiga pikk ({{ height }}px). Lubatud suurim pikkus on {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Pilt pole piisavalt pikk ({{ height }}px). Lubatud vähim pikkus on {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Väärtus peaks olema kasutaja kehtiv salasõna.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} characters.</source> + <target>Väärtus peaks olema täpselt {{ limit }} tähemärk pikk.|Väärtus peaks olema täpselt {{ limit }} tähemärki pikk.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Fail ei laetud täielikult üles.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Ühtegi faili ei laetud üles.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Ühtegi ajutist kausta polnud php.ini-s seadistatud.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Ajutist faili ei saa kettale kirjutada.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP laiendi tõttu ebaõnnestus faili üleslaadimine.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} elements or more.</source> + <target>Kogumikus peaks olema vähemalt {{ limit }} element.|Kogumikus peaks olema vähemalt {{ limit }} elementi.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} elements or less.</source> + <target>Kogumikus peaks olema ülimalt {{ limit }} element.|Kogumikus peaks olema ülimalt {{ limit }} elementi.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} elements.</source> + <target>Kogumikus peaks olema täpselt {{ limit }} element.|Kogumikus peaks olema täpselt {{ limit }}|elementi.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Vigane kaardi number.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Kaardi tüüpi ei toetata või kaardi number on vigane.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Väärtus pole korrektne IBAN-number.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Väärtus pole korrektne ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Väärtus pole korrektne ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Väärtus pole korrektne ISBN-10 ega ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Väärtus pole korrektne ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Väärtus pole korrektne valuuta.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Väärtus peaks olema võrdne {{ compared_value }}-ga.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Väärtus peaks olema suurem kui {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Väärtus peaks olema suurem kui või võrduma {{ compared_value }}-ga.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Väärtus peaks olema identne väärtusega {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Väärtus peaks olema väiksem kui {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Väärtus peaks olema väiksem kui või võrduma {{ compared_value }}-ga.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Väärtus ei tohiks võrduda {{ compared_value }}-ga.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Väärtus ei tohiks olla identne väärtusega {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.eu.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.eu.xlf new file mode 100644 index 0000000..b2edefd --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.eu.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Balio hau faltsua izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Balio hau egia izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Balio hau {{ type }} motakoa izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Balio hau hutsik egon beharko litzateke.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Hautatu duzun balioa ez da aukera egoki bat.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Gutxienez aukera {{ limit }} hautatu behar duzu.|Gutxienez {{ limit }} aukera hautatu behar dituzu.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Gehienez aukera {{ limit }} hautatu behar duzu.|Gehienez {{ limit }} aukera hautatu behar dituzu.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Emandako balioetatik gutxienez bat ez da egokia.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Eremu hau ez zen espero.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Eremu hau falta da.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Balio hau ez da data egoki bat.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Balio hau ez da data-ordu egoki bat.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Balio hau ez da posta elektroniko egoki bat.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Ezin izan da fitxategia aurkitu.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Fitxategia ez da irakurgarria.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fitxategia handiegia da ({{ size }} {{ suffix }}). Baimendutako tamaina handiena {{ limit }} {{ suffix }} da.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Fitxategiaren mime mota ez da egokia ({{ type }}). Hauek dira baimendutako mime motak: {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Balio hau gehienez {{ limit }} izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Balio hau luzeegia da. Gehienez karaktere {{ limit }} eduki beharko luke.|Balio hau luzeegia da. Gehienez {{ limit }} karaktere eduki beharko lituzke.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Balio hau gutxienez {{ limit }} izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Balio hau motzegia da. Karaktere {{ limit }} gutxienez eduki beharko luke.|Balio hau motzegia da. Gutxienez {{ limit }} karaktere eduki beharko lituzke.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Balio hau ez litzateke hutsik egon behar.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Balio hau ez litzateke nulua izan behar.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Balio hau nulua izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Balio hau ez da egokia.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Balio hau ez da ordu egoki bat.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Balio hau ez da baliabideen kokatzaile uniforme (URL) egoki bat.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Bi balioak berdinak izan beharko lirateke.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fitxategia handiegia da. Baimendutako tamaina handiena {{ limit }} {{ suffix }} da.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Fitxategia handiegia da.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Ezin izan da fitxategia igo.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Balio hau zenbaki egoki bat izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Fitxategi hau ez da irudi egoki bat.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Honako hau ez da IP helbide egoki bat.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Balio hau ez da hizkuntza egoki bat.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Balio hau ez da kokapen egoki bat.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Balio hau ez da herrialde egoki bat.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Balio hau jadanik erabilia izan da.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Ezin izan da irudiaren tamaina detektatu.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Irudiaren zabalera handiegia da ({{ width }}px). Onartutako gehienezko zabalera {{ max_width }}px dira.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Irudiaren zabalera txikiegia da ({{ width }}px). Onartutako gutxieneko zabalera {{ min_width }}px dira.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Irudiaren altuera handiegia da ({{ height }}px). Onartutako gehienezko altuera {{ max_height }}px dira.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Irudiaren altuera txikiegia da ({{ height }}px). Onartutako gutxieneko altuera {{ min_height }}px dira.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Balio hau uneko erabiltzailearen pasahitza izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Balio honek zehazki karaktere {{ limit }} izan beharko luke.|Balio honek zehazki {{ limit }} karaktere izan beharko lituzke.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Fitxategiaren zati bat bakarrik igo da.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Ez da fitxategirik igo.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Ez da aldi baterako karpetarik konfiguratu php.ini fitxategian.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Ezin izan da aldi baterako fitxategia diskoan idatzi.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP luzapen batek igoeraren hutsa eragin du.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Bilduma honek gutxienez elementu {{ limit }} eduki beharko luke.|Bilduma honek gutxienez {{ limit }} elementu eduki beharko lituzke.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Bilduma honek gehienez elementu {{ limit }} eduki beharko luke.|Bilduma honek gehienez {{ limit }} elementu eduki beharko lituzke.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Bilduma honek zehazki elementu {{ limit }} eduki beharko luke.|Bilduma honek zehazki {{ limit }} elementu eduki beharko lituzke.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Txartel zenbaki baliogabea.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Txartel mota onartezina edo txartel zenbaki baliogabea.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Hau ez da baliozko banku internazionaleko kontu zenbaki (IBAN) bat.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Balio hau ez da onartutako ISBN-10 bat.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Balio hau ez da onartutako ISBN-13 bat.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Balio hau ez da onartutako ISBN-10 edo ISBN-13 bat.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Balio hau ez da onartutako ISSN bat.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Balio hau ez da baliozko moneta bat.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Balio hau {{ compared_value }}-(r)en berbera izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Balio hau {{ compared_value }} baino handiagoa izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Balio hau {{ compared_value }}-(r)en berdina edota handiagoa izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Balio hau {{ compared_value_type }} {{ compared_value }}-(r)en berbera izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Balio hau {{ compared_value }} baino txikiagoa izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Balio hau {{ compared_value }}-(r)en berdina edota txikiagoa izan beharko litzateke.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Balio hau ez litzateke {{ compared_value }}-(r)en berdina izan behar.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Balio hau ez litzateke {{ compared_value_type }} {{ compared_value }}-(r)en berbera izan behar.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fa.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fa.xlf new file mode 100644 index 0000000..98b4bd6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fa.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target state="needs-review-translation">این مقدار باید نادرست(False) باشد.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>این مقدار باید درست(True) باشد.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>این مقدار باید از نوع {{ type }} باشد.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>این فیلد باید خالی باشد.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>گزینه انتخابی معتبر نیست.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>باید حداقل {{ limit }} گزینه انتخاب کنید.|باید حداقل {{ limit }} گزینه انتخاب کنید.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>حداکثر {{ limit }} گزینه می توانید انتخاب کنید.|حداکثر {{ limit }} گزینه می توانید انتخاب کنید.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>یک یا چند مقدار نامعتبر وجود دارد.</target> + </trans-unit> + <trans-unit id="9"> + <source>The fields {{ fields }} were not expected.</source> + <target>فیلدهای {{ fields }} اضافی هستند.</target> + </trans-unit> + <trans-unit id="10"> + <source>The fields {{ fields }} are missing.</source> + <target>فیلدهای {{ fields }} کم هستند.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>این مقدار یک تاریخ معتبر نیست.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>این مقدار یک تاریخ و زمان معتبر نیست.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>این یک رایانامه معتبر نیست.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>فایل پیدا نشد.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>فایل قابلیت خواندن ندارد.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>فایل بیش از اندازه بزرگ است({{ size }} {{ suffix }}). حداکثر اندازه مجاز برابر {{ limit }} {{ suffix }} است.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>این نوع فایل مجاز نیست({{ type }}). نوع های مجاز {{ types }} هستند.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>این مقدار باید کوچکتر یا مساوی {{ limit }} باشد.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>بسیار طولانی است.حداکثر تعداد حروف مجاز برابر {{ limit }} است.|بسیار طولانی است.حداکثر تعداد حروف مجاز برابر {{ limit }} است.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>این مقدار باید برابر و یا بیشتر از {{ limit }} باشد.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>بسیار کوتاه است.تعداد حروف باید حداقل {{ limit }} باشد.|بسیار کوتاه است.تعداد حروف باید حداقل {{ limit }} باشد.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>این مقدار نباید تهی باشد.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>باید مقداری داشته باشد..</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>نباید مقداری داشته باشد.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>این مقدار معتبر نیست.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>این مقدار یک زمان صحیح نیست.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>این یک URL معتبر نیست.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>دو مقدار باید برابر باشند.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>فایل بیش از اندازه بزرگ است. حداکثر اندازه مجاز برابر {{ limit }} {{ suffix }} است.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>فایل بیش از اندازه بزرگ است.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>بارگذاری فایل با شکست مواجه شد.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>این مقدار باید یک عدد معتبر باشد.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>این فایل یک تصویر نیست.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>این مقدار یک IP معتبر نیست.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>این مقدار یک زبان صحیح نیست.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>این مقدار یک محل صحیح نیست.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>این مقدار یک کشور صحیح نیست.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>این مقدار قبلا مورد استفاده قرار گرفته است.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>اندازه تصویر قابل شناسایی نیست.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>طول تصویر بسیار بزرگ است ({{ width }}px). بشینه طول مجاز {{ max_width }}px است.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>طول تصویر بسیار کوچک است ({{ width }}px). کمینه طول موردنظر {{ min_width }}px است.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>ارتفاع تصویر بسیار بزرگ است ({{ height }}px). بشینه ارتفاع مجاز {{ max_height }}px است.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>ارتفاع تصویر بسیار کوچک است ({{ height }}px). کمینه ارتفاع موردنظر {{ min_height }}px است.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>این مقدار می بایست کلمه عبور کنونی کاربر باشد.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target> این مقدار می بایست دقیقا {{ limit }} کاراکتر داشته باشد.| این مقدار می بایست دقیقا {{ limit }} کاراکتر داشته باشد.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>فایل به صورت جزیی بارگذاری شده است.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>هیچ فایلی بارگذاری نشد.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>فولدر موقت در php.ini پیکربندی نشده است.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>فایل موقت را نمی توان در دیسک نوشت.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>اکستنشن PHP موجب شد که بارگذاری فایل با شکست مواجه شود.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>این مجموعه می بایست دارای {{ limit }} عنصر یا بیشتر باشد.|این مجموعه می بایست دارای {{ limit }} عنصر یا بیشتر باشد.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>این مجموعه می بایست دارای حداقل {{ limit }} عنصر یا کمتر باشد.|این مجموعه می بایست دارای {{ limit }} عنصر یا کمتر باشد.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>این مجموعه می بایست به طور دقیق دارا {{ limit }} عنصر باشد.|این مجموعه می بایست به طور دقیق دارای {{ limit }} قلم باشد.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>شماره کارت نامعتبر است.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>نوع کارت پشتیبانی نمی شود یا شماره کارت نامعتبر است.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>این یک شماره حساب بین المللی بانک (IBAN) درست نیست.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>این مقدار یک ISBN-10 درست نیست.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>این مقدار یک ISBN-13 درست نیست.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>این مقدار یک ISBN-10 درست یا ISBN-13 درست نیست.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>این مقدار یک ISSN درست نیست.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>این مقدار یک یکای پول درست نیست.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>این مقدار باید برابر با {{ compared_value }} باشد.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>این مقدار باید از {{ compared_value }} بیشتر باشد.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>این مقدار باید بزرگتر یا مساوی با {{ compared_value }} باشد.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>این مقدار باید با {{ compared_value_type }} {{ compared_value }} یکی باشد.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>این مقدار باید کمتر از {{ compared_value }} باشد.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>این مقدار باید کمتر یا مساوی با {{ compared_value }} باشد.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>این مقدار نباید با {{ compared_value }} برابر باشد.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>این مقدار نباید {{ compared_value_type }} {{ compared_value }} یکی باشد.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fi.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fi.xlf new file mode 100644 index 0000000..3f5a07e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fi.xlf @@ -0,0 +1,227 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Arvon tulee olla epätosi.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Arvon tulee olla tosi.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Arvon tulee olla tyyppiä {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Arvon tulee olla tyhjä.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Arvon tulee olla yksi annetuista vaihtoehdoista.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Sinun tulee valita vähintään {{ limit }} vaihtoehtoa.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Sinun tulee valitan enintään {{ limit }} vaihtoehtoa.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Yksi tai useampi annetuista arvoista on virheellinen.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Tässä kentässä ei odotettu.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Tämä kenttä puuttuu.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Annettu arvo ei ole kelvollinen päivämäärä.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Annettu arvo ei ole kelvollinen päivämäärä ja kellonaika.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Annettu arvo ei ole kelvollinen sähköpostiosoite.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Tiedostoa ei löydy.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Tiedostoa ei voida lukea.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Tiedostonkoko ({{ size }} {{ suffix }}) on liian iso. Suurin sallittu tiedostonkoko on {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Tiedostotyyppi ({{ type }}) on virheellinen. Sallittuja tiedostotyyppejä ovat {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Arvon tulee olla {{ limit }} tai vähemmän.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Liian pitkä syöte. Syöte saa olla enintään {{ limit }} merkkiä.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Arvon tulee olla {{ limit }} tai enemmän.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Liian lyhyt syöte. Syötteen tulee olla vähintään {{ limit }} merkkiä.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Kenttä ei voi olla tyhjä.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Syöte ei voi olla null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Syötteen tulee olla null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Virheellinen arvo.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Annettu arvo ei ole kelvollinen kellonaika.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Annettu arvo ei ole kelvollinen URL-osoite.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Kahden annetun arvon tulee olla samat.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Annettu tiedosto on liian iso. Suurin sallittu tiedostokoko on {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Tiedosto on liian iso.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Tiedoston siirto epäonnistui.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Tämän arvon tulee olla numero.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Tämä tiedosto ei ole kelvollinen kuva.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Tämä ei ole kelvollinen IP-osoite.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Tämä arvo ei ole kelvollinen kieli.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Tämä arvo ei ole kelvollinen kieli- ja alueasetus (locale).</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Tämä arvo ei ole kelvollinen maa.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Tämä arvo on jo käytetty.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Kuvan kokoa ei voitu tunnistaa.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Kuva on liian leveä ({{ width }}px). Sallittu maksimileveys on {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Kuva on liian kapea ({{ width }}px). Leveyden tulisi olla vähintään {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Kuva on liian korkea ({{ width }}px). Sallittu maksimikorkeus on {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Kuva on liian matala ({{ height }}px). Korkeuden tulisi olla vähintään {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Tämän arvon tulisi olla käyttäjän tämänhetkinen salasana.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Tämän arvon tulisi olla tasan yhden merkin pituinen.|Tämän arvon tulisi olla tasan {{ limit }} merkkiä pitkä.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Tiedosto ladattiin vain osittain.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Tiedostoa ei ladattu.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Väliaikaishakemistoa ei ole asetettu php.ini -tiedostoon.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Väliaikaistiedostoa ei voitu kirjoittaa levylle.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP-laajennoksen vuoksi tiedoston lataus epäonnistui.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Tässä ryhmässä tulisi olla yksi tai useampi elementti.|Tässä ryhmässä tulisi olla vähintään {{ limit }} elementtiä.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Tässä ryhmässä tulisi olla enintään yksi elementti.|Tässä ryhmässä tulisi olla enintään {{ limit }} elementtiä.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Tässä ryhmässä tulisi olla tasan yksi elementti.|Tässä ryhmässä tulisi olla enintään {{ limit }} elementtiä.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Virheellinen korttinumero.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Tätä korttityyppiä ei tueta tai korttinumero on virheellinen.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fr.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fr.xlf new file mode 100644 index 0000000..237a3b4 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fr.xlf @@ -0,0 +1,311 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Cette valeur doit être fausse.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Cette valeur doit être vraie.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Cette valeur doit être de type {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Cette valeur doit être vide.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Cette valeur doit être l'un des choix proposés.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Vous devez sélectionner au moins {{ limit }} choix.|Vous devez sélectionner au moins {{ limit }} choix.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Vous devez sélectionner au maximum {{ limit }} choix.|Vous devez sélectionner au maximum {{ limit }} choix.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Une ou plusieurs des valeurs soumises sont invalides.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Ce champ n'a pas été prévu.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Ce champ est manquant.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Cette valeur n'est pas une date valide.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Cette valeur n'est pas une date valide.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Cette valeur n'est pas une adresse email valide.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Le fichier n'a pas été trouvé.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Le fichier n'est pas lisible.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Le fichier est trop volumineux ({{ size }} {{ suffix }}). Sa taille ne doit pas dépasser {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Le type du fichier est invalide ({{ type }}). Les types autorisés sont {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Cette valeur doit être inférieure ou égale à {{ limit }}.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Cette chaine est trop longue. Elle doit avoir au maximum {{ limit }} caractère.|Cette chaine est trop longue. Elle doit avoir au maximum {{ limit }} caractères.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Cette valeur doit être supérieure ou égale à {{ limit }}.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Cette chaine est trop courte. Elle doit avoir au minimum {{ limit }} caractère.|Cette chaine est trop courte. Elle doit avoir au minimum {{ limit }} caractères.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Cette valeur ne doit pas être vide.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Cette valeur ne doit pas être nulle.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Cette valeur doit être nulle.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Cette valeur n'est pas valide.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Cette valeur n'est pas une heure valide.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Cette valeur n'est pas une URL valide.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Les deux valeurs doivent être identiques.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Le fichier est trop volumineux. Sa taille ne doit pas dépasser {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Le fichier est trop volumineux.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Le téléchargement de ce fichier est impossible.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Cette valeur doit être un nombre.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Ce fichier n'est pas une image valide.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Cette adresse IP n'est pas valide.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Cette langue n'est pas valide.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Ce paramètre régional n'est pas valide.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Ce pays n'est pas valide.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Cette valeur est déjà utilisée.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>La taille de l'image n'a pas pu être détectée.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>La largeur de l'image est trop grande ({{ width }}px). La largeur maximale autorisée est de {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>La largeur de l'image est trop petite ({{ width }}px). La largeur minimale attendue est de {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>La hauteur de l'image est trop grande ({{ height }}px). La hauteur maximale autorisée est de {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>La hauteur de l'image est trop petite ({{ height }}px). La hauteur minimale attendue est de {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Cette valeur doit être le mot de passe actuel de l'utilisateur.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Cette chaine doit avoir exactement {{ limit }} caractère.|Cette chaine doit avoir exactement {{ limit }} caractères.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Le fichier a été partiellement transféré.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Aucun fichier n'a été transféré.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Aucun répertoire temporaire n'a été configuré dans le php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Impossible d'écrire le fichier temporaire sur le disque.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Une extension PHP a empêché le transfert du fichier.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Cette collection doit contenir {{ limit }} élément ou plus.|Cette collection doit contenir {{ limit }} éléments ou plus.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Cette collection doit contenir {{ limit }} élément ou moins.|Cette collection doit contenir {{ limit }} éléments ou moins.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Cette collection doit contenir exactement {{ limit }} élément.|Cette collection doit contenir exactement {{ limit }} éléments.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Numéro de carte invalide.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Type de carte non supporté ou numéro invalide.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Le numéro IBAN (International Bank Account Number) saisi n'est pas valide.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Cette valeur n'est pas un code ISBN-10 valide.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Cette valeur n'est pas un code ISBN-13 valide.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Cette valeur n'est ni un code ISBN-10, ni un code ISBN-13 valide.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Cette valeur n'est pas un code ISSN valide.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Cette valeur n'est pas une devise valide.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Cette valeur doit être égale à {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Cette valeur doit être supérieure à {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Cette valeur doit être supérieure ou égale à {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Cette valeur doit être identique à {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Cette valeur doit être inférieure à {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Cette valeur doit être inférieure ou égale à {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Cette valeur ne doit pas être égale à {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Cette valeur ne doit pas être identique à {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Le rapport largeur/hauteur de l'image est trop grand ({{ ratio }}). Le rapport maximal autorisé est {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Le rapport largeur/hauteur de l'image est trop petit ({{ ratio }}). Le rapport minimal attendu est {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>L'image est carrée ({{ width }}x{{ height }}px). Les images carrées ne sont pas autorisées.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>L'image est au format paysage ({{ width }}x{{ height }}px). Les images au format paysage ne sont pas autorisées.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>L'image est au format portrait ({{ width }}x{{ height }}px). Les images au format portrait ne sont pas autorisées.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Un fichier vide n'est pas autorisé.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>Cette valeur ne correspond pas au jeu de caractères {{ charset }} attendu.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.gl.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.gl.xlf new file mode 100644 index 0000000..1d0cc13 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.gl.xlf @@ -0,0 +1,315 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Este valor debería ser falso.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Este valor debería ser verdadeiro.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Este valor debería ser de tipo {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Este valor debería estar baleiro.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>O valor seleccionado non é unha opción válida.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Debe seleccionar polo menos {{ limit }} opción.|Debe seleccionar polo menos {{ limit }} opcions.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Debe seleccionar como máximo {{ limit }} opción.|Debe seleccionar como máximo {{ limit }} opcions.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Un ou máis dos valores indicados non son válidos.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Este campo non era esperado.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Este campo falta.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Este valor non é unha data válida.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Este valor non é unha data e hora válidas.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Este valor non é unha dirección de correo electrónico válida.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Non se puido atopar o arquivo.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>O arquivo non se pode ler.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>O arquivo é demasiado grande ({{ size }} {{ suffix }}). O tamaño máximo permitido é {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>O tipo mime do arquivo non é válido ({{ type }}). Os tipos mime válidos son {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Este valor debería ser {{ limit }} ou menos.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Este valor é demasiado longo. Debería ter {{ limit }} carácter ou menos.|Este valor é demasiado longo. Debería ter {{ limit }} caracteres ou menos.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Este valor debería ser {{ limit }} ou máis.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Este valor é demasiado curto. Debería ter {{ limit }} carácter ou máis.|Este valor é demasiado corto. Debería ter {{ limit }} caracteres ou máis.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Este valor non debería estar baleiro.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Este valor non debería ser null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Este valor debería ser null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Este valor non é válido.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Este valor non é unha hora válida.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Este valor non é unha URL válida.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Os dous valores deberían ser iguais.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>O arquivo é demasiado grande. O tamaño máximo permitido é {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>O arquivo é demasiado grande.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>No se puido cargar o arquivo.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Este valor debería ser un número válido.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>O arquivo non é unha imaxe válida.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Isto non é unha dirección IP válida.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Este valor non é un idioma válido.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Este valor non é unha localización válida.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Este valor non é un país válido.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Este valor xa está a ser empregado.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Non se puido determinar o tamaño da imaxe.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>A largura da imaxe é demasiado grande ({{ width }}px). A largura máxima permitida son {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>A largura da imaxe é demasiado pequena ({{ width }}px). A largura mínima requerida son {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>A altura da imaxe é demasiado grande ({{ height }}px). A altura máxima permitida son {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>A altura da imaxe é demasiado pequena ({{ height }}px). A altura mínima requerida son {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Este valor debería ser a contrasinal actual do usuario.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Este valor debería ter exactamente {{ limit }} carácter.|Este valor debería ter exactamente {{ limit }} caracteres.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>O arquivo foi só subido parcialmente.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Non se subiu ningún arquivo.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Ningunha carpeta temporal foi configurada en php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Non se puido escribir o arquivo temporal no disco.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Unha extensión de PHP provocou que a subida fallara.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Esta colección debe conter {{ limit }} elemento ou máis.|Esta colección debe conter {{ limit }} elementos ou máis.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Esta colección debe conter {{ limit }} elemento ou menos.|Esta colección debe conter {{ limit }} elementos ou menos.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Esta colección debe conter exactamente {{ limit }} elemento.|Esta colección debe conter exactamente {{ limit }} elementos.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Número de tarxeta non válido.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Tipo de tarxeta non soportado ou número de tarxeta non válido.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Este valor non é un International Bank Account Number (IBAN) válido.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Este valor non é un ISBN-10 válido.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Este valor non é un ISBN-13 válido.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Este valor non é nin un ISBN-10 válido nin un ISBN-13 válido.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Este valor non é un ISSN válido.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Este valor non é unha moeda válida.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Este valor debería ser igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Este valor debería ser maior que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Este valor debería ser maior ou igual que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Este valor debería ser identico a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Este valor debería ser menor que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Este valor debería ser menor ou igual que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Este valor non debería ser igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Este valor non debería ser identico a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>A proporción da imaxe é demasiado grande ({{ ratio }}). A proporción máxima permitida é {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>A proporción da é demasiado pequena ({{ ratio }}). A proporción mínima permitida é {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>A imaxe é cadrada ({{ width }}x{{ height }}px). As imáxenes cadradas non están permitidas.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>A imaxe está orientada horizontalmente ({{ width }}x{{ height }}px). As imáxenes orientadas horizontalmente non están permitidas.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>A imaxe está orientada verticalmente ({{ width }}x{{ height }}px). As imáxenes orientadas verticalmente non están permitidas.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Non está permitido un arquivo baleiro.</target> + </trans-unit> + <trans-unit id="79"> + <source>The host could not be resolved.</source> + <target>Non se puido resolver o host.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>A codificación de caracteres para este valor debería ser {{ charset }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.he.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.he.xlf new file mode 100644 index 0000000..6510514 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.he.xlf @@ -0,0 +1,307 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>הערך צריך להיות שקר.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>הערך צריך להיות אמת.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>הערך צריך להיות מסוג {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>הערך צריך להיות ריק.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>הערך שבחרת אינו חוקי.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>אתה צריך לבחור לפחות {{ limit }} אפשרויות.|אתה צריך לבחור לפחות {{ limit }} אפשרויות.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>אתה צריך לבחור לכל היותר {{ limit }} אפשרויות.|אתה צריך לבחור לכל היותר {{ limit }} אפשרויות.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>אחד או יותר מהערכים אינו חוקי.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>שדה זה לא היה צפוי</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>שדה זה חסר.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>הערך אינו תאריך חוקי.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>הערך אינו תאריך ושעה חוקיים.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>כתובת המייל אינה תקינה.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>הקובץ לא נמצא.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>לא ניתן לקרוא את הקובץ.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>הקובץ גדול מדי ({{ size }} {{ suffix }}). הגודל המרבי המותר הוא {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>סוג MIME של הקובץ אינו חוקי ({{ type }}). מותרים סוגי MIME {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>הערך צריל להכיל {{ limit }} תווים לכל היותר.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>הערך ארוך מידי. הוא צריך להכיל {{ limit }} תווים לכל היותר.|הערך ארוך מידי. הוא צריך להכיל {{ limit }} תווים לכל היותר.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>הערך צריך להכיל {{ limit }} תווים לפחות.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>הערך קצר מידיץ הוא צריך להכיל {{ limit }} תווים לפחות.|הערך קצר מידיץ הוא צריך להכיל {{ limit }} תווים לפחות.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>הערך לא אמור להיות ריק.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>הערך לא אמור להיות ריק.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>הערך צריך להיות ריק.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>הערך אינו חוקי.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>הערך אינו זמן תקין.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>זאת אינה כתובת אתר תקינה.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>שני הערכים צריכים להיות שווים.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>הקובץ גדול מדי. הגודל המרבי המותר הוא {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>הקובץ גדול מדי.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>לא ניתן לעלות את הקובץ.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>הערך צריך להיות מספר חוקי.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>הקובץ הזה אינו תמונה תקינה.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>זו אינה כתובת IP חוקית.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>הערך אינו שפה חוקית.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>הערך אינו אזור תקף.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>הערך אינו ארץ חוקית.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>הערך כבר בשימוש.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>לא ניתן לקבוע את גודל התמונה.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>רוחב התמונה גדול מדי ({{ width }}px). הרוחב המקסימלי הוא {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>רוחב התמונה קטן מדי ({{ width }}px). הרוחב המינימלי הוא {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>גובה התמונה גדול מדי ({{ height }}px). הגובה המקסימלי הוא {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>גובה התמונה קטן מדי ({{ height }}px). הגובה המינימלי הוא {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>הערך צריך להיות סיסמת המשתמש הנוכחי.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>הערך צריך להיות בדיוק {{ limit }} תווים.|הערך צריך להיות בדיוק {{ limit }} תווים.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>הקובץ הועלה באופן חלקי.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>הקובץ לא הועלה.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>לא הוגדרה תיקייה זמנית ב php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>לא ניתן לכתוב קובץ זמני לדיסק.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>סיומת PHP גרם להעלאה להיכשל.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>האוסף אמור להכיל {{ limit }} אלמנטים או יותר.|האוסף אמור להכיל {{ limit }} אלמנטים או יותר.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>האוסף אמור להכיל {{ limit }} אלמנטים או פחות.|האוסף אמור להכיל {{ limit }} אלמנטים או פחות.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>האוסף צריך להכיל בדיוק {{ limit }} אלמנטים.|האוסף צריך להכיל בדיוק {{ limit }} אלמנטים.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>מספר הכרטיס אינו חוקי.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>סוג הכרטיס אינו נתמך או לא חוקי.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>This is not a valid International Bank Account Number (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>This value is not a valid ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>This value is not a valid ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>This value is neither a valid ISBN-10 nor a valid ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>This value is not a valid ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>This value is not a valid currency.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>This value should be equal to {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>This value should be greater than {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>This value should be greater than or equal to {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>This value should be less than {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>This value should be less than or equal to {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>This value should not be equal to {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>An empty file is not allowed.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hr.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hr.xlf new file mode 100644 index 0000000..a11e825 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hr.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Ova vrijednost treba biti netočna (false).</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Ova vrijednost treba biti točna (true).</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Ova vrijednost treba biti tipa {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Ova vrijednost treba biti prazna.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Ova vrijednost treba biti jedna od ponuđenih.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Izaberite barem {{ limit }} mogućnosti.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Izaberite najviše {{ limit }} mogućnosti.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Jedna ili više danih vrijednosti nije ispravna.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Ovo polje nije očekivalo.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Ovo polje nedostaje.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Ova vrijednost nije ispravan datum.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Ova vrijednost nije ispravan datum-vrijeme.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Ova vrijednost nije ispravna e-mail adresa.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Datoteka ne može biti pronađena.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Datoteka nije čitljiva.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Datoteka je prevelika ({{ size }} {{ suffix }}). Najveća dozvoljena veličina je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Mime tip datoteke nije ispravan ({{ type }}). Dozvoljeni mime tipovi su {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Ova vrijednost treba biti {{ limit }} ili manje.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Ova vrijednost je predugačka. Treba imati {{ limit }} znakova ili manje.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Ova vrijednost treba biti {{ limit }} ili više.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Ova vrijednost je prekratka. Treba imati {{ limit }} znakova ili više.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Ova vrijednost ne smije biti prazna.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Ova vrijednost ne smije biti null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Ova vrijednost treba biti null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Ova vrijednost nije ispravna.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Ova vrijednost nije ispravno vrijeme.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Ova vrijednost nije ispravan URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Obje vrijednosti trebaju biti jednake.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Ova datoteka je prevelika. Najveća dozvoljena veličina je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Ova datoteka je prevelika.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Ova datoteka ne može biti prenesena.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Ova vrijednost treba biti ispravan broj.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Ova datoteka nije ispravna slika.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Ovo nije ispravna IP adresa.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Ova vrijednost nije ispravan jezik.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Ova vrijednost nije ispravana regionalna oznaka.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Ova vrijednost nije ispravna zemlja.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Ova vrijednost je već iskorištena.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Veličina slike se ne može odrediti.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Širina slike je prevelika ({{ width }}px). Najveća dozvoljena širina je {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Širina slike je premala ({{ width }}px). Najmanja dozvoljena širina je {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Visina slike je prevelika ({{ height }}px). Najveća dozvoljena visina je {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Visina slike je premala ({{ height }}px). Najmanja dozvoljena visina je {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Ova vrijednost treba biti trenutna korisnička lozinka.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Ova vrijednost treba imati točno {{ limit }} znakova.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Datoteka je samo djelomično prenesena.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Niti jedna datoteka nije prenesena.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>U php.ini datoteci nije konfiguriran privremeni folder.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Ne mogu zapisati privremenu datoteku na disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Prijenos datoteke nije uspio zbog PHP ekstenzije.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Ova kolekcija treba sadržavati {{ limit }} ili više elemenata.|Ova kolekcija treba sadržavati {{ limit }} ili više elemenata.|Ova kolekcija treba sadržavati {{ limit }} ili više elemenata.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Ova kolekcija treba sadržavati {{ limit }} ili manje elemenata.|Ova kolekcija treba sadržavati {{ limit }} ili manje elemenata.|Ova kolekcija treba sadržavati {{ limit }} ili manje elemenata.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Ova kolekcija treba sadržavati točno {{ limit }} element.|Ova kolekcija treba sadržavati točno {{ limit }} elementa.|Ova kolekcija treba sadržavati točno {{ limit }} elemenata.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Neispravan broj kartice.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Neispravan broj kartice ili tip kartice nije podržan.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Ova vrijednost nije ispravan međunarodni broj bankovnog računa (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Ova vrijednost nije ispravan ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Ova vrijednost nije ispravan ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Ova vrijednost nije ispravan ISBN-10 niti ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Ova vrijednost nije ispravan ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Ova vrijednost nije ispravna valuta.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Ova vrijednost bi trebala biti jednaka {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Ova vrijednost bi trebala biti veća od {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Ova vrijednost bi trebala biti veća ili jednaka od {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ova vrijednost bi trebala biti {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Ova vrijednost bi trebala biti manja od {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Ova vrijednost bi trebala biti manja ili jednaka {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Ova vrijednost ne bi trebala biti {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ova vrijednost ne bi trebala biti {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hu.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hu.xlf new file mode 100644 index 0000000..f5cbd0d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hu.xlf @@ -0,0 +1,311 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Ennek az értéknek hamisnak kell lennie.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Ennek az értéknek igaznak kell lennie.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Ennek az értéknek {{ type }} típusúnak kell lennie.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Ennek az értéknek üresnek kell lennie.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>A választott érték érvénytelen.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Legalább {{ limit }} értéket kell kiválasztani.|Legalább {{ limit }} értéket kell kiválasztani.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Legfeljebb {{ limit }} értéket lehet kiválasztani.|Legfeljebb {{ limit }} értéket lehet kiválasztani.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>A megadott értékek közül legalább egy érvénytelen.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Nem várt mező.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Ez a mező hiányzik.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Ez az érték nem egy érvényes dátum.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Ez az érték nem egy érvényes időpont.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Ez az érték nem egy érvényes e-mail cím.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>A fájl nem található.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>A fájl nem olvasható.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>A fájl túl nagy ({{ size }} {{ suffix }}). A legnagyobb megengedett méret {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>A fájl MIME típusa érvénytelen ({{ type }}). Az engedélyezett MIME típusok: {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Ez az érték legfeljebb {{ limit }} lehet.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Ez az érték túl hosszú. Legfeljebb {{ limit }} karaktert tartalmazhat.|Ez az érték túl hosszú. Legfeljebb {{ limit }} karaktert tartalmazhat.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Ez az érték legalább {{ limit }} kell, hogy legyen.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Ez az érték túl rövid. Legalább {{ limit }} karaktert kell tartalmaznia.|Ez az érték túl rövid. Legalább {{ limit }} karaktert kell tartalmaznia.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Ez az érték nem lehet üres.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Ez az érték nem lehet null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Ennek az értéknek nullnak kell lennie.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Ez az érték nem érvényes.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Ez az érték nem egy érvényes időpont.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Ez az érték nem egy érvényes URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>A két értéknek azonosnak kell lennie.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>A fájl túl nagy. A megengedett maximális méret: {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>A fájl túl nagy.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>A fájl nem tölthető fel.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Ennek az értéknek érvényes számnak kell lennie.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Ez a fájl nem egy érvényes kép.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Ez az érték nem egy érvényes IP cím.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Ez az érték nem egy érvényes nyelv.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Ez az érték nem egy érvényes területi beállítás.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Ez az érték nem egy érvényes ország.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Ez az érték már használatban van.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>A kép méretét nem lehet megállapítani.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>A kép szélessége túl nagy ({{ width }}px). A megengedett legnagyobb szélesség {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>A kép szélessége túl kicsi ({{ width }}px). Az elvárt legkisebb szélesség {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>A kép magassága túl nagy ({{ height }}px). A megengedett legnagyobb magasság {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>A kép magassága túl kicsi ({{ height }}px). Az elvárt legkisebb magasság {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Ez az érték a felhasználó jelenlegi jelszavával kell megegyezzen.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Ennek az értéknek pontosan {{ limit }} karaktert kell tartalmaznia.|Ennek az értéknek pontosan {{ limit }} karaktert kell tartalmaznia.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>A fájl csak részben lett feltöltve.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Nem lett fájl feltöltve.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Nincs ideiglenes könyvtár beállítva a php.ini-ben.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Az ideiglenes fájl nem írható a lemezre.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Egy PHP bővítmény miatt a feltöltés nem sikerült.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Ennek a gyűjteménynek legalább {{ limit }} elemet kell tartalmaznia.|Ennek a gyűjteménynek legalább {{ limit }} elemet kell tartalmaznia.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Ez a gyűjtemény legfeljebb {{ limit }} elemet tartalmazhat.|Ez a gyűjtemény legfeljebb {{ limit }} elemet tartalmazhat.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Ennek a gyűjteménynek pontosan {{ limit }} elemet kell tartalmaznia.|Ennek a gyűjteménynek pontosan {{ limit }} elemet kell tartalmaznia.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Érvénytelen kártyaszám.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Nem támogatott kártyatípus vagy érvénytelen kártyaszám.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Érvénytelen nemzetközi bankszámlaszám (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Ez az érték nem egy érvényes ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Ez az érték nem egy érvényes ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Ez az érték nem egy érvényes ISBN-10 vagy ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Ez az érték nem egy érvényes ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Ez az érték nem egy érvényes pénznem.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Ez az érték legyen {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Ez az érték nagyobb legyen, mint {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Ez az érték nagyobb vagy egyenlő legyen, mint {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ez az érték ugyanolyan legyen, mint {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Ez az érték kisebb legyen, mint {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Ez az érték kisebb vagy egyenlő legyen, mint {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Ez az érték ne legyen {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ez az érték ne legyen ugyanolyan, mint {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>A képarány túl nagy ({{ ratio }}). A megengedett legnagyobb képarány {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>A képarány túl kicsi ({{ ratio }}). A megengedett legkisebb képarány {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>A kép négyzet alakú ({{ width }}x{{ height }}px). A négyzet alakú képek nem engedélyezettek.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>A kép fekvő tájolású ({{ width }}x{{ height }}px). A fekvő tájolású képek nem engedélyezettek.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>A kép álló tájolású ({{ width }}x{{ height }}px). Az álló tájolású képek nem engedélyezettek.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Üres fájl nem megengedett.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>Ez az érték nem az elvárt {{ charset }} karakterkódolást használja.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hy.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hy.xlf new file mode 100644 index 0000000..664c085 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hy.xlf @@ -0,0 +1,187 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Արժեքը պետք է լինի կեղծ.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Արժեքը պետք է լինի ճշմարիտ.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Արժեքը պետք է լինի {{ type }} տեսակի.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Արժեքը պետք է լինի դատարկ.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Ձեր ընտրած արժեքը անթույլատրելի է.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Դուք պետք է ընտրեք ամենաքիչը {{ limit }} տարբերակներ.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Դուք պետք է ընտրեք ոչ ավելի քան {{ limit }} տարբերակներ.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Մեկ կամ ավելի տրված արժեքները անթույլատրելի են.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Այս դաշտը չի սպասվում.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Այս դաշտը բացակայում է.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Արժեքը սխալ ամսաթիվ է.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Ամսաթվի և ժամանակի արժեքը անթույլատրելի է.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Էլ-փոստի արժեքը անթույլատրելի է.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Ֆայլը չի գտնվել.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Ֆայլը անընթեռնելի է.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Ֆայլը չափազանց մեծ է ({{ size }} {{ suffix }}): Մաքսիմալ թույլատրելի չափսը՝ {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>MIME-տեսակը անթույլատրելի է({{ type }}): Ֆայլերի թույլատրելի MIME-տեսակներն են: {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Արժեքը պետք է լինի {{ limit }} կամ փոքր.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Արժեքը չափազանց երկար է: Պետք է լինի {{ limit }} կամ ավել սիմվոլներ.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Արժեքը պետ է լինի {{ limit }} կամ շատ.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Արժեքը չափազանց կարճ է: Պետք է լինի {{ limit }} կամ ավելի սիմվոլներ.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Արժեքը չպետք է դատարկ լինի.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Արժեքը չպետք է լինի null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Արժեքը պետք է լինի null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Անթույլատրելի արժեք.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Ժամանակի արժեքը անթույլատրելի է.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Արժեքը URL չէ.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Երկու արժեքները պետք է նույնը լինեն.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Ֆայլը չափազանց մեծ է: Մաքսիմալ թույլատրելի չափսը {{ limit }} {{ suffix }} է.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Ֆայլը չափազանց մեծ է.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Ֆայլը չի կարող բեռնվել.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Արժեքը պետք է լինի թիվ.</target> + </trans-unit> + <trans-unit id="36"> + <source>This value is not a valid country.</source> + <target>Արժեքը պետք է լինի երկիր.</target> + </trans-unit> + <trans-unit id="37"> + <source>This file is not a valid image.</source> + <target>Ֆայլը նկարի թույլատրելի ֆորմատ չէ.</target> + </trans-unit> + <trans-unit id="38"> + <source>This is not a valid IP address.</source> + <target>Արժեքը թույլատրելի IP հասցե չէ.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid language.</source> + <target>Արժեքը թույլատրելի լեզու չէ.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid locale.</source> + <target>Արժեքը չի հանդիսանում թույլատրելի տեղայնացում.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Այդ արժեքը արդեն օգտագործվում է.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Նկարի չափսերը չստացվեց որոշել.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Նկարի լայնությունը չափազանց մեծ է({{ width }}px). Մաքսիմալ չափն է {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Նկարի լայնությունը չափազանց փոքր է ({{ width }}px). Մինիմալ չափն է {{ min_ width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Նկարի բարձրությունը չափազանց մեծ է ({{ height }}px). Մաքսիմալ չափն է {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Նկարի բարձրությունը չափազանց փոքր է ({{ height }}px). Մինիմալ չափն է {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Այս արժեքը պետք է լինի օգտագործողի ներկա ծածկագիրը.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Այս արժեքը պետք է ունենա ճիշտ {{ limit }} սիմվոլներ.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.id.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.id.xlf new file mode 100644 index 0000000..742f4a1 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.id.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Nilai ini harus bernilai salah.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Nilai ini harus bernilai benar.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Nilai ini harus bertipe {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Nilai ini harus kosong.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Nilai yang dipilih tidak tepat.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Anda harus memilih paling tidak {{ limit }} pilihan.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Anda harus memilih paling banyak {{ limit }} pilihan.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Satu atau lebih nilai yang diberikan tidak sah.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Bidang ini tidak diharapkan.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Bidang ini hilang.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Nilai ini bukan merupakan tanggal yang sah.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Nilai ini bukan merupakan tanggal dan waktu yang sah.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Nilai ini bukan alamat email yang sah.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Berkas tidak ditemukan.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Berkas tidak bisa dibaca.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Ukuran berkas terlalu besar ({{ size }} {{ suffix }}). Ukuran maksimum yang diizinkan adalah {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Jenis berkas ({{ type }}) tidak sah. Jenis berkas yang diijinkan adalah {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Nilai ini harus {{ limit }} atau kurang.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Nilai ini terlalu panjang. Seharusnya {{ limit }} karakter atau kurang.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Nilai ini harus {{ limit }} atau lebih.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Nilai ini terlalu pendek. Seharusnya {{ limit }} karakter atau lebih.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Nilai ini tidak boleh kosong.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Nilai ini tidak boleh 'null'.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Nilai ini harus 'null'.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Nilai ini tidak sah.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Nilai ini bukan merupakan waktu yang sah.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Nilai ini bukan URL yang sah.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Isi keduanya harus sama.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Ukuran berkas terlalu besar. Ukuran maksimum yang diijinkan adalah {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Ukuran berkas terlalu besar.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Berkas tidak dapat diunggah.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Nilai ini harus angka yang sah.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Berkas ini tidak termasuk gambar.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Ini bukan alamat IP yang sah.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Nilai ini bukan bahasa yang sah.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Nilai ini bukan lokal yang sah.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Nilai ini bukan negara yang sah.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Nilai ini sudah digunakan.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Ukuran dari gambar tidak bisa dideteksi.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Lebar gambar terlalu besar ({{ width }}px). Ukuran lebar maksimum adalah {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Lebar gambar terlalu kecil ({{ width }}px). Ukuran lebar minimum yang diharapkan adalah {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Tinggi gambar terlalu besar ({{ height }}px). Ukuran tinggi maksimum adalah {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Tinggi gambar terlalu kecil ({{ height }}px). Ukuran tinggi minimum yang diharapkan adalah {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Nilai ini harus kata sandi pengguna saat ini.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Nilai ini harus memiliki tepat {{ limit }} karakter.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Berkas hanya terunggah sebagian.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Tidak ada berkas terunggah.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Direktori sementara tidak dikonfiguasi pada php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Tidak dapat menuliskan berkas sementara ke dalam media penyimpanan.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Sebuah ekstensi PHP menyebabkan kegagalan unggah.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Kumpulan ini harus memiliki {{ limit }} elemen atau lebih.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Kumpulan ini harus memiliki kurang dari {{ limit }} elemen.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Kumpulan ini harus memiliki tepat {{ limit }} elemen.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Nomor kartu tidak sah.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Jenis kartu tidak didukung atau nomor kartu tidak sah.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Ini bukan Nomor Rekening Bank Internasional (IBAN) yang sah.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Nilai ini bukan ISBN-10 yang sah.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Nilai ini bukan ISBN-13 yang sah.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Nilai ini bukan ISBN-10 maupun ISBN-13 yang sah.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Nilai ini bukan ISSN yang sah.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Nilai ini bukan mata uang yang sah.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Nilai ini seharusnya sama dengan {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Nilai ini seharusnya lebih dari {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Nilai ini seharusnya lebih dari atau sama dengan {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Nilai ini seharusnya identik dengan {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Nilai ini seharusnya kurang dari {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Nilai ini seharusnya kurang dari atau sama dengan {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Nilai ini seharusnya tidak sama dengan {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Nilai ini seharusnya tidak identik dengan {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.it.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.it.xlf new file mode 100644 index 0000000..5a411ea --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.it.xlf @@ -0,0 +1,307 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Questo valore dovrebbe essere falso.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Questo valore dovrebbe essere vero.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Questo valore dovrebbe essere di tipo {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Questo valore dovrebbe essere vuoto.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Questo valore dovrebbe essere una delle opzioni disponibili.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Si dovrebbe selezionare almeno {{ limit }} opzione.|Si dovrebbero selezionare almeno {{ limit }} opzioni.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Si dovrebbe selezionare al massimo {{ limit }} opzione.|Si dovrebbero selezionare al massimo {{ limit }} opzioni.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Uno o più valori inseriti non sono validi.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Questo campo non è stato previsto.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Questo campo è manca.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Questo valore non è una data valida.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Questo valore non è una data e ora valida.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Questo valore non è un indirizzo email valido.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Non è stato possibile trovare il file.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Il file non è leggibile.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Il file è troppo grande ({{ size }} {{ suffix }}). La dimensione massima consentita è {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Il mime type del file non è valido ({{ type }}). I tipi permessi sono {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Questo valore dovrebbe essere {{ limit }} o inferiore.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Questo valore è troppo lungo. Dovrebbe essere al massimo di {{ limit }} carattere.|Questo valore è troppo lungo. Dovrebbe essere al massimo di {{ limit }} caratteri.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Questo valore dovrebbe essere {{ limit }} o superiore.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Questo valore è troppo corto. Dovrebbe essere almeno di {{ limit }} carattere.|Questo valore è troppo corto. Dovrebbe essere almeno di {{ limit }} caratteri.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Questo valore non dovrebbe essere vuoto.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Questo valore non dovrebbe essere nullo.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Questo valore dovrebbe essere nullo.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Questo valore non è valido.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Questo valore non è un'ora valida.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Questo valore non è un URL valido.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>I due valori dovrebbero essere uguali.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Il file è troppo grande. La dimensione massima è {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Il file è troppo grande.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Il file non può essere caricato.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Questo valore dovrebbe essere un numero.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Questo file non è una immagine valida.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Questo valore non è un indirizzo IP valido.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Questo valore non è una lingua valida.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Questo valore non è una impostazione regionale valida.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Questo valore non è una nazione valida.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Questo valore è già stato utilizzato.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>La dimensione dell'immagine non può essere determinata.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>La larghezza dell'immagine è troppo grande ({{ width }}px). La larghezza massima è di {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>La larghezza dell'immagine è troppo piccola ({{ width }}px). La larghezza minima è di {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>L'altezza dell'immagine è troppo grande ({{ height }}px). L'altezza massima è di {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>L'altezza dell'immagine è troppo piccola ({{ height }}px). L'altezza minima è di {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Questo valore dovrebbe essere la password attuale dell'utente.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Questo valore dovrebbe contenere esattamente {{ limit }} carattere.|Questo valore dovrebbe contenere esattamente {{ limit }} caratteri.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Il file è stato caricato solo parzialmente.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Nessun file è stato caricato.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Nessuna cartella temporanea è stata configurata nel php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Impossibile scrivere il file temporaneo sul disco.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Un'estensione PHP ha causato il fallimento del caricamento.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Questa collezione dovrebbe contenere almeno {{ limit }} elemento.|Questa collezione dovrebbe contenere almeno {{ limit }} elementi.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Questa collezione dovrebbe contenere massimo {{ limit }} elemento.|Questa collezione dovrebbe contenere massimo {{ limit }} elementi.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Questa collezione dovrebbe contenere esattamente {{ limit }} elemento.|Questa collezione dovrebbe contenere esattamente {{ limit }} elementi.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Numero di carta non valido.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Tipo di carta non supportato o numero non valido.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Questo valore non è un IBAN (International Bank Account Number) valido.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Questo valore non è un codice ISBN-10 valido.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Questo valore non è un codice ISBN-13 valido.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Questo valore non è un codice ISBN-10 o ISBN-13 valido.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Questo valore non è un codice ISSN valido.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Questo valore non è una valuta valida.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Questo valore dovrebbe essere uguale a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Questo valore dovrebbe essere maggiore di {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Questo valore dovrebbe essere maggiore o uguale a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Questo valore dovrebbe essere identico a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Questo valore dovrebbe essere minore di {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Questo valore dovrebbe essere minore o uguale a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Questo valore dovrebbe essere diverso da {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Questo valore dovrebbe essere diverso da {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Il rapporto di aspetto dell'immagine è troppo grande ({{ ratio }}). Il rapporto massimo consentito è {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Il rapporto di aspetto dell'immagine è troppo piccolo ({{ ratio }}). Il rapporto minimo consentito è {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>L'immagine è quadrata ({{ width }}x{{ height }}px). Le immagini quadrate non sono consentite.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>L'immagine è orizzontale ({{ width }}x{{ height }}px). Le immagini orizzontali non sono consentite.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>L'immagine è verticale ({{ width }}x{{ height }}px). Le immagini verticali non sono consentite.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Un file vuoto non è consentito.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ja.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ja.xlf new file mode 100644 index 0000000..63eecc0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ja.xlf @@ -0,0 +1,315 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>falseでなければなりません。</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>trueでなければなりません。</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>型は{{ type }}でなければなりません。</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>空でなければなりません。</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>有効な選択肢ではありません。</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>{{ limit }}個以上選択してください。</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>{{ limit }}個以内で選択してください。</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>無効な選択肢が含まれています。</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>このフィールドは予期されていませんでした。</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>このフィールドは、欠落しています。</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>有効な日付ではありません。</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>有効な日時ではありません。</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>有効なメールアドレスではありません。</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>ファイルが見つかりません。</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>ファイルを読み込めません。</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>ファイルのサイズが大きすぎます({{ size }} {{ suffix }})。有効な最大サイズは{{ limit }} {{ suffix }}です。</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>ファイルのMIMEタイプが無効です({{ type }})。有効なMIMEタイプは{{ types }}です。</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>{{ limit }}以下でなければなりません。</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>値が長すぎます。{{ limit }}文字以内でなければなりません。</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>{{ limit }}以上でなければなりません。</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>値が短すぎます。{{ limit }}文字以上でなければなりません。</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>空であってはなりません。</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>nullであってはなりません。</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>nullでなければなりません。</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>有効な値ではありません。</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>有効な時刻ではありません。</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>有効なURLではありません。</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>2つの値が同じでなければなりません。</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>ファイルのサイズが大きすぎます。有効な最大サイズは{{ limit }} {{ suffix }}です。</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>ファイルのサイズが大きすぎます。</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>ファイルをアップロードできませんでした。</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>有効な数字ではありません。</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>ファイルが画像ではありません。</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>有効なIPアドレスではありません。</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>有効な言語名ではありません。</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>有効なロケールではありません。</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>有効な国名ではありません。</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>既に使用されています。</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>画像のサイズが検出できません。</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>画像の幅が大きすぎます({{ width }}ピクセル)。{{ max_width }}ピクセルまでにしてください。</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>画像の幅が小さすぎます({{ width }}ピクセル)。{{ min_width }}ピクセル以上にしてください。</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>画像の高さが大きすぎます({{ height }}ピクセル)。{{ max_height }}ピクセルまでにしてください。</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>画像の高さが小さすぎます({{ height }}ピクセル)。{{ min_height }}ピクセル以上にしてください。</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user current password.</source> + <target>ユーザーの現在のパスワードでなければなりません。</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>ちょうど{{ limit }}文字でなければなりません。</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>ファイルのアップロードは完全ではありません。</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>ファイルがアップロードされていません。</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>php.iniで一時フォルダが設定されていません。</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>一時ファイルをディスクに書き込むことができません。</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP拡張によってアップロードに失敗しました。</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>{{ limit }}個以上の要素を含んでなければいけません。</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>要素は{{ limit }}個までです。</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>要素はちょうど{{ limit }}個でなければなりません。</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>無効なカード番号です。</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>未対応のカード種類又は無効なカード番号です。</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>有効なIBANコードではありません。</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>有効なISBN-10コードではありません。</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>有効なISBN-13コードではありません。</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>有効なISBN-10コード又はISBN-13コードではありません。</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>有効なISSNコードではありません。</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>有効な貨幣ではありません。</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>{{ compared_value }}と等しくなければなりません。</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>{{ compared_value }}より大きくなければなりません。</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>{{ compared_value }}以上でなければなりません。</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>{{ compared_value_type }}としての{{ compared_value }}と等しくなければなりません。</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>{{ compared_value }}未満でなければなりません。</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>{{ compared_value }}以下でなければなりません。</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>{{ compared_value }}と等しくてはいけません。</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>{{ compared_value_type }}としての{{ compared_value }}と等しくてはいけません。</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>画像のアスペクト比が大きすぎます({{ ratio }})。{{ max_ratio }}までにしてください。</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>画像のアスペクト比が小さすぎます({{ ratio }})。{{ min_ratio }}以上にしてください。</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>画像が正方形になっています({{ width }}x{{ height }}ピクセル)。正方形の画像は許可されていません。</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>画像が横向きになっています({{ width }}x{{ height }}ピクセル)。横向きの画像は許可されていません。</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>画像が縦向きになっています({{ width }}x{{ height }}ピクセル)。縦向きの画像は許可されていません。</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>空のファイルは許可されていません。</target> + </trans-unit> + <trans-unit id="79"> + <source>The host could not be resolved.</source> + <target>ホストを解決できませんでした。</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>この値は予期される文字コード({{ charset }})と異なります。</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lb.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lb.xlf new file mode 100644 index 0000000..8281c7c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lb.xlf @@ -0,0 +1,303 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Dëse Wäert sollt falsch sinn.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Dëse Wäert sollt wouer sinn.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Dëse Wäert sollt vum Typ {{ type }} sinn.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Dëse Wäert sollt eidel sinn.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Dëse Wäert sollt enger vun de Wielméiglechkeeten entspriechen.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Dir sollt mindestens {{ limit }} Méiglechkeete wielen.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Dir sollt héchstens {{ limit }} Méiglechkeete wielen.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Een oder méi vun de Wäerter ass ongëlteg.</target> + </trans-unit> + <trans-unit id="9"> + <source>The fields {{ fields }} were not expected.</source> + <target>D'Felder {{ fields }} goufen net erwaart.</target> + </trans-unit> + <trans-unit id="10"> + <source>The fields {{ fields }} are missing.</source> + <target>D'Felder {{ fields }} feelen.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Dëse Wäert entsprécht kenger gëlteger Datumsangab.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Dëse Wäert entsprécht kenger gëlteger Datums- an Zäitangab.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Dëse Wäert ass keng gëlteg Email-Adress.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>De Fichier gouf net fonnt.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>De Fichier ass net liesbar.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>De Fichier ass ze grouss ({{ size }} {{ suffix }}). Déi zougeloosse Maximalgréisst bedréit {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Den Typ vum Fichier ass ongëlteg ({{ type }}). Erlaabten Type sinn {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Dëse Wäert soll méi kleng oder gläich {{ limit }} sinn.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Dës Zeecheketten ass ze laang. Se sollt héchstens {{ limit }} Zeechen hunn.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Dëse Wäert sollt méi grouss oder gläich {{ limit }} sinn.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Dës Zeecheketten ass ze kuerz. Se sollt mindestens {{ limit }} Zeechen hunn.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Dëse Wäert sollt net eidel sinn.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Dëst sollt keen Null-Wäert sinn.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Dëst sollt keen Null-Wäert sinn.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Dëse Wäert ass net gëlteg.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Dëse Wäert entsprécht kenger gëlteger Zäitangab.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Dëse Wäert ass keng gëlteg URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Béid Wäerter sollten identesch sinn.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>De fichier ass ze grouss. Déi maximal Gréisst dierf {{ limit }} {{ suffix }} net depasséieren.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>De Fichier ass ze grouss.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>De Fichier konnt net eropgeluede ginn.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Dëse Wäert sollt eng gëlteg Zuel sinn.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Dëse Fichier ass kee gëltegt Bild.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Dëst ass keng gëlteg IP-Adress.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Dëse Wäert aentsprécht kenger gëlteger Sprooch.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Dëse Wäert entsprécht kengem gëltege Gebittsschema.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Dëse Wäert entsprécht kengem gëltege Land.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Dëse Wäert gëtt scho benotzt.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>D'Gréisst vum Bild konnt net detektéiert ginn.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>D'Breet vum Bild ass ze grouss ({{ width }}px). Déi erlaabte maximal Breet ass {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>D'Breet vum Bild ass ze kleng ({{ width }}px). Déi minimal Breet ass {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>D'Héicht vum Bild ass ze grouss ({{ height }}px). Déi erlaabte maximal Héicht ass {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>D'Héicht vum Bild ass ze kleng ({{ height }}px). Déi minimal Héicht ass {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Dëse Wäert sollt dem aktuelle Benotzerpasswuert entspriechen.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Dëse Wäert sollt exactly {{ limit }} Buschtaf hunn.|Dëse Wäert sollt exakt {{ limit }} Buschtawen hunn.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>De Fichier gouf just deelweis eropgelueden.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Et gouf kee Fichier eropgelueden.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Et gouf keen temporären Dossier an der php.ini konfiguréiert.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Den temporäre Fichier kann net gespäichert ginn.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Eng PHP-Erweiderung huet den Upload verhënnert.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Dës Sammlung sollt {{ limit }} oder méi Elementer hunn.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Dës Sammlung sollt {{ limit }} oder manner Elementer hunn.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Dës Sammlung sollt exakt {{ limit }} Element hunn.|Dës Sammlung sollt exakt {{ limit }} Elementer hunn.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Ongëlteg Kaartennummer.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Net ënnerstëtzte Kaartentyp oder ongëlteg Kaartennummer.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Dëst ass keng gëlteg IBAN-Kontonummer.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Dëse Wäert ass keng gëlteg ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Dëse Wäert ass keng gëlteg ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Dëse Wäert ass weder eng gëlteg ISBN-10 nach eng gëlteg ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Dëse Wäert ass keng gëlteg ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Dëse Wäert ass keng gëlteg Währung.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Dëse Wäert sollt {{ compared_value }} sinn.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Dëse Wäert sollt méi grouss wéi {{ compared_value }} sinn.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Dëse Wäert sollt méi grouss wéi oder gläich {{ compared_value }} sinn.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Dëse Wäert sollt identesch si mat {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Dëse Wäert sollt méi kleng wéi {{ compared_value }} sinn.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Dëse Wäert sollt méi kleng wéi oder gläich {{ compared_value }} sinn.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Dëse Wäert sollt net {{ compared_value }} sinn.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Dëse Wäert sollt net identesch si mat {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>D'Säiteverhältnis vum Bild ass ze grouss ({{ ratio }}). Den erlaabte Maximalwäert ass {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>D'Säiteverhältnis vum Bild ass ze kleng ({{ ratio }}). Den erwaarte Minimalwäert ass {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>D'Bild ass quadratesch ({{ width }}x{{ height }}px). Quadratesch Biller sinn net erlaabt.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>D'Bild ass am Queeschformat ({{ width }}x{{ height }}px). Biller am Queeschformat sinn net erlaabt.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>D'Bild ass am Héichformat ({{ width }}x{{ height }}px). Biller am Héichformat sinn net erlaabt.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lt.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lt.xlf new file mode 100644 index 0000000..a556c45 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lt.xlf @@ -0,0 +1,307 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Reikšmė turi būti neigiama.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Reikšmė turi būti teigiama.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Šios reikšmės tipas turi būti {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Ši reikšmė turi būti tuščia.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Neteisingas pasirinkimas.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Turite pasirinkti bent {{ limit }} variantą.|Turite pasirinkti bent {{ limit }} variantus.|Turite pasirinkti bent {{ limit }} variantų.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Turite pasirinkti ne daugiau kaip {{ limit }} variantą.|Turite pasirinkti ne daugiau kaip {{ limit }} variantus.|Turite pasirinkti ne daugiau kaip {{ limit }} variantų.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Viena ar daugiau įvestų reikšmių yra netinkamos.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Nebuvo tikimasi Šis laukas.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Šiame lauke yra dingęs.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Ši reikšmė nėra data.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Ši reikšmė nera data ir laikas.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Ši reikšmė nėra tinkamas el. pašto adresas.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Byla nerasta.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Negalima nuskaityti bylos.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Byla yra per didelė ({{ size }} {{ suffix }}). Maksimalus dydis {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Netinkamas bylos tipas (mime type) ({{ type }}). Galimi bylų tipai {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Reikšmė turi būti {{ limit }} arba mažiau.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Per didelis simbolių skaičius. Turi susidaryti iš {{ limit }} arba mažiau simbolių.|Per didelis simbolių skaičius. Turi susidaryti iš {{ limit }} arba mažiau simbolių.|Per didelis simbolių skaičius. Turi susidaryti iš {{ limit }} arba mažiau simbolių.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Reikšmė turi būti {{ limit }} arba daugiau.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Per mažas simbolių skaičius. Turi susidaryti iš {{ limit }} arba daugiau simbolių.|Per mažas simbolių skaičius. Turi susidaryti iš {{ limit }} arba daugiau simbolių.|Per mažas simbolių skaičius. Turi susidaryti iš {{ limit }} arba daugiau simbolių.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Ši reikšmė negali būti tuščia.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Ši reikšmė negali būti null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Ši reikšmė turi būti null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Netinkama reikšmė.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Ši reikšmė nėra laikas.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Ši reikšmė nėra tinkamas interneto adresas.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Abi reikšmės turi būti identiškos.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Byla yra per didelė. Maksimalus dydis yra {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Byla per didelė.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Byla negali būti įkelta.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Ši reikšmė turi būti skaičius.</target> + </trans-unit> + <trans-unit id="36"> + <source>This value is not a valid country.</source> + <target>Ši reikšmė nėra tinkama šalis.</target> + </trans-unit> + <trans-unit id="37"> + <source>This file is not a valid image.</source> + <target>Byla nėra paveikslėlis.</target> + </trans-unit> + <trans-unit id="38"> + <source>This is not a valid IP address.</source> + <target>Ši reikšmė nėra tinkamas IP adresas.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid language.</source> + <target>Ši reikšmė nėra tinkama kalba.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid locale.</source> + <target>Ši reikšmė nėra tinkama lokalė.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Ši reikšmė jau yra naudojama.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Nepavyko nustatyti nuotraukos dydžio.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Nuotraukos plotis per didelis ({{ width }}px). Maksimalus leidžiamas plotis yra {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Nuotraukos plotis per mažas ({{ width }}px). Minimalus leidžiamas plotis yra {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Nuotraukos aukštis per didelis ({{ height }}px). Maksimalus leidžiamas aukštis yra {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Nuotraukos aukštis per mažas ({{ height }}px). Minimalus leidžiamas aukštis yra {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Ši reikšmė turi sutapti su dabartiniu naudotojo slaptažodžiu.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Ši reikšmė turi turėti lygiai {{ limit }} simbolį.|Ši reikšmė turi turėti lygiai {{ limit }} simbolius.|Ši reikšmė turi turėti lygiai {{ limit }} simbolių.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Failas buvo tik dalinai įkeltas.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Nebuvo įkelta jokių failų.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Nėra sukonfiguruoto jokio laikino katalogo php.ini faile.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Nepavyko išsaugoti laikino failo.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP plėtinys sutrukdė failo įkėlimą ir jis nepavyko.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Sąraše turi būti {{ limit }} arba daugiau įrašų.|Sąraše turi būti {{ limit }} arba daugiau įrašų.|Sąraše turi būti {{ limit }} arba daugiau įrašų.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Sąraše turi būti {{ limit }} arba mažiau įrašų.|Sąraše turi būti {{ limit }} arba mažiau įrašų.|Sąraše turi būti {{ limit }} arba mažiau įrašų.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Sąraše turi būti lygiai {{ limit }} įrašas.|Sąraše turi būti lygiai {{ limit }} įrašai.|Sąraše turi būti lygiai {{ limit }} įrašų.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Klaidingas kortelės numeris.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Kortelės tipas nepalaikomas arba klaidingas kortelės numeris.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Ši reišmė neatitinka tarptautinio banko sąskaitos numerio formato (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Ši reikšmė neatitinka ISBN-10 formato.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Ši reikšmė neatitinka ISBN-13 formato.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Ši reikšmė neatitinka nei ISBN-10, nei ISBN-13 formato.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Ši reišmė neatitinka ISSN formato.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Netinkamas valiutos formatas.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Ši reikšmė turi būti lygi {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Ši reikšmė turi būti didesnė už {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Ši reikšmė turi būti didesnė už arba lygi {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ši reikšmė turi būti identiška {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Ši reikšmė turi būti mažesnė už {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Ši reikšmė turi būti mažesnė už arba lygi {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Ši reikšmė neturi būti lygi {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ši reikšmė neturi būti identiška {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Nuotraukos santykis yra per didelis ({{ ratio }}). Didžiausias leistinas santykis yra {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Nuotraukos santykis yra per mažas ({{ ratio }}). Mažiausias leistinas santykis yra {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Nuotrauka yra kvadratinė ({{ width }}x{{ height }}px). Kvadratinės nuotraukos nėra leistinos.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Nuotrauka orientuota į plotį ({{ width }}x{{ height }}px). Nuotraukos orientuotos į plotį nėra leistinos.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Nuotrauka orientuota į aukštį ({{ width }}x{{ height }}px). Nuotraukos orientuotos į aukštį nėra leistinos.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Failas negali būti tuščias.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.mn.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.mn.xlf new file mode 100644 index 0000000..dfe7eeb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.mn.xlf @@ -0,0 +1,151 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Энэ утга буруу байх ёстой.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Энэ утга үнэн байх ёстой.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Энэ утга {{ type }} -н төрөл байх ёстой.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Энэ утга хоосон байх ёстой.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Сонгосон утга буруу байна.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Хамгийн багадаа {{ limit }} утга сонгогдсон байх ёстой.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Хамгийн ихдээ {{ limit }} утга сонгогдох боломжтой.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Өгөгдсөн нэг эсвэл нэгээс олон утга буруу байна.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Энэ талбар нь хүлээгдэж байсан юм.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Энэ талбар нь алга болсон байна.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Энэ утга буруу date төрөл байна .</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Энэ утга буруу цаг төрөл байна.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>И-майл хаяг буруу байна.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Файл олдсонгүй.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Файл уншигдахуйц биш байна.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Файл хэтэрхий том байна ({{ size }} {{ suffix }}). Зөвшөөрөгдөх дээд хэмжээ {{ limit }} {{ suffix }} байна.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Файлын MIME-төрөл нь буруу байна ({{ type }}). Зөвшөөрөгдөх MIME-төрлүүд {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Энэ утга {{ limit }} юмуу эсвэл бага байна.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Энэ утга хэтэрхий урт байна. {{ limit }} тэмдэгтийн урттай юмуу эсвэл бага байна.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Энэ утга {{ limit }} юмуу эсвэл их байна.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Энэ утга хэтэрхий богино байна. {{ limit }} тэмдэгт эсвэл их байна.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Энэ утга хоосон байж болохгүй.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Энэ утга null байж болохгүй.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Энэ утга null байна.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Энэ утга буруу байна.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Энэ утга буруу цаг төрөл байна.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Энэ утга буруу URL байна .</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Хоёр утгууд ижил байх ёстой.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Файл хэтэрхий том байна. Зөвшөөрөгдөх дээд хэмжээ нь {{ limit }} {{ suffix }} байна.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Файл хэтэрхий том байна.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Файл upload хийгдсэнгүй.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Энэ утга зөвхөн тоо байна.</target> + </trans-unit> + <trans-unit id="36"> + <source>This value is not a valid country.</source> + <target>Энэ утга үнэн бодит улс биш байна.</target> + </trans-unit> + <trans-unit id="37"> + <source>This file is not a valid image.</source> + <target>Файл зураг биш байна.</target> + </trans-unit> + <trans-unit id="38"> + <source>This is not a valid IP address.</source> + <target>IP хаяг зөв биш байна.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid language.</source> + <target>Энэ утга үнэн зөв хэл биш байна .</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nb.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nb.xlf new file mode 100644 index 0000000..a8b790c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nb.xlf @@ -0,0 +1,155 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Verdien skal være falsk.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Verdien skal være sann.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Verdien skal være av typen {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Verdien skal være blank.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Verdien skal være en av de gitte valg.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Du skal velge minst {{ limit }} valg.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Du kan maks velge {{ limit }} valg.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>En eller flere av de oppgitte verdier er ugyldige.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Dette feltet ikke var forventet.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Dette feltet mangler.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Verdien er ikke en gyldig dato.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Verdien er ikke en gyldig dato og tid.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Verdien er ikke en gyldig e-mail adresse.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Filen kunne ikke finnes.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Filen kan ikke leses.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Filen er for stor ({{ size }} {{ suffix }}). Tilatte maksimale størrelse {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Mimetypen av filen er ugyldig ({{ type }}). Tilatte mimetyper er {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Verdien skal være {{ limit }} eller mindre.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Verdien er for lang. Den skal ha {{ limit }} bokstaver eller mindre.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Verdien skal være {{ limit }} eller mer.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Verdien er for kort. Den skal ha {{ limit }} tegn eller flere.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Verdien må ikke være blank.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Verdien må ikke være tom (null).</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Verdien skal være tom (null).</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Verdien er ikke gyldig.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Verdien er ikke en gyldig tid.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Verdien er ikke en gyldig URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>De to verdier skal være ens.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Filen er for stor. Den maksimale størrelse er {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Filen er for stor.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Filen kunne ikke lastes opp.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Denne verdi skal være et gyldig tall.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Denne filen er ikke et gyldig bilde.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Dette er ikke en gyldig IP adresse.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Denne verdi er ikke et gyldig språk.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Denne verdi er ikke en gyldig lokalitet.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Denne verdi er ikke et gyldig land.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nl.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nl.xlf new file mode 100644 index 0000000..c2372c9 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nl.xlf @@ -0,0 +1,311 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Deze waarde mag niet waar zijn.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Deze waarde moet waar zijn.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Deze waarde moet van het type {{ type }} zijn.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Deze waarde moet leeg zijn.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>De geselecteerde waarde is geen geldige optie.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Selecteer ten minste {{ limit }} optie.|Selecteer ten minste {{ limit }} opties.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Selecteer maximaal {{ limit }} optie.|Selecteer maximaal {{ limit }} opties.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Eén of meer van de ingegeven waarden zijn ongeldig.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Dit veld was niet verwacht.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Dit veld ontbreekt.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Deze waarde is geen geldige datum.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Deze waarde is geen geldige datum en tijd.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Deze waarde is geen geldig e-mailadres.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Het bestand is niet gevonden.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Het bestand is niet leesbaar.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Het bestand is te groot ({{ size }} {{ suffix }}). Toegestane maximum grootte is {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Het mime type van het bestand is ongeldig ({{ type }}). Toegestane mime types zijn {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Deze waarde moet {{ limit }} of minder zijn.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Deze waarde is te lang. Hij mag maximaal {{ limit }} teken bevatten.|Deze waarde is te lang. Hij mag maximaal {{ limit }} tekens bevatten.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Deze waarde moet {{ limit }} of meer zijn.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Deze waarde is te kort. Hij moet tenminste {{ limit }} teken bevatten.|Deze waarde is te kort. Hij moet tenminste {{ limit }} tekens bevatten.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Deze waarde mag niet leeg zijn.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Deze waarde mag niet null zijn.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Deze waarde moet null zijn.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Deze waarde is ongeldig.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Deze waarde is geen geldige tijd.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Deze waarde is geen geldige URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>De twee waarden moeten gelijk zijn.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Het bestand is te groot. Toegestane maximum grootte is {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Het bestand is te groot.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Het bestand kon niet geüpload worden.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Deze waarde moet een geldig getal zijn.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Dit bestand is geen geldige afbeelding.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Dit is geen geldig IP-adres.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Deze waarde representeert geen geldige taal.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Deze waarde representeert geen geldige lokalisering.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Deze waarde representeert geen geldig land.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Deze waarde wordt al gebruikt.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>De grootte van de afbeelding kon niet bepaald worden.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>De afbeelding is te breed ({{ width }}px). De maximaal toegestane breedte is {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>De afbeelding is niet breed genoeg ({{ width }}px). De minimaal verwachte breedte is {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>De afbeelding is te hoog ({{ height }}px). De maximaal toegestane hoogte is {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>De afbeelding is niet hoog genoeg ({{ height }}px). De minimaal verwachte hoogte is {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Deze waarde moet het huidige wachtwoord van de gebruiker zijn.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Deze waarde moet exact {{ limit }} teken lang zijn.|Deze waarde moet exact {{ limit }} tekens lang zijn.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Het bestand is niet geheel geüpload.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Er is geen bestand geüpload.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Er is geen tijdelijke map geconfigureerd in php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Kan het tijdelijke bestand niet wegschrijven op disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>De upload is mislukt vanwege een PHP-extensie.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Deze collectie moet {{ limit }} element of meer bevatten.|Deze collectie moet {{ limit }} elementen of meer bevatten.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Deze collectie moet {{ limit }} element of minder bevatten.|Deze collectie moet {{ limit }} elementen of minder bevatten.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Deze collectie moet exact {{ limit }} element bevatten.|Deze collectie moet exact {{ limit }} elementen bevatten.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Ongeldig creditcardnummer.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Niet-ondersteund type creditcard of ongeldig nummer.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Dit is geen geldig internationaal bankrekeningnummer (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Deze waarde is geen geldige ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Deze waarde is geen geldige ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Deze waarde is geen geldige ISBN-10 of ISBN-13 waarde.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Deze waarde is geen geldige ISSN waarde.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Deze waarde is geen geldige valuta.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Deze waarde moet gelijk zijn aan {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Deze waarde moet groter zijn dan {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Deze waarde moet groter dan of gelijk aan {{ compared_value }} zijn.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Deze waarde moet identiek zijn aan {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Deze waarde moet minder zijn dan {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Deze waarde moet minder dan of gelijk aan {{ compared_value }} zijn.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Deze waarde mag niet gelijk zijn aan {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value }}.</source> + <target>Deze waarde mag niet identiek zijn aan {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>De afbeeldingsverhouding is te groot ({{ ratio }}). Maximale verhouding is {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>De afbeeldingsverhouding is te klein ({{ ratio }}). Minimale verhouding is {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>De afbeelding is vierkant ({{ width }}x{{ height }}px). Vierkante afbeeldingen zijn niet toegestaan.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>De afbeelding is liggend ({{ width }}x{{ height }}px). Liggende afbeeldingen zijn niet toegestaan.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>De afbeelding is staand ({{ width }}x{{ height }}px). Staande afbeeldingen zijn niet toegestaan.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Lege bestanden zijn niet toegestaan.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>Deze waarde is niet in de verwachte tekencodering {{ charset }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.no.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.no.xlf new file mode 100644 index 0000000..ea01c63 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.no.xlf @@ -0,0 +1,227 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Verdien skulle ha vore tom/nei.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Verdien skulla ha vore satt/ja.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Verdien må vere av typen {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Verdien skal vere blank.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Verdien du valgte er ikkje gyldig.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Du må velge minst {{ limit }} valg.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Du kan maksimalt gjere {{ limit }} valg.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Ein eller fleire av dei opplyste verdiane er ugyldige.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Dette feltet var ikke forventet.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Dette feltet mangler.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Verdien er ikkje ein gyldig dato.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Verdien er ikkje ein gyldig dato og tid.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Verdien er ikkje ei gyldig e-postadresse.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Fila kunne ikkje finnes.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Fila kan ikkje lesast.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fila er for stor ({{ size }} {{ suffix }}). Tillatt maksimal størrelse er {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Mime-typen av fila er ugyldig ({{ type }}). Tillatte mime-typar er {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Verdien må vere {{ limit }} eller mindre.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Verdien er for lang. Den må vere {{ limit }} bokstavar eller mindre.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Verdien må vere {{ limit }} eller meir.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Verdien er for kort. Den må ha {{ limit }} teikn eller fleire.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Verdien må ikkje vere blank.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Verdien må ikkje vere tom (null).</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Verdien må vere tom (null).</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Verdien er ikkje gyldig.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Verdien er ikkje gyldig tidseining.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Verdien er ikkje ein gyldig URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Dei to verdiane må vere like.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fila er for stor. Den maksimale storleik er {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Fila er for stor.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Fila kunne ikkje bli lasta opp.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Verdien må vere eit gyldig tal.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Fila er ikkje eit gyldig bilete.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Dette er ikkje ei gyldig IP-adresse.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Verdien er ikkje eit gyldig språk.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Verdien er ikkje ein gyldig lokalitet (språk/region).</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Verdien er ikkje eit gyldig land.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Verdien er allereie i bruk.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Storleiken på biletet kunne ikkje oppdagast.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Biletbreidda er for stor, ({{ width }} pikslar). Tillatt maksimumsbreidde er {{ max_width }} pikslar.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Biletbreidda er for liten, ({{ width }} pikslar). Forventa minimumsbreidde er {{ min_width }} pikslar.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Bilethøgda er for stor, ({{ height }} pikslar). Tillatt maksimumshøgde er {{ max_height }} pikslar.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Billethøgda er for låg, ({{ height }} pikslar). Forventa minimumshøgde er {{ min_height }} pikslar.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Verdien må vere brukaren sitt noverande passord.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Verdien må vere nøyaktig {{ limit }} teikn.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Fila vart kun delvis opplasta.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Inga fil vart lasta opp.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Førebels mappe (tmp) er ikkje konfigurert i php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Kan ikkje skrive førebels fil til disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Ei PHP-udviding forårsaka feil under opplasting.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Denne samlinga må innehalde {{ limit }} element eller meir.|Denne samlinga må innehalde {{ limit }} element eller meir.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Denne samlinga må innehalde {{ limit }} element eller færre.|Denne samlinga må innehalde {{ limit }} element eller færre.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Denne samlinga må innehalde nøyaktig {{ limit }} element.|Denne samlinga må innehalde nøyaktig {{ limit }} element.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Ugyldig kortnummer.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Korttypen er ikkje støtta eller ugyldig kortnummer.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pl.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pl.xlf new file mode 100644 index 0000000..ac7406c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pl.xlf @@ -0,0 +1,311 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Ta wartość powinna być fałszem.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Ta wartość powinna być prawdą.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Ta wartość powinna być typu {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Ta wartość powinna być pusta.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Ta wartość powinna być jedną z podanych opcji.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Powinieneś wybrać co najmniej {{ limit }} opcję.|Powinieneś wybrać co najmniej {{ limit }} opcje.|Powinieneś wybrać co najmniej {{ limit }} opcji.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Powinieneś wybrać maksymalnie {{ limit }} opcję.|Powinieneś wybrać maksymalnie {{ limit }} opcje.|Powinieneś wybrać maksymalnie {{ limit }} opcji.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Jedna lub więcej z podanych wartości jest nieprawidłowa.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>To pole nie spodziewano.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>To pole jest chybianie.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Ta wartość nie jest prawidłową datą.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Ta wartość nie jest prawidłową datą i czasem.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Ta wartość nie jest prawidłowym adresem email.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Plik nie mógł zostać odnaleziony.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Nie można odczytać pliku.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Plik jest za duży ({{ size }} {{ suffix }}). Maksymalny dozwolony rozmiar to {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Nieprawidłowy typ mime pliku ({{ type }}). Dozwolone typy mime to {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Ta wartość powinna wynosić {{ limit }} lub mniej.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Ta wartość jest zbyt długa. Powinna mieć {{ limit }} lub mniej znaków.|Ta wartość jest zbyt długa. Powinna mieć {{ limit }} lub mniej znaków.|Ta wartość jest zbyt długa. Powinna mieć {{ limit }} lub mniej znaków.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Ta wartość powinna wynosić {{ limit }} lub więcej.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Ta wartość jest zbyt krótka. Powinna mieć {{ limit }} lub więcej znaków.|Ta wartość jest zbyt krótka. Powinna mieć {{ limit }} lub więcej znaków.|Ta wartość jest zbyt krótka. Powinna mieć {{ limit }} lub więcej znaków.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Ta wartość nie powinna być pusta.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Ta wartość nie powinna być nullem.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Ta wartość powinna być nullem.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Ta wartość jest nieprawidłowa.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Ta wartość nie jest prawidłowym czasem.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Ta wartość nie jest prawidłowym adresem URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Obie wartości powinny być równe.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Plik jest za duży. Maksymalny dozwolony rozmiar to {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Plik jest za duży.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Plik nie mógł być wgrany.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Ta wartość powinna być prawidłową liczbą.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Ten plik nie jest obrazem.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>To nie jest prawidłowy adres IP.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Ta wartość nie jest prawidłowym językiem.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Ta wartość nie jest prawidłową lokalizacją.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Ta wartość nie jest prawidłową nazwą kraju.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Ta wartość jest już wykorzystywana.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Nie można wykryć rozmiaru obrazka.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Szerokość obrazka jest zbyt duża ({{ width }}px). Maksymalna dopuszczalna szerokość to {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Szerokość obrazka jest zbyt mała ({{ width }}px). Oczekiwana minimalna szerokość to {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Wysokość obrazka jest zbyt duża ({{ height }}px). Maksymalna dopuszczalna wysokość to {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Wysokość obrazka jest zbyt mała ({{ height }}px). Oczekiwana minimalna wysokość to {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Ta wartość powinna być aktualnym hasłem użytkownika.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Ta wartość powinna mieć dokładnie {{ limit }} znak.|Ta wartość powinna mieć dokładnie {{ limit }} znaki.|Ta wartość powinna mieć dokładnie {{ limit }} znaków.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Plik został wgrany tylko częściowo.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Żaden plik nie został wgrany.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Nie skonfigurowano folderu tymczasowego w php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Nie można zapisać pliku tymczasowego na dysku.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Rozszerzenie PHP spowodowało błąd podczas wgrywania.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Ten zbiór powinien zawierać {{ limit }} lub więcej elementów.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Ten zbiór powinien zawierać {{ limit }} lub mniej elementów.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Ten zbiór powinien zawierać dokładnie {{ limit }} element.|Ten zbiór powinien zawierać dokładnie {{ limit }} elementy.|Ten zbiór powinien zawierać dokładnie {{ limit }} elementów.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Nieprawidłowy numer karty.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Nieobsługiwany rodzaj karty lub nieprawidłowy numer karty.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Nieprawidłowy międzynarodowy numer rachunku bankowego (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Ta wartość nie jest prawidłowym numerem ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Ta wartość nie jest prawidłowym numerem ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Ta wartość nie jest prawidłowym numerem ISBN-10 ani ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Ta wartość nie jest prawidłowym numerem ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Ta wartość nie jest prawidłową walutą.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Ta wartość powinna być równa {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Ta wartość powinna być większa niż {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Ta wartość powinna być większa bądź równa {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ta wartość powinna być identycznego typu {{ compared_value_type }} oraz wartości {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Ta wartość powinna być mniejsza niż {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Ta wartość powinna być mniejsza bądź równa {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Ta wartość nie powinna być równa {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ta wartość nie powinna być identycznego typu {{ compared_value_type }} oraz wartości {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Proporcje obrazu są zbyt duże ({{ ratio }}). Maksymalne proporcje to {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Proporcje obrazu są zbyt małe ({{ ratio }}). Minimalne proporcje to {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Obraz jest kwadratem ({{ width }}x{{ height }}px). Kwadratowe obrazy nie są akceptowane.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Obraz jest panoramiczny ({{ width }}x{{ height }}px). Panoramiczne zdjęcia nie są akceptowane.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Obraz jest portretowy ({{ width }}x{{ height }}px). Portretowe zdjęcia nie są akceptowane.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Plik nie może być pusty.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>Ta wartość nie pasuje do oczekiwanego zestawu znaków {{ charset }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt.xlf new file mode 100644 index 0000000..d563c92 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt.xlf @@ -0,0 +1,307 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Este valor deveria ser falso.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Este valor deveria ser verdadeiro.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Este valor deveria ser do tipo {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Este valor deveria ser vazio.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>O valor selecionado não é uma opção válida.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Você deveria selecionar {{ limit }} opção no mínimo.|Você deveria selecionar {{ limit }} opções no mínimo.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Você deve selecionar, no máximo {{ limit }} opção.|Você deve selecionar, no máximo {{ limit }} opções.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Um ou mais dos valores introduzidos não são válidos.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Este campo não era esperado.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Este campo está faltando.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Este valor não é uma data válida.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Este valor não é uma data-hora válida.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Este valor não é um endereço de e-mail válido.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>O arquivo não pôde ser encontrado.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>O arquivo não pôde ser lido.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>O arquivo é muito grande ({{ size }} {{ suffix }}). O tamanho máximo permitido é de {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>O tipo mime do arquivo é inválido ({{ type }}). Os tipos mime permitidos são {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Este valor deveria ser {{ limit }} ou menor.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>O valor é muito longo. Deveria ter {{ limit }} caracteres ou menos.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Este valor deveria ser {{ limit }} ou mais.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>O valor é muito curto. Deveria de ter {{ limit }} caractere ou mais.|O valor é muito curto. Deveria de ter {{ limit }} caracteres ou mais.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Este valor não deveria ser branco/vazio.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Este valor não deveria ser nulo.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Este valor deveria ser nulo.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Este valor não é válido.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Este valor não é uma hora válida.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Este valor não é um URL válido.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Os dois valores deveriam ser iguais.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>O arquivo é muito grande. O tamanho máximo permitido é de {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>O ficheiro é muito grande.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Não foi possível carregar o ficheiro.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Este valor deveria de ser um número válido.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Este ficheiro não é uma imagem.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Este endereço de IP não é válido.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Este valor não é uma linguagem válida.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Este valor não é um 'locale' válido.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Este valor não é um País válido.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Este valor já está a ser usado.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>O tamanho da imagem não foi detetado.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>A largura da imagem ({{ width }}px) é muito grande. A largura máxima da imagem é: {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>A largura da imagem ({{ width }}px) é muito pequena. A largura miníma da imagem é de: {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>A altura da imagem ({{ height }}px) é muito grande. A altura máxima da imagem é de: {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>A altura da imagem ({{ height }}px) é muito pequena. A altura miníma da imagem é de: {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Este valor deveria de ser a password atual do utilizador.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Este valor tem de ter exatamente {{ limit }} carateres.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Só foi enviado parte do ficheiro.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Nenhum ficheiro foi enviado.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Não existe nenhum directório temporária configurado no ficheiro php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Não foi possível escrever ficheiros temporários no disco.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Uma extensão PHP causou a falha no envio.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Esta coleção deve conter {{ limit }} elemento ou mais.|Esta coleção deve conter {{ limit }} elementos ou mais.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Esta coleção deve conter {{ limit }} elemento ou menos.|Esta coleção deve conter {{ limit }} elementos ou menos.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Esta coleção deve conter exatamente {{ limit }} elemento.|Esta coleção deve conter exatamente {{ limit }} elementos.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Número de cartão inválido.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Tipo de cartão não suportado ou número de cartão inválido.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Este não é um Número Internacional de Conta Bancária (IBAN) válido.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Este valor não é um ISBN-10 válido.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Este valor não é um ISBN-13 válido.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Este valor não é um ISBN-10 ou ISBN-13 válido.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Este valor não é um ISSN válido.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Este não é um valor monetário válido.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Este valor deve ser igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Este valor deve ser superior a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Este valor deve ser igual ou superior a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Este valor deve ser idêntico a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Este valor deve ser inferior a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Este valor deve ser igual ou inferior a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Este valor não deve ser igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Este valor não deve ser idêntico a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>O formato da imagem é muito grande ({{ ratio }}). O formato máximo é {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>O formato da imagem é muito pequeno ({{ ratio }}). O formato mínimo esperado é {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>A imagem é um quadrado ({{ width }}x{{ height }}px). Imagens quadradas não são permitidas.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>A imagem está orientada à paisagem ({{ width }}x{{ height }}px). Imagens orientadas à paisagem não são permitidas.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>A imagem está orientada ao retrato ({{ width }}x{{ height }}px). Imagens orientadas ao retrato não são permitidas.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Ficheiro vazio não é permitido.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf new file mode 100644 index 0000000..bff91e3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf @@ -0,0 +1,315 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Este valor deve ser falso.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Este valor deve ser verdadeiro.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Este valor deve ser do tipo {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Este valor deve ser vazio.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>O valor selecionado não é uma opção válida.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Você deve selecionar, no mínimo, {{ limit }} opção.|Você deve selecionar, no mínimo, {{ limit }} opções.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Você deve selecionar, no máximo, {{ limit }} opção.|Você deve selecionar, no máximo, {{ limit }} opções.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Um ou mais valores informados são inválidos.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Este campo não era esperado.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Este campo está ausente.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Este valor não é uma data válida.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Este valor não é uma data e hora válida.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Este valor não é um endereço de e-mail válido.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>O arquivo não foi encontrado.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>O arquivo não pode ser lido.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>O arquivo é muito grande ({{ size }} {{ suffix }}). O tamanho máximo permitido é {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>O tipo mime do arquivo é inválido ({{ type }}). Os tipos mime permitidos são {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Este valor deve ser {{ limit }} ou menos.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Este valor é muito longo. Deve ter {{ limit }} caractere ou menos.|Este valor é muito longo. Deve ter {{ limit }} caracteres ou menos.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Este valor deve ser {{ limit }} ou mais.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Este valor é muito curto. Deve ter {{ limit }} caractere ou mais.|Este valor é muito curto. Deve ter {{ limit }} caracteres ou mais.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Este valor não deve ser vazio.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Este valor não deve ser nulo.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Este valor deve ser nulo.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Este valor não é válido.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Este valor não é uma hora válida.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Este valor não é uma URL válida.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Os dois valores devem ser iguais.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>O arquivo é muito grande. O tamanho máximo permitido é de {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>O arquivo é muito grande.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>O arquivo não pode ser enviado.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Este valor deve ser um número válido.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Este arquivo não é uma imagem válida.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Este não é um endereço de IP válido.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Este valor não é um idioma válido.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Este valor não é uma localidade válida.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Este valor não é um país válido.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Este valor já está sendo usado.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>O tamanho da imagem não pode ser detectado.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>A largura da imagem é muito grande ({{ width }}px). A largura máxima permitida é de {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>A largura da imagem é muito pequena ({{ width }}px). A largura mínima esperada é de {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>A altura da imagem é muito grande ({{ height }}px). A altura máxima permitida é de {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>A altura da imagem é muito pequena ({{ height }}px). A altura mínima esperada é de {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Este valor deve ser a senha atual do usuário.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Este valor deve ter exatamente {{ limit }} caractere.|Este valor deve ter exatamente {{ limit }} caracteres.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>O arquivo foi enviado apenas parcialmente.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Nenhum arquivo foi enviado.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Nenhum diretório temporário foi configurado no php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Não foi possível escrever o arquivo temporário no disco.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Uma extensão PHP fez com que o envio falhasse.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Esta coleção deve conter {{ limit }} elemento ou mais.|Esta coleção deve conter {{ limit }} elementos ou mais.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Esta coleção deve conter {{ limit }} elemento ou menos.|Esta coleção deve conter {{ limit }} elementos ou menos.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Esta coleção deve conter exatamente {{ limit }} elemento.|Esta coleção deve conter exatamente {{ limit }} elementos.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Número de cartão inválido.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Tipo de cartão não suportado ou número de cartão inválido.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Este não é um Número Internacional de Conta Bancária (IBAN) válido.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Este valor não é um ISBN-10 válido.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Este valor não é um ISBN-13 válido.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Este valor não é um ISBN-10 e nem um ISBN-13 válido.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Este valor não é um ISSN válido.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Este não é um valor monetário válido.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Este valor deve ser igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Este valor deve ser maior que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Este valor deve ser maior ou igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Este valor deve ser idêntico a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Este valor deve ser menor que {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Este valor deve ser menor ou igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Este valor não deve ser igual a {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Este valor não deve ser idêntico a {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>A proporção da imagem é muito grande ({{ ratio }}). A proporção máxima permitida é {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>A proporção da imagem é muito pequena ({{ ratio }}). A proporção mínima esperada é {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>A imagem está num formato quadrado ({{ width }}x{{ height }}px). Imagens com formato quadrado não são permitidas.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>A imagem está orientada à paisagem ({{ width }}x{{ height }}px). Imagens orientadas à paisagem não são permitidas.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>A imagem está orientada ao retrato ({{ width }}x{{ height }}px). Imagens orientadas ao retrato não são permitidas.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Arquivo vazio não é permitido.</target> + </trans-unit> + <trans-unit id="79"> + <source>The host could not be resolved.</source> + <target>O host não pôde ser resolvido.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>Este valor não corresponde ao charset {{ charset }} esperado.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ro.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ro.xlf new file mode 100644 index 0000000..27346a9 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ro.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Această valoare ar trebui să fie falsă (false).</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Această valoare ar trebui să fie adevărată (true).</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Această valoare ar trebui să fie de tipul {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Această valoare ar trebui sa fie goală.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Valoarea selectată nu este o opțiune validă.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Trebuie să selectați cel puțin {{ limit }} opțiune.|Trebuie să selectați cel puțin {{ limit }} opțiuni.|Trebuie să selectați cel puțin {{ limit }} de opțiuni</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Trebuie să selectați cel mult {{ limit }} opțiune.|Trebuie să selectați cel mult {{ limit }} opțiuni.|Trebuie să selectați cel mult {{ limit }} de opțiuni.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Una sau mai multe dintre valorile furnizate sunt invalide.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Acest câmp nu era de aşteptat.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Acest câmp este lipsă.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Această valoare nu reprezintă o dată validă.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Această valoare nu reprezintă o dată și oră validă.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Această valoare nu reprezintă o adresă de e-mail validă.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Fișierul nu a putut fi găsit.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Fișierul nu poate fi citit.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fișierul este prea mare ({{ size }} {{ suffix }}). Dimensiunea maximă permisă este {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Tipul fișierului este invalid ({{ type }}). Tipurile permise de fișiere sunt ({{ types }}).</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Această valoare ar trebui să fie cel mult {{ limit }}.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Această valoare este prea lungă. Ar trebui să aibă maxim {{ limit }} caracter.|Această valoare este prea lungă. Ar trebui să aibă maxim {{ limit }} caractere.|Această valoare este prea lungă. Ar trebui să aibă maxim {{ limit }} de caractere.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Această valoare ar trebui să fie cel puțin {{ limit }}.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Această valoare este prea scurtă. Ar trebui să aibă minim {{ limit }} caracter.|Această valoare este prea scurtă. Ar trebui să aibă minim {{ limit }} caractere.|Această valoare este prea scurtă. Ar trebui să aibă minim {{ limit }} de caractere.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Această valoare nu ar trebui să fie goală.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Această valoare nu ar trebui să fie nulă (null).</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Această valoare ar trebui să fie nulă (null).</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Această valoare nu este validă.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Această valoare nu reprezintă o oră validă.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Această valoare nu reprezintă un URL (link) valid.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Cele două valori ar trebui să fie egale.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Fișierul este prea mare. Mărimea maximă permisă este {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Fișierul este prea mare.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Fișierul nu a putut fi încărcat.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Această valoare nu reprezintă un număr valid.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Acest fișier nu este o imagine validă.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Această valoare nu este o adresă IP validă.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Această valoare nu reprezintă o limbă corectă.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Această valoare nu reprezintă un dialect (o limbă) corect.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Această valoare nu este o țară validă.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Această valoare este folosită deja.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Mărimea imaginii nu a putut fi detectată.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Lățimea imaginii este prea mare ({{ width }}px). Lățimea maximă permisă este de {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Lățimea imaginii este prea mică ({{ width }}px). Lățimea minimă permisă este de {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Înălțimea imaginii este prea mare ({{ height }}px). Înălțimea maximă permisă este de {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Înălțimea imaginii este prea mică ({{ height }}px). Înălțimea minimă permisă este de {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Această valoare trebuie să fie parola curentă a utilizatorului.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Această valoare trebuie să conțină exact {{ limit }} caracter.|Această valoare trebuie să conțină exact {{ limit }} caractere.|Această valoare trebuie să conțină exact {{ limit }} de caractere.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Fișierul a fost încărcat parțial.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Nu a fost încărcat nici un fișier.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Nu este configurat nici un director temporar in php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Nu a fost posibilă scrierea fișierului temporar pe disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>O extensie PHP a prevenit încărcarea cu succes a fișierului.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Această colecție trebuie să conțină cel puțin {{ limit }} element.|Această colecție trebuie să conțină cel puțin {{ limit }} elemente.|Această colecție trebuie să conțină cel puțin {{ limit }} de elemente.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Această colecție trebuie să conțină cel mult {{ limit }} element.|Această colecție trebuie să conțină cel mult {{ limit }} elemente.|Această colecție trebuie să conțină cel mult {{ limit }} de elemente.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Această colecție trebuie să conțină {{ limit }} element.|Această colecție trebuie să conțină {{ limit }} elemente.|Această colecție trebuie să conțină {{ limit }} de elemente.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Numărul card invalid.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Tipul sau numărul cardului nu sunt valide.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Acesta nu este un cod IBAN (International Bank Account Number) valid.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Această valoare nu este un cod ISBN-10 valid.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Această valoare nu este un cod ISBN-13 valid.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Această valoare nu este un cod ISBN-10 sau ISBN-13 valid.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Această valoare nu este un cod ISSN valid.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Această valoare nu este o monedă validă.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Această valoare trebuie să fie egală cu {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Această valoare trebuie să fie mai mare de {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Această valoare trebuie să fie mai mare sau egală cu {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Această valoare trebuie identică cu {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Această valoare trebuie să fie mai mică de {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Această valoare trebuie să fie mai mică sau egală cu {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Această valoare nu trebuie să fie egală cu {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Această valoare nu trebuie să fie identică cu {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ru.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ru.xlf new file mode 100644 index 0000000..8e6e7c2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ru.xlf @@ -0,0 +1,311 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Значение должно быть ложным.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Значение должно быть истинным.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Тип значения должен быть {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Значение должно быть пустым.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Выбранное Вами значение недопустимо.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Вы должны выбрать хотя бы {{ limit }} вариант.|Вы должны выбрать хотя бы {{ limit }} варианта.|Вы должны выбрать хотя бы {{ limit }} вариантов.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Вы должны выбрать не более чем {{ limit }} вариант.|Вы должны выбрать не более чем {{ limit }} варианта.|Вы должны выбрать не более чем {{ limit }} вариантов.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Одно или несколько заданных значений недопустимо.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Это поле не ожидалось.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Это поле отсутствует.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Значение не является правильной датой.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Значение даты и времени недопустимо.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Значение адреса электронной почты недопустимо.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Файл не может быть найден.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Файл не может быть прочитан.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Файл слишком большой ({{ size }} {{ suffix }}). Максимально допустимый размер {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>MIME-тип файла недопустим ({{ type }}). Допустимы MIME-типы файлов {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Значение должно быть {{ limit }} или меньше.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Значение слишком длинное. Должно быть равно {{ limit }} символу или меньше.|Значение слишком длинное. Должно быть равно {{ limit }} символам или меньше.|Значение слишком длинное. Должно быть равно {{ limit }} символам или меньше.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Значение должно быть {{ limit }} или больше.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Значение слишком короткое. Должно быть равно {{ limit }} символу или больше.|Значение слишком короткое. Должно быть равно {{ limit }} символам или больше.|Значение слишком короткое. Должно быть равно {{ limit }} символам или больше.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Значение не должно быть пустым.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Значение не должно быть null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Значение должно быть null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Значение недопустимо.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Значение времени недопустимо.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Значение не является допустимым URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Оба значения должны быть одинаковыми.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Файл слишком большой. Максимально допустимый размер {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Файл слишком большой.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Файл не может быть загружен.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Значение должно быть числом.</target> + </trans-unit> + <trans-unit id="36"> + <source>This value is not a valid country.</source> + <target>Значение не является допустимой страной.</target> + </trans-unit> + <trans-unit id="37"> + <source>This file is not a valid image.</source> + <target>Файл не является допустимым форматом изображения.</target> + </trans-unit> + <trans-unit id="38"> + <source>This is not a valid IP address.</source> + <target>Значение не является допустимым IP адресом.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid language.</source> + <target>Значение не является допустимым языком.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid locale.</source> + <target>Значение не является допустимой локалью.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Это значение уже используется.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Не удалось определить размер изображения.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Ширина изображения слишком велика ({{ width }}px). Максимально допустимая ширина {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Ширина изображения слишком мала ({{ width }}px). Минимально допустимая ширина {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Высота изображения слишком велика ({{ height }}px). Максимально допустимая высота {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Высота изображения слишком мала ({{ height }}px). Минимально допустимая высота {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Значение должно быть текущим паролем пользователя.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Значение должно быть равно {{ limit }} символу.|Значение должно быть равно {{ limit }} символам.|Значение должно быть равно {{ limit }} символам.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Файл был загружен только частично.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Файл не был загружен.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Не настроена временная директория в php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Невозможно записать временный файл на диск.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Расширение PHP вызвало ошибку при загрузке.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Эта коллекция должна содержать {{ limit }} элемент или больше.|Эта коллекция должна содержать {{ limit }} элемента или больше.|Эта коллекция должна содержать {{ limit }} элементов или больше.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Эта коллекция должна содержать {{ limit }} элемент или меньше.|Эта коллекция должна содержать {{ limit }} элемента или меньше.|Эта коллекция должна содержать {{ limit }} элементов или меньше.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Эта коллекция должна содержать ровно {{ limit }} элемент.|Эта коллекция должна содержать ровно {{ limit }} элемента.|Эта коллекция должна содержать ровно {{ limit }} элементов.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Неверный номер карты.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Неподдерживаемый тип или неверный номер карты.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Значение не является допустимым международным номером банковского счета (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Значение имеет неверный формат ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Значение имеет неверный формат ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Значение не соответствует форматам ISBN-10 и ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Значение не соответствует формату ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Некорректный формат валюты.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Значение должно быть равно {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Значение должно быть больше чем {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Значение должно быть больше или равно {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Значение должно быть идентичным {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Значение должно быть меньше чем {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Значение должно быть меньше или равно {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Значение не должно быть равно {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Значение не должно быть идентичным {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Соотношение сторон изображения слишком велико ({{ ratio }}). Максимальное соотношение сторон {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Соотношение сторон изображения слишком мало ({{ ratio }}). Минимальное соотношение сторон {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Изображение квадратное ({{ width }}x{{ height }}px). Квадратные изображения не разрешены.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Изображение в альбомной ориентации ({{ width }}x{{ height }}px). Изображения в альбомной ориентации не разрешены.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Изображение в портретной ориентации ({{ width }}x{{ height }}px). Изображения в портретной ориентации не разрешены.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Пустые файлы не разрешены.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>Значение не совпадает с ожидаемой {{ charset }} кодировкой.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sk.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sk.xlf new file mode 100644 index 0000000..46f3ec3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sk.xlf @@ -0,0 +1,307 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Táto hodnota by mala byť nastavená na false.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Táto hodnota by mala byť nastavená na true.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Táto hodnota by mala byť typu {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Táto hodnota by mala byť prázdna.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Táto hodnota by mala byť jednou z poskytnutých možností.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Mali by ste vybrať minimálne {{ limit }} možnosť.|Mali by ste vybrať minimálne {{ limit }} možnosti.|Mali by ste vybrať minimálne {{ limit }} možností.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Mali by ste vybrať najviac {{ limit }} možnosť.|Mali by ste vybrať najviac {{ limit }} možnosti.|Mali by ste vybrať najviac {{ limit }} možností.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Niektoré z uvedených hodnôt sú neplatné.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Toto pole sa neočakáva.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Toto pole chýba.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Tato hodnota nemá platný formát dátumu.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Táto hodnota nemá platný formát dátumu a času.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Táto hodnota nie je platná emailová adresa.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Súbor sa nenašiel.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Súbor nie je čitateľný.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Súbor je príliš veľký ({{ size }} {{ suffix }}). Maximálna povolená veľkosť je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Súbor typu ({{ type }}) nie je podporovaný. Podporované typy sú {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Táto hodnota by mala byť {{ limit }} alebo menej.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Táto hodnota obsahuje viac znakov ako je povolené. Mala by obsahovať najviac {{ limit }} znak.|Táto hodnota obsahuje viac znakov ako je povolené. Mala by obsahovať najviac {{ limit }} znaky.|Táto hodnota obsahuje viac znakov ako je povolené. Mala by obsahovať najviac {{ limit }} znakov.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Táto hodnota by mala byť viac ako {{ limit }}.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Táto hodnota je príliš krátka. Musí obsahovať minimálne {{ limit }} znak.|Táto hodnota je príliš krátka. Musí obsahovať minimálne {{ limit }} znaky.|Táto hodnota je príliš krátka. Minimálny počet znakov je {{ limit }}.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Táto hodnota by mala byť vyplnená.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Táto hodnota by nemala byť null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Táto hodnota by mala byť null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Táto hodnota nie je platná.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Tato hodnota nemá správny formát času.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Táto hodnota nie je platnou URL adresou.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Tieto dve hodnoty by mali byť rovnaké.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Súbor je príliš veľký. Maximálna povolená veľkosť je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Súbor je príliš veľký.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Súbor sa nepodarilo nahrať.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Táto hodnota by mala byť číslo.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Tento súbor nie je obrázok.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Toto nie je platná IP adresa.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Tento jazyk neexistuje.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Táto lokalizácia neexistuje.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Táto krajina neexistuje.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Táto hodnota sa už používa.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Nepodarilo sa zistiť rozmery obrázku.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Obrázok je príliš široký ({{ width }}px). Maximálna povolená šírka obrázku je {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Obrázok je príliš úzky ({{ width }}px). Minimálna šírka obrázku by mala byť {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>>Obrázok je príliš vysoký ({{ height }}px). Maximálna povolená výška obrázku je {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Obrázok je príliš nízky ({{ height }}px). Minimálna výška obrázku by mala byť {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Táto hodnota by mala byť aktuálne heslo používateľa.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Táto hodnota by mala mať presne {{ limit }} znak.|Táto hodnota by mala mať presne {{ limit }} znaky.|Táto hodnota by mala mať presne {{ limit }} znakov.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Bola nahraná len časť súboru.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Žiadny súbor nebol nahraný.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>V php.ini nie je nastavená cesta k adresáru pre dočasné súbory.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Dočasný súbor sa nepodarilo zapísať na disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Rozšírenie PHP zabránilo nahraniu súboru.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Táto kolekcia by mala obsahovať aspoň {{ limit }} prvok alebo viac.|Táto kolekcia by mala obsahovať aspoň {{ limit }} prvky alebo viac.|Táto kolekcia by mala obsahovať aspoň {{ limit }} prvkov alebo viac.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Táto kolekcia by mala maximálne {{ limit }} prvok.|Táto kolekcia by mala obsahovať maximálne {{ limit }} prvky.|Táto kolekcia by mala obsahovať maximálne {{ limit }} prvkov.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Táto kolekcia by mala obsahovať presne {{ limit }} prvok.|Táto kolekcia by mala obsahovať presne {{ limit }} prvky.|Táto kolekcia by mala obsahovať presne {{ limit }} prvkov.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Neplatné číslo karty.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Nepodporovaný typ karty alebo neplatné číslo karty.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Toto je neplatný IBAN.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Táto hodnota je neplatné ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Táto hodnota je neplatné ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Táto hodnota nie je platné ISBN-10 ani ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Táto hodnota nie je platné ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Táto hodnota nie je platná mena.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Táto hodnota by mala byť rovná {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Táto hodnota by mala byť väčšia ako {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Táto hodnota by mala byť väčšia alebo rovná {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Táto hodnota by mala byť typu {{ compared_value_type }} a zároveň by mala byť rovná {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Táto hodnota by mala byť menšia ako {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Táto hodnota by mala byť menšia alebo rovná {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Táto hodnota by nemala byť rovná {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Táto hodnota by nemala byť typu {{ compared_value_type }} a zároveň by nemala byť rovná {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Pomer strán obrázku je príliš veľký ({{ ratio }}). Maximálny povolený pomer strán obrázku je {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Pomer strán obrázku je príliš malý ({{ ratio }}). Minimálny povolený pomer strán obrázku je {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Strany obrázku sú štvorcové ({{ width }}x{{ height }}px). Štvorcové obrázky nie sú povolené.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Obrázok je orientovaný na šírku ({{ width }}x{{ height }}px). Obrázky orientované na šírku nie sú povolené.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Obrázok je orientovaný na výšku ({{ width }}x{{ height }}px). Obrázky orientované na výšku nie sú povolené.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Súbor nesmie byť prázdny.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sl.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sl.xlf new file mode 100644 index 0000000..b41d1ae --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sl.xlf @@ -0,0 +1,311 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Vrednost bi morala biti nepravilna (false).</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Vrednost bi morala biti pravilna (true).</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Vrednost mora biti naslednjega tipa {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Vrednost mora biti prazna.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Vrednost, ki ste jo izbrali, ni veljavna možnost.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Izbrati morate vsaj {{ limit }} možnost.|Izbrati morate vsaj {{ limit }} možnosti.|Izbrati morate vsaj {{ limit }} možnosti.|Izbrati morate vsaj {{ limit }} možnosti.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Izberete lahko največ {{ limit }} možnost.|Izberete lahko največ {{ limit }} možnosti.|Izberete lahko največ {{ limit }} možnosti.|Izberete lahko največ {{ limit }} možnosti.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Ena ali več podanih vrednosti ni veljavnih.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>To polje ni bilo pričakovati.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>To polje manjka.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Ta vrednost ni veljaven datum.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Ta vrednost ni veljaven datum in čas.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Ta vrednost ni veljaven e-poštni naslov.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Datoteke ni mogoče najti.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Datoteke ni mogoče prebrati.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Datoteka je prevelika ({{ size }} {{ suffix }}). Največja dovoljena velikost je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Mime tip datoteke je neveljaven ({{ type }}). Dovoljeni mime tipi so {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Ta vrednost bi morala biti {{ limit }} ali manj.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Ta vrednost je predolga. Morala bi imeti {{ limit }} znak ali manj.|Ta vrednost je predolga. Morala bi imeti {{ limit }} znaka ali manj.|Ta vrednost je predolga. Morala bi imeti {{ limit }} znake ali manj.|Ta vrednost je predolga. Morala bi imeti {{ limit }} znakov ali manj.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Ta vrednost bi morala biti {{ limit }} ali več.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Ta vrednost je prekratka. Morala bi imeti {{ limit }} znak ali več.|Ta vrednost je prekratka. Morala bi imeti {{ limit }} znaka ali več.|Ta vrednost je prekratka. Morala bi imeti {{ limit }} znake ali več.|Ta vrednost je prekratka. Morala bi imeti {{ limit }} znakov ali več.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Ta vrednost ne bi smela biti prazna.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Ta vrednost ne bi smela biti nedefinirana (null).</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Ta vrednost bi morala biti nedefinirana (null).</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Ta vrednost ni veljavna.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Ta vrednost ni veljaven čas.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Ta vrednost ni veljaven URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Ti dve vrednosti bi morali biti enaki.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Datoteka je prevelika. Največja dovoljena velikost je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Datoteka je prevelika.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Datoteke ni bilo mogoče naložiti.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Ta vrednost bi morala biti veljavna številka.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Ta datoteka ni veljavna slika.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>To ni veljaven IP naslov.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Ta vrednost ni veljaven jezik.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Ta vrednost ni veljavna lokalnost.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Ta vrednost ni veljavna država.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Ta vrednost je že uporabljena.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Velikosti slike ni bilo mogoče zaznati.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Širina slike je preširoka ({{ width }}px). Največja dovoljena širina je {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Širina slike je premajhna ({{ width }}px). Najmanjša predvidena širina je {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Višina slike je prevelika ({{ height }}px). Največja dovoljena višina je {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Višina slike je premajhna ({{ height }}px). Najmanjša predvidena višina je {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Ta vrednost bi morala biti trenutno uporabnikovo geslo.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Ta vrednost bi morala imeti točno {{ limit }} znak.|Ta vrednost bi morala imeti točno {{ limit }} znaka.|Ta vrednost bi morala imeti točno {{ limit }} znake.|Ta vrednost bi morala imeti točno {{ limit }} znakov.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Datoteka je bila le delno naložena.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Nobena datoteka ni bila naložena.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Začasna mapa ni nastavljena v php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Začasne datoteke ni bilo mogoče zapisati na disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP razširitev je vzrok, da nalaganje ni uspelo.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Ta zbirka bi morala vsebovati {{ limit }} element ali več.|Ta zbirka bi morala vsebovati {{ limit }} elementa ali več.|Ta zbirka bi morala vsebovati {{ limit }} elemente ali več.|Ta zbirka bi morala vsebovati {{ limit }} elementov ali več.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Ta zbirka bi morala vsebovati {{ limit }} element ali manj.|Ta zbirka bi morala vsebovati {{ limit }} elementa ali manj.|Ta zbirka bi morala vsebovati {{ limit }} elemente ali manj.|Ta zbirka bi morala vsebovati {{ limit }} elementov ali manj.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Ta zbirka bi morala vsebovati točno {{ limit }} element.|Ta zbirka bi morala vsebovati točno {{ limit }} elementa.|Ta zbirka bi morala vsebovati točno {{ limit }} elemente.|Ta zbirka bi morala vsebovati točno {{ limit }} elementov.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Neveljavna številka kartice.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Nepodprti tip kartice ali neveljavna številka kartice.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>To ni veljavna mednarodna številka bančnega računa (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Neveljavna vrednost po ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Neveljavna vrednost po ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Neveljavna vrednost po ISBN-10 ali po ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Neveljavna vrednost ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Ta vrednost ni veljavna valuta.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Ta vrednost bi morala biti enaka {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Ta vrednost bi morala biti večja od {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Ta vrednost bi morala biti večja ali enaka {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ta vrednost bi morala biti identična {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Ta vrednost bi morala biti manjša od {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Ta vrednost bi morala biti manjša ali enaka {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Ta vrednost ne bi smela biti enaka {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ta vrednost ne bi smela biti identična {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Razmerje slike je preveliko ({{ ratio }}). Največje dovoljeno razmerje je {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Razmerje slike je premajhno ({{ ratio }}). Najmanjše pričakovano razmerje je {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Slika je kvadrat ({{ width }}x{{ height }}px). Kvadratne slike niso dovoljene.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Slika je ležeče usmerjena ({{ width }}x{{ height }}px). Ležeče usmerjene slike niso dovoljene.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Slika je pokončno usmerjena ({{ width }}x{{ height }}px). Pokončno usmerjene slike niso dovoljene.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>Prazna datoteka ni dovoljena.</target> + </trans-unit> + <trans-unit id="80"> + <source>This value does not match the expected {{ charset }} charset.</source> + <target>Ta vrednost se ne ujema s pričakovanim naborom znakov {{ charset }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sq.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sq.xlf new file mode 100644 index 0000000..ffc8ccf --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sq.xlf @@ -0,0 +1,227 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Kjo vlerë duhet të jetë e pavërtetë (false).</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Kjo vlerë duhet të jetë e vërtetë (true).</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Kjo vlerë duhet të jetë e llojit {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Kjo vlerë duhet të jetë e zbrazët.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Vlera që keni zgjedhur nuk është alternativë e vlefshme.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Duhet të zgjedhni së paku {{ limit }} alternativa.|Duhet të zgjedhni së paku {{ limit }} alternativa.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Duhet të zgjedhni më së shumti {{ limit }} alternativa.|Duhet të zgjedhni më së shumti {{ limit }} alternativa.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Një apo më shumë nga vlerat e dhëna nuk janë të sakta.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Kjo fushë nuk pritej.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Kjo fushë është zhdukur.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Kjo vlerë nuk është datë e vlefshme.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Kjo vlerë nuk është datë-kohë e vlefshme.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Kjo vlerë nuk është e-mail adresë e vlefshme.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>File nuk mund të gjindej.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>File nuk është i lexueshëm.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>File është shumë i madh ({{ size }} {{ suffix }}). Madhësia më e madhe e lejuar është {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Lloji mime i files nuk është i vlefshëm ({{ type }}). Llojet mime të lejuara janë {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Kjo vlerë duhet të jetë {{ limit }} ose më pak.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Kjo vlerë është shumë e gjatë. Duhet t'i ketë {{ limit }} ose më pak karaktere.|Kjo vlerë është shumë e gjatë. Duhet t'i ketë {{ limit }} ose më pak karaktere.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Kjo vlerë duhet të jetë {{ limit }} ose më shumë.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Kjo vlerë është shumë e shkurtër. Duhet t'i ketë {{ limit }} ose më shumë karaktere.|Kjo vlerë është shumë e shkurtër. Duhet t'i ketë {{ limit }} ose më shumë karaktere.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Kjo vlerë nuk duhet të jetë e zbrazët.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Kjo vlerë nuk duhet të jetë null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Kjo vlerë duhet të jetë null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Kjo vlerë nuk është e vlefshme.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Kjo vlerë nuk është kohë e vlefshme.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Kjo vlerë nuk është URL e vlefshme.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Këto dy vlera duhet të jenë të barabarta.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Ky file është shumë i madh. Madhësia maksimale e lejuar është {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Ky file është shumë i madh.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Ky file nuk mund të ngarkohet.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Kjo vlerë duhet të jetë numër i vlefshëm.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Ky file nuk është imazh i vlefshëm.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Kjo vlerë nuk është IP adresë e vlefshme.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Kjo vlerë nuk është gjuhë e vlefshme.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Kjo vlerë nuk është përcaktim rajonal i vlefshëm.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Kjo vlerë nuk është shtet i vlefshëm.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Kjo vlerë është tashmë në përdorim.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Madhësia e këtij imazhi nuk mund të zbulohet.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Gjerësia e imazhit është shumë e madhe ({{ width }}px). Gjerësia maksimale e lejuar është {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Gjerësia e imazhit është shumë e vogël ({{ width }}px). Gjerësia minimale e pritur është {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Gjatësia e imazhit është shumë e madhe ({{ height }}px). Gjatësia maksimale e lejuar është {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Gjatësia e imazhit është shumë e vogël ({{ height }}px). Gjatësia minimale e pritur është {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Kjo vlerë duhet të jetë fjalëkalimi aktual i përdoruesit.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Kjo vlerë duhet të ketë saktësisht {{ limit }} karaktere.|Kjo vlerë duhet të ketë saktësisht {{ limit }} karaktere.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Ky file është ngarkuar pjesërisht.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Nuk është ngarkuar ndonjë file.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Asnjë folder i përkohshëm nuk është konfiguruar në php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Nuk mund të shkruhet file i përkohshëm në disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Një ekstenzion i PHP-së bëri të dështojë ngarkimi i files.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Ky kolekcion duhet të përmbajë {{ limit }} ose më shumë elemente.|Ky kolekcion duhet të përmbajë {{ limit }} ose më shumë elemente.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Ky kolekcion duhet të përmbajë {{ limit }} ose më shumë elemente.|Ky kolekcion duhet të përmbajë {{ limit }} ose më shumë elemente.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Ky kolekcion duhet të përmbajë saktësisht {{ limit }} elemente.|Ky kolekcion duhet të përmbajë saktësisht {{ limit }} elemente.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Numër kartele i pavlefshëm.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Lloj kartele i pambështetur ose numër kartele i pavlefshëm.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf new file mode 100644 index 0000000..81f5210 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf @@ -0,0 +1,303 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Вредност треба да буде нетачна.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Вредност треба да буде тачна.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Вредност треба да буде типа {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Вредност треба да буде празна.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Вредност треба да буде једна од понуђених.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Изаберите бар {{ limit }} могућност.|Изаберите бар {{ limit }} могућности.|Изаберите бар {{ limit }} могућности.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Изаберите највише {{ limit }} могућност.|Изаберите највише {{ limit }} могућности.|Изаберите највише {{ limit }} могућности.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Једна или више вредности је невалидна.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Ово поље не очекује.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Ово поље недостаје.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Вредност није валидан датум.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Вредност није валидан датум-време.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Вредност није валидна адреса електронске поште.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Датотека не може бити пронађена.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Датотека није читљива.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Датотека је превелика ({{ size }} {{ suffix }}). Највећа дозвољена величина је {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Миме тип датотеке није валидан ({{ type }}). Дозвољени миме типови су {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Вредност треба да буде {{ limit }} или мање.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Вредност је предугачка. Треба да има {{ limit }} карактер или мање.|Вредност је предугачка. Треба да има {{ limit }} карактера или мање.|Вредност је предугачка. Треба да има {{ limit }} карактера или мање.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Вредност треба да буде {{ limit }} или више.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Вредност је прекратка. Треба да има {{ limit }} карактер или више.|Вредност је прекратка. Треба да има {{ limit }} карактера или више.|Вредност је прекратка. Треба да има {{ limit }} карактера или више.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Вредност не треба да буде празна.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Вредност не треба да буде null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Вредност треба да буде null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Вредност је невалидна.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Вредност није валидно време.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Вредност није валидан URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Обе вредности треба да буду једнаке.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Датотека је превелика. Највећа дозвољена величина је {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Датотека је превелика.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Датотека не може бити отпремљена.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Вредност треба да буде валидан број.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Ова датотека није валидна слика.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Ово није валидна ИП адреса.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Вредност није валидан језик.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Вредност није валидан локал.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Вредност није валидна земља.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Вредност је већ искоришћена.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Величина слике не може бити одређена.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Ширина слике је превелика ({{ width }}px). Најећа дозвољена ширина је {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Ширина слике је премала ({{ width }}px). Најмања дозвољена ширина је {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Висина слике је превелика ({{ height }}px). Најећа дозвољена висина је {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Висина слике је премала ({{ height }}px). Најмања дозвољена висина је {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Вредност треба да буде тренутна корисничка лозинка.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Вредност треба да има тачно {{ limit }} карактер.|Вредност треба да има тачно {{ limit }} карактера.|Вредност треба да има тачно {{ limit }} карактера.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Датотека је само парцијално отпремљена.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Датотека није отпремљена.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Привремени директоријум није конфигурисан у php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Немогуће писање привремене датотеке на диск.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP екстензија је проузроковала неуспех отпремања датотеке.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Ова колекција треба да садржи {{ limit }} или више елемената.|Ова колекција треба да садржи {{ limit }} или више елемената.|Ова колекција треба да садржи {{ limit }} или више елемената.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Ова колекција треба да садржи {{ limit }} или мање елемената.|Ова колекција треба да садржи {{ limit }} или мање елемената.|Ова колекција треба да садржи {{ limit }} или мање елемената.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Ова колекција треба да садржи тачно {{ limit }} елемент.|Ова колекција треба да садржи тачно {{ limit }} елемента.|Ова колекција треба да садржи тачно {{ limit }} елемената.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Невалидан број картице.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Невалидан број картице или тип картице није подржан.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Ово није валидан међународни број банковног рачуна (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Ово није валидан ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Ово није валидан ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Ово није валидан ISBN-10 или ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Ово није валидан ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Ово није валидна валута.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Ова вредност треба да буде {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Ова вредност треба да буде већа од {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Ова вредност треба да буде већа или једнака {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ова вредност треба да буде идентична са {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Ова вредност треба да буде мања од {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Ова вредност треба да буде мања или једнака {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Ова вредност не треба да буде једнака {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ова вредност не треба да буде идентична са {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Размера ове слике је превелика ({{ ratio }}). Максимална дозвољена размера је {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Размера ове слике је премала ({{ ratio }}). Минимална очекивана размера је {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Слика је квадратна ({{ width }}x{{ height }}px). Квадратне слике нису дозвољене.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Слика је оријентације пејзажа ({{ width }}x{{ height }}px). Пејзажна оријентација слика није дозвољена.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Слика је оријантације портрета ({{ width }}x{{ height }}px). Портретна оријентација слика није дозвољена.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf new file mode 100644 index 0000000..60c093a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf @@ -0,0 +1,303 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Vrednost treba da bude netačna.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Vrednost treba da bude tačna.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Vrednost treba da bude tipa {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Vrednost treba da bude prazna.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Vrednost treba da bude jedna od ponuđenih.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Izaberite bar {{ limit }} mogućnost.|Izaberite bar {{ limit }} mogućnosti.|Izaberite bar {{ limit }} mogućnosti.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Izaberite najviše {{ limit }} mogućnost.|Izaberite najviše {{ limit }} mogućnosti.|Izaberite najviše {{ limit }} mogućnosti.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Jedna ili više vrednosti je nevalidna.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Ovo polje ne očekuje.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Ovo polje nedostaje.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Vrednost nije validan datum.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Vrednost nije validan datum-vreme.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Vrednost nije validna adresa elektronske pošte.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Datoteka ne može biti pronađena.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Datoteka nije čitljiva.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Datoteka je prevelika ({{ size }} {{ suffix }}). Najveća dozvoljena veličina je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Mime tip datoteke nije validan ({{ type }}). Dozvoljeni mime tipovi su {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Vrednost treba da bude {{ limit }} ili manje.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Vrednost je predugačka. Treba da ima {{ limit }} karakter ili manje.|Vrednost je predugačka. Treba da ima {{ limit }} karaktera ili manje.|Vrednost je predugačka. Treba da ima {{ limit }} karaktera ili manje.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Vrednost treba da bude {{ limit }} ili više.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Vrednost je prekratka. Treba da ima {{ limit }} karakter ili više.|Vrednost je prekratka. Treba da ima {{ limit }} karaktera ili više.|Vrednost je prekratka. Treba da ima {{ limit }} karaktera ili više.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Vrednost ne treba da bude prazna.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Vrednost ne treba da bude null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Vrednost treba da bude null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Vrednost je nevalidna.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Vrednost nije validno vreme.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Vrednost nije validan URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Obe vrednosti treba da budu jednake.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Datoteka je prevelika. Najveća dozvoljena veličina je {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Datoteka je prevelika.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Datoteka ne može biti otpremljena.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Vrednost treba da bude validan broj.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Ova datoteka nije validna slika.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Ovo nije validna IP adresa.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Vrednost nije validan jezik.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Vrednost nije validan lokal.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Vrednost nije validna zemlja.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Vrednost je već iskorišćena.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Veličina slike ne može biti određena.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Širina slike je prevelika ({{ width }}px). Najeća dozvoljena širina je {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Širina slike je premala ({{ width }}px). Najmanja dozvoljena širina je {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Visina slike je prevelika ({{ height }}px). Najeća dozvoljena visina je {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Visina slike je premala ({{ height }}px). Najmanja dozvoljena visina je {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Vrednost treba da bude trenutna korisnička lozinka.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Vrednost treba da ima tačno {{ limit }} karakter.|Vrednost treba da ima tačno {{ limit }} karaktera.|Vrednost treba da ima tačno {{ limit }} karaktera.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Datoteka je samo parcijalno otpremljena.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Datoteka nije otpremljena.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Privremeni direktorijum nije konfigurisan u php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Nemoguće pisanje privremene datoteke na disk.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP ekstenzija je prouzrokovala neuspeh otpremanja datoteke.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Ova kolekcija treba da sadrži {{ limit }} ili više elemenata.|Ova kolekcija treba da sadrži {{ limit }} ili više elemenata.|Ova kolekcija treba da sadrži {{ limit }} ili više elemenata.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Ova kolekcija treba da sadrži {{ limit }} ili manje elemenata.|Ova kolekcija treba da sadrži {{ limit }} ili manje elemenata.|Ova kolekcija treba da sadrži {{ limit }} ili manje elemenata.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Ova kolekcija treba da sadrži tačno {{ limit }} element.|Ova kolekcija treba da sadrži tačno {{ limit }} elementa.|Ova kolekcija treba da sadrži tačno {{ limit }} elemenata.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Nevalidan broj kartice.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Nevalidan broj kartice ili tip kartice nije podržan.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Ovo nije validan međunarodni broj bankovnog računa (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Ovo nije validan ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Ovo nije validan ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Ovo nije validan ISBN-10 ili ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Ovo nije validan ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Ovo nije validna valuta.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Ova vrednost treba da bude {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Ova vrednost treba da bude veća od {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Ova vrednost treba da bude veća ili jednaka {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ova vrednost treba da bude identična sa {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Ova vrednost treba da bude manja od {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Ova vrednost treba da bude manja ili jednaka {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Ova vrednost ne treba da bude jednaka {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Ova vrednost ne treba da bude identična sa {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Razmera ove slike je prevelika ({{ ratio }}). Maksimalna dozvoljena razmera je {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Razmera ove slike je premala ({{ ratio }}). Minimalna očekivana razmera je {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Slika je kvadratna ({{ width }}x{{ height }}px). Kvadratne slike nisu dozvoljene.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Slika je orijentacije pejzaža ({{ width }}x{{ height }}px). Pejzažna orijentacija slika nije dozvoljena.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Slika je orijantacije portreta ({{ width }}x{{ height }}px). Portretna orijentacija slika nije dozvoljena.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sv.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sv.xlf new file mode 100644 index 0000000..fbcb5f2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sv.xlf @@ -0,0 +1,307 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Värdet ska vara falskt.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Värdet ska vara sant.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Värdet ska vara av typen {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Värdet ska vara tomt.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Värdet ska vara ett av de givna valen.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Du måste välja minst {{ limit }} val.|Du måste välja minst {{ limit }} val.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Du kan som mest välja {{ limit }} val.|Du kan som mest välja {{ limit }} val.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Ett eller fler av de angivna värdena är ogiltigt.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Det här fältet förväntades inte.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Det här fältet saknas.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Värdet är inte ett giltigt datum.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Värdet är inte ett giltigt datum med tid.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Värdet är inte en giltig epost-adress.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Filen kunde inte hittas.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Filen är inte läsbar.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Filen är för stor ({{ size }} {{ suffix }}). Största tillåtna storlek är {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Filens MIME-typ ({{ type }}) är ogiltig. De tillåtna typerna är {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Värdet ska vara {{ limit }} eller mindre.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Värdet är för långt. Det ska ha {{ limit }} tecken eller färre.|Värdet är för långt. Det ska ha {{ limit }} tecken eller färre.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Värdet ska vara {{ limit }} eller mer.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Värdet är för kort. Det ska ha {{ limit }} tecken eller mer.|Värdet är för kort. Det ska ha {{ limit }} tecken eller mer.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Värdet kan inte vara tomt.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Värdet kan inte vara null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Värdet ska vara null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Värdet är inte giltigt.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Värdet är inte en giltig tid.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Värdet är inte en giltig URL.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>De två värdena måste vara lika.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Filen är för stor. Tillåten maximal storlek är {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Filen är för stor.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Filen kunde inte laddas upp.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Värdet ska vara ett giltigt nummer.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Filen är ingen giltig bild.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Det här är inte en giltig IP-adress.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Värdet är inte ett giltigt språk.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Värdet är inte en giltig plats.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Värdet är inte ett giltigt land.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Värdet används redan.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Det gick inte att fastställa storleken på bilden.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Bildens bredd är för stor ({{ width }}px). Tillåten maximal bredd är {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Bildens bredd är för liten ({{ width }}px). Minsta förväntade bredd är {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Bildens höjd är för stor ({{ height }}px). Tillåten maximal bredd är {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Bildens höjd är för liten ({{ height }}px). Minsta förväntade höjd är {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Värdet ska vara användarens nuvarande lösenord.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Värdet ska ha exakt {{ limit }} tecken.|Värdet ska ha exakt {{ limit }} tecken.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Filen laddades bara upp delvis.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Ingen fil laddades upp.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Det finns ingen temporär mapp konfigurerad i php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Kan inte skriva temporär fil till disken.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>En PHP extension gjorde att uppladdningen misslyckades.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Den här samlingen ska innehålla {{ limit }} element eller mer.|Den här samlingen ska innehålla {{ limit }} element eller mer.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Den här samlingen ska innehålla {{ limit }} element eller mindre.|Den här samlingen ska innehålla {{ limit }} element eller mindre.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Den här samlingen ska innehålla exakt {{ limit }} element.|Den här samlingen ska innehålla exakt {{ limit }} element.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Ogiltigt kortnummer.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Okänd korttyp eller ogiltigt kortnummer.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Det här är inte en giltig International Bank Account Number (IBANK).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Värdet är inte en giltig ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Värdet är inte en giltig ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Värdet är varken en giltig ISBN-10 eller en giltig ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Värdet är inte en giltig ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Värdet är inte en giltig valuta.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Värdet ska vara detsamma som {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Värdet ska vara större än {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Värdet ska bara större än eller detsamma som {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Värdet ska vara identiskt till {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Värdet ska vara mindre än {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Värdet ska vara mindre än eller detsamma som {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Värdet ska inte vara detsamma som {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Värdet ska inte vara identiskt med {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>Förhållandet mellan bildens bredd och höjd är för stort ({{ ratio }}). Högsta tillåtna förhållande är {{ max_ratio }}.</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>Förhållandet mellan bildens bredd och höjd är för litet ({{ ratio }}). Minsta tillåtna förhållande är {{ min_ratio }}.</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>Bilden är kvadratisk ({{ width }}x{{ height }}px). Kvadratiska bilder tillåts inte.</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>Bilden är landskapsorienterad ({{ width }}x{{ height }}px). Landskapsorienterade bilder tillåts inte.</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>Bilden är porträttsorienterad ({{ width }}x{{ height }}px). Porträttsorienterade bilder tillåts inte.</target> + </trans-unit> + <trans-unit id="78"> + <source>An empty file is not allowed.</source> + <target>En tom fil är inte tillåten.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.th.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.th.xlf new file mode 100644 index 0000000..0237a30 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.th.xlf @@ -0,0 +1,303 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>ค่านี้ควรจะเป็น false</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>ค่านี้ควรจะเป็น true</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>ค่านี้ควรจะเป็นชนิด {{ type }}</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>ควรจะเป็นค่าว่าง</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>คุณเลือกค่าที่ไม่ตรงกับตัวเลือก</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>คุณต้องเลือกอย่างน้อย {{ limit }} ตัวเลือก</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>คุณเลือกได้มากที่สุด {{ limit }} ตัวเลือก</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>มีบางค่าที่ส่งมาไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>ฟิลด์นี้ที่ไม่ได้คาดหวัง</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>ฟิลด์นี้จะหายไป</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>ค่าของวันที่ไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>ค่าของวันที่และเวลาไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>ค่าของอีเมล์ไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>ไม่พบไฟล์</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>ไฟล์ไม่อยู่ในสถานะที่สามารถอ่านได้</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>ไฟล์ใหญ่เกิน ({{ size }} {{ suffix }}) อนุญาตให้ใหญ่ที่สุดได้ไม่เกิน {{ limit }} {{ suffix }}</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Mime type ของไฟล์ไม่ถูกต้อง ({{ type }}) Mime types ที่อนุญาตคือ {{ types }}</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>ค่านี้ควรจะเป็น {{ limit }} หรือน้อยกว่านั้น</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>ค่านี้ยาวเกินไป ควรจะมีแค่ {{ limit }} ตัวอักษรหรือน้อยกว่านั้น</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>ค่านี้ควรจะมี {{ limit }} หรือมากกว่านั้น</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>ค่านี้สั้นเกินไป ควรจะมี {{ limit }} ตัวอักษรหรือมากกว่านั้น</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>ค่านี้ไม่ควรเป็นค่าว่าง</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>ค่านี้ไม่ควรเป็นค่า null</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>ค่านี้ควรเป็นค่า null</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>ค่านี้ไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>ค่าของเวลาไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>ค่าของ URL ไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>ค่าทั้งสองค่าควรจะเหมือนกัน</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>ขนาดไฟล์ใหญ่เกินไป อนุญาตให้ไฟล์ขนาดใหญ่ได้ไม่เกิน {{ limit }} {{ suffix }}</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>ขนาดไฟล์ใหญ่เกินไป</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>ไม่สามารถอัปโหลดไฟล์ได้</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>ค่าของตัวเลขไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>ไฟล์นี้ไม่ใช่ไฟล์รูปภาพ</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>ค่าของ IP ไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>ค่าของภาษาไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>ค่าของภูมิภาค (Locale) ไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>ค่าของประเทศไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Tค่านี้ถูกใช้งานไปแล้ว</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>ไม่สามารถตรวจสอบขนาดไฟล์ของภาพได้</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>ความกว้างของภาพเกินขนาด ({{ width }}px) อนุญาตให้กว้างได้มากที่สุด {{ max_width }}px</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>ความกว้างของภาพไม่ได้ขนาด ({{ width }}px) อนุญาตให้สั้นที่สุด {{ min_width }}px</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>ความสูงของภาพเกินขนาด ({{ height }}px) อนุญาตให้สูงได้มากที่สุด {{ max_height }}px</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>ความสูงของภาพไม่ได้ขนาด ({{ height }}px) อนุญาตให้สูงอย่างน้อยที่สุด {{ min_height }}px</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user current password.</source> + <target>ค่านี้ควรจะเป็นรหัสผ่านปัจจุบันของผู้ใช้</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>ค่านี้ควรจะมีความยาว {{ limit }} ตัวอักษร</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>อัปโหลดไฟล์ได้เพียงบางส่วนเท่านั้น</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>ไม่มีไฟล์ใดถูกอัปโหลด</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>ไม่พบไฟล์ temp ควรจะกำหนดใน php.ini</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>ไม่สามารถเขียน temp ไฟล์ลงดิสก์ได้</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>PHP extension เกี่ยวกับการอัปโหลดมีปัญหา</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>คอเล็กชั่นนี้ควรจะประกอบไปด้วยอ่างน้อย {{ limit }} สมาชิก</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>คอเล็กชั่นนี้ไม่ควรมีสมาชิกเกิน {{ limit }}</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>คอเล็กชั่นนี้ควรจะมีสมาชิก {{ limit }} เท่านั้น</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>หมายเลขบัตรไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>ไม่รู้จักประเภทของบัตร หรือหมายเลขบัตรไม่ถูกต้อง</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>นี่ไม่ถูกต้องตาม International Bank Account Number (IBAN)</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>ค่านี้ไม่ถูกต้องตาม ISBN-10</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>ค่านี้ไม่ถูกต้องตาม ISBN-13</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>ค่านี้ไม่ถูกต้องตามทั้ง ISBN-10 และ ISBN-13</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>ค่านี้ไม่ถุกต้องตาม ISSN</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>ค่านี้ไม่ถูกต้องตามสกุลเงิน</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>ค่านี้ไม่ตรงกับ {{ compared_value }}</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>ค่านี้ควรจะมากกว่า {{ compared_value }}</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>ค่านี้ควรจะมากกว่าหรือตรงกับ {{ compared_value }}</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>ค่านี้ควรจะเหมือนกันกับ {{ compared_value_type }} {{ compared_value }}</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>ค่านี้ควรจะน้อยกว่า {{ compared_value }}</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>ค่านี้ควรจะน้อยกว่าหรือเท่ากับ {{ compared_value }}</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>ค่านี้ไม่ควรเท่ากันกับ {{ compared_value }}</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>ค่านี้ไม่ควรเหมือนกันกับ {{ compared_value_type }} {{ compared_value }}</target> + </trans-unit> + <trans-unit id="73"> + <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source> + <target>สัดส่วนของภาพใหญ่เกิน ({{ ratio }}) สามารถมีขนาดใหญ่ที่สุดได้ {{ max_ratio }}</target> + </trans-unit> + <trans-unit id="74"> + <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source> + <target>สัดส่วนของภาพเล็กเกิน ({{ ratio }}) สามารถมีขนาดเล็กที่สุดได้ {{ min_ratio }}</target> + </trans-unit> + <trans-unit id="75"> + <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source> + <target>รูปภาพเป็นจุตรัส ({{ width }}x{{ height }}px) ไม่อนุญาตภาพที่เป็นสี่เหลี่ยมจตุรัส</target> + </trans-unit> + <trans-unit id="76"> + <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source> + <target>ภาพนี้เป็นแนวนอน ({{ width }}x{{ height }}px) ไม่อนุญาตภาพที่เป็นแนวนอน</target> + </trans-unit> + <trans-unit id="77"> + <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source> + <target>ภาพนี้เป็นแนวตั้ง ({{ width }}x{{ height }}px) ไม่อนุญาตภาพที่เป็นแนวตั้ง</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.tr.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.tr.xlf new file mode 100644 index 0000000..a7906ea --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.tr.xlf @@ -0,0 +1,227 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Bu değer olumsuz olmalıdır.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Bu değer olumlu olmalıdır.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Bu değerin tipi {{ type }} olmalıdır.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Bu değer boş olmalıdır.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Seçtiğiniz değer geçerli bir seçenek değil.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>En az {{ limit }} seçenek belirtmelisiniz.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>En çok {{ limit }} seçenek belirtmelisiniz.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Verilen değerlerden bir veya daha fazlası geçersiz.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Bu alan beklenen olmadı.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Bu alan, eksik</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Bu değer doğru bir tarih biçimi değildir.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Bu değer doğru bir tarihsaat biçimi değildir.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Bu değer doğru bir e-mail adresi değildir.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Dosya bulunamadı.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Dosya okunabilir değil.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Dosya çok büyük ({{ size }} {{ suffix }}). İzin verilen en büyük dosya boyutu {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Dosyanın mime tipi geçersiz ({{ type }}). İzin verilen mime tipleri {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Bu değer {{ limit }} ve altında olmalıdır.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Bu değer çok uzun. {{ limit }} karakter veya daha az olmalıdır.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Bu değer {{ limit }} veya daha fazla olmalıdır.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Bu değer çok kısa. {{ limit }} karakter veya daha fazla olmaldır.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Bu değer boş bırakılmamalıdır.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Bu değer boş bırakılmamalıdır.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Bu değer boş bırakılmalıdır.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Bu değer geçerli değil.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Bu değer doğru bir saat değil.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Bu değer doğru bir URL değil.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>İki değer eşit olmalıdır.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Dosya çok büyük. İzin verilen en büyük dosya boyutu {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Dosya çok büyük.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Dosya yüklenemiyor.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Bu değer geçerli bir rakam olmalıdır.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Bu dosya geçerli bir resim değildir.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Bu geçerli bir IP adresi değildir.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Bu değer geçerli bir lisan değil.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Bu değer geçerli bir yer değildir.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Bu değer geçerli bir ülke değildir.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Bu değer şu anda kullanımda.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Resmin boyutu saptanamıyor.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Resmin genişliği çok büyük ({{ width }}px). İzin verilen en büyük genişlik {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Resmin genişliği çok küçük ({{ width }}px). En az {{ min_width }}px olmalıdır.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Resmin yüksekliği çok büyük ({{ height }}px). İzin verilen en büyük yükseklik {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Resmin yüksekliği çok küçük ({{ height }}px). En az {{ min_height }}px olmalıdır.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Bu değer kullanıcının şu anki şifresi olmalıdır.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Bu değer tam olarak {{ limit }} karakter olmaldır.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Dosya sadece kısmen yüklendi.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Hiçbir dosya yüklenmedi.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>php.ini içerisinde geçici dizin tanımlanmadı.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Geçici dosya diske yazılamıyor.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Bir PHP eklentisi dosyanın yüklemesini başarısız kıldı.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Bu derlem {{ limit }} veya daha çok eleman içermelidir.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Bu derlem {{ limit }} veya daha az eleman içermelidir.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Bu derlem {{ limit }} eleman içermelidir.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Geçersiz kart numarası.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Desteklenmeyen kart tipi veya geçersiz kart numarası.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.uk.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.uk.xlf new file mode 100644 index 0000000..02ecd5a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.uk.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Значення повинно бути Ні.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Значення повинно бути Так.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Тип значення повинен бути {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Значення повинно бути пустим.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Обране вами значення недопустиме.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Ви повинні обрати хоча б {{ limit }} варіант.|Ви повинні обрати хоча б {{ limit }} варіанти.|Ви повинні обрати хоча б {{ limit }} варіантів.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Ви повинні обрати не більше ніж {{ limit }} варіантів.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Одне або кілька заданих значень є недопустимі.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Це поле не очікується.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Це поле не вистачає.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Дане значення не є вірною датою.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Дане значення дати та часу недопустиме.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Значення адреси электронної пошти недопустиме.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Файл не знайдено.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Файл не читається.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Файл занадто великий ({{ size }} {{ suffix }}). Дозволений максимальний розмір {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>MIME-тип файлу недопустимий ({{ type }}). Допустимі MIME-типи файлів {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Значення повинно бути {{ limit }} або менше.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Значення занадто довге. Повинно бути рівне {{ limit }} символу або менше.|Значення занадто довге. Повинно бути рівне {{ limit }} символам або менше.|Значення занадто довге. Повинно бути рівне {{ limit }} символам або менше.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Значення повинно бути {{ limit }} або більше.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Значення занадто коротке. Повинно бути рівне {{ limit }} символу або більше.|Значення занадто коротке. Повинно бути рівне {{ limit }} символам або більше.|Значення занадто коротке. Повинно бути рівне {{ limit }} символам або більше.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Значення не повинно бути пустим.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Значення не повинно бути null.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Значення повинно бути null.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Значення недопустиме.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Значення часу недопустиме.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Значення URL недопустиме.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Обидва занчення повинні бути одинаковими.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Файл занадто великий. Максимальний допустимий розмір {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Файл занадто великий.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Файл не можливо завантажити.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Значення має бути допустимим числом.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Цей файл не є допустимим форматом зображення.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Це некоректна IP адреса.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Це некоректна мова.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Це некоректна локалізація.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Це некоректна країна.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Це значення вже використовується.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Не вдалося визначити розмір зображення.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Ширина зображення занадто велика ({{ width }}px). Максимально допустима ширина {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Ширина зображення занадто мала ({{ width }}px). Мінімально допустима ширина {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Висота зображення занадто велика ({{ height }}px). Максимально допустима висота {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Висота зображення занадто мала ({{ height }}px). Мінімально допустима висота {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Значення має бути поточним паролем користувача.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Значення повиино бути рівним {{ limit }} символу.|Значення повиино бути рівним {{ limit }} символам.|Значення повиино бути рівним {{ limit }} символам.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Файл був завантажений лише частково.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Файл не був завантажений.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Не налаштована тимчасова директорія в php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Неможливо записати тимчасовий файл на диск.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Розширення PHP викликало помилку при завантаженні.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Ця колекція повинна містити {{ limit }} елемент чи більше.|Ця колекція повинна містити {{ limit }} елемента чи більше.|Ця колекція повинна містити {{ limit }} елементів чи більше.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Ця колекція повинна містити {{ limit }} елемент чи менше.|Ця колекція повинна містити {{ limit }} елемента чи менше.|Ця колекція повинна містити {{ limit }} елементов чи менше.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Ця колекція повинна містити рівно {{ limit }} елемент.|Ця колекція повинна містити рівно {{ limit }} елемента.|Ця колекція повинна містити рівно {{ limit }} елементів.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Невірний номер карти.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Непідтримуваний тип карти або невірний номер карти.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Це не дійсний міжнародний номер банківського рахунку (IBAN).</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Значення не у форматі ISBN-10.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Значення не у форматі ISBN-13.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Значення не відповідає форматам ISBN-10 та ISBN-13.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Значення має невірний формат ISSN.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Значення має невірний формат валюти.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Значення повинно дорівнювати {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Значення має бути більше ніж {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Значення має бути більше або дорівнювати {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Значення має бути ідентичним {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Значення повинно бути менше ніж {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Значення повинно бути менше або дорівнювати {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Значення не повинно дорівнювати {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Значення не повинно бути ідентичним {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.vi.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.vi.xlf new file mode 100644 index 0000000..e1833c7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.vi.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>Giá trị này phải là sai.</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>Giá trị này phải là đúng.</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>Giá trị này phải là kiểu {{ type }}.</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>Giá trị này phải rỗng.</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>Giá trị bạn vừa chọn không hợp lệ.</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>Bạn phải chọn ít nhất {{ limit }} lựa chọn.|Bạn phải chọn ít nhất {{ limit }} lựa chọn.</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>Bạn phải chọn nhiều nhất {{ limit }} lựa chọn.|Bạn phải chọn nhiều nhất {{ limit }} lựa chọn.</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>Một hoặc nhiều giá trị được chọn không hợp lệ.</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>Lĩnh vực này không được dự kiến.</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>Lĩnh vực này là mất tích.</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>Giá trị không phải là ngày hợp lệ.</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>Giá trị không phải là ngày tháng hợp lệ.</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>Giá trị này không phải là email hợp lệ.</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>Tập tin không tìm thấy.</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>Tập tin không thể đọc được.</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Tập tin quá lớn ({{ size }} {{ suffix }}). Kích thước tối đa cho phép {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>Kiểu mime của tập tin không hợp lệ ({{ type }}). Kiểu hợp lệ là {{ types }}.</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>Giá trị phải bằng hoặc nhỏ hơn {{ limit }}.</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>Giá trị quá dài. Phải bằng hoặc ít hơn {{ limit }} kí tự.|Giá trị quá dài. Phải bằng hoặc ít hơn {{ limit }} kí tự.</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>Giá trị phải lớn hơn hoặc bằng {{ limit }}.</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>Giá trị quá ngắn. Phải hơn hoặc bằng {{ limit }} kí tự.|Giá trị quá ngắn. Phải hơn hoặc bằng {{ limit }} kí tự.</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>Giá trị không được phép để trống.</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>Giá trị không được phép rỗng.</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>Giá trị phải rỗng.</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>Giá trị không hợp lệ.</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>Giá trị không phải là thời gian hợp lệ.</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>Giá trị không phải là địa chỉ URL hợp lệ.</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>Hai giá trị phải bằng nhau.</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>Tập tin quá lớn. Kích thước tối đa cho phép là {{ limit }} {{ suffix }}.</target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>Tập tin quá lớn.</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>Tập tin không thể tải lên.</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>Giá trị phải là con số.</target> + </trans-unit> + <trans-unit id="36"> + <source>This file is not a valid image.</source> + <target>Tập tin không phải là hình ảnh.</target> + </trans-unit> + <trans-unit id="37"> + <source>This is not a valid IP address.</source> + <target>Địa chỉ IP không hợp lệ.</target> + </trans-unit> + <trans-unit id="38"> + <source>This value is not a valid language.</source> + <target>Giá trị không phải là ngôn ngữ hợp lệ.</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid locale.</source> + <target>Giá trị không phải là một bản địa địa phương hợp lệ.</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid country.</source> + <target>Giá trị không phải là nước hợp lệ.</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>Giá trị đã được sử dụng.</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>Kích thước của hình ảnh không thể xác định.</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>Chiều rộng của hình quá lớn ({{ width }}px). Chiều rộng tối đa phải là {{ max_width }}px.</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>Chiều rộng của hình quá thấp ({{ width }}px). Chiều rộng tối thiểu phải là {{ min_width }}px.</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>Chiều cao của hình quá cao ({{ height }}px). Chiều cao tối đa phải là {{ max_height }}px.</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>Chiều cao của hình quá thấp ({{ height }}px). Chiều cao tối thiểu phải là {{ min_height }}px.</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>Giá trị này phải là mật khẩu hiện tại của người dùng.</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>Giá trị phải có chính xác {{ limit }} kí tự.|Giá trị phải có chính xác {{ limit }} kí tự.</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>Tập tin chỉ được tải lên một phần.</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>Tập tin không được tải lên.</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>Thư mục tạm không được định nghĩa trong php.ini.</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>Không thể ghi tập tin tạm ra đĩa.</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>Một PHP extension đã phá hỏng quá trình tải lên của tập tin.</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>Danh sách phải chứa {{ limit }} hoặc nhiều hơn thành phần.|Danh sách phải chứa {{ limit }} hoặc nhiều hơn thành phần.</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>Danh sách phải chứa {{ limit }} hoặc ít hơn thành phần.|Danh sách phải chứa {{ limit }} hoặc ít hơn thành phần.</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>Danh sách phải chứa chính xác {{ limit }} thành phần.|Danh sách phải chứa chính xác {{ limit }} thành phần.</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>Số thẻ không hợp lệ.</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>Thẻ không được hỗ trợ hoặc số thẻ không hợp lệ.</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>Giá trị không phải là International Bank Account Number (IBAN) hợp lệ.</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>Giá trị không phải là ISBN-10 hợp lệ.</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>Giá trị không phải là ISBN-13 hợp lệ.</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>Giá trị không phải là ISBN-10 hoặc ISBN-13 hợp lệ.</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>Giá trị không là ISSN hợp lệ.</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>Giá trị không phải là đơn vi tiền tệ hợp lệ.</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>Giá trị phải bằng {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>Giá trị phải lớn hơn {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>Giá trị phải lớn hơn hoặc bằng {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Giá trị phải giống {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>Giá trị phải bé hơn {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>Giá trị không được phép nhỏ hơn hoặc bằng {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>Giá trị không được phép bằng {{ compared_value }}.</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>Giá trị không được phép giống như {{ compared_value_type }} {{ compared_value }}.</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf new file mode 100644 index 0000000..5ffc643 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>该变量的值应为 false 。</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>该变量的值应为 true 。</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>该变量的类型应为 {{ type }} 。</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>该变量值应为空。</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>选定变量的值不是有效的选项。</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>您至少要选择 {{ limit }} 个选项。</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>您最多能选择 {{ limit }} 个选项。</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>一个或者多个给定的值无效。</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>此字段是多余的。</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>此字段缺失。</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>该值不是一个有效的日期(date)。</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>该值不是一个有效的日期时间(datetime)。</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>该值不是一个有效的邮件地址。</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>文件未找到。</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>文件不可读。</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>文件太大 ({{ size }} {{ suffix }})。文件大小不可以超过 {{ limit }} {{ suffix }} 。</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>无效的文件类型 ({{ type }}) 。允许的文件类型有 {{ types }} 。</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>这个变量的值应该小于或等于 {{ limit }}。</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>字符串太长,长度不可超过 {{ limit }} 个字符。</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>该变量的值应该大于或等于 {{ limit }}。</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>字符串太短,长度不可少于 {{ limit }} 个字符。</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>该变量不应为空。</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>该变量不应为 null 。</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>该变量应为空 null 。</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>该变量值无效 。</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>该值不是一个有效的时间。</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>该值不是一个有效的 URL 。</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>这两个变量的值应该相等。</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>文件太大,文件大小不可以超过 {{ limit }} {{ suffix }}。 </target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>文件太大。</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>无法上传此文件。</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>该值应该为有效的数字。</target> + </trans-unit> + <trans-unit id="36"> + <source>This value is not a valid country.</source> + <target>该值不是有效的国家名。</target> + </trans-unit> + <trans-unit id="37"> + <source>This file is not a valid image.</source> + <target>该文件不是有效的图片。</target> + </trans-unit> + <trans-unit id="38"> + <source>This is not a valid IP address.</source> + <target>该值不是有效的IP地址。</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid language.</source> + <target>该值不是有效的语言名。</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid locale.</source> + <target>该值不是有效的区域值(locale)。</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>该值已经被使用。</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>不能解析图片大小。</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>图片太宽 ({{ width }}px),最大宽度为 {{ max_width }}px 。</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>图片宽度不够 ({{ width }}px),最小宽度为 {{ min_width }}px 。</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>图片太高 ({{ height }}px),最大高度为 {{ max_height }}px 。</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>图片高度不够 ({{ height }}px),最小高度为 {{ min_height }}px 。</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>该变量的值应为用户当前的密码。</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>该变量应为 {{ limit }} 个字符。</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>该文件的上传不完整。</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>没有上传任何文件。</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>php.ini 里没有配置临时文件目录。</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>临时文件写入磁盘失败。</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>某个 PHP 扩展造成上传失败。</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>该集合最少应包含 {{ limit }} 个元素。</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>该集合最多包含 {{ limit }} 个元素。</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>该集合应包含 {{ limit }} 个元素 element 。</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>无效的信用卡号。</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>不支持的信用卡类型或无效的信用卡号。</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>该值不是有效的国际银行帐号(IBAN)。</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>该值不是有效的10位国际标准书号(ISBN-10)。</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>该值不是有效的13位国际标准书号(ISBN-13)。</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>该值不是有效的国际标准书号(ISBN-10 或 ISBN-13)。</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>该值不是有效的国际标准期刊号(ISSN)。</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>该值不是有效的货币名(currency)。</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>该值应等于 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>该值应大于 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>该值应大于或等于 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>该值应与 {{ compared_value_type }} {{ compared_value }} 相同。</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>该值应小于 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>该值应小于或等于 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>该值不应先等于 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>该值不应与 {{ compared_value_type }} {{ compared_value }} 相同。</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf new file mode 100644 index 0000000..d9d5f2f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file source-language="en" datatype="plaintext" original="file.ext"> + <body> + <trans-unit id="1"> + <source>This value should be false.</source> + <target>該變數的值應為 false 。</target> + </trans-unit> + <trans-unit id="2"> + <source>This value should be true.</source> + <target>該變數的值應為 true 。</target> + </trans-unit> + <trans-unit id="3"> + <source>This value should be of type {{ type }}.</source> + <target>該變數的類型應為 {{ type }} 。</target> + </trans-unit> + <trans-unit id="4"> + <source>This value should be blank.</source> + <target>該變數應為空。</target> + </trans-unit> + <trans-unit id="5"> + <source>The value you selected is not a valid choice.</source> + <target>選定變數的值不是有效的選項。</target> + </trans-unit> + <trans-unit id="6"> + <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source> + <target>您至少要選擇 {{ limit }} 個選項。</target> + </trans-unit> + <trans-unit id="7"> + <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source> + <target>您最多能選擇 {{ limit }} 個選項。</target> + </trans-unit> + <trans-unit id="8"> + <source>One or more of the given values is invalid.</source> + <target>一個或者多個給定的值無效。</target> + </trans-unit> + <trans-unit id="9"> + <source>This field was not expected.</source> + <target>此字段是沒有預料到。</target> + </trans-unit> + <trans-unit id="10"> + <source>This field is missing.</source> + <target>此字段缺失。</target> + </trans-unit> + <trans-unit id="11"> + <source>This value is not a valid date.</source> + <target>該值不是一個有效的日期(date)。</target> + </trans-unit> + <trans-unit id="12"> + <source>This value is not a valid datetime.</source> + <target>該值不是一個有效的日期時間(datetime)。</target> + </trans-unit> + <trans-unit id="13"> + <source>This value is not a valid email address.</source> + <target>該值不是一個有效的郵件地址。</target> + </trans-unit> + <trans-unit id="14"> + <source>The file could not be found.</source> + <target>找不到檔案。</target> + </trans-unit> + <trans-unit id="15"> + <source>The file is not readable.</source> + <target>無法讀取檔案。</target> + </trans-unit> + <trans-unit id="16"> + <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>檔案太大 ({{ size }} {{ suffix }})。檔案大小不可以超過 {{ limit }} {{ suffix }} 。</target> + </trans-unit> + <trans-unit id="17"> + <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source> + <target>無效的檔案類型 ({{ type }}) 。允許的檔案類型有 {{ types }} 。</target> + </trans-unit> + <trans-unit id="18"> + <source>This value should be {{ limit }} or less.</source> + <target>這個變數的值應該小於或等於 {{ limit }}。</target> + </trans-unit> + <trans-unit id="19"> + <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source> + <target>字串太長,長度不可超過 {{ limit }} 個字元。</target> + </trans-unit> + <trans-unit id="20"> + <source>This value should be {{ limit }} or more.</source> + <target>該變數的值應該大於或等於 {{ limit }}。</target> + </trans-unit> + <trans-unit id="21"> + <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source> + <target>字串太短,長度不可少於 {{ limit }} 個字元。</target> + </trans-unit> + <trans-unit id="22"> + <source>This value should not be blank.</source> + <target>該變數不應為空白。</target> + </trans-unit> + <trans-unit id="23"> + <source>This value should not be null.</source> + <target>該值不應為 null 。</target> + </trans-unit> + <trans-unit id="24"> + <source>This value should be null.</source> + <target>該值應為 null 。</target> + </trans-unit> + <trans-unit id="25"> + <source>This value is not valid.</source> + <target>無效的數值 。</target> + </trans-unit> + <trans-unit id="26"> + <source>This value is not a valid time.</source> + <target>該值不是一個有效的時間。</target> + </trans-unit> + <trans-unit id="27"> + <source>This value is not a valid URL.</source> + <target>該值不是一個有效的 URL 。</target> + </trans-unit> + <trans-unit id="31"> + <source>The two values should be equal.</source> + <target>這兩個變數的值應該相等。</target> + </trans-unit> + <trans-unit id="32"> + <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source> + <target>檔案太大,檔案大小不可以超過 {{ limit }} {{ suffix }}。 </target> + </trans-unit> + <trans-unit id="33"> + <source>The file is too large.</source> + <target>檔案太大。</target> + </trans-unit> + <trans-unit id="34"> + <source>The file could not be uploaded.</source> + <target>無法上傳此檔案。</target> + </trans-unit> + <trans-unit id="35"> + <source>This value should be a valid number.</source> + <target>該值應該為有效的數字。</target> + </trans-unit> + <trans-unit id="36"> + <source>This value is not a valid country.</source> + <target>該值不是有效的國家名。</target> + </trans-unit> + <trans-unit id="37"> + <source>This file is not a valid image.</source> + <target>該檔案不是有效的圖片。</target> + </trans-unit> + <trans-unit id="38"> + <source>This is not a valid IP address.</source> + <target>該值不是有效的IP地址。</target> + </trans-unit> + <trans-unit id="39"> + <source>This value is not a valid language.</source> + <target>該值不是有效的語言名。</target> + </trans-unit> + <trans-unit id="40"> + <source>This value is not a valid locale.</source> + <target>該值不是有效的區域值(locale)。</target> + </trans-unit> + <trans-unit id="41"> + <source>This value is already used.</source> + <target>該值已經被使用。</target> + </trans-unit> + <trans-unit id="42"> + <source>The size of the image could not be detected.</source> + <target>不能解析圖片大小。</target> + </trans-unit> + <trans-unit id="43"> + <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source> + <target>圖片太寬 ({{ width }}px),最大寬度為 {{ max_width }}px 。</target> + </trans-unit> + <trans-unit id="44"> + <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source> + <target>圖片寬度不夠 ({{ width }}px),最小寬度為 {{ min_width }}px 。</target> + </trans-unit> + <trans-unit id="45"> + <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source> + <target>圖片太高 ({{ height }}px),最大高度為 {{ max_height }}px 。</target> + </trans-unit> + <trans-unit id="46"> + <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source> + <target>圖片高度不夠 ({{ height }}px),最小高度為 {{ min_height }}px 。</target> + </trans-unit> + <trans-unit id="47"> + <source>This value should be the user's current password.</source> + <target>該變數的值應為用戶目前的密碼。</target> + </trans-unit> + <trans-unit id="48"> + <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source> + <target>該變數應為 {{ limit }} 個字元。</target> + </trans-unit> + <trans-unit id="49"> + <source>The file was only partially uploaded.</source> + <target>該檔案的上傳不完整。</target> + </trans-unit> + <trans-unit id="50"> + <source>No file was uploaded.</source> + <target>沒有上傳任何檔案。</target> + </trans-unit> + <trans-unit id="51"> + <source>No temporary folder was configured in php.ini.</source> + <target>php.ini 裡沒有配置臨時目錄。</target> + </trans-unit> + <trans-unit id="52"> + <source>Cannot write temporary file to disk.</source> + <target>暫存檔寫入磁碟失敗。</target> + </trans-unit> + <trans-unit id="53"> + <source>A PHP extension caused the upload to fail.</source> + <target>某個 PHP 擴展造成上傳失敗。</target> + </trans-unit> + <trans-unit id="54"> + <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source> + <target>該集合最少應包含 {{ limit }} 個元素。</target> + </trans-unit> + <trans-unit id="55"> + <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source> + <target>該集合最多包含 {{ limit }} 個元素。</target> + </trans-unit> + <trans-unit id="56"> + <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source> + <target>該集合應包含 {{ limit }} 個元素 element 。</target> + </trans-unit> + <trans-unit id="57"> + <source>Invalid card number.</source> + <target>無效的信用卡號。</target> + </trans-unit> + <trans-unit id="58"> + <source>Unsupported card type or invalid card number.</source> + <target>不支援的信用卡類型或無效的信用卡號。</target> + </trans-unit> + <trans-unit id="59"> + <source>This is not a valid International Bank Account Number (IBAN).</source> + <target>該值不是有效的國際銀行帳號(IBAN)。</target> + </trans-unit> + <trans-unit id="60"> + <source>This value is not a valid ISBN-10.</source> + <target>該值不是有效的10位國際標準書號(ISBN-10)。</target> + </trans-unit> + <trans-unit id="61"> + <source>This value is not a valid ISBN-13.</source> + <target>該值不是有效的13位國際標準書號(ISBN-13)。</target> + </trans-unit> + <trans-unit id="62"> + <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source> + <target>該值不是有效的國際標準書號(ISBN-10 或 ISBN-13)。</target> + </trans-unit> + <trans-unit id="63"> + <source>This value is not a valid ISSN.</source> + <target>該值不是有效的國際標準期刊號(ISSN)。</target> + </trans-unit> + <trans-unit id="64"> + <source>This value is not a valid currency.</source> + <target>該值不是有效的貨幣名(currency)。</target> + </trans-unit> + <trans-unit id="65"> + <source>This value should be equal to {{ compared_value }}.</source> + <target>該值應等於 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="66"> + <source>This value should be greater than {{ compared_value }}.</source> + <target>該值應大於 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="67"> + <source>This value should be greater than or equal to {{ compared_value }}.</source> + <target>該值應大於或等於 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="68"> + <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>該值應與 {{ compared_value_type }} {{ compared_value }} 相同。</target> + </trans-unit> + <trans-unit id="69"> + <source>This value should be less than {{ compared_value }}.</source> + <target>該值應小於 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="70"> + <source>This value should be less than or equal to {{ compared_value }}.</source> + <target>該值應小於或等於 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="71"> + <source>This value should not be equal to {{ compared_value }}.</source> + <target>該值應不等於 {{ compared_value }} 。</target> + </trans-unit> + <trans-unit id="72"> + <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source> + <target>該值不應與 {{ compared_value_type }} {{ compared_value }} 相同。</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintTest.php new file mode 100644 index 0000000..f63570c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintTest.php @@ -0,0 +1,209 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Tests\Fixtures\ClassConstraint; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintB; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintC; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithValue; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithValueAsDefault; + +class ConstraintTest extends \PHPUnit_Framework_TestCase +{ + public function testSetProperties() + { + $constraint = new ConstraintA(array( + 'property1' => 'foo', + 'property2' => 'bar', + )); + + $this->assertEquals('foo', $constraint->property1); + $this->assertEquals('bar', $constraint->property2); + } + + public function testSetNotExistingPropertyThrowsException() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\InvalidOptionsException'); + + new ConstraintA(array( + 'foo' => 'bar', + )); + } + + public function testMagicPropertiesAreNotAllowed() + { + $constraint = new ConstraintA(); + + $this->setExpectedException('Symfony\Component\Validator\Exception\InvalidOptionsException'); + + $constraint->foo = 'bar'; + } + + public function testInvalidAndRequiredOptionsPassed() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\InvalidOptionsException'); + + new ConstraintC(array( + 'option1' => 'default', + 'foo' => 'bar', + )); + } + + public function testSetDefaultProperty() + { + $constraint = new ConstraintA('foo'); + + $this->assertEquals('foo', $constraint->property2); + } + + public function testSetDefaultPropertyDoctrineStyle() + { + $constraint = new ConstraintA(array('value' => 'foo')); + + $this->assertEquals('foo', $constraint->property2); + } + + public function testSetDefaultPropertyDoctrineStylePlusOtherProperty() + { + $constraint = new ConstraintA(array('value' => 'foo', 'property1' => 'bar')); + + $this->assertEquals('foo', $constraint->property2); + $this->assertEquals('bar', $constraint->property1); + } + + public function testSetDefaultPropertyDoctrineStyleWhenDefaultPropertyIsNamedValue() + { + $constraint = new ConstraintWithValueAsDefault(array('value' => 'foo')); + + $this->assertEquals('foo', $constraint->value); + $this->assertNull($constraint->property); + } + + public function testDontSetDefaultPropertyIfValuePropertyExists() + { + $constraint = new ConstraintWithValue(array('value' => 'foo')); + + $this->assertEquals('foo', $constraint->value); + $this->assertNull($constraint->property); + } + + public function testSetUndefinedDefaultProperty() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\ConstraintDefinitionException'); + + new ConstraintB('foo'); + } + + public function testRequiredOptionsMustBeDefined() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\MissingOptionsException'); + + new ConstraintC(); + } + + public function testRequiredOptionsPassed() + { + new ConstraintC(array('option1' => 'default')); + } + + public function testGroupsAreConvertedToArray() + { + $constraint = new ConstraintA(array('groups' => 'Foo')); + + $this->assertEquals(array('Foo'), $constraint->groups); + } + + public function testAddDefaultGroupAddsGroup() + { + $constraint = new ConstraintA(array('groups' => 'Default')); + $constraint->addImplicitGroupName('Foo'); + $this->assertEquals(array('Default', 'Foo'), $constraint->groups); + } + + public function testAllowsSettingZeroRequiredPropertyValue() + { + $constraint = new ConstraintA(0); + $this->assertEquals(0, $constraint->property2); + } + + public function testCanCreateConstraintWithNoDefaultOptionAndEmptyArray() + { + new ConstraintB(array()); + } + + public function testGetTargetsCanBeString() + { + $constraint = new ClassConstraint(); + + $this->assertEquals('class', $constraint->getTargets()); + } + + public function testGetTargetsCanBeArray() + { + $constraint = new ConstraintA(); + + $this->assertEquals(array('property', 'class'), $constraint->getTargets()); + } + + public function testSerialize() + { + $constraint = new ConstraintA(array( + 'property1' => 'foo', + 'property2' => 'bar', + )); + + $restoredConstraint = unserialize(serialize($constraint)); + + $this->assertEquals($constraint, $restoredConstraint); + } + + public function testSerializeInitializesGroupsOptionToDefault() + { + $constraint = new ConstraintA(array( + 'property1' => 'foo', + 'property2' => 'bar', + )); + + $constraint = unserialize(serialize($constraint)); + + $expected = new ConstraintA(array( + 'property1' => 'foo', + 'property2' => 'bar', + 'groups' => 'Default', + )); + + $this->assertEquals($expected, $constraint); + } + + public function testSerializeKeepsCustomGroups() + { + $constraint = new ConstraintA(array( + 'property1' => 'foo', + 'property2' => 'bar', + 'groups' => 'MyGroup', + )); + + $constraint = unserialize(serialize($constraint)); + + $this->assertSame(array('MyGroup'), $constraint->groups); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\InvalidArgumentException + */ + public function testGetErrorNameForUnknownCode() + { + Constraint::getErrorName(1); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationListTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationListTest.php new file mode 100644 index 0000000..30d7ff0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationListTest.php @@ -0,0 +1,134 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests; + +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; + +class ConstraintViolationListTest extends \PHPUnit_Framework_TestCase +{ + protected $list; + + protected function setUp() + { + $this->list = new ConstraintViolationList(); + } + + protected function tearDown() + { + $this->list = null; + } + + public function testInit() + { + $this->assertCount(0, $this->list); + } + + public function testInitWithViolations() + { + $violation = $this->getViolation('Error'); + $this->list = new ConstraintViolationList(array($violation)); + + $this->assertCount(1, $this->list); + $this->assertSame($violation, $this->list[0]); + } + + public function testAdd() + { + $violation = $this->getViolation('Error'); + $this->list->add($violation); + + $this->assertCount(1, $this->list); + $this->assertSame($violation, $this->list[0]); + } + + public function testAddAll() + { + $violations = array( + 10 => $this->getViolation('Error 1'), + 20 => $this->getViolation('Error 2'), + 30 => $this->getViolation('Error 3'), + ); + $otherList = new ConstraintViolationList($violations); + $this->list->addAll($otherList); + + $this->assertCount(3, $this->list); + + $this->assertSame($violations[10], $this->list[0]); + $this->assertSame($violations[20], $this->list[1]); + $this->assertSame($violations[30], $this->list[2]); + } + + public function testIterator() + { + $violations = array( + 10 => $this->getViolation('Error 1'), + 20 => $this->getViolation('Error 2'), + 30 => $this->getViolation('Error 3'), + ); + + $this->list = new ConstraintViolationList($violations); + + // indices are reset upon adding -> array_values() + $this->assertSame(array_values($violations), iterator_to_array($this->list)); + } + + public function testArrayAccess() + { + $violation = $this->getViolation('Error'); + $this->list[] = $violation; + + $this->assertSame($violation, $this->list[0]); + $this->assertTrue(isset($this->list[0])); + + unset($this->list[0]); + + $this->assertFalse(isset($this->list[0])); + + $this->list[10] = $violation; + + $this->assertSame($violation, $this->list[10]); + $this->assertTrue(isset($this->list[10])); + } + + public function testToString() + { + $this->list = new ConstraintViolationList(array( + $this->getViolation('Error 1', 'Root'), + $this->getViolation('Error 2', 'Root', 'foo.bar'), + $this->getViolation('Error 3', 'Root', '[baz]'), + $this->getViolation('Error 4', '', 'foo.bar'), + $this->getViolation('Error 5', '', '[baz]'), + )); + + $expected = <<<EOF +Root: + Error 1 +Root.foo.bar: + Error 2 +Root[baz]: + Error 3 +foo.bar: + Error 4 +[baz]: + Error 5 + +EOF; + + $this->assertEquals($expected, (string) $this->list); + } + + protected function getViolation($message, $root = null, $propertyPath = null) + { + return new ConstraintViolation($message, $message, array(), $root, $propertyPath, null); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationTest.php new file mode 100644 index 0000000..2ceb016 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationTest.php @@ -0,0 +1,55 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests; + +use Symfony\Component\Validator\ConstraintViolation; + +class ConstraintViolationTest extends \PHPUnit_Framework_TestCase +{ + public function testToStringHandlesArrays() + { + $violation = new ConstraintViolation( + 'Array', + '{{ value }}', + array('{{ value }}' => array(1, 2, 3)), + 'Root', + 'property.path', + null + ); + + $expected = <<<EOF +Root.property.path: + Array +EOF; + + $this->assertSame($expected, (string) $violation); + } + + public function testToStringHandlesArrayRoots() + { + $violation = new ConstraintViolation( + '42 cannot be used here', + 'this is the message template', + array(), + array('some_value' => 42), + 'some_value', + null + ); + + $expected = <<<EOF +Array.some_value: + 42 cannot be used here +EOF; + + $this->assertSame($expected, (string) $violation); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php new file mode 100644 index 0000000..4013fd4 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php @@ -0,0 +1,173 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Intl\Util\IntlTestHelper; +use Symfony\Component\Validator\Constraint; + +class ComparisonTest_Class +{ + protected $value; + + public function __construct($value) + { + $this->value = $value; + } + + public function __toString() + { + return (string) $this->value; + } +} + +/** + * @author Daniel Holmes <daniel@danielholmes.org> + */ +abstract class AbstractComparisonValidatorTestCase extends AbstractConstraintValidatorTest +{ + protected static function addPhp5Dot5Comparisons(array $comparisons) + { + if (version_compare(PHP_VERSION, '5.5.0-dev', '<')) { + return $comparisons; + } + + $result = $comparisons; + + // Duplicate all tests involving DateTime objects to be tested with + // DateTimeImmutable objects as well + foreach ($comparisons as $comparison) { + $add = false; + + foreach ($comparison as $i => $value) { + if ($value instanceof \DateTime) { + $comparison[$i] = new \DateTimeImmutable( + $value->format('Y-m-d H:i:s.u e'), + $value->getTimezone() + ); + $add = true; + } elseif ('DateTime' === $value) { + $comparison[$i] = 'DateTimeImmutable'; + $add = true; + } + } + + if ($add) { + $result[] = $comparison; + } + } + + return $result; + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testThrowsConstraintExceptionIfNoValueOrProperty() + { + $comparison = $this->createConstraint(array()); + + $this->validator->validate('some value', $comparison); + } + + /** + * @dataProvider provideAllValidComparisons + * + * @param mixed $dirtyValue + * @param mixed $comparisonValue + */ + public function testValidComparisonToValue($dirtyValue, $comparisonValue) + { + $constraint = $this->createConstraint(array('value' => $comparisonValue)); + + $this->validator->validate($dirtyValue, $constraint); + + $this->assertNoViolation(); + } + + /** + * @return array + */ + public function provideAllValidComparisons() + { + // The provider runs before setUp(), so we need to manually fix + // the default timezone + $this->setDefaultTimezone('UTC'); + + $comparisons = self::addPhp5Dot5Comparisons($this->provideValidComparisons()); + + $this->restoreDefaultTimezone(); + + return $comparisons; + } + + /** + * @return array + */ + abstract public function provideValidComparisons(); + + /** + * @dataProvider provideAllInvalidComparisons + * + * @param mixed $dirtyValue + * @param mixed $dirtyValueAsString + * @param mixed $comparedValue + * @param mixed $comparedValueString + * @param string $comparedValueType + */ + public function testInvalidComparisonToValue($dirtyValue, $dirtyValueAsString, $comparedValue, $comparedValueString, $comparedValueType) + { + // Conversion of dates to string differs between ICU versions + // Make sure we have the correct version loaded + if ($dirtyValue instanceof \DateTime || $dirtyValue instanceof \DateTimeInterface) { + IntlTestHelper::requireIntl($this); + } + + $constraint = $this->createConstraint(array('value' => $comparedValue)); + $constraint->message = 'Constraint Message'; + + $this->validator->validate($dirtyValue, $constraint); + + $this->buildViolation('Constraint Message') + ->setParameter('{{ value }}', $dirtyValueAsString) + ->setParameter('{{ compared_value }}', $comparedValueString) + ->setParameter('{{ compared_value_type }}', $comparedValueType) + ->assertRaised(); + } + + /** + * @return array + */ + public function provideAllInvalidComparisons() + { + // The provider runs before setUp(), so we need to manually fix + // the default timezone + $this->setDefaultTimezone('UTC'); + + $comparisons = self::addPhp5Dot5Comparisons($this->provideInvalidComparisons()); + + $this->restoreDefaultTimezone(); + + return $comparisons; + } + + /** + * @return array + */ + abstract public function provideInvalidComparisons(); + + /** + * @param array $options Options for the constraint + * + * @return Constraint + */ + abstract protected function createConstraint(array $options); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php new file mode 100644 index 0000000..d55e464 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php @@ -0,0 +1,545 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Constraints\NotNull; +use Symfony\Component\Validator\ConstraintValidatorInterface; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\Context\ExecutionContext; +use Symfony\Component\Validator\Context\ExecutionContextInterface; +use Symfony\Component\Validator\Context\LegacyExecutionContext; +use Symfony\Component\Validator\ExecutionContextInterface as LegacyExecutionContextInterface; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\PropertyMetadata; +use Symfony\Component\Validator\Tests\Fixtures\StubGlobalExecutionContext; +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +abstract class AbstractConstraintValidatorTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var ExecutionContextInterface + */ + protected $context; + + /** + * @var ConstraintValidatorInterface + */ + protected $validator; + + protected $group; + + protected $metadata; + + protected $object; + + protected $value; + + protected $root; + + protected $propertyPath; + + protected $constraint; + + protected $defaultTimezone; + + protected function setUp() + { + if (Validation::API_VERSION_2_5 !== $this->getApiVersion()) { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + } + + $this->group = 'MyGroup'; + $this->metadata = null; + $this->object = null; + $this->value = 'InvalidValue'; + $this->root = 'root'; + $this->propertyPath = 'property.path'; + + // Initialize the context with some constraint so that we can + // successfully build a violation. + // The 2.4 API does not keep a reference to the current + // constraint yet. There the violation stores null. + $this->constraint = Validation::API_VERSION_2_4 === $this->getApiVersion() + ? null + : new NotNull(); + + $this->context = $this->createContext(); + $this->validator = $this->createValidator(); + $this->validator->initialize($this->context); + + \Locale::setDefault('en'); + + $this->setDefaultTimezone('UTC'); + } + + protected function tearDown() + { + $this->restoreDefaultTimezone(); + } + + protected function setDefaultTimezone($defaultTimezone) + { + // Make sure this method can not be called twice before calling + // also restoreDefaultTimezone() + if (null === $this->defaultTimezone) { + $this->defaultTimezone = date_default_timezone_get(); + date_default_timezone_set($defaultTimezone); + } + } + + protected function restoreDefaultTimezone() + { + if (null !== $this->defaultTimezone) { + date_default_timezone_set($this->defaultTimezone); + $this->defaultTimezone = null; + } + } + + protected function createContext() + { + $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface'); + + if (Validation::API_VERSION_2_4 === $this->getApiVersion()) { + return $this->getMockBuilder('Symfony\Component\Validator\ExecutionContext') + ->setConstructorArgs(array( + new StubGlobalExecutionContext($this->root), + $translator, + null, + $this->metadata, + $this->value, + $this->group, + $this->propertyPath, + )) + ->setMethods(array('validate', 'validateValue')) + ->getMock(); + } + + $validator = $this->getMock('Symfony\Component\Validator\Validator\ValidatorInterface'); + $contextualValidator = $this->getMock('Symfony\Component\Validator\Validator\ContextualValidatorInterface'); + + switch ($this->getApiVersion()) { + case Validation::API_VERSION_2_5: + $context = new ExecutionContext( + $validator, + $this->root, + $translator + ); + break; + case Validation::API_VERSION_2_5_BC: + $context = new LegacyExecutionContext( + $validator, + $this->root, + $this->getMock('Symfony\Component\Validator\MetadataFactoryInterface'), + $translator + ); + break; + default: + throw new \RuntimeException('Invalid API version'); + } + + $context->setGroup($this->group); + $context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath); + $context->setConstraint($this->constraint); + + $validator->expects($this->any()) + ->method('inContext') + ->with($context) + ->will($this->returnValue($contextualValidator)); + + return $context; + } + + /** + * @param mixed $message + * @param array $parameters + * @param string $propertyPath + * @param string $invalidValue + * @param null $plural + * @param null $code + * + * @return ConstraintViolation + * + * @deprecated To be removed in Symfony 3.0. Use + * {@link buildViolation()} instead. + */ + protected function createViolation($message, array $parameters = array(), $propertyPath = 'property.path', $invalidValue = 'InvalidValue', $plural = null, $code = null) + { + return new ConstraintViolation( + null, + $message, + $parameters, + $this->root, + $propertyPath, + $invalidValue, + $plural, + $code, + $this->constraint + ); + } + + protected function setGroup($group) + { + $this->group = $group; + + switch ($this->getApiVersion()) { + case Validation::API_VERSION_2_4: + $this->context = $this->createContext(); + $this->validator->initialize($this->context); + break; + case Validation::API_VERSION_2_5: + case Validation::API_VERSION_2_5_BC: + $this->context->setGroup($group); + break; + } + } + + protected function setObject($object) + { + $this->object = $object; + $this->metadata = is_object($object) + ? new ClassMetadata(get_class($object)) + : null; + + switch ($this->getApiVersion()) { + case Validation::API_VERSION_2_4: + $this->context = $this->createContext(); + $this->validator->initialize($this->context); + break; + case Validation::API_VERSION_2_5: + case Validation::API_VERSION_2_5_BC: + $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath); + break; + } + } + + protected function setProperty($object, $property) + { + $this->object = $object; + $this->metadata = is_object($object) + ? new PropertyMetadata(get_class($object), $property) + : null; + + switch ($this->getApiVersion()) { + case Validation::API_VERSION_2_4: + $this->context = $this->createContext(); + $this->validator->initialize($this->context); + break; + case Validation::API_VERSION_2_5: + case Validation::API_VERSION_2_5_BC: + $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath); + break; + } + } + + protected function setValue($value) + { + $this->value = $value; + + switch ($this->getApiVersion()) { + case Validation::API_VERSION_2_4: + $this->context = $this->createContext(); + $this->validator->initialize($this->context); + break; + case Validation::API_VERSION_2_5: + case Validation::API_VERSION_2_5_BC: + $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath); + break; + } + } + + protected function setRoot($root) + { + $this->root = $root; + $this->context = $this->createContext(); + $this->validator->initialize($this->context); + } + + protected function setPropertyPath($propertyPath) + { + $this->propertyPath = $propertyPath; + + switch ($this->getApiVersion()) { + case Validation::API_VERSION_2_4: + $this->context = $this->createContext(); + $this->validator->initialize($this->context); + break; + case Validation::API_VERSION_2_5: + case Validation::API_VERSION_2_5_BC: + $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath); + break; + } + } + + protected function expectNoValidate() + { + switch ($this->getApiVersion()) { + case Validation::API_VERSION_2_4: + $this->context->expects($this->never()) + ->method('validate'); + $this->context->expects($this->never()) + ->method('validateValue'); + break; + case Validation::API_VERSION_2_5: + case Validation::API_VERSION_2_5_BC: + $validator = $this->context->getValidator()->inContext($this->context); + $validator->expects($this->never()) + ->method('atPath'); + $validator->expects($this->never()) + ->method('validate'); + break; + } + } + + protected function expectValidateAt($i, $propertyPath, $value, $group) + { + switch ($this->getApiVersion()) { + case Validation::API_VERSION_2_4: + $this->context->expects($this->at($i)) + ->method('validate') + ->with($value, $propertyPath, $group); + break; + case Validation::API_VERSION_2_5: + case Validation::API_VERSION_2_5_BC: + $validator = $this->context->getValidator()->inContext($this->context); + $validator->expects($this->at(2 * $i)) + ->method('atPath') + ->with($propertyPath) + ->will($this->returnValue($validator)); + $validator->expects($this->at(2 * $i + 1)) + ->method('validate') + ->with($value, $this->logicalOr(null, array()), $group); + break; + } + } + + protected function expectValidateValueAt($i, $propertyPath, $value, $constraints, $group = null) + { + switch ($this->getApiVersion()) { + case Validation::API_VERSION_2_4: + $this->context->expects($this->at($i)) + ->method('validateValue') + ->with($value, $constraints, $propertyPath, $group); + break; + case Validation::API_VERSION_2_5: + case Validation::API_VERSION_2_5_BC: + $contextualValidator = $this->context->getValidator()->inContext($this->context); + $contextualValidator->expects($this->at(2 * $i)) + ->method('atPath') + ->with($propertyPath) + ->will($this->returnValue($contextualValidator)); + $contextualValidator->expects($this->at(2 * $i + 1)) + ->method('validate') + ->with($value, $constraints, $group); + break; + } + } + + protected function assertNoViolation() + { + $this->assertCount(0, $this->context->getViolations()); + } + + /** + * @param mixed $message + * @param array $parameters + * @param string $propertyPath + * @param string $invalidValue + * @param null $plural + * @param null $code + * + * @deprecated To be removed in Symfony 3.0. Use + * {@link buildViolation()} instead. + */ + protected function assertViolation($message, array $parameters = array(), $propertyPath = 'property.path', $invalidValue = 'InvalidValue', $plural = null, $code = null) + { + $this->buildViolation($message) + ->setParameters($parameters) + ->atPath($propertyPath) + ->setInvalidValue($invalidValue) + ->setCode($code) + ->setPlural($plural) + ->assertRaised(); + } + + /** + * @param array $expected + * + * @deprecated To be removed in Symfony 3.0. Use + * {@link buildViolation()} instead. + */ + protected function assertViolations(array $expected) + { + $violations = $this->context->getViolations(); + + $this->assertCount(count($expected), $violations); + + $i = 0; + + foreach ($expected as $violation) { + $this->assertEquals($violation, $violations[$i++]); + } + } + + /** + * @param $message + * + * @return ConstraintViolationAssertion + */ + protected function buildViolation($message) + { + return new ConstraintViolationAssertion($this->context, $message, $this->constraint); + } + + abstract protected function getApiVersion(); + + abstract protected function createValidator(); +} + +/** + * @internal + */ +class ConstraintViolationAssertion +{ + /** + * @var LegacyExecutionContextInterface + */ + private $context; + + /** + * @var ConstraintViolationAssertion[] + */ + private $assertions; + + private $message; + private $parameters = array(); + private $invalidValue = 'InvalidValue'; + private $propertyPath = 'property.path'; + private $translationDomain; + private $plural; + private $code; + private $constraint; + private $cause; + + public function __construct(LegacyExecutionContextInterface $context, $message, Constraint $constraint = null, array $assertions = array()) + { + $this->context = $context; + $this->message = $message; + $this->constraint = $constraint; + $this->assertions = $assertions; + } + + public function atPath($path) + { + $this->propertyPath = $path; + + return $this; + } + + public function setParameter($key, $value) + { + $this->parameters[$key] = $value; + + return $this; + } + + public function setParameters(array $parameters) + { + $this->parameters = $parameters; + + return $this; + } + + public function setTranslationDomain($translationDomain) + { + $this->translationDomain = $translationDomain; + + return $this; + } + + public function setInvalidValue($invalidValue) + { + $this->invalidValue = $invalidValue; + + return $this; + } + + public function setPlural($number) + { + $this->plural = $number; + + return $this; + } + + public function setCode($code) + { + $this->code = $code; + + return $this; + } + + public function setCause($cause) + { + $this->cause = $cause; + + return $this; + } + + public function buildNextViolation($message) + { + $assertions = $this->assertions; + $assertions[] = $this; + + return new self($this->context, $message, $this->constraint, $assertions); + } + + public function assertRaised() + { + $expected = array(); + foreach ($this->assertions as $assertion) { + $expected[] = $assertion->getViolation(); + } + $expected[] = $this->getViolation(); + + $violations = iterator_to_array($this->context->getViolations()); + + \PHPUnit_Framework_Assert::assertCount(count($expected), $violations); + + reset($violations); + + foreach ($expected as $violation) { + \PHPUnit_Framework_Assert::assertEquals($violation, current($violations)); + next($violations); + } + } + + private function getViolation() + { + return new ConstraintViolation( + null, + $this->message, + $this->parameters, + $this->context->getRoot(), + $this->propertyPath, + $this->invalidValue, + $this->plural, + $this->code, + $this->constraint, + $this->cause + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllTest.php new file mode 100644 index 0000000..36b5198 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllTest.php @@ -0,0 +1,41 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\All; +use Symfony\Component\Validator\Constraints\Valid; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class AllTest extends \PHPUnit_Framework_TestCase +{ + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testRejectNonConstraints() + { + new All(array( + 'foo', + )); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testRejectValidConstraint() + { + new All(array( + new Valid(), + )); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllValidatorTest.php new file mode 100644 index 0000000..57dd600 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllValidatorTest.php @@ -0,0 +1,93 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\All; +use Symfony\Component\Validator\Constraints\AllValidator; +use Symfony\Component\Validator\Constraints\NotNull; +use Symfony\Component\Validator\Constraints\Range; +use Symfony\Component\Validator\Validation; + +class AllValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new AllValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new All(new Range(array('min' => 4)))); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testThrowsExceptionIfNotTraversable() + { + $this->validator->validate('foo.barbar', new All(new Range(array('min' => 4)))); + } + + /** + * @dataProvider getValidArguments + */ + public function testWalkSingleConstraint($array) + { + $constraint = new Range(array('min' => 4)); + + $i = 0; + + foreach ($array as $key => $value) { + $this->expectValidateValueAt($i++, '['.$key.']', $value, array($constraint)); + } + + $this->validator->validate($array, new All($constraint)); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getValidArguments + */ + public function testWalkMultipleConstraints($array) + { + $constraint1 = new Range(array('min' => 4)); + $constraint2 = new NotNull(); + + $constraints = array($constraint1, $constraint2); + + $i = 0; + + foreach ($array as $key => $value) { + $this->expectValidateValueAt($i++, '['.$key.']', $value, array($constraint1, $constraint2)); + } + + $this->validator->validate($array, new All($constraints)); + + $this->assertNoViolation(); + } + + public function getValidArguments() + { + return array( + array(array(5, 6, 7)), + array(new \ArrayObject(array(5, 6, 7))), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/BlankValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/BlankValidatorTest.php new file mode 100644 index 0000000..a7f3d7d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/BlankValidatorTest.php @@ -0,0 +1,69 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Blank; +use Symfony\Component\Validator\Constraints\BlankValidator; +use Symfony\Component\Validator\Validation; + +class BlankValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new BlankValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Blank()); + + $this->assertNoViolation(); + } + + public function testBlankIsValid() + { + $this->validator->validate('', new Blank()); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getInvalidValues + */ + public function testInvalidValues($value, $valueAsString) + { + $constraint = new Blank(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', $valueAsString) + ->assertRaised(); + } + + public function getInvalidValues() + { + return array( + array('foobar', '"foobar"'), + array(0, '0'), + array(false, 'false'), + array(1234, '1234'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php new file mode 100644 index 0000000..9bb12a2 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php @@ -0,0 +1,336 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Constraints\Callback; +use Symfony\Component\Validator\Constraints\CallbackValidator; +use Symfony\Component\Validator\ExecutionContextInterface; +use Symfony\Component\Validator\Validation; + +class CallbackValidatorTest_Class +{ + public static function validateCallback($object, ExecutionContextInterface $context) + { + $context->addViolation('Callback message', array('{{ value }}' => 'foobar')); + + return false; + } +} + +class CallbackValidatorTest_Object +{ + public function validate(ExecutionContextInterface $context) + { + $context->addViolation('My message', array('{{ value }}' => 'foobar')); + + return false; + } + + public static function validateStatic($object, ExecutionContextInterface $context) + { + $context->addViolation('Static message', array('{{ value }}' => 'baz')); + + return false; + } +} + +class CallbackValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new CallbackValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Callback(array('foo'))); + + $this->assertNoViolation(); + } + + public function testSingleMethod() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback('validate'); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('My message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + public function testSingleMethodExplicitName() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array('callback' => 'validate')); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('My message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + public function testSingleStaticMethod() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback('validateStatic'); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('Static message') + ->setParameter('{{ value }}', 'baz') + ->assertRaised(); + } + + public function testClosure() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(function ($object, ExecutionContextInterface $context) { + $context->addViolation('My message', array('{{ value }}' => 'foobar')); + + return false; + }); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('My message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + public function testClosureNullObject() + { + $constraint = new Callback(function ($object, ExecutionContextInterface $context) { + $context->addViolation('My message', array('{{ value }}' => 'foobar')); + + return false; + }); + + $this->validator->validate(null, $constraint); + + $this->buildViolation('My message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + public function testClosureExplicitName() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array( + 'callback' => function ($object, ExecutionContextInterface $context) { + $context->addViolation('My message', array('{{ value }}' => 'foobar')); + + return false; + }, + )); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('My message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + public function testArrayCallable() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array(__CLASS__.'_Class', 'validateCallback')); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('Callback message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + public function testArrayCallableNullObject() + { + $constraint = new Callback(array(__CLASS__.'_Class', 'validateCallback')); + + $this->validator->validate(null, $constraint); + + $this->buildViolation('Callback message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + public function testArrayCallableExplicitName() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array( + 'callback' => array(__CLASS__.'_Class', 'validateCallback'), + )); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('Callback message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + // BC with Symfony < 2.4 + public function testSingleMethodBc() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array('validate')); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('My message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + // BC with Symfony < 2.4 + public function testSingleMethodBcExplicitName() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array('methods' => array('validate'))); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('My message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + // BC with Symfony < 2.4 + public function testMultipleMethodsBc() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array('validate', 'validateStatic')); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('My message') + ->setParameter('{{ value }}', 'foobar') + ->buildNextViolation('Static message') + ->setParameter('{{ value }}', 'baz') + ->assertRaised(); + } + + // BC with Symfony < 2.4 + public function testMultipleMethodsBcExplicitName() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array( + 'methods' => array('validate', 'validateStatic'), + )); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('My message') + ->setParameter('{{ value }}', 'foobar') + ->buildNextViolation('Static message') + ->setParameter('{{ value }}', 'baz') + ->assertRaised(); + } + + // BC with Symfony < 2.4 + public function testSingleStaticMethodBc() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array( + array(__CLASS__.'_Class', 'validateCallback'), + )); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('Callback message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + // BC with Symfony < 2.4 + public function testSingleStaticMethodBcExplicitName() + { + $object = new CallbackValidatorTest_Object(); + $constraint = new Callback(array( + 'methods' => array(array(__CLASS__.'_Class', 'validateCallback')), + )); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('Callback message') + ->setParameter('{{ value }}', 'foobar') + ->assertRaised(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testExpectValidMethods() + { + $object = new CallbackValidatorTest_Object(); + + $this->validator->validate($object, new Callback(array('foobar'))); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testExpectValidCallbacks() + { + $object = new CallbackValidatorTest_Object(); + + $this->validator->validate($object, new Callback(array(array('foo', 'bar')))); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testExpectEitherCallbackOrMethods() + { + $object = new CallbackValidatorTest_Object(); + + $this->validator->validate($object, new Callback(array( + 'callback' => 'validate', + 'methods' => array('validateStatic'), + ))); + } + + public function testConstraintGetTargets() + { + $constraint = new Callback(array('foo')); + $targets = array(Constraint::CLASS_CONSTRAINT, Constraint::PROPERTY_CONSTRAINT); + + $this->assertEquals($targets, $constraint->getTargets()); + } + + // Should succeed. Needed when defining constraints as annotations. + public function testNoConstructorArguments() + { + new Callback(); + } + + public function testAnnotationInvocationSingleValued() + { + $constraint = new Callback(array('value' => 'validateStatic')); + + $this->assertEquals(new Callback('validateStatic'), $constraint); + } + + public function testAnnotationInvocationMultiValued() + { + $constraint = new Callback(array('value' => array(__CLASS__.'_Class', 'validateCallback'))); + + $this->assertEquals(new Callback(array(__CLASS__.'_Class', 'validateCallback')), $constraint); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CardSchemeValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CardSchemeValidatorTest.php new file mode 100644 index 0000000..aab54e5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CardSchemeValidatorTest.php @@ -0,0 +1,133 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\CardScheme; +use Symfony\Component\Validator\Constraints\CardSchemeValidator; +use Symfony\Component\Validator\Validation; + +class CardSchemeValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new CardSchemeValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new CardScheme(array('schemes' => array()))); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new CardScheme(array('schemes' => array()))); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getValidNumbers + */ + public function testValidNumbers($scheme, $number) + { + $this->validator->validate($number, new CardScheme(array('schemes' => $scheme))); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getInvalidNumbers + */ + public function testInvalidNumbers($scheme, $number, $code) + { + $constraint = new CardScheme(array( + 'schemes' => $scheme, + 'message' => 'myMessage', + )); + + $this->validator->validate($number, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', is_string($number) ? '"'.$number.'"' : $number) + ->setCode($code) + ->assertRaised(); + } + + public function getValidNumbers() + { + return array( + array('AMEX', '378282246310005'), + array('AMEX', '371449635398431'), + array('AMEX', '378734493671000'), + array('AMEX', '347298508610146'), + array('CHINA_UNIONPAY', '6228888888888888'), + array('CHINA_UNIONPAY', '62288888888888888'), + array('CHINA_UNIONPAY', '622888888888888888'), + array('CHINA_UNIONPAY', '6228888888888888888'), + array('DINERS', '30569309025904'), + array('DINERS', '36088894118515'), + array('DINERS', '38520000023237'), + array('DISCOVER', '6011111111111117'), + array('DISCOVER', '6011000990139424'), + array('INSTAPAYMENT', '6372476031350068'), + array('INSTAPAYMENT', '6385537775789749'), + array('INSTAPAYMENT', '6393440808445746'), + array('JCB', '3530111333300000'), + array('JCB', '3566002020360505'), + array('JCB', '213112345678901'), + array('JCB', '180012345678901'), + array('LASER', '6304678107004080'), + array('LASER', '6706440607428128629'), + array('LASER', '6771656738314582216'), + array('MAESTRO', '6759744069209'), + array('MAESTRO', '5020507657408074712'), + array('MAESTRO', '6759744069209'), + array('MAESTRO', '6759744069209'), + array('MASTERCARD', '5555555555554444'), + array('MASTERCARD', '5105105105105100'), + array('VISA', '4111111111111111'), + array('VISA', '4012888888881881'), + array('VISA', '4222222222222'), + array(array('AMEX', 'VISA'), '4111111111111111'), + array(array('AMEX', 'VISA'), '378282246310005'), + array(array('JCB', 'MASTERCARD'), '5105105105105100'), + array(array('VISA', 'MASTERCARD'), '5105105105105100'), + ); + } + + public function getInvalidNumbers() + { + return array( + array('VISA', '42424242424242424242', CardScheme::INVALID_FORMAT_ERROR), + array('AMEX', '357298508610146', CardScheme::INVALID_FORMAT_ERROR), + array('DINERS', '31569309025904', CardScheme::INVALID_FORMAT_ERROR), + array('DINERS', '37088894118515', CardScheme::INVALID_FORMAT_ERROR), + array('INSTAPAYMENT', '6313440808445746', CardScheme::INVALID_FORMAT_ERROR), + array('CHINA_UNIONPAY', '622888888888888', CardScheme::INVALID_FORMAT_ERROR), + array('CHINA_UNIONPAY', '62288888888888888888', CardScheme::INVALID_FORMAT_ERROR), + array('AMEX', '30569309025904', CardScheme::INVALID_FORMAT_ERROR), // DINERS number + array('AMEX', 'invalid', CardScheme::NOT_NUMERIC_ERROR), // A string + array('AMEX', 0, CardScheme::INVALID_FORMAT_ERROR), // a lone number + array('AMEX', '0', CardScheme::INVALID_FORMAT_ERROR), // a lone number + array('AMEX', '000000000000', CardScheme::INVALID_FORMAT_ERROR), // a lone number + array('DINERS', '3056930', CardScheme::INVALID_FORMAT_ERROR), // only first part of the number + array('DISCOVER', '1117', CardScheme::INVALID_FORMAT_ERROR), // only last 4 digits + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ChoiceValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ChoiceValidatorTest.php new file mode 100644 index 0000000..579d6aa --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ChoiceValidatorTest.php @@ -0,0 +1,287 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Choice; +use Symfony\Component\Validator\Constraints\ChoiceValidator; +use Symfony\Component\Validator\Validation; + +function choice_callback() +{ + return array('foo', 'bar'); +} + +class ChoiceValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new ChoiceValidator(); + } + + public static function staticCallback() + { + return array('foo', 'bar'); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectArrayIfMultipleIsTrue() + { + $constraint = new Choice(array( + 'choices' => array('foo', 'bar'), + 'multiple' => true, + )); + + $this->validator->validate('asdf', $constraint); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Choice(array('choices' => array('foo', 'bar')))); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testChoicesOrCallbackExpected() + { + $this->validator->validate('foobar', new Choice()); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testValidCallbackExpected() + { + $this->validator->validate('foobar', new Choice(array('callback' => 'abcd'))); + } + + public function testValidChoiceArray() + { + $constraint = new Choice(array('choices' => array('foo', 'bar'))); + + $this->validator->validate('bar', $constraint); + + $this->assertNoViolation(); + } + + public function testValidChoiceCallbackFunction() + { + $constraint = new Choice(array('callback' => __NAMESPACE__.'\choice_callback')); + + $this->validator->validate('bar', $constraint); + + $this->assertNoViolation(); + } + + public function testValidChoiceCallbackClosure() + { + $constraint = new Choice(array('callback' => function () { + return array('foo', 'bar'); + })); + + $this->validator->validate('bar', $constraint); + + $this->assertNoViolation(); + } + + public function testValidChoiceCallbackStaticMethod() + { + $constraint = new Choice(array('callback' => array(__CLASS__, 'staticCallback'))); + + $this->validator->validate('bar', $constraint); + + $this->assertNoViolation(); + } + + public function testValidChoiceCallbackContextMethod() + { + // search $this for "staticCallback" + $this->setObject($this); + + $constraint = new Choice(array('callback' => 'staticCallback')); + + $this->validator->validate('bar', $constraint); + + $this->assertNoViolation(); + } + + public function testMultipleChoices() + { + $constraint = new Choice(array( + 'choices' => array('foo', 'bar', 'baz'), + 'multiple' => true, + )); + + $this->validator->validate(array('baz', 'bar'), $constraint); + + $this->assertNoViolation(); + } + + public function testInvalidChoice() + { + $constraint = new Choice(array( + 'choices' => array('foo', 'bar'), + 'message' => 'myMessage', + )); + + $this->validator->validate('baz', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"baz"') + ->setCode(Choice::NO_SUCH_CHOICE_ERROR) + ->assertRaised(); + } + + public function testInvalidChoiceMultiple() + { + $constraint = new Choice(array( + 'choices' => array('foo', 'bar'), + 'multipleMessage' => 'myMessage', + 'multiple' => true, + )); + + $this->validator->validate(array('foo', 'baz'), $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"baz"') + ->setInvalidValue('baz') + ->setCode(Choice::NO_SUCH_CHOICE_ERROR) + ->assertRaised(); + } + + public function testTooFewChoices() + { + $constraint = new Choice(array( + 'choices' => array('foo', 'bar', 'moo', 'maa'), + 'multiple' => true, + 'min' => 2, + 'minMessage' => 'myMessage', + )); + + $value = array('foo'); + + $this->setValue($value); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ limit }}', 2) + ->setInvalidValue($value) + ->setPlural(2) + ->setCode(Choice::TOO_FEW_ERROR) + ->assertRaised(); + } + + public function testTooManyChoices() + { + $constraint = new Choice(array( + 'choices' => array('foo', 'bar', 'moo', 'maa'), + 'multiple' => true, + 'max' => 2, + 'maxMessage' => 'myMessage', + )); + + $value = array('foo', 'bar', 'moo'); + + $this->setValue($value); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ limit }}', 2) + ->setInvalidValue($value) + ->setPlural(2) + ->setCode(Choice::TOO_MANY_ERROR) + ->assertRaised(); + } + + public function testNonStrict() + { + $constraint = new Choice(array( + 'choices' => array(1, 2), + 'strict' => false, + )); + + $this->validator->validate('2', $constraint); + $this->validator->validate(2, $constraint); + + $this->assertNoViolation(); + } + + public function testStrictAllowsExactValue() + { + $constraint = new Choice(array( + 'choices' => array(1, 2), + 'strict' => true, + )); + + $this->validator->validate(2, $constraint); + + $this->assertNoViolation(); + } + + public function testStrictDisallowsDifferentType() + { + $constraint = new Choice(array( + 'choices' => array(1, 2), + 'strict' => true, + 'message' => 'myMessage', + )); + + $this->validator->validate('2', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"2"') + ->setCode(Choice::NO_SUCH_CHOICE_ERROR) + ->assertRaised(); + } + + public function testNonStrictWithMultipleChoices() + { + $constraint = new Choice(array( + 'choices' => array(1, 2, 3), + 'multiple' => true, + 'strict' => false, + )); + + $this->validator->validate(array('2', 3), $constraint); + + $this->assertNoViolation(); + } + + public function testStrictWithMultipleChoices() + { + $constraint = new Choice(array( + 'choices' => array(1, 2, 3), + 'multiple' => true, + 'strict' => true, + 'multipleMessage' => 'myMessage', + )); + + $this->validator->validate(array(2, '3'), $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"3"') + ->setInvalidValue('3') + ->setCode(Choice::NO_SUCH_CHOICE_ERROR) + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php new file mode 100644 index 0000000..79f50b0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php @@ -0,0 +1,112 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Collection; +use Symfony\Component\Validator\Constraints\Email; +use Symfony\Component\Validator\Constraints\Optional; +use Symfony\Component\Validator\Constraints\Required; +use Symfony\Component\Validator\Constraints\Valid; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class CollectionTest extends \PHPUnit_Framework_TestCase +{ + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testRejectInvalidFieldsOption() + { + new Collection(array( + 'fields' => 'foo', + )); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testRejectNonConstraints() + { + new Collection(array( + 'foo' => 'bar', + )); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testRejectValidConstraint() + { + new Collection(array( + 'foo' => new Valid(), + )); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testRejectValidConstraintWithinOptional() + { + new Collection(array( + 'foo' => new Optional(new Valid()), + )); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testRejectValidConstraintWithinRequired() + { + new Collection(array( + 'foo' => new Required(new Valid()), + )); + } + + public function testAcceptOptionalConstraintAsOneElementArray() + { + $collection1 = new Collection(array( + 'fields' => array( + 'alternate_email' => array( + new Optional(new Email()), + ), + ), + )); + + $collection2 = new Collection(array( + 'fields' => array( + 'alternate_email' => new Optional(new Email()), + ), + )); + + $this->assertEquals($collection1, $collection2); + } + + public function testAcceptRequiredConstraintAsOneElementArray() + { + $collection1 = new Collection(array( + 'fields' => array( + 'alternate_email' => array( + new Required(new Email()), + ), + ), + )); + + $collection2 = new Collection(array( + 'fields' => array( + 'alternate_email' => new Required(new Email()), + ), + )); + + $this->assertEquals($collection1, $collection2); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php new file mode 100644 index 0000000..a3c4b33 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php @@ -0,0 +1,20 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +class CollectionValidatorArrayObjectTest extends CollectionValidatorTest +{ + public function prepareTestData(array $contents) + { + return new \ArrayObject($contents); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayTest.php new file mode 100644 index 0000000..7517d0c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayTest.php @@ -0,0 +1,20 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +class CollectionValidatorArrayTest extends CollectionValidatorTest +{ + public function prepareTestData(array $contents) + { + return $contents; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php new file mode 100644 index 0000000..3d4c296 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Tests\Fixtures\CustomArrayObject; + +class CollectionValidatorCustomArrayObjectTest extends CollectionValidatorTest +{ + public function prepareTestData(array $contents) + { + return new CustomArrayObject($contents); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorTest.php new file mode 100644 index 0000000..0376814 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorTest.php @@ -0,0 +1,389 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Collection; +use Symfony\Component\Validator\Constraints\CollectionValidator; +use Symfony\Component\Validator\Constraints\NotNull; +use Symfony\Component\Validator\Constraints\Optional; +use Symfony\Component\Validator\Constraints\Range; +use Symfony\Component\Validator\Constraints\Required; +use Symfony\Component\Validator\Validation; + +abstract class CollectionValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new CollectionValidator(); + } + + abstract protected function prepareTestData(array $contents); + + public function testNullIsValid() + { + $this->validator->validate(null, new Collection(array('fields' => array( + 'foo' => new Range(array('min' => 4)), + )))); + + $this->assertNoViolation(); + } + + public function testFieldsAsDefaultOption() + { + $constraint = new Range(array('min' => 4)); + + $data = $this->prepareTestData(array('foo' => 'foobar')); + + $this->expectValidateValueAt(0, '[foo]', $data['foo'], array($constraint)); + + $this->validator->validate($data, new Collection(array( + 'foo' => $constraint, + ))); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testThrowsExceptionIfNotTraversable() + { + $this->validator->validate('foobar', new Collection(array('fields' => array( + 'foo' => new Range(array('min' => 4)), + )))); + } + + public function testWalkSingleConstraint() + { + $constraint = new Range(array('min' => 4)); + + $array = array( + 'foo' => 3, + 'bar' => 5, + ); + + $i = 0; + + foreach ($array as $key => $value) { + $this->expectValidateValueAt($i++, '['.$key.']', $value, array($constraint)); + } + + $data = $this->prepareTestData($array); + + $this->validator->validate($data, new Collection(array( + 'fields' => array( + 'foo' => $constraint, + 'bar' => $constraint, + ), + ))); + + $this->assertNoViolation(); + } + + public function testWalkMultipleConstraints() + { + $constraints = array( + new Range(array('min' => 4)), + new NotNull(), + ); + + $array = array( + 'foo' => 3, + 'bar' => 5, + ); + + $i = 0; + + foreach ($array as $key => $value) { + $this->expectValidateValueAt($i++, '['.$key.']', $value, $constraints); + } + + $data = $this->prepareTestData($array); + + $this->validator->validate($data, new Collection(array( + 'fields' => array( + 'foo' => $constraints, + 'bar' => $constraints, + ), + ))); + + $this->assertNoViolation(); + } + + public function testExtraFieldsDisallowed() + { + $constraint = new Range(array('min' => 4)); + + $data = $this->prepareTestData(array( + 'foo' => 5, + 'baz' => 6, + )); + + $this->expectValidateValueAt(0, '[foo]', $data['foo'], array($constraint)); + + $this->validator->validate($data, new Collection(array( + 'fields' => array( + 'foo' => $constraint, + ), + 'extraFieldsMessage' => 'myMessage', + ))); + + $this->buildViolation('myMessage') + ->setParameter('{{ field }}', '"baz"') + ->atPath('property.path[baz]') + ->setInvalidValue(6) + ->setCode(Collection::NO_SUCH_FIELD_ERROR) + ->assertRaised(); + } + + // bug fix + public function testNullNotConsideredExtraField() + { + $data = $this->prepareTestData(array( + 'foo' => null, + )); + + $constraint = new Range(array('min' => 4)); + + $this->expectValidateValueAt(0, '[foo]', $data['foo'], array($constraint)); + + $this->validator->validate($data, new Collection(array( + 'fields' => array( + 'foo' => $constraint, + ), + ))); + + $this->assertNoViolation(); + } + + public function testExtraFieldsAllowed() + { + $data = $this->prepareTestData(array( + 'foo' => 5, + 'bar' => 6, + )); + + $constraint = new Range(array('min' => 4)); + + $this->expectValidateValueAt(0, '[foo]', $data['foo'], array($constraint)); + + $this->validator->validate($data, new Collection(array( + 'fields' => array( + 'foo' => $constraint, + ), + 'allowExtraFields' => true, + ))); + + $this->assertNoViolation(); + } + + public function testMissingFieldsDisallowed() + { + $data = $this->prepareTestData(array()); + + $constraint = new Range(array('min' => 4)); + + $this->validator->validate($data, new Collection(array( + 'fields' => array( + 'foo' => $constraint, + ), + 'missingFieldsMessage' => 'myMessage', + ))); + + $this->buildViolation('myMessage') + ->setParameter('{{ field }}', '"foo"') + ->atPath('property.path[foo]') + ->setInvalidValue(null) + ->setCode(Collection::MISSING_FIELD_ERROR) + ->assertRaised(); + } + + public function testMissingFieldsAllowed() + { + $data = $this->prepareTestData(array()); + + $constraint = new Range(array('min' => 4)); + + $this->validator->validate($data, new Collection(array( + 'fields' => array( + 'foo' => $constraint, + ), + 'allowMissingFields' => true, + ))); + + $this->assertNoViolation(); + } + + public function testOptionalFieldPresent() + { + $data = $this->prepareTestData(array( + 'foo' => null, + )); + + $this->validator->validate($data, new Collection(array( + 'foo' => new Optional(), + ))); + + $this->assertNoViolation(); + } + + public function testOptionalFieldNotPresent() + { + $data = $this->prepareTestData(array()); + + $this->validator->validate($data, new Collection(array( + 'foo' => new Optional(), + ))); + + $this->assertNoViolation(); + } + + public function testOptionalFieldSingleConstraint() + { + $array = array( + 'foo' => 5, + ); + + $constraint = new Range(array('min' => 4)); + + $this->expectValidateValueAt(0, '[foo]', $array['foo'], array($constraint)); + + $data = $this->prepareTestData($array); + + $this->validator->validate($data, new Collection(array( + 'foo' => new Optional($constraint), + ))); + + $this->assertNoViolation(); + } + + public function testOptionalFieldMultipleConstraints() + { + $array = array( + 'foo' => 5, + ); + + $constraints = array( + new NotNull(), + new Range(array('min' => 4)), + ); + + $this->expectValidateValueAt(0, '[foo]', $array['foo'], $constraints); + + $data = $this->prepareTestData($array); + + $this->validator->validate($data, new Collection(array( + 'foo' => new Optional($constraints), + ))); + + $this->assertNoViolation(); + } + + public function testRequiredFieldPresent() + { + $data = $this->prepareTestData(array( + 'foo' => null, + )); + + $this->validator->validate($data, new Collection(array( + 'foo' => new Required(), + ))); + + $this->assertNoViolation(); + } + + public function testRequiredFieldNotPresent() + { + $data = $this->prepareTestData(array()); + + $this->validator->validate($data, new Collection(array( + 'fields' => array( + 'foo' => new Required(), + ), + 'missingFieldsMessage' => 'myMessage', + ))); + + $this->buildViolation('myMessage') + ->setParameter('{{ field }}', '"foo"') + ->atPath('property.path[foo]') + ->setInvalidValue(null) + ->setCode(Collection::MISSING_FIELD_ERROR) + ->assertRaised(); + } + + public function testRequiredFieldSingleConstraint() + { + $array = array( + 'foo' => 5, + ); + + $constraint = new Range(array('min' => 4)); + + $this->expectValidateValueAt(0, '[foo]', $array['foo'], array($constraint)); + + $data = $this->prepareTestData($array); + + $this->validator->validate($data, new Collection(array( + 'foo' => new Required($constraint), + ))); + + $this->assertNoViolation(); + } + + public function testRequiredFieldMultipleConstraints() + { + $array = array( + 'foo' => 5, + ); + + $constraints = array( + new NotNull(), + new Range(array('min' => 4)), + ); + + $this->expectValidateValueAt(0, '[foo]', $array['foo'], $constraints); + + $data = $this->prepareTestData($array); + + $this->validator->validate($data, new Collection(array( + 'foo' => new Required($constraints), + ))); + + $this->assertNoViolation(); + } + + public function testObjectShouldBeLeftUnchanged() + { + $value = new \ArrayObject(array( + 'foo' => 3, + )); + + $constraint = new Range(array('min' => 2)); + + $this->expectValidateValueAt(0, '[foo]', $value['foo'], array($constraint)); + + $this->validator->validate($value, new Collection(array( + 'fields' => array( + 'foo' => $constraint, + ), + ))); + + $this->assertEquals(array( + 'foo' => 3, + ), (array) $value); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CompositeTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CompositeTest.php new file mode 100644 index 0000000..21cb461 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CompositeTest.php @@ -0,0 +1,137 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Composite; +use Symfony\Component\Validator\Constraints\NotBlank; +use Symfony\Component\Validator\Constraints\NotNull; +use Symfony\Component\Validator\Constraints\Valid; + +class ConcreteComposite extends Composite +{ + public $constraints; + + protected function getCompositeOption() + { + return 'constraints'; + } + + public function getDefaultOption() + { + return 'constraints'; + } +} + +/** + * @since 2.6 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class CompositeTest extends \PHPUnit_Framework_TestCase +{ + public function testMergeNestedGroupsIfNoExplicitParentGroup() + { + $constraint = new ConcreteComposite(array( + new NotNull(array('groups' => 'Default')), + new NotBlank(array('groups' => array('Default', 'Strict'))), + )); + + $this->assertEquals(array('Default', 'Strict'), $constraint->groups); + $this->assertEquals(array('Default'), $constraint->constraints[0]->groups); + $this->assertEquals(array('Default', 'Strict'), $constraint->constraints[1]->groups); + } + + public function testSetImplicitNestedGroupsIfExplicitParentGroup() + { + $constraint = new ConcreteComposite(array( + 'constraints' => array( + new NotNull(), + new NotBlank(), + ), + 'groups' => array('Default', 'Strict'), + )); + + $this->assertEquals(array('Default', 'Strict'), $constraint->groups); + $this->assertEquals(array('Default', 'Strict'), $constraint->constraints[0]->groups); + $this->assertEquals(array('Default', 'Strict'), $constraint->constraints[1]->groups); + } + + public function testExplicitNestedGroupsMustBeSubsetOfExplicitParentGroups() + { + $constraint = new ConcreteComposite(array( + 'constraints' => array( + new NotNull(array('groups' => 'Default')), + new NotBlank(array('groups' => 'Strict')), + ), + 'groups' => array('Default', 'Strict'), + )); + + $this->assertEquals(array('Default', 'Strict'), $constraint->groups); + $this->assertEquals(array('Default'), $constraint->constraints[0]->groups); + $this->assertEquals(array('Strict'), $constraint->constraints[1]->groups); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testFailIfExplicitNestedGroupsNotSubsetOfExplicitParentGroups() + { + new ConcreteComposite(array( + 'constraints' => array( + new NotNull(array('groups' => array('Default', 'Foobar'))), + ), + 'groups' => array('Default', 'Strict'), + )); + } + + public function testImplicitGroupNamesAreForwarded() + { + $constraint = new ConcreteComposite(array( + new NotNull(array('groups' => 'Default')), + new NotBlank(array('groups' => 'Strict')), + )); + + $constraint->addImplicitGroupName('ImplicitGroup'); + + $this->assertEquals(array('Default', 'Strict', 'ImplicitGroup'), $constraint->groups); + $this->assertEquals(array('Default', 'ImplicitGroup'), $constraint->constraints[0]->groups); + $this->assertEquals(array('Strict'), $constraint->constraints[1]->groups); + } + + public function testSingleConstraintsAccepted() + { + $nestedConstraint = new NotNull(); + $constraint = new ConcreteComposite($nestedConstraint); + + $this->assertEquals(array($nestedConstraint), $constraint->constraints); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testFailIfNoConstraint() + { + new ConcreteComposite(array( + new NotNull(array('groups' => 'Default')), + 'NotBlank', + )); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testValidCantBeNested() + { + new ConcreteComposite(array( + new Valid(), + )); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorArrayTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorArrayTest.php new file mode 100644 index 0000000..5f562e7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorArrayTest.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class CountValidatorArrayTest extends CountValidatorTest +{ + protected function createCollection(array $content) + { + return $content; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorCountableTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorCountableTest.php new file mode 100644 index 0000000..7d46967 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorCountableTest.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Tests\Fixtures\Countable; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class CountValidatorCountableTest extends CountValidatorTest +{ + protected function createCollection(array $content) + { + return new Countable($content); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorTest.php new file mode 100644 index 0000000..6713166 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorTest.php @@ -0,0 +1,203 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Count; +use Symfony\Component\Validator\Constraints\CountValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +abstract class CountValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new CountValidator(); + } + + abstract protected function createCollection(array $content); + + public function testNullIsValid() + { + $this->validator->validate(null, new Count(6)); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsCountableType() + { + $this->validator->validate(new \stdClass(), new Count(5)); + } + + public function getThreeOrLessElements() + { + return array( + array($this->createCollection(array(1))), + array($this->createCollection(array(1, 2))), + array($this->createCollection(array(1, 2, 3))), + array($this->createCollection(array('a' => 1, 'b' => 2, 'c' => 3))), + ); + } + + public function getFourElements() + { + return array( + array($this->createCollection(array(1, 2, 3, 4))), + array($this->createCollection(array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4))), + ); + } + + public function getFiveOrMoreElements() + { + return array( + array($this->createCollection(array(1, 2, 3, 4, 5))), + array($this->createCollection(array(1, 2, 3, 4, 5, 6))), + array($this->createCollection(array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5))), + ); + } + + /** + * @dataProvider getThreeOrLessElements + */ + public function testValidValuesMax($value) + { + $constraint = new Count(array('max' => 3)); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getFiveOrMoreElements + */ + public function testValidValuesMin($value) + { + $constraint = new Count(array('min' => 5)); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getFourElements + */ + public function testValidValuesExact($value) + { + $constraint = new Count(4); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getFiveOrMoreElements + */ + public function testTooManyValues($value) + { + $constraint = new Count(array( + 'max' => 4, + 'maxMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ count }}', count($value)) + ->setParameter('{{ limit }}', 4) + ->setInvalidValue($value) + ->setPlural(4) + ->setCode(Count::TOO_MANY_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getThreeOrLessElements + */ + public function testTooFewValues($value) + { + $constraint = new Count(array( + 'min' => 4, + 'minMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ count }}', count($value)) + ->setParameter('{{ limit }}', 4) + ->setInvalidValue($value) + ->setPlural(4) + ->setCode(Count::TOO_FEW_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getFiveOrMoreElements + */ + public function testTooManyValuesExact($value) + { + $constraint = new Count(array( + 'min' => 4, + 'max' => 4, + 'exactMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ count }}', count($value)) + ->setParameter('{{ limit }}', 4) + ->setInvalidValue($value) + ->setPlural(4) + ->setCode(Count::TOO_MANY_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getThreeOrLessElements + */ + public function testTooFewValuesExact($value) + { + $constraint = new Count(array( + 'min' => 4, + 'max' => 4, + 'exactMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ count }}', count($value)) + ->setParameter('{{ limit }}', 4) + ->setInvalidValue($value) + ->setPlural(4) + ->setCode(Count::TOO_FEW_ERROR) + ->assertRaised(); + } + + public function testDefaultOption() + { + $constraint = new Count(5); + + $this->assertEquals(5, $constraint->min); + $this->assertEquals(5, $constraint->max); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountryValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountryValidatorTest.php new file mode 100644 index 0000000..b133511 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountryValidatorTest.php @@ -0,0 +1,116 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Intl\Util\IntlTestHelper; +use Symfony\Component\Validator\Constraints\Country; +use Symfony\Component\Validator\Constraints\CountryValidator; +use Symfony\Component\Validator\Validation; + +class CountryValidatorTest extends AbstractConstraintValidatorTest +{ + protected function setUp() + { + IntlTestHelper::requireFullIntl($this); + + parent::setUp(); + } + + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new CountryValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Country()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Country()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Country()); + } + + /** + * @dataProvider getValidCountries + */ + public function testValidCountries($country) + { + $this->validator->validate($country, new Country()); + + $this->assertNoViolation(); + } + + public function getValidCountries() + { + return array( + array('GB'), + array('AT'), + array('MY'), + ); + } + + /** + * @dataProvider getInvalidCountries + */ + public function testInvalidCountries($country) + { + $constraint = new Country(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($country, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$country.'"') + ->assertRaised(); + } + + public function getInvalidCountries() + { + return array( + array('foobar'), + array('EN'), + ); + } + + public function testValidateUsingCountrySpecificLocale() + { + // in order to test with "en_GB" + IntlTestHelper::requireFullIntl($this); + + \Locale::setDefault('en_GB'); + + $existingCountry = 'GB'; + + $this->validator->validate($existingCountry, new Country()); + + $this->assertNoViolation(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CurrencyValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CurrencyValidatorTest.php new file mode 100644 index 0000000..e5bb060 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CurrencyValidatorTest.php @@ -0,0 +1,116 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Intl\Util\IntlTestHelper; +use Symfony\Component\Validator\Constraints\Currency; +use Symfony\Component\Validator\Constraints\CurrencyValidator; +use Symfony\Component\Validator\Validation; + +class CurrencyValidatorTest extends AbstractConstraintValidatorTest +{ + protected function setUp() + { + IntlTestHelper::requireFullIntl($this); + + parent::setUp(); + } + + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new CurrencyValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Currency()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Currency()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Currency()); + } + + /** + * @dataProvider getValidCurrencies + */ + public function testValidCurrencies($currency) + { + $this->validator->validate($currency, new Currency()); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getValidCurrencies + **/ + public function testValidCurrenciesWithCountrySpecificLocale($currency) + { + \Locale::setDefault('en_GB'); + + $this->validator->validate($currency, new Currency()); + + $this->assertNoViolation(); + } + + public function getValidCurrencies() + { + return array( + array('EUR'), + array('USD'), + array('SIT'), + array('AUD'), + array('CAD'), + ); + } + + /** + * @dataProvider getInvalidCurrencies + */ + public function testInvalidCurrencies($currency) + { + $constraint = new Currency(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($currency, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$currency.'"') + ->assertRaised(); + } + + public function getInvalidCurrencies() + { + return array( + array('EN'), + array('foobar'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateTimeValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateTimeValidatorTest.php new file mode 100644 index 0000000..25d88aa --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateTimeValidatorTest.php @@ -0,0 +1,110 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\DateTime; +use Symfony\Component\Validator\Constraints\DateTimeValidator; +use Symfony\Component\Validator\Validation; + +class DateTimeValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new DateTimeValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new DateTime()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new DateTime()); + + $this->assertNoViolation(); + } + + public function testDateTimeClassIsValid() + { + $this->validator->validate(new \DateTime(), new DateTime()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new DateTime()); + } + + /** + * @dataProvider getValidDateTimes + */ + public function testValidDateTimes($dateTime) + { + $this->validator->validate($dateTime, new DateTime()); + + $this->assertNoViolation(); + } + + public function getValidDateTimes() + { + return array( + array('2010-01-01 01:02:03'), + array('1955-12-12 00:00:00'), + array('2030-05-31 23:59:59'), + ); + } + + /** + * @dataProvider getInvalidDateTimes + */ + public function testInvalidDateTimes($dateTime, $code) + { + $constraint = new DateTime(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($dateTime, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$dateTime.'"') + ->setCode($code) + ->assertRaised(); + } + + public function getInvalidDateTimes() + { + return array( + array('foobar', DateTime::INVALID_FORMAT_ERROR), + array('2010-01-01', DateTime::INVALID_FORMAT_ERROR), + array('00:00:00', DateTime::INVALID_FORMAT_ERROR), + array('2010-01-01 00:00', DateTime::INVALID_FORMAT_ERROR), + array('2010-13-01 00:00:00', DateTime::INVALID_DATE_ERROR), + array('2010-04-32 00:00:00', DateTime::INVALID_DATE_ERROR), + array('2010-02-29 00:00:00', DateTime::INVALID_DATE_ERROR), + array('2010-01-01 24:00:00', DateTime::INVALID_TIME_ERROR), + array('2010-01-01 00:60:00', DateTime::INVALID_TIME_ERROR), + array('2010-01-01 00:00:60', DateTime::INVALID_TIME_ERROR), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateValidatorTest.php new file mode 100644 index 0000000..21f0a2d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateValidatorTest.php @@ -0,0 +1,106 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Date; +use Symfony\Component\Validator\Constraints\DateValidator; +use Symfony\Component\Validator\Validation; + +class DateValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new DateValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Date()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Date()); + + $this->assertNoViolation(); + } + + public function testDateTimeClassIsValid() + { + $this->validator->validate(new \DateTime(), new Date()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Date()); + } + + /** + * @dataProvider getValidDates + */ + public function testValidDates($date) + { + $this->validator->validate($date, new Date()); + + $this->assertNoViolation(); + } + + public function getValidDates() + { + return array( + array('2010-01-01'), + array('1955-12-12'), + array('2030-05-31'), + ); + } + + /** + * @dataProvider getInvalidDates + */ + public function testInvalidDates($date, $code) + { + $constraint = new Date(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($date, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$date.'"') + ->setCode($code) + ->assertRaised(); + } + + public function getInvalidDates() + { + return array( + array('foobar', Date::INVALID_FORMAT_ERROR), + array('foobar 2010-13-01', Date::INVALID_FORMAT_ERROR), + array('2010-13-01 foobar', Date::INVALID_FORMAT_ERROR), + array('2010-13-01', Date::INVALID_DATE_ERROR), + array('2010-04-32', Date::INVALID_DATE_ERROR), + array('2010-02-29', Date::INVALID_DATE_ERROR), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php new file mode 100644 index 0000000..0361333 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php @@ -0,0 +1,105 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Email; +use Symfony\Component\Validator\Constraints\EmailValidator; +use Symfony\Component\Validator\Validation; + +class EmailValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new EmailValidator(false); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Email()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Email()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Email()); + } + + /** + * @dataProvider getValidEmails + */ + public function testValidEmails($email) + { + $this->validator->validate($email, new Email()); + + $this->assertNoViolation(); + } + + public function getValidEmails() + { + return array( + array('fabien@symfony.com'), + array('example@example.co.uk'), + array('fabien_potencier@example.fr'), + ); + } + + /** + * @dataProvider getInvalidEmails + */ + public function testInvalidEmails($email) + { + $constraint = new Email(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($email, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$email.'"') + ->setCode(Email::INVALID_FORMAT_ERROR) + ->assertRaised(); + } + + public function getInvalidEmails() + { + return array( + array('example'), + array('example@'), + array('example@localhost'), + ); + } + + public function testStrict() + { + $constraint = new Email(array('strict' => true)); + + $this->validator->validate('example@localhost', $constraint); + + $this->assertNoViolation(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php new file mode 100644 index 0000000..c20db15 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php @@ -0,0 +1,69 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\EqualTo; +use Symfony\Component\Validator\Constraints\EqualToValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class EqualToValidatorTest extends AbstractComparisonValidatorTestCase +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new EqualToValidator(); + } + + protected function createConstraint(array $options) + { + return new EqualTo($options); + } + + /** + * {@inheritdoc} + */ + public function provideValidComparisons() + { + return array( + array(3, 3), + array(3, '3'), + array('a', 'a'), + array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')), + array(new \DateTime('2000-01-01'), '2000-01-01'), + array(new \DateTime('2000-01-01 UTC'), '2000-01-01 UTC'), + array(new ComparisonTest_Class(5), new ComparisonTest_Class(5)), + array(null, 1), + ); + } + + /** + * {@inheritdoc} + */ + public function provideInvalidComparisons() + { + return array( + array(1, '1', 2, '2', 'integer'), + array('22', '"22"', '333', '"333"', 'string'), + array(new \DateTime('2001-01-01'), 'Jan 1, 2001, 12:00 AM', new \DateTime('2000-01-01'), 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2001-01-01'), 'Jan 1, 2001, 12:00 AM', '2000-01-01', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2001-01-01 UTC'), 'Jan 1, 2001, 12:00 AM', '2000-01-01 UTC', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new ComparisonTest_Class(4), '4', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php new file mode 100644 index 0000000..3d4ef75 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php @@ -0,0 +1,214 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\PropertyAccess\PropertyAccess; +use Symfony\Component\Validator\Constraints\Expression; +use Symfony\Component\Validator\Constraints\ExpressionValidator; +use Symfony\Component\Validator\Tests\Fixtures\Entity; +use Symfony\Component\Validator\Validation; + +class ExpressionValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new ExpressionValidator(PropertyAccess::createPropertyAccessor()); + } + + public function testExpressionIsEvaluatedWithNullValue() + { + $constraint = new Expression(array( + 'expression' => 'false', + 'message' => 'myMessage', + )); + + $this->validator->validate(null, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', 'null') + ->assertRaised(); + } + + public function testExpressionIsEvaluatedWithEmptyStringValue() + { + $constraint = new Expression(array( + 'expression' => 'false', + 'message' => 'myMessage', + )); + + $this->validator->validate('', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '""') + ->assertRaised(); + } + + public function testSucceedingExpressionAtObjectLevel() + { + $constraint = new Expression('this.data == 1'); + + $object = new Entity(); + $object->data = '1'; + + $this->setObject($object); + + $this->validator->validate($object, $constraint); + + $this->assertNoViolation(); + } + + public function testFailingExpressionAtObjectLevel() + { + $constraint = new Expression(array( + 'expression' => 'this.data == 1', + 'message' => 'myMessage', + )); + + $object = new Entity(); + $object->data = '2'; + + $this->setObject($object); + + $this->validator->validate($object, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', 'object') + ->assertRaised(); + } + + public function testSucceedingExpressionAtPropertyLevel() + { + $constraint = new Expression('value == this.data'); + + $object = new Entity(); + $object->data = '1'; + + $this->setRoot($object); + $this->setPropertyPath('data'); + $this->setProperty($object, 'data'); + + $this->validator->validate('1', $constraint); + + $this->assertNoViolation(); + } + + public function testFailingExpressionAtPropertyLevel() + { + $constraint = new Expression(array( + 'expression' => 'value == this.data', + 'message' => 'myMessage', + )); + + $object = new Entity(); + $object->data = '1'; + + $this->setRoot($object); + $this->setPropertyPath('data'); + $this->setProperty($object, 'data'); + + $this->validator->validate('2', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"2"') + ->atPath('data') + ->assertRaised(); + } + + public function testSucceedingExpressionAtNestedPropertyLevel() + { + $constraint = new Expression('value == this.data'); + + $object = new Entity(); + $object->data = '1'; + + $root = new Entity(); + $root->reference = $object; + + $this->setRoot($root); + $this->setPropertyPath('reference.data'); + $this->setProperty($object, 'data'); + + $this->validator->validate('1', $constraint); + + $this->assertNoViolation(); + } + + public function testFailingExpressionAtNestedPropertyLevel() + { + $constraint = new Expression(array( + 'expression' => 'value == this.data', + 'message' => 'myMessage', + )); + + $object = new Entity(); + $object->data = '1'; + + $root = new Entity(); + $root->reference = $object; + + $this->setRoot($root); + $this->setPropertyPath('reference.data'); + $this->setProperty($object, 'data'); + + $this->validator->validate('2', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"2"') + ->atPath('reference.data') + ->assertRaised(); + } + + /** + * When validatePropertyValue() is called with a class name + * https://github.com/symfony/symfony/pull/11498 + */ + public function testSucceedingExpressionAtPropertyLevelWithoutRoot() + { + $constraint = new Expression('value == "1"'); + + $this->setRoot('1'); + $this->setPropertyPath(''); + $this->setProperty(null, 'property'); + + $this->validator->validate('1', $constraint); + + $this->assertNoViolation(); + } + + /** + * When validatePropertyValue() is called with a class name + * https://github.com/symfony/symfony/pull/11498 + */ + public function testFailingExpressionAtPropertyLevelWithoutRoot() + { + $constraint = new Expression(array( + 'expression' => 'value == "1"', + 'message' => 'myMessage', + )); + + $this->setRoot('2'); + $this->setPropertyPath(''); + $this->setProperty(null, 'property'); + + $this->validator->validate('2', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"2"') + ->atPath('') + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FalseValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FalseValidatorTest.php new file mode 100644 index 0000000..479888e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FalseValidatorTest.php @@ -0,0 +1,56 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\False; +use Symfony\Component\Validator\Constraints\FalseValidator; +use Symfony\Component\Validator\Validation; + +class FalseValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new FalseValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new False()); + + $this->assertNoViolation(); + } + + public function testFalseIsValid() + { + $this->validator->validate(false, new False()); + + $this->assertNoViolation(); + } + + public function testTrueIsInvalid() + { + $constraint = new False(array( + 'message' => 'myMessage', + )); + + $this->validator->validate(true, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', 'true') + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileTest.php new file mode 100644 index 0000000..2ee4681 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileTest.php @@ -0,0 +1,107 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\File; + +class FileTest extends \PHPUnit_Framework_TestCase +{ + /** + * @param mixed $maxSize + * @param int bytes + * @param bool $bytes + * @dataProvider provideValidSizes + */ + public function testMaxSize($maxSize, $bytes, $binaryFormat) + { + $file = new File(array('maxSize' => $maxSize)); + + $this->assertSame($bytes, $file->maxSize); + $this->assertSame($binaryFormat, $file->binaryFormat); + } + + /** + * @param mixed $maxSize + * @param int $bytes + * @dataProvider provideInValidSizes + * @expectedException Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testInvalideMaxSize($maxSize) + { + $file = new File(array('maxSize' => $maxSize)); + } + + /** + * @return array + */ + public function provideValidSizes() + { + return array( + array('500', 500, false), + array(12300, 12300, false), + array('1ki', 1024, true), + array('1KI', 1024, true), + array('2k', 2000, false), + array('2K', 2000, false), + array('1mi', 1048576, true), + array('1MI', 1048576, true), + array('3m', 3000000, false), + array('3M', 3000000, false), + ); + } + + /** + * @return array + */ + public function provideInvalidSizes() + { + return array( + array('+100'), + array('foo'), + array('1Ko'), + array('1kio'), + array('1G'), + array('1Gi'), + ); + } + + /** + * @param mixed $maxSize + * @param bool $guessedFormat + * @param bool $binaryFormat + * @dataProvider provideFormats + */ + public function testBinaryFormat($maxSize, $guessedFormat, $binaryFormat) + { + $file = new File(array('maxSize' => $maxSize, 'binaryFormat' => $guessedFormat)); + + $this->assertSame($binaryFormat, $file->binaryFormat); + } + + /** + * @return array + */ + public function provideFormats() + { + return array( + array(100, null, false), + array(100, true, true), + array(100, false, false), + array('100K', null, false), + array('100K', true, true), + array('100K', false, false), + array('100Ki', null, true), + array('100Ki', true, true), + array('100Ki', false, false), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorObjectTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorObjectTest.php new file mode 100644 index 0000000..f35f93b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorObjectTest.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\HttpFoundation\File\File; + +class FileValidatorObjectTest extends FileValidatorTest +{ + protected function getFile($filename) + { + return new File($filename); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorPathTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorPathTest.php new file mode 100644 index 0000000..11b8d4c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorPathTest.php @@ -0,0 +1,36 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\File; + +class FileValidatorPathTest extends FileValidatorTest +{ + protected function getFile($filename) + { + return $filename; + } + + public function testFileNotFound() + { + $constraint = new File(array( + 'notFoundMessage' => 'myMessage', + )); + + $this->validator->validate('foobar', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ file }}', '"foobar"') + ->setCode(File::NOT_FOUND_ERROR) + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorTest.php new file mode 100644 index 0000000..176b49f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorTest.php @@ -0,0 +1,477 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\HttpFoundation\File\UploadedFile; +use Symfony\Component\Validator\Constraints\File; +use Symfony\Component\Validator\Constraints\FileValidator; +use Symfony\Component\Validator\Validation; + +abstract class FileValidatorTest extends AbstractConstraintValidatorTest +{ + protected $path; + + protected $file; + + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new FileValidator(); + } + + protected function setUp() + { + parent::setUp(); + + $this->path = sys_get_temp_dir().DIRECTORY_SEPARATOR.'FileValidatorTest'; + $this->file = fopen($this->path, 'w'); + fwrite($this->file, ' ', 1); + } + + protected function tearDown() + { + parent::tearDown(); + + if (is_resource($this->file)) { + fclose($this->file); + } + + if (file_exists($this->path)) { + unlink($this->path); + } + + $this->path = null; + $this->file = null; + } + + public function testNullIsValid() + { + $this->validator->validate(null, new File()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new File()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleTypeOrFile() + { + $this->validator->validate(new \stdClass(), new File()); + } + + public function testValidFile() + { + $this->validator->validate($this->path, new File()); + + $this->assertNoViolation(); + } + + public function testValidUploadedfile() + { + $file = new UploadedFile($this->path, 'originalName', null, null, null, true); + $this->validator->validate($file, new File()); + + $this->assertNoViolation(); + } + + public function provideMaxSizeExceededTests() + { + // We have various interesting limit - size combinations to test. + // Assume a limit of 1000 bytes (1 kB). Then the following table + // lists the violation messages for different file sizes: + // -----------+-------------------------------------------------------- + // Size | Violation Message + // -----------+-------------------------------------------------------- + // 1000 bytes | No violation + // 1001 bytes | "Size of 1001 bytes exceeded limit of 1000 bytes" + // 1004 bytes | "Size of 1004 bytes exceeded limit of 1000 bytes" + // | NOT: "Size of 1 kB exceeded limit of 1 kB" + // 1005 bytes | "Size of 1.01 kB exceeded limit of 1 kB" + // -----------+-------------------------------------------------------- + + // As you see, we have two interesting borders: + + // 1000/1001 - The border as of which a violation occurs + // 1004/1005 - The border as of which the message can be rounded to kB + + // Analogous for kB/MB. + + // Prior to Symfony 2.5, violation messages are always displayed in the + // same unit used to specify the limit. + + // As of Symfony 2.5, the above logic is implemented. + return array( + // limit in bytes + array(1001, 1000, '1001', '1000', 'bytes'), + array(1004, 1000, '1004', '1000', 'bytes'), + array(1005, 1000, '1.01', '1', 'kB'), + + array(1000001, 1000000, '1000001', '1000000', 'bytes'), + array(1004999, 1000000, '1005', '1000', 'kB'), + array(1005000, 1000000, '1.01', '1', 'MB'), + + // limit in kB + array(1001, '1k', '1001', '1000', 'bytes'), + array(1004, '1k', '1004', '1000', 'bytes'), + array(1005, '1k', '1.01', '1', 'kB'), + + array(1000001, '1000k', '1000001', '1000000', 'bytes'), + array(1004999, '1000k', '1005', '1000', 'kB'), + array(1005000, '1000k', '1.01', '1', 'MB'), + + // limit in MB + array(1000001, '1M', '1000001', '1000000', 'bytes'), + array(1004999, '1M', '1005', '1000', 'kB'), + array(1005000, '1M', '1.01', '1', 'MB'), + + // limit in KiB + array(1025, '1Ki', '1025', '1024', 'bytes'), + array(1029, '1Ki', '1029', '1024', 'bytes'), + array(1030, '1Ki', '1.01', '1', 'KiB'), + + array(1048577, '1024Ki', '1048577', '1048576', 'bytes'), + array(1053818, '1024Ki', '1029.12', '1024', 'KiB'), + array(1053819, '1024Ki', '1.01', '1', 'MiB'), + + // limit in MiB + array(1048577, '1Mi', '1048577', '1048576', 'bytes'), + array(1053818, '1Mi', '1029.12', '1024', 'KiB'), + array(1053819, '1Mi', '1.01', '1', 'MiB'), + ); + } + + /** + * @dataProvider provideMaxSizeExceededTests + */ + public function testMaxSizeExceeded($bytesWritten, $limit, $sizeAsString, $limitAsString, $suffix) + { + fseek($this->file, $bytesWritten - 1, SEEK_SET); + fwrite($this->file, '0'); + fclose($this->file); + + $constraint = new File(array( + 'maxSize' => $limit, + 'maxSizeMessage' => 'myMessage', + )); + + $this->validator->validate($this->getFile($this->path), $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ limit }}', $limitAsString) + ->setParameter('{{ size }}', $sizeAsString) + ->setParameter('{{ suffix }}', $suffix) + ->setParameter('{{ file }}', '"'.$this->path.'"') + ->setCode(File::TOO_LARGE_ERROR) + ->assertRaised(); + } + + public function provideMaxSizeNotExceededTests() + { + return array( + // limit in bytes + array(1000, 1000), + array(1000000, 1000000), + + // limit in kB + array(1000, '1k'), + array(1000000, '1000k'), + + // limit in MB + array(1000000, '1M'), + + // limit in KiB + array(1024, '1Ki'), + array(1048576, '1024Ki'), + + // limit in MiB + array(1048576, '1Mi'), + ); + } + + /** + * @dataProvider provideMaxSizeNotExceededTests + */ + public function testMaxSizeNotExceeded($bytesWritten, $limit) + { + fseek($this->file, $bytesWritten - 1, SEEK_SET); + fwrite($this->file, '0'); + fclose($this->file); + + $constraint = new File(array( + 'maxSize' => $limit, + 'maxSizeMessage' => 'myMessage', + )); + + $this->validator->validate($this->getFile($this->path), $constraint); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testInvalidMaxSize() + { + $constraint = new File(array( + 'maxSize' => '1abc', + )); + + $this->validator->validate($this->path, $constraint); + } + + public function provideBinaryFormatTests() + { + return array( + array(11, 10, null, '11', '10', 'bytes'), + array(11, 10, true, '11', '10', 'bytes'), + array(11, 10, false, '11', '10', 'bytes'), + + // round(size) == 1.01kB, limit == 1kB + array(ceil(1000*1.01), 1000, null, '1.01', '1', 'kB'), + array(ceil(1000*1.01), '1k', null, '1.01', '1', 'kB'), + array(ceil(1024*1.01), '1Ki', null, '1.01', '1', 'KiB'), + + array(ceil(1024*1.01), 1024, true, '1.01', '1', 'KiB'), + array(ceil(1024*1.01*1000), '1024k', true, '1010', '1000', 'KiB'), + array(ceil(1024*1.01), '1Ki', true, '1.01', '1', 'KiB'), + + array(ceil(1000*1.01), 1000, false, '1.01', '1', 'kB'), + array(ceil(1000*1.01), '1k', false, '1.01', '1', 'kB'), + array(ceil(1024*1.01*10), '10Ki', false, '10.34', '10.24', 'kB'), + ); + } + + /** + * @dataProvider provideBinaryFormatTests + */ + public function testBinaryFormat($bytesWritten, $limit, $binaryFormat, $sizeAsString, $limitAsString, $suffix) + { + fseek($this->file, $bytesWritten-1, SEEK_SET); + fwrite($this->file, '0'); + fclose($this->file); + + $constraint = new File(array( + 'maxSize' => $limit, + 'binaryFormat' => $binaryFormat, + 'maxSizeMessage' => 'myMessage', + )); + + $this->validator->validate($this->getFile($this->path), $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ limit }}', $limitAsString) + ->setParameter('{{ size }}', $sizeAsString) + ->setParameter('{{ suffix }}', $suffix) + ->setParameter('{{ file }}', '"'.$this->path.'"') + ->setCode(File::TOO_LARGE_ERROR) + ->assertRaised(); + } + + public function testValidMimeType() + { + $file = $this + ->getMockBuilder('Symfony\Component\HttpFoundation\File\File') + ->setConstructorArgs(array(__DIR__.'/Fixtures/foo')) + ->getMock(); + $file + ->expects($this->once()) + ->method('getPathname') + ->will($this->returnValue($this->path)); + $file + ->expects($this->once()) + ->method('getMimeType') + ->will($this->returnValue('image/jpg')); + + $constraint = new File(array( + 'mimeTypes' => array('image/png', 'image/jpg'), + )); + + $this->validator->validate($file, $constraint); + + $this->assertNoViolation(); + } + + public function testValidWildcardMimeType() + { + $file = $this + ->getMockBuilder('Symfony\Component\HttpFoundation\File\File') + ->setConstructorArgs(array(__DIR__.'/Fixtures/foo')) + ->getMock(); + $file + ->expects($this->once()) + ->method('getPathname') + ->will($this->returnValue($this->path)); + $file + ->expects($this->once()) + ->method('getMimeType') + ->will($this->returnValue('image/jpg')); + + $constraint = new File(array( + 'mimeTypes' => array('image/*'), + )); + + $this->validator->validate($file, $constraint); + + $this->assertNoViolation(); + } + + public function testInvalidMimeType() + { + $file = $this + ->getMockBuilder('Symfony\Component\HttpFoundation\File\File') + ->setConstructorArgs(array(__DIR__.'/Fixtures/foo')) + ->getMock(); + $file + ->expects($this->once()) + ->method('getPathname') + ->will($this->returnValue($this->path)); + $file + ->expects($this->once()) + ->method('getMimeType') + ->will($this->returnValue('application/pdf')); + + $constraint = new File(array( + 'mimeTypes' => array('image/png', 'image/jpg'), + 'mimeTypesMessage' => 'myMessage', + )); + + $this->validator->validate($file, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ type }}', '"application/pdf"') + ->setParameter('{{ types }}', '"image/png", "image/jpg"') + ->setParameter('{{ file }}', '"'.$this->path.'"') + ->setCode(File::INVALID_MIME_TYPE_ERROR) + ->assertRaised(); + } + + public function testInvalidWildcardMimeType() + { + $file = $this + ->getMockBuilder('Symfony\Component\HttpFoundation\File\File') + ->setConstructorArgs(array(__DIR__.'/Fixtures/foo')) + ->getMock(); + $file + ->expects($this->once()) + ->method('getPathname') + ->will($this->returnValue($this->path)); + $file + ->expects($this->once()) + ->method('getMimeType') + ->will($this->returnValue('application/pdf')); + + $constraint = new File(array( + 'mimeTypes' => array('image/*', 'image/jpg'), + 'mimeTypesMessage' => 'myMessage', + )); + + $this->validator->validate($file, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ type }}', '"application/pdf"') + ->setParameter('{{ types }}', '"image/*", "image/jpg"') + ->setParameter('{{ file }}', '"'.$this->path.'"') + ->setCode(File::INVALID_MIME_TYPE_ERROR) + ->assertRaised(); + } + + public function testDisallowEmpty() + { + ftruncate($this->file, 0); + + $constraint = new File(array( + 'disallowEmptyMessage' => 'myMessage', + )); + + $this->validator->validate($this->getFile($this->path), $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ file }}', '"'.$this->path.'"') + ->setCode(File::EMPTY_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider uploadedFileErrorProvider + */ + public function testUploadedFileError($error, $message, array $params = array(), $maxSize = null) + { + $file = new UploadedFile('/path/to/file', 'originalName', 'mime', 0, $error); + + $constraint = new File(array( + $message => 'myMessage', + 'maxSize' => $maxSize, + )); + + $this->validator->validate($file, $constraint); + + $this->buildViolation('myMessage') + ->setParameters($params) + ->setCode($error) + ->assertRaised(); + } + + public function uploadedFileErrorProvider() + { + $tests = array( + array(UPLOAD_ERR_FORM_SIZE, 'uploadFormSizeErrorMessage'), + array(UPLOAD_ERR_PARTIAL, 'uploadPartialErrorMessage'), + array(UPLOAD_ERR_NO_FILE, 'uploadNoFileErrorMessage'), + array(UPLOAD_ERR_NO_TMP_DIR, 'uploadNoTmpDirErrorMessage'), + array(UPLOAD_ERR_CANT_WRITE, 'uploadCantWriteErrorMessage'), + array(UPLOAD_ERR_EXTENSION, 'uploadExtensionErrorMessage'), + ); + + if (class_exists('Symfony\Component\HttpFoundation\File\UploadedFile')) { + // when no maxSize is specified on constraint, it should use the ini value + $tests[] = array(UPLOAD_ERR_INI_SIZE, 'uploadIniSizeErrorMessage', array( + '{{ limit }}' => UploadedFile::getMaxFilesize() / 1048576, + '{{ suffix }}' => 'MiB', + )); + + // it should use the smaller limitation (maxSize option in this case) + $tests[] = array(UPLOAD_ERR_INI_SIZE, 'uploadIniSizeErrorMessage', array( + '{{ limit }}' => 1, + '{{ suffix }}' => 'bytes', + ), '1'); + + // it correctly parses the maxSize option and not only uses simple string comparison + // 1000M should be bigger than the ini value + $tests[] = array(UPLOAD_ERR_INI_SIZE, 'uploadIniSizeErrorMessage', array( + '{{ limit }}' => UploadedFile::getMaxFilesize() / 1048576, + '{{ suffix }}' => 'MiB', + ), '1000M'); + + // it correctly parses the maxSize option and not only uses simple string comparison + // 1000M should be bigger than the ini value + $tests[] = array(UPLOAD_ERR_INI_SIZE, 'uploadIniSizeErrorMessage', array( + '{{ limit }}' => '0.1', + '{{ suffix }}' => 'MB', + ), '100K'); + } + + return $tests; + } + + abstract protected function getFile($filename); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/foo b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/foo new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/foo diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test.gif b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test.gif Binary files differnew file mode 100644 index 0000000..6b44fc7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test.gif diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_4by3.gif b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_4by3.gif Binary files differnew file mode 100644 index 0000000..64dd3ff --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_4by3.gif diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_landscape.gif b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_landscape.gif Binary files differnew file mode 100644 index 0000000..8701235 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_landscape.gif diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_portrait.gif b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_portrait.gif Binary files differnew file mode 100644 index 0000000..cc480ca --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_portrait.gif diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php new file mode 100644 index 0000000..41708f6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php @@ -0,0 +1,71 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\GreaterThanOrEqual; +use Symfony\Component\Validator\Constraints\GreaterThanOrEqualValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class GreaterThanOrEqualValidatorTest extends AbstractComparisonValidatorTestCase +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new GreaterThanOrEqualValidator(); + } + + protected function createConstraint(array $options) + { + return new GreaterThanOrEqual($options); + } + + /** + * {@inheritdoc} + */ + public function provideValidComparisons() + { + return array( + array(3, 2), + array(1, 1), + array(new \DateTime('2010/01/01'), new \DateTime('2000/01/01')), + array(new \DateTime('2000/01/01'), new \DateTime('2000/01/01')), + array(new \DateTime('2010/01/01'), '2000/01/01'), + array(new \DateTime('2000/01/01'), '2000/01/01'), + array(new \DateTime('2010/01/01 UTC'), '2000/01/01 UTC'), + array(new \DateTime('2000/01/01 UTC'), '2000/01/01 UTC'), + array('a', 'a'), + array('z', 'a'), + array(null, 1), + ); + } + + /** + * {@inheritdoc} + */ + public function provideInvalidComparisons() + { + return array( + array(1, '1', 2, '2', 'integer'), + array(new \DateTime('2000/01/01'), 'Jan 1, 2000, 12:00 AM', new \DateTime('2005/01/01'), 'Jan 1, 2005, 12:00 AM', 'DateTime'), + array(new \DateTime('2000/01/01'), 'Jan 1, 2000, 12:00 AM', '2005/01/01', 'Jan 1, 2005, 12:00 AM', 'DateTime'), + array(new \DateTime('2000/01/01 UTC'), 'Jan 1, 2000, 12:00 AM', '2005/01/01 UTC', 'Jan 1, 2005, 12:00 AM', 'DateTime'), + array('b', '"b"', 'c', '"c"', 'string'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php new file mode 100644 index 0000000..85a2b1d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php @@ -0,0 +1,74 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\GreaterThan; +use Symfony\Component\Validator\Constraints\GreaterThanValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class GreaterThanValidatorTest extends AbstractComparisonValidatorTestCase +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new GreaterThanValidator(); + } + + protected function createConstraint(array $options) + { + return new GreaterThan($options); + } + + /** + * {@inheritdoc} + */ + public function provideValidComparisons() + { + return array( + array(2, 1), + array(new \DateTime('2005/01/01'), new \DateTime('2001/01/01')), + array(new \DateTime('2005/01/01'), '2001/01/01'), + array(new \DateTime('2005/01/01 UTC'), '2001/01/01 UTC'), + array(new ComparisonTest_Class(5), new ComparisonTest_Class(4)), + array('333', '22'), + array(null, 1), + ); + } + + /** + * {@inheritdoc} + */ + public function provideInvalidComparisons() + { + return array( + array(1, '1', 2, '2', 'integer'), + array(2, '2', 2, '2', 'integer'), + array(new \DateTime('2000/01/01'), 'Jan 1, 2000, 12:00 AM', new \DateTime('2005/01/01'), 'Jan 1, 2005, 12:00 AM', 'DateTime'), + array(new \DateTime('2000/01/01'), 'Jan 1, 2000, 12:00 AM', new \DateTime('2000/01/01'), 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2000/01/01'), 'Jan 1, 2000, 12:00 AM', '2005/01/01', 'Jan 1, 2005, 12:00 AM', 'DateTime'), + array(new \DateTime('2000/01/01'), 'Jan 1, 2000, 12:00 AM', '2000/01/01', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2000/01/01 UTC'), 'Jan 1, 2000, 12:00 AM', '2005/01/01 UTC', 'Jan 1, 2005, 12:00 AM', 'DateTime'), + array(new \DateTime('2000/01/01 UTC'), 'Jan 1, 2000, 12:00 AM', '2000/01/01 UTC', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new ComparisonTest_Class(4), '4', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'), + array(new ComparisonTest_Class(5), '5', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'), + array('22', '"22"', '333', '"333"', 'string'), + array('22', '"22"', '22', '"22"', 'string'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GroupSequenceTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GroupSequenceTest.php new file mode 100644 index 0000000..85b60b5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GroupSequenceTest.php @@ -0,0 +1,84 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\GroupSequence; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class GroupSequenceTest extends \PHPUnit_Framework_TestCase +{ + public function testCreate() + { + $sequence = new GroupSequence(array('Group 1', 'Group 2')); + + $this->assertSame(array('Group 1', 'Group 2'), $sequence->groups); + } + + public function testCreateDoctrineStyle() + { + $sequence = new GroupSequence(array('value' => array('Group 1', 'Group 2'))); + + $this->assertSame(array('Group 1', 'Group 2'), $sequence->groups); + } + + public function testIterate() + { + $sequence = new GroupSequence(array('Group 1', 'Group 2')); + + $this->assertSame(array('Group 1', 'Group 2'), iterator_to_array($sequence)); + } + + public function testCount() + { + $sequence = new GroupSequence(array('Group 1', 'Group 2')); + + $this->assertCount(2, $sequence); + } + + public function testArrayAccess() + { + $sequence = new GroupSequence(array('Group 1', 'Group 2')); + + $this->assertSame('Group 1', $sequence[0]); + $this->assertSame('Group 2', $sequence[1]); + $this->assertTrue(isset($sequence[0])); + $this->assertFalse(isset($sequence[2])); + unset($sequence[0]); + $this->assertFalse(isset($sequence[0])); + $sequence[] = 'Group 3'; + $this->assertTrue(isset($sequence[2])); + $this->assertSame('Group 3', $sequence[2]); + $sequence[0] = 'Group 1'; + $this->assertTrue(isset($sequence[0])); + $this->assertSame('Group 1', $sequence[0]); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\OutOfBoundsException + */ + public function testGetExpectsExistingKey() + { + $sequence = new GroupSequence(array('Group 1', 'Group 2')); + + $sequence[2]; + } + + public function testUnsetIgnoresNonExistingKeys() + { + $sequence = new GroupSequence(array('Group 1', 'Group 2')); + + // should not fail + unset($sequence[2]); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php new file mode 100644 index 0000000..ab9839a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php @@ -0,0 +1,193 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Iban; +use Symfony\Component\Validator\Constraints\IbanValidator; +use Symfony\Component\Validator\Validation; + +class IbanValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new IbanValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Iban()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Iban()); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getValidIbans + */ + public function testValidIbans($iban) + { + $this->validator->validate($iban, new Iban()); + + $this->assertNoViolation(); + } + + public function getValidIbans() + { + return array( + array('CH9300762011623852957'), // Switzerland without spaces + array('CH93 0076 2011 6238 5295 7'), // Switzerland with multiple spaces + + //Country list + //http://www.rbs.co.uk/corporate/international/g0/guide-to-international-business/regulatory-information/iban/iban-example.ashx + + array('AL47 2121 1009 0000 0002 3569 8741'), //Albania + array('AD12 0001 2030 2003 5910 0100'), //Andorra + array('AT61 1904 3002 3457 3201'), //Austria + array('AZ21 NABZ 0000 0000 1370 1000 1944'), //Azerbaijan + array('BH67 BMAG 0000 1299 1234 56'), //Bahrain + array('BE62 5100 0754 7061'), //Belgium + array('BA39 1290 0794 0102 8494'), //Bosnia and Herzegovina + array('BG80 BNBG 9661 1020 3456 78'), //Bulgaria + array('HR12 1001 0051 8630 0016 0'), //Croatia + array('CY17 0020 0128 0000 0012 0052 7600'), //Cyprus + array('CZ65 0800 0000 1920 0014 5399'), //Czech Republic + array('DK50 0040 0440 1162 43'), //Denmark + array('EE38 2200 2210 2014 5685'), //Estonia + array('FO97 5432 0388 8999 44'), //Faroe Islands + array('FI21 1234 5600 0007 85'), //Finland + array('FR14 2004 1010 0505 0001 3M02 606'), //France + array('GE29 NB00 0000 0101 9049 17'), //Georgia + array('DE89 3704 0044 0532 0130 00'), //Germany + array('GI75 NWBK 0000 0000 7099 453'), //Gibraltar + array('GR16 0110 1250 0000 0001 2300 695'), //Greece + array('GL56 0444 9876 5432 10'), //Greenland + array('HU42 1177 3016 1111 1018 0000 0000'), //Hungary + array('IS14 0159 2600 7654 5510 7303 39'), //Iceland + array('IE29 AIBK 9311 5212 3456 78'), //Ireland + array('IL62 0108 0000 0009 9999 999'), //Israel + array('IT40 S054 2811 1010 0000 0123 456'), //Italy + array('LV80 BANK 0000 4351 9500 1'), //Latvia + array('LB62 0999 0000 0001 0019 0122 9114'), //Lebanon + array('LI21 0881 0000 2324 013A A'), //Liechtenstein + array('LT12 1000 0111 0100 1000'), //Lithuania + array('LU28 0019 4006 4475 0000'), //Luxembourg + array('MK072 5012 0000 0589 84'), //Macedonia + array('MT84 MALT 0110 0001 2345 MTLC AST0 01S'), //Malta + array('MU17 BOMM 0101 1010 3030 0200 000M UR'), //Mauritius + array('MD24 AG00 0225 1000 1310 4168'), //Moldova + array('MC93 2005 2222 1001 1223 3M44 555'), //Monaco + array('ME25 5050 0001 2345 6789 51'), //Montenegro + array('NL39 RABO 0300 0652 64'), //Netherlands + array('NO93 8601 1117 947'), //Norway + array('PK36 SCBL 0000 0011 2345 6702'), //Pakistan + array('PL60 1020 1026 0000 0422 7020 1111'), //Poland + array('PT50 0002 0123 1234 5678 9015 4'), //Portugal + array('RO49 AAAA 1B31 0075 9384 0000'), //Romania + array('SM86 U032 2509 8000 0000 0270 100'), //San Marino + array('SA03 8000 0000 6080 1016 7519'), //Saudi Arabia + array('RS35 2600 0560 1001 6113 79'), //Serbia + array('SK31 1200 0000 1987 4263 7541'), //Slovak Republic + array('SI56 1910 0000 0123 438'), //Slovenia + array('ES80 2310 0001 1800 0001 2345'), //Spain + array('SE35 5000 0000 0549 1000 0003'), //Sweden + array('CH93 0076 2011 6238 5295 7'), //Switzerland + array('TN59 1000 6035 1835 9847 8831'), //Tunisia + array('TR33 0006 1005 1978 6457 8413 26'), //Turkey + array('AE07 0331 2345 6789 0123 456'), //UAE + array('GB 12 CPBK 0892 9965 0449 91'), //United Kingdom + + //Extended country list + //http://www.nordea.com/Our+services/International+products+and+services/Cash+Management/IBAN+countries/908462.html + array('AO06000600000100037131174'), //Angola + array('AZ21NABZ00000000137010001944'), //Azerbaijan + array('BH29BMAG1299123456BH00'), //Bahrain + array('BJ11B00610100400271101192591'), //Benin + array('VG96VPVG0000012345678901'), //British Virgin Islands + array('BF1030134020015400945000643'), //Burkina Faso + array('BI43201011067444'), //Burundi + array('CM2110003001000500000605306'), //Cameroon + array('CV64000300004547069110176'), //Cape Verde + array('FR7630007000110009970004942'), //Central African Republic + array('CG5230011000202151234567890'), //Congo + array('CR0515202001026284066'), //Costa Rica + array('DO28BAGR00000001212453611324'), //Dominican Republic + array('GT82TRAJ01020000001210029690'), //Guatemala + array('IR580540105180021273113007'), //Iran + array('IL620108000000099999999'), //Israel + array('CI05A00060174100178530011852'), //Ivory Coast + array('KZ176010251000042993'), //Kazakhstan + array('KW74NBOK0000000000001000372151'), //Kuwait + array('LB30099900000001001925579115'), //Lebanon + array('MG4600005030010101914016056'), //Madagascar + array('ML03D00890170001002120000447'), //Mali + array('MR1300012000010000002037372'), //Mauritania + array('MU17BOMM0101101030300200000MUR'), //Mauritius + array('MZ59000100000011834194157'), //Mozambique + array('PS92PALS000000000400123456702'), //Palestinian Territory + array('PT50000200000163099310355'), //Sao Tome and Principe + array('SA0380000000608010167519'), //Saudi Arabia + array('SN12K00100152000025690007542'), //Senegal + array('TN5914207207100707129648'), //Tunisia + array('TR330006100519786457841326'), //Turkey + array('AE260211000000230064016'), //United Arab Emirates + ); + } + + /** + * @dataProvider getInvalidIbans + */ + public function testInvalidIbans($iban, $code) + { + $constraint = new Iban(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($iban, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$iban.'"') + ->setCode($code) + ->assertRaised(); + } + + public function getInvalidIbans() + { + return array( + array('CH93 0076 2011 6238 5295', Iban::CHECKSUM_FAILED_ERROR), + array('CH930076201162385295', Iban::CHECKSUM_FAILED_ERROR), + array('GB29 RBOS 6016 1331 9268 19', Iban::CHECKSUM_FAILED_ERROR), + array('CH930072011623852957', Iban::CHECKSUM_FAILED_ERROR), + array('NL39 RASO 0300 0652 64', Iban::CHECKSUM_FAILED_ERROR), + array('NO93 8601117 947', Iban::CHECKSUM_FAILED_ERROR), + array('CY170020 128 0000 0012 0052 7600', Iban::CHECKSUM_FAILED_ERROR), + array('foo', Iban::TOO_SHORT_ERROR), + array('123', Iban::TOO_SHORT_ERROR), + array('0750447346', Iban::INVALID_COUNTRY_CODE_ERROR), + array('CH930076201162385295]', Iban::INVALID_CHARACTERS_ERROR), + + //Ibans with lower case values are invalid + array('Ae260211000000230064016', Iban::INVALID_CASE_ERROR), + array('ae260211000000230064016', Iban::INVALID_CASE_ERROR), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php new file mode 100644 index 0000000..4b71062 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php @@ -0,0 +1,89 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\IdenticalTo; +use Symfony\Component\Validator\Constraints\IdenticalToValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class IdenticalToValidatorTest extends AbstractComparisonValidatorTestCase +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new IdenticalToValidator(); + } + + protected function createConstraint(array $options) + { + return new IdenticalTo($options); + } + + public function provideAllValidComparisons() + { + $this->setDefaultTimezone('UTC'); + + // Don't call addPhp5Dot5Comparisons() automatically, as it does + // not take care of identical objects + $comparisons = $this->provideValidComparisons(); + + $this->restoreDefaultTimezone(); + + return $comparisons; + } + + /** + * {@inheritdoc} + */ + public function provideValidComparisons() + { + $date = new \DateTime('2000-01-01'); + $object = new ComparisonTest_Class(2); + + $comparisons = array( + array(3, 3), + array('a', 'a'), + array($date, $date), + array($object, $object), + array(null, 1), + ); + + if (version_compare(PHP_VERSION, '>=', '5.5')) { + $immutableDate = new \DateTimeImmutable('2000-01-01'); + $comparisons[] = array($immutableDate, $immutableDate); + } + + return $comparisons; + } + + /** + * {@inheritdoc} + */ + public function provideInvalidComparisons() + { + return array( + array(1, '1', 2, '2', 'integer'), + array(2, '2', '2', '"2"', 'string'), + array('22', '"22"', '333', '"333"', 'string'), + array(new \DateTime('2001-01-01'), 'Jan 1, 2001, 12:00 AM', new \DateTime('2001-01-01'), 'Jan 1, 2001, 12:00 AM', 'DateTime'), + array(new \DateTime('2001-01-01'), 'Jan 1, 2001, 12:00 AM', new \DateTime('1999-01-01'), 'Jan 1, 1999, 12:00 AM', 'DateTime'), + array(new ComparisonTest_Class(4), '4', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php new file mode 100644 index 0000000..18f9c1b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php @@ -0,0 +1,329 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Image; +use Symfony\Component\Validator\Constraints\ImageValidator; +use Symfony\Component\Validator\Validation; + +class ImageValidatorTest extends AbstractConstraintValidatorTest +{ + protected $context; + + /** + * @var ImageValidator + */ + protected $validator; + + protected $path; + protected $image; + protected $imageLandscape; + protected $imagePortrait; + protected $image4By3; + + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new ImageValidator(); + } + + protected function setUp() + { + parent::setUp(); + + $this->image = __DIR__.'/Fixtures/test.gif'; + $this->imageLandscape = __DIR__.'/Fixtures/test_landscape.gif'; + $this->imagePortrait = __DIR__.'/Fixtures/test_portrait.gif'; + $this->image4By3 = __DIR__.'/Fixtures/test_4by3.gif'; + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Image()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Image()); + + $this->assertNoViolation(); + } + + public function testValidImage() + { + $this->validator->validate($this->image, new Image()); + + $this->assertNoViolation(); + } + + public function testFileNotFound() + { + // Check that the logic from FileValidator still works + $constraint = new Image(array( + 'notFoundMessage' => 'myMessage', + )); + + $this->validator->validate('foobar', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ file }}', '"foobar"') + ->setCode(Image::NOT_FOUND_ERROR) + ->assertRaised(); + } + + public function testValidSize() + { + $constraint = new Image(array( + 'minWidth' => 1, + 'maxWidth' => 2, + 'minHeight' => 1, + 'maxHeight' => 2, + )); + + $this->validator->validate($this->image, $constraint); + + $this->assertNoViolation(); + } + + public function testWidthTooSmall() + { + $constraint = new Image(array( + 'minWidth' => 3, + 'minWidthMessage' => 'myMessage', + )); + + $this->validator->validate($this->image, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ width }}', '2') + ->setParameter('{{ min_width }}', '3') + ->setCode(Image::TOO_NARROW_ERROR) + ->assertRaised(); + } + + public function testWidthTooBig() + { + $constraint = new Image(array( + 'maxWidth' => 1, + 'maxWidthMessage' => 'myMessage', + )); + + $this->validator->validate($this->image, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ width }}', '2') + ->setParameter('{{ max_width }}', '1') + ->setCode(Image::TOO_WIDE_ERROR) + ->assertRaised(); + } + + public function testHeightTooSmall() + { + $constraint = new Image(array( + 'minHeight' => 3, + 'minHeightMessage' => 'myMessage', + )); + + $this->validator->validate($this->image, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ height }}', '2') + ->setParameter('{{ min_height }}', '3') + ->setCode(Image::TOO_LOW_ERROR) + ->assertRaised(); + } + + public function testHeightTooBig() + { + $constraint = new Image(array( + 'maxHeight' => 1, + 'maxHeightMessage' => 'myMessage', + )); + + $this->validator->validate($this->image, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ height }}', '2') + ->setParameter('{{ max_height }}', '1') + ->setCode(Image::TOO_HIGH_ERROR) + ->assertRaised(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testInvalidMinWidth() + { + $constraint = new Image(array( + 'minWidth' => '1abc', + )); + + $this->validator->validate($this->image, $constraint); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testInvalidMaxWidth() + { + $constraint = new Image(array( + 'maxWidth' => '1abc', + )); + + $this->validator->validate($this->image, $constraint); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testInvalidMinHeight() + { + $constraint = new Image(array( + 'minHeight' => '1abc', + )); + + $this->validator->validate($this->image, $constraint); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testInvalidMaxHeight() + { + $constraint = new Image(array( + 'maxHeight' => '1abc', + )); + + $this->validator->validate($this->image, $constraint); + } + + public function testRatioTooSmall() + { + $constraint = new Image(array( + 'minRatio' => 2, + 'minRatioMessage' => 'myMessage', + )); + + $this->validator->validate($this->image, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ ratio }}', 1) + ->setParameter('{{ min_ratio }}', 2) + ->setCode(Image::RATIO_TOO_SMALL_ERROR) + ->assertRaised(); + } + + public function testRatioTooBig() + { + $constraint = new Image(array( + 'maxRatio' => 0.5, + 'maxRatioMessage' => 'myMessage', + )); + + $this->validator->validate($this->image, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ ratio }}', 1) + ->setParameter('{{ max_ratio }}', 0.5) + ->setCode(Image::RATIO_TOO_BIG_ERROR) + ->assertRaised(); + } + + public function testMaxRatioUsesTwoDecimalsOnly() + { + $constraint = new Image(array( + 'maxRatio' => 1.33, + )); + + $this->validator->validate($this->image4By3, $constraint); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testInvalidMinRatio() + { + $constraint = new Image(array( + 'minRatio' => '1abc', + )); + + $this->validator->validate($this->image, $constraint); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testInvalidMaxRatio() + { + $constraint = new Image(array( + 'maxRatio' => '1abc', + )); + + $this->validator->validate($this->image, $constraint); + } + + public function testSquareNotAllowed() + { + $constraint = new Image(array( + 'allowSquare' => false, + 'allowSquareMessage' => 'myMessage', + )); + + $this->validator->validate($this->image, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ width }}', 2) + ->setParameter('{{ height }}', 2) + ->setCode(Image::SQUARE_NOT_ALLOWED_ERROR) + ->assertRaised(); + } + + public function testLandscapeNotAllowed() + { + $constraint = new Image(array( + 'allowLandscape' => false, + 'allowLandscapeMessage' => 'myMessage', + )); + + $this->validator->validate($this->imageLandscape, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ width }}', 2) + ->setParameter('{{ height }}', 1) + ->setCode(Image::LANDSCAPE_NOT_ALLOWED_ERROR) + ->assertRaised(); + } + + public function testPortraitNotAllowed() + { + $constraint = new Image(array( + 'allowPortrait' => false, + 'allowPortraitMessage' => 'myMessage', + )); + + $this->validator->validate($this->imagePortrait, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ width }}', 1) + ->setParameter('{{ height }}', 2) + ->setCode(Image::PORTRAIT_NOT_ALLOWED_ERROR) + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IpValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IpValidatorTest.php new file mode 100644 index 0000000..fc40e61 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IpValidatorTest.php @@ -0,0 +1,444 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Ip; +use Symfony\Component\Validator\Constraints\IpValidator; +use Symfony\Component\Validator\Validation; + +class IpValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new IpValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Ip()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Ip()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Ip()); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testInvalidValidatorVersion() + { + new Ip(array( + 'version' => 666, + )); + } + + /** + * @dataProvider getValidIpsV4 + */ + public function testValidIpsV4($ip) + { + $this->validator->validate($ip, new Ip(array( + 'version' => Ip::V4, + ))); + + $this->assertNoViolation(); + } + + public function getValidIpsV4() + { + return array( + array('0.0.0.0'), + array('10.0.0.0'), + array('123.45.67.178'), + array('172.16.0.0'), + array('192.168.1.0'), + array('224.0.0.1'), + array('255.255.255.255'), + array('127.0.0.0'), + ); + } + + /** + * @dataProvider getValidIpsV6 + */ + public function testValidIpsV6($ip) + { + $this->validator->validate($ip, new Ip(array( + 'version' => Ip::V6, + ))); + + $this->assertNoViolation(); + } + + public function getValidIpsV6() + { + return array( + array('2001:0db8:85a3:0000:0000:8a2e:0370:7334'), + array('2001:0DB8:85A3:0000:0000:8A2E:0370:7334'), + array('2001:0Db8:85a3:0000:0000:8A2e:0370:7334'), + array('fdfe:dcba:9876:ffff:fdc6:c46b:bb8f:7d4c'), + array('fdc6:c46b:bb8f:7d4c:fdc6:c46b:bb8f:7d4c'), + array('fdc6:c46b:bb8f:7d4c:0000:8a2e:0370:7334'), + array('fe80:0000:0000:0000:0202:b3ff:fe1e:8329'), + array('fe80:0:0:0:202:b3ff:fe1e:8329'), + array('fe80::202:b3ff:fe1e:8329'), + array('0:0:0:0:0:0:0:0'), + array('::'), + array('0::'), + array('::0'), + array('0::0'), + // IPv4 mapped to IPv6 + array('2001:0db8:85a3:0000:0000:8a2e:0.0.0.0'), + array('::0.0.0.0'), + array('::255.255.255.255'), + array('::123.45.67.178'), + ); + } + + /** + * @dataProvider getValidIpsAll + */ + public function testValidIpsAll($ip) + { + $this->validator->validate($ip, new Ip(array( + 'version' => Ip::ALL, + ))); + + $this->assertNoViolation(); + } + + public function getValidIpsAll() + { + return array_merge($this->getValidIpsV4(), $this->getValidIpsV6()); + } + + /** + * @dataProvider getInvalidIpsV4 + */ + public function testInvalidIpsV4($ip) + { + $constraint = new Ip(array( + 'version' => Ip::V4, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidIpsV4() + { + return array( + array('0'), + array('0.0'), + array('0.0.0'), + array('256.0.0.0'), + array('0.256.0.0'), + array('0.0.256.0'), + array('0.0.0.256'), + array('-1.0.0.0'), + array('foobar'), + ); + } + + /** + * @dataProvider getInvalidPrivateIpsV4 + */ + public function testInvalidPrivateIpsV4($ip) + { + $constraint = new Ip(array( + 'version' => Ip::V4_NO_PRIV, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidPrivateIpsV4() + { + return array( + array('10.0.0.0'), + array('172.16.0.0'), + array('192.168.1.0'), + ); + } + + /** + * @dataProvider getInvalidReservedIpsV4 + */ + public function testInvalidReservedIpsV4($ip) + { + $constraint = new Ip(array( + 'version' => Ip::V4_NO_RES, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidReservedIpsV4() + { + return array( + array('0.0.0.0'), + array('224.0.0.1'), + array('255.255.255.255'), + ); + } + + /** + * @dataProvider getInvalidPublicIpsV4 + */ + public function testInvalidPublicIpsV4($ip) + { + $constraint = new Ip(array( + 'version' => Ip::V4_ONLY_PUBLIC, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidPublicIpsV4() + { + return array_merge($this->getInvalidPrivateIpsV4(), $this->getInvalidReservedIpsV4()); + } + + /** + * @dataProvider getInvalidIpsV6 + */ + public function testInvalidIpsV6($ip) + { + $constraint = new Ip(array( + 'version' => Ip::V6, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidIpsV6() + { + return array( + array('z001:0db8:85a3:0000:0000:8a2e:0370:7334'), + array('fe80'), + array('fe80:8329'), + array('fe80:::202:b3ff:fe1e:8329'), + array('fe80::202:b3ff::fe1e:8329'), + // IPv4 mapped to IPv6 + array('2001:0db8:85a3:0000:0000:8a2e:0370:0.0.0.0'), + array('::0.0'), + array('::0.0.0'), + array('::256.0.0.0'), + array('::0.256.0.0'), + array('::0.0.256.0'), + array('::0.0.0.256'), + ); + } + + /** + * @dataProvider getInvalidPrivateIpsV6 + */ + public function testInvalidPrivateIpsV6($ip) + { + $constraint = new Ip(array( + 'version' => Ip::V6_NO_PRIV, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidPrivateIpsV6() + { + return array( + array('fdfe:dcba:9876:ffff:fdc6:c46b:bb8f:7d4c'), + array('fdc6:c46b:bb8f:7d4c:fdc6:c46b:bb8f:7d4c'), + array('fdc6:c46b:bb8f:7d4c:0000:8a2e:0370:7334'), + ); + } + + /** + * @dataProvider getInvalidReservedIpsV6 + */ + public function testInvalidReservedIpsV6($ip) + { + $constraint = new Ip(array( + 'version' => Ip::V6_NO_RES, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidReservedIpsV6() + { + // Quoting after official filter documentation: + // "FILTER_FLAG_NO_RES_RANGE = This flag does not apply to IPv6 addresses." + // Full description: http://php.net/manual/en/filter.filters.flags.php + return $this->getInvalidIpsV6(); + } + + /** + * @dataProvider getInvalidPublicIpsV6 + */ + public function testInvalidPublicIpsV6($ip) + { + $constraint = new Ip(array( + 'version' => Ip::V6_ONLY_PUBLIC, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidPublicIpsV6() + { + return array_merge($this->getInvalidPrivateIpsV6(), $this->getInvalidReservedIpsV6()); + } + + /** + * @dataProvider getInvalidIpsAll + */ + public function testInvalidIpsAll($ip) + { + $constraint = new Ip(array( + 'version' => Ip::ALL, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidIpsAll() + { + return array_merge($this->getInvalidIpsV4(), $this->getInvalidIpsV6()); + } + + /** + * @dataProvider getInvalidPrivateIpsAll + */ + public function testInvalidPrivateIpsAll($ip) + { + $constraint = new Ip(array( + 'version' => Ip::ALL_NO_PRIV, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidPrivateIpsAll() + { + return array_merge($this->getInvalidPrivateIpsV4(), $this->getInvalidPrivateIpsV6()); + } + + /** + * @dataProvider getInvalidReservedIpsAll + */ + public function testInvalidReservedIpsAll($ip) + { + $constraint = new Ip(array( + 'version' => Ip::ALL_NO_RES, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidReservedIpsAll() + { + return array_merge($this->getInvalidReservedIpsV4(), $this->getInvalidReservedIpsV6()); + } + + /** + * @dataProvider getInvalidPublicIpsAll + */ + public function testInvalidPublicIpsAll($ip) + { + $constraint = new Ip(array( + 'version' => Ip::ALL_ONLY_PUBLIC, + 'message' => 'myMessage', + )); + + $this->validator->validate($ip, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$ip.'"') + ->assertRaised(); + } + + public function getInvalidPublicIpsAll() + { + return array_merge($this->getInvalidPublicIpsV4(), $this->getInvalidPublicIpsV6()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php new file mode 100644 index 0000000..e73b89d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php @@ -0,0 +1,271 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Isbn; +use Symfony\Component\Validator\Constraints\IsbnValidator; +use Symfony\Component\Validator\Validation; + +/** + * @see https://en.wikipedia.org/wiki/Isbn + */ +class IsbnValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new IsbnValidator(); + } + + public function getValidIsbn10() + { + return array( + array('2723442284'), + array('2723442276'), + array('2723455041'), + array('2070546810'), + array('2711858839'), + array('2756406767'), + array('2870971648'), + array('226623854X'), + array('2851806424'), + array('0321812700'), + array('0-45122-5244'), + array('0-4712-92311'), + array('0-9752298-0-X'), + ); + } + + public function getInvalidIsbn10() + { + return array( + array('27234422841', Isbn::TOO_LONG_ERROR), + array('272344228', Isbn::TOO_SHORT_ERROR), + array('0-4712-9231', Isbn::TOO_SHORT_ERROR), + array('1234567890', Isbn::CHECKSUM_FAILED_ERROR), + array('0987656789', Isbn::CHECKSUM_FAILED_ERROR), + array('7-35622-5444', Isbn::CHECKSUM_FAILED_ERROR), + array('0-4X19-92611', Isbn::CHECKSUM_FAILED_ERROR), + array('0_45122_5244', Isbn::INVALID_CHARACTERS_ERROR), + array('2870#971#648', Isbn::INVALID_CHARACTERS_ERROR), + array('0-9752298-0-x', Isbn::INVALID_CHARACTERS_ERROR), + array('1A34567890', Isbn::INVALID_CHARACTERS_ERROR), + // chr(1) evaluates to 0 + // 2070546810 is valid + array('2'.chr(1).'70546810', Isbn::INVALID_CHARACTERS_ERROR), + ); + } + + public function getValidIsbn13() + { + return array( + array('978-2723442282'), + array('978-2723442275'), + array('978-2723455046'), + array('978-2070546817'), + array('978-2711858835'), + array('978-2756406763'), + array('978-2870971642'), + array('978-2266238540'), + array('978-2851806420'), + array('978-0321812704'), + array('978-0451225245'), + array('978-0471292319'), + ); + } + + public function getInvalidIsbn13() + { + return array( + array('978-27234422821', Isbn::TOO_LONG_ERROR), + array('978-272344228', Isbn::TOO_SHORT_ERROR), + array('978-2723442-82', Isbn::TOO_SHORT_ERROR), + array('978-2723442281', Isbn::CHECKSUM_FAILED_ERROR), + array('978-0321513774', Isbn::CHECKSUM_FAILED_ERROR), + array('979-0431225385', Isbn::CHECKSUM_FAILED_ERROR), + array('980-0474292319', Isbn::CHECKSUM_FAILED_ERROR), + array('0-4X19-92619812', Isbn::INVALID_CHARACTERS_ERROR), + array('978_2723442282', Isbn::INVALID_CHARACTERS_ERROR), + array('978#2723442282', Isbn::INVALID_CHARACTERS_ERROR), + array('978-272C442282', Isbn::INVALID_CHARACTERS_ERROR), + // chr(1) evaluates to 0 + // 978-2070546817 is valid + array('978-2'.chr(1).'70546817', Isbn::INVALID_CHARACTERS_ERROR), + ); + } + + public function getValidIsbn() + { + return array_merge( + $this->getValidIsbn10(), + $this->getValidIsbn13() + ); + } + + public function getInvalidIsbn() + { + return array_merge( + $this->getInvalidIsbn10(), + $this->getInvalidIsbn13() + ); + } + + public function testNullIsValid() + { + $constraint = new Isbn(true); + + $this->validator->validate(null, $constraint); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $constraint = new Isbn(true); + + $this->validator->validate('', $constraint); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $constraint = new Isbn(true); + + $this->validator->validate(new \stdClass(), $constraint); + } + + /** + * @dataProvider getValidIsbn10 + */ + public function testValidIsbn10($isbn) + { + $constraint = new Isbn(array( + 'type' => 'isbn10', + )); + + $this->validator->validate($isbn, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getInvalidIsbn10 + */ + public function testInvalidIsbn10($isbn, $code) + { + $constraint = new Isbn(array( + 'type' => 'isbn10', + 'isbn10Message' => 'myMessage', + )); + + $this->validator->validate($isbn, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$isbn.'"') + ->setCode($code) + ->assertRaised(); + } + + /** + * @dataProvider getValidIsbn13 + */ + public function testValidIsbn13($isbn) + { + $constraint = new Isbn(array('type' => 'isbn13')); + + $this->validator->validate($isbn, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getInvalidIsbn13 + */ + public function testInvalidIsbn13($isbn, $code) + { + $constraint = new Isbn(array( + 'type' => 'isbn13', + 'isbn13Message' => 'myMessage', + )); + + $this->validator->validate($isbn, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$isbn.'"') + ->setCode($code) + ->assertRaised(); + } + + /** + * @dataProvider getValidIsbn + */ + public function testValidIsbnAny($isbn) + { + $constraint = new Isbn(); + + $this->validator->validate($isbn, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getInvalidIsbn10 + */ + public function testInvalidIsbnAnyIsbn10($isbn, $code) + { + $constraint = new Isbn(array( + 'bothIsbnMessage' => 'myMessage', + )); + + $this->validator->validate($isbn, $constraint); + + // Too long for an ISBN-10, but not long enough for an ISBN-13 + if (Isbn::TOO_LONG_ERROR === $code) { + $code = Isbn::TYPE_NOT_RECOGNIZED_ERROR; + } + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$isbn.'"') + ->setCode($code) + ->assertRaised(); + } + + /** + * @dataProvider getInvalidIsbn13 + */ + public function testInvalidIsbnAnyIsbn13($isbn, $code) + { + $constraint = new Isbn(array( + 'bothIsbnMessage' => 'myMessage', + )); + + $this->validator->validate($isbn, $constraint); + + // Too short for an ISBN-13, but not short enough for an ISBN-10 + if (Isbn::TOO_SHORT_ERROR === $code) { + $code = Isbn::TYPE_NOT_RECOGNIZED_ERROR; + } + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$isbn.'"') + ->setCode($code) + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IssnValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IssnValidatorTest.php new file mode 100644 index 0000000..a6d3994 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IssnValidatorTest.php @@ -0,0 +1,187 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Issn; +use Symfony\Component\Validator\Constraints\IssnValidator; +use Symfony\Component\Validator\Validation; + +/** + * @see https://en.wikipedia.org/wiki/Issn + */ +class IssnValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new IssnValidator(); + } + + public function getValidLowerCasedIssn() + { + return array( + array('2162-321x'), + array('2160-200x'), + array('1537-453x'), + array('1937-710x'), + array('0002-922x'), + array('1553-345x'), + array('1553-619x'), + ); + } + + public function getValidNonHyphenatedIssn() + { + return array( + array('2162321X'), + array('01896016'), + array('15744647'), + array('14350645'), + array('07174055'), + array('20905076'), + array('14401592'), + ); + } + + public function getFullValidIssn() + { + return array( + array('1550-7416'), + array('1539-8560'), + array('2156-5376'), + array('1119-023X'), + array('1684-5315'), + array('1996-0786'), + array('1684-5374'), + array('1996-0794'), + ); + } + + public function getValidIssn() + { + return array_merge( + $this->getValidLowerCasedIssn(), + $this->getValidNonHyphenatedIssn(), + $this->getFullValidIssn() + ); + } + + public function getInvalidIssn() + { + return array( + array(0, Issn::TOO_SHORT_ERROR), + array('1539', Issn::TOO_SHORT_ERROR), + array('2156-537A', Issn::INVALID_CHARACTERS_ERROR), + array('1119-0231', Issn::CHECKSUM_FAILED_ERROR), + array('1684-5312', Issn::CHECKSUM_FAILED_ERROR), + array('1996-0783', Issn::CHECKSUM_FAILED_ERROR), + array('1684-537X', Issn::CHECKSUM_FAILED_ERROR), + array('1996-0795', Issn::CHECKSUM_FAILED_ERROR), + ); + } + + public function testNullIsValid() + { + $constraint = new Issn(); + + $this->validator->validate(null, $constraint); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $constraint = new Issn(); + + $this->validator->validate('', $constraint); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $constraint = new Issn(); + $this->validator->validate(new \stdClass(), $constraint); + } + + /** + * @dataProvider getValidLowerCasedIssn + */ + public function testCaseSensitiveIssns($issn) + { + $constraint = new Issn(array( + 'caseSensitive' => true, + 'message' => 'myMessage', + )); + + $this->validator->validate($issn, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$issn.'"') + ->setCode(Issn::INVALID_CASE_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getValidNonHyphenatedIssn + */ + public function testRequireHyphenIssns($issn) + { + $constraint = new Issn(array( + 'requireHyphen' => true, + 'message' => 'myMessage', + )); + + $this->validator->validate($issn, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$issn.'"') + ->setCode(Issn::MISSING_HYPHEN_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getValidIssn + */ + public function testValidIssn($issn) + { + $constraint = new Issn(); + + $this->validator->validate($issn, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getInvalidIssn + */ + public function testInvalidIssn($issn, $code) + { + $constraint = new Issn(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($issn, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$issn.'"') + ->setCode($code) + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LanguageValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LanguageValidatorTest.php new file mode 100644 index 0000000..6f7c390 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LanguageValidatorTest.php @@ -0,0 +1,114 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Intl\Util\IntlTestHelper; +use Symfony\Component\Validator\Constraints\Language; +use Symfony\Component\Validator\Constraints\LanguageValidator; +use Symfony\Component\Validator\Validation; + +class LanguageValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new LanguageValidator(); + } + + protected function setUp() + { + IntlTestHelper::requireFullIntl($this); + + parent::setUp(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Language()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Language()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Language()); + } + + /** + * @dataProvider getValidLanguages + */ + public function testValidLanguages($language) + { + $this->validator->validate($language, new Language()); + + $this->assertNoViolation(); + } + + public function getValidLanguages() + { + return array( + array('en'), + array('en_US'), + array('my'), + ); + } + + /** + * @dataProvider getInvalidLanguages + */ + public function testInvalidLanguages($language) + { + $constraint = new Language(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($language, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$language.'"') + ->assertRaised(); + } + + public function getInvalidLanguages() + { + return array( + array('EN'), + array('foobar'), + ); + } + + public function testValidateUsingCountrySpecificLocale() + { + \Locale::setDefault('fr_FR'); + $existingLanguage = 'en'; + + $this->validator->validate($existingLanguage, new Language(array( + 'message' => 'aMessage', + ))); + + $this->assertNoViolation(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php new file mode 100644 index 0000000..d5a41fb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyAllValidator2Dot4ApiTest extends AllValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidatorLegacyApiTest.php new file mode 100644 index 0000000..649bfe1 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyAllValidatorLegacyApiTest extends AllValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php new file mode 100644 index 0000000..0cfb1aa --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyBlankValidator2Dot4ApiTest extends BlankValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidatorLegacyApiTest.php new file mode 100644 index 0000000..00b8a7a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyBlankValidatorLegacyApiTest extends BlankValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php new file mode 100644 index 0000000..efcb5ec --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCallbackValidator2Dot4ApiTest extends CallbackValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidatorLegacyApiTest.php new file mode 100644 index 0000000..8f3ea2b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCallbackValidatorLegacyApiTest extends CallbackValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php new file mode 100644 index 0000000..0f467dd --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCardSchemeValidator2Dot4ApiTest extends CardSchemeValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidatorLegacyApiTest.php new file mode 100644 index 0000000..e4b4184 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCardSchemeValidatorLegacyApiTest extends CardSchemeValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php new file mode 100644 index 0000000..71277f7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyChoiceValidator2Dot4ApiTest extends ChoiceValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidatorLegacyApiTest.php new file mode 100644 index 0000000..9237df5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyChoiceValidatorLegacyApiTest extends ChoiceValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php new file mode 100644 index 0000000..3826914 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @group legacy + */ +class LegacyCollectionValidatorArray2Dot4ApiTest extends CollectionValidatorArrayTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayLegacyApiTest.php new file mode 100644 index 0000000..45ca1df --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayLegacyApiTest.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @group legacy + */ +class LegacyCollectionValidatorArrayLegacyApiTest extends CollectionValidatorArrayTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php new file mode 100644 index 0000000..22dbe46 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @group legacy + */ +class LegacyCollectionValidatorArrayObject2Dot4ApiTest extends CollectionValidatorArrayObjectTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObjectLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObjectLegacyApiTest.php new file mode 100644 index 0000000..f28aed3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObjectLegacyApiTest.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @group legacy + */ +class LegacyCollectionValidatorArrayObjectLegacyApiTest extends CollectionValidatorArrayObjectTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php new file mode 100644 index 0000000..29ce241 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @group legacy + */ +class LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest extends CollectionValidatorCustomArrayObjectTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObjectLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObjectLegacyApiTest.php new file mode 100644 index 0000000..b04053f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObjectLegacyApiTest.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @group legacy + */ +class LegacyCollectionValidatorCustomArrayObjectLegacyApiTest extends CollectionValidatorCustomArrayObjectTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php new file mode 100644 index 0000000..2ab8b19 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCountValidatorArray2Dot4ApiTest extends CountValidatorArrayTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArrayLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArrayLegacyApiTest.php new file mode 100644 index 0000000..d362988 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArrayLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCountValidatorArrayLegacyApiTest extends CountValidatorArrayTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php new file mode 100644 index 0000000..d0239bb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCountValidatorCountable2Dot4ApiTest extends CountValidatorCountableTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountableLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountableLegacyApiTest.php new file mode 100644 index 0000000..33b8795 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountableLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCountValidatorCountableLegacyApiTest extends CountValidatorCountableTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php new file mode 100644 index 0000000..30685d4 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCurrencyValidator2Dot4ApiTest extends CurrencyValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidatorLegacyApiTest.php new file mode 100644 index 0000000..85cd5d0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyCurrencyValidatorLegacyApiTest extends CurrencyValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php new file mode 100644 index 0000000..6c2f6a5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyDateTimeValidator2Dot4ApiTest extends DateTimeValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidatorLegacyApiTest.php new file mode 100644 index 0000000..be19302 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyDateTimeValidatorLegacyApiTest extends DateTimeValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php new file mode 100644 index 0000000..aab7d43 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyDateValidator2Dot4ApiTest extends DateValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidatorLegacyApiTest.php new file mode 100644 index 0000000..3235f42 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyDateValidatorLegacyApiTest extends DateValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php new file mode 100644 index 0000000..12ccb5e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyEmailValidator2Dot4ApiTest extends EmailValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidatorLegacyApiTest.php new file mode 100644 index 0000000..e5f1019 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyEmailValidatorLegacyApiTest extends EmailValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php new file mode 100644 index 0000000..1c7008a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyEqualToValidator2Dot4ApiTest extends EqualToValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidatorLegacyApiTest.php new file mode 100644 index 0000000..3a72cfb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyEqualToValidatorLegacyApiTest extends EqualToValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php new file mode 100644 index 0000000..914e580 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyExpressionValidator2Dot4ApiTest extends ExpressionValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidatorLegacyApiTest.php new file mode 100644 index 0000000..374bba0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyExpressionValidatorLegacyApiTest extends ExpressionValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php new file mode 100644 index 0000000..3d65f4e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyFalseValidator2Dot4ApiTest extends FalseValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidatorLegacyApiTest.php new file mode 100644 index 0000000..5f7cb12 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyFalseValidatorLegacyApiTest extends FalseValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php new file mode 100644 index 0000000..3035e41 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyFileValidatorObject2Dot4ApiTest extends FileValidatorObjectTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObjectLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObjectLegacyApiTest.php new file mode 100644 index 0000000..97d5f59 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObjectLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyFileValidatorObjectLegacyApiTest extends FileValidatorObjectTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php new file mode 100644 index 0000000..a154144 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyFileValidatorPath2Dot4ApiTest extends FileValidatorPathTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPathLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPathLegacyApiTest.php new file mode 100644 index 0000000..2c298df --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPathLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyFileValidatorPathLegacyApiTest extends FileValidatorPathTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php new file mode 100644 index 0000000..5f4a17e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyGreaterThanOrEqualValidator2Dot4ApiTest extends GreaterThanOrEqualValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidatorLegacyApiTest.php new file mode 100644 index 0000000..08822a5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyGreaterThanOrEqualValidatorLegacyApiTest extends GreaterThanOrEqualValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php new file mode 100644 index 0000000..799e5d8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyGreaterThanValidator2Dot4ApiTest extends GreaterThanValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidatorLegacyApiTest.php new file mode 100644 index 0000000..0808e9b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyGreaterThanValidatorLegacyApiTest extends GreaterThanValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php new file mode 100644 index 0000000..6dac309 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIbanValidator2Dot4ApiTest extends IbanValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidatorLegacyApiTest.php new file mode 100644 index 0000000..0ffc4b1 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIbanValidatorLegacyApiTest extends IbanValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php new file mode 100644 index 0000000..99cd986 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIdenticalToValidator2Dot4ApiTest extends IdenticalToValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidatorLegacyApiTest.php new file mode 100644 index 0000000..aade84f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIdenticalToValidatorLegacyApiTest extends IdenticalToValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php new file mode 100644 index 0000000..1fee081 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyImageValidator2Dot4ApiTest extends ImageValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidatorLegacyApiTest.php new file mode 100644 index 0000000..d36c175 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyImageValidatorLegacyApiTest extends ImageValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php new file mode 100644 index 0000000..99933cf --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIpValidator2Dot4ApiTest extends IpValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidatorLegacyApiTest.php new file mode 100644 index 0000000..315f2f9 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIpValidatorLegacyApiTest extends IpValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php new file mode 100644 index 0000000..29455bd --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIsbnValidator2Dot4ApiTest extends IsbnValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidatorLegacyApiTest.php new file mode 100644 index 0000000..1568270 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIsbnValidatorLegacyApiTest extends IsbnValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php new file mode 100644 index 0000000..3713fb0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIssnValidator2Dot4ApiTest extends IssnValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidatorLegacyApiTest.php new file mode 100644 index 0000000..2ff3104 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyIssnValidatorLegacyApiTest extends IssnValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php new file mode 100644 index 0000000..f712075 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLanguageValidator2Dot4ApiTest extends LanguageValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidatorLegacyApiTest.php new file mode 100644 index 0000000..a6471b3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLanguageValidatorLegacyApiTest extends LanguageValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php new file mode 100644 index 0000000..686d376 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLengthValidator2Dot4ApiTest extends LengthValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidatorLegacyApiTest.php new file mode 100644 index 0000000..655f3d6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLengthValidatorLegacyApiTest extends LengthValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php new file mode 100644 index 0000000..f345ec3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLessThanOrEqualValidator2Dot4ApiTest extends LessThanOrEqualValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidatorLegacyApiTest.php new file mode 100644 index 0000000..2e07ab0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLessThanOrEqualValidatorLegacyApiTest extends LessThanOrEqualValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php new file mode 100644 index 0000000..074450d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLessThanValidator2Dot4ApiTest extends LessThanValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidatorLegacyApiTest.php new file mode 100644 index 0000000..27592b0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLessThanValidatorLegacyApiTest extends LessThanValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php new file mode 100644 index 0000000..4d119bb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLocaleValidator2Dot4ApiTest extends LocaleValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidatorLegacyApiTest.php new file mode 100644 index 0000000..f55d422 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLocaleValidatorLegacyApiTest extends LocaleValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php new file mode 100644 index 0000000..8207ca0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLuhnValidator2Dot4ApiTest extends LuhnValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidatorLegacyApiTest.php new file mode 100644 index 0000000..5855526 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyLuhnValidatorLegacyApiTest extends LuhnValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php new file mode 100644 index 0000000..a6d0faa --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNotBlankValidator2Dot4ApiTest extends NotBlankValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidatorLegacyApiTest.php new file mode 100644 index 0000000..0aaaa77 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNotBlankValidatorLegacyApiTest extends NotBlankValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php new file mode 100644 index 0000000..e48450e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNotEqualToValidator2Dot4ApiTest extends NotEqualToValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidatorLegacyApiTest.php new file mode 100644 index 0000000..df88f96 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNotEqualToValidatorLegacyApiTest extends NotEqualToValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php new file mode 100644 index 0000000..2c00cf5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNotIdenticalToValidator2Dot4ApiTest extends NotIdenticalToValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidatorLegacyApiTest.php new file mode 100644 index 0000000..25819a6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNotIdenticalToValidatorLegacyApiTest extends NotIdenticalToValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php new file mode 100644 index 0000000..39b0038 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNotNullValidator2Dot4ApiTest extends NotNullValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidatorLegacyApiTest.php new file mode 100644 index 0000000..41a9e54 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNotNullValidatorLegacyApiTest extends NotNullValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php new file mode 100644 index 0000000..958e446 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNullValidator2Dot4ApiTest extends NullValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidatorLegacyApiTest.php new file mode 100644 index 0000000..79536ce --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyNullValidatorLegacyApiTest extends NullValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php new file mode 100644 index 0000000..fe23ce8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyRangeValidator2Dot4ApiTest extends RangeValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidatorLegacyApiTest.php new file mode 100644 index 0000000..866a59a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyRangeValidatorLegacyApiTest extends RangeValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php new file mode 100644 index 0000000..dbae24e --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyRegexValidator2Dot4ApiTest extends RegexValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidatorLegacyApiTest.php new file mode 100644 index 0000000..ed1a464 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyRegexValidatorLegacyApiTest extends RegexValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php new file mode 100644 index 0000000..d4a0678 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyTimeValidator2Dot4ApiTest extends TimeValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidatorLegacyApiTest.php new file mode 100644 index 0000000..2458d87 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyTimeValidatorLegacyApiTest extends TimeValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php new file mode 100644 index 0000000..3d00252 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyTrueValidator2Dot4ApiTest extends TrueValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidatorLegacyApiTest.php new file mode 100644 index 0000000..706c083 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyTrueValidatorLegacyApiTest extends TrueValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php new file mode 100644 index 0000000..aed1d0a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyTypeValidator2Dot4ApiTest extends TypeValidatorTest +{ + /** + * PhpUnit calls data providers of test suites before launching the test + * suite. If this property is not replicated in every test class, only one + * file will ever be created and stored in TypeValidatorTest::$file. After + * the execution of the first TypeValidator test case, tearDownAfterClass() + * is called and closes the file. Hence the resource is not available + * anymore in the other TypeValidator test cases. + */ + protected static $file; + + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidatorLegacyApiTest.php new file mode 100644 index 0000000..26eb39f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidatorLegacyApiTest.php @@ -0,0 +1,29 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyTypeValidatorLegacyApiTest extends TypeValidatorTest +{ + protected static $file; + + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php new file mode 100644 index 0000000..287d719 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyUrlValidator2Dot4ApiTest extends UrlValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidatorLegacyApiTest.php new file mode 100644 index 0000000..0830ddb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyUrlValidatorLegacyApiTest extends UrlValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php new file mode 100644 index 0000000..b5efc76 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyUuidValidator2Dot4ApiTest extends UrlValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_4; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidatorLegacyApiTest.php new file mode 100644 index 0000000..4a4e362 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidatorLegacyApiTest.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Validation; + +/** + * @since 2.5.3 + * @author Bernhard Schussek <bschussek@gmail.com> + * @group legacy + */ +class LegacyUuidValidatorLegacyApiTest extends UuidValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5_BC; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LengthValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LengthValidatorTest.php new file mode 100644 index 0000000..24b6306 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LengthValidatorTest.php @@ -0,0 +1,255 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Length; +use Symfony\Component\Validator\Constraints\LengthValidator; +use Symfony\Component\Validator\Validation; + +class LengthValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new LengthValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Length(6)); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Length(6)); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Length(5)); + } + + public function getThreeOrLessCharacters() + { + return array( + array(12), + array('12'), + array('üü'), + array('éé'), + array(123), + array('123'), + array('üüü'), + array('ééé'), + ); + } + + public function getFourCharacters() + { + return array( + array(1234), + array('1234'), + array('üüüü'), + array('éééé'), + ); + } + + public function getFiveOrMoreCharacters() + { + return array( + array(12345), + array('12345'), + array('üüüüü'), + array('ééééé'), + array(123456), + array('123456'), + array('üüüüüü'), + array('éééééé'), + ); + } + + public function getOneCharset() + { + if (!function_exists('iconv') && !function_exists('mb_convert_encoding')) { + $this->markTestSkipped('Mbstring or iconv is required for this test.'); + } + + return array( + array('é', 'utf8', true), + array("\xE9", 'CP1252', true), + array("\xE9", 'XXX', false), + array("\xE9", 'utf8', false), + ); + } + + /** + * @dataProvider getFiveOrMoreCharacters + */ + public function testValidValuesMin($value) + { + $constraint = new Length(array('min' => 5)); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getThreeOrLessCharacters + */ + public function testValidValuesMax($value) + { + $constraint = new Length(array('max' => 3)); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getFourCharacters + */ + public function testValidValuesExact($value) + { + $constraint = new Length(4); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getThreeOrLessCharacters + */ + public function testInvalidValuesMin($value) + { + $constraint = new Length(array( + 'min' => 4, + 'minMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$value.'"') + ->setParameter('{{ limit }}', 4) + ->setInvalidValue($value) + ->setPlural(4) + ->setCode(Length::TOO_SHORT_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getFiveOrMoreCharacters + */ + public function testInvalidValuesMax($value) + { + $constraint = new Length(array( + 'max' => 4, + 'maxMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$value.'"') + ->setParameter('{{ limit }}', 4) + ->setInvalidValue($value) + ->setPlural(4) + ->setCode(Length::TOO_LONG_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getThreeOrLessCharacters + */ + public function testInvalidValuesExactLessThanFour($value) + { + $constraint = new Length(array( + 'min' => 4, + 'max' => 4, + 'exactMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$value.'"') + ->setParameter('{{ limit }}', 4) + ->setInvalidValue($value) + ->setPlural(4) + ->setCode(Length::TOO_SHORT_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getFiveOrMoreCharacters + */ + public function testInvalidValuesExactMoreThanFour($value) + { + $constraint = new Length(array( + 'min' => 4, + 'max' => 4, + 'exactMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$value.'"') + ->setParameter('{{ limit }}', 4) + ->setInvalidValue($value) + ->setPlural(4) + ->setCode(Length::TOO_LONG_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getOneCharset + */ + public function testOneCharset($value, $charset, $isValid) + { + $constraint = new Length(array( + 'min' => 1, + 'max' => 1, + 'charset' => $charset, + 'charsetMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + if ($isValid) { + $this->assertNoViolation(); + } else { + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$value.'"') + ->setParameter('{{ charset }}', $charset) + ->setInvalidValue($value) + ->assertRaised(); + } + } + + public function testConstraintGetDefaultOption() + { + $constraint = new Length(5); + + $this->assertEquals(5, $constraint->min); + $this->assertEquals(5, $constraint->max); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php new file mode 100644 index 0000000..7518135 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php @@ -0,0 +1,74 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\LessThanOrEqual; +use Symfony\Component\Validator\Constraints\LessThanOrEqualValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class LessThanOrEqualValidatorTest extends AbstractComparisonValidatorTestCase +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new LessThanOrEqualValidator(); + } + + protected function createConstraint(array $options) + { + return new LessThanOrEqual($options); + } + + /** + * {@inheritdoc} + */ + public function provideValidComparisons() + { + return array( + array(1, 2), + array(1, 1), + array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')), + array(new \DateTime('2000-01-01'), new \DateTime('2020-01-01')), + array(new \DateTime('2000-01-01'), '2000-01-01'), + array(new \DateTime('2000-01-01'), '2020-01-01'), + array(new \DateTime('2000-01-01 UTC'), '2000-01-01 UTC'), + array(new \DateTime('2000-01-01 UTC'), '2020-01-01 UTC'), + array(new ComparisonTest_Class(4), new ComparisonTest_Class(5)), + array(new ComparisonTest_Class(5), new ComparisonTest_Class(5)), + array('a', 'a'), + array('a', 'z'), + array(null, 1), + ); + } + + /** + * {@inheritdoc} + */ + public function provideInvalidComparisons() + { + return array( + array(2, '2', 1, '1', 'integer'), + array(new \DateTime('2010-01-01'), 'Jan 1, 2010, 12:00 AM', new \DateTime('2000-01-01'), 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2010-01-01'), 'Jan 1, 2010, 12:00 AM', '2000-01-01', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2010-01-01 UTC'), 'Jan 1, 2010, 12:00 AM', '2000-01-01 UTC', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new ComparisonTest_Class(5), '5', new ComparisonTest_Class(4), '4', __NAMESPACE__.'\ComparisonTest_Class'), + array('c', '"c"', 'b', '"b"', 'string'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php new file mode 100644 index 0000000..d555870 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php @@ -0,0 +1,73 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\LessThan; +use Symfony\Component\Validator\Constraints\LessThanValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class LessThanValidatorTest extends AbstractComparisonValidatorTestCase +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new LessThanValidator(); + } + + protected function createConstraint(array $options) + { + return new LessThan($options); + } + + /** + * {@inheritdoc} + */ + public function provideValidComparisons() + { + return array( + array(1, 2), + array(new \DateTime('2000-01-01'), new \DateTime('2010-01-01')), + array(new \DateTime('2000-01-01'), '2010-01-01'), + array(new \DateTime('2000-01-01 UTC'), '2010-01-01 UTC'), + array(new ComparisonTest_Class(4), new ComparisonTest_Class(5)), + array('22', '333'), + array(null, 1), + ); + } + + /** + * {@inheritdoc} + */ + public function provideInvalidComparisons() + { + return array( + array(3, '3', 2, '2', 'integer'), + array(2, '2', 2, '2', 'integer'), + array(new \DateTime('2010-01-01'), 'Jan 1, 2010, 12:00 AM', new \DateTime('2000-01-01'), 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2000-01-01'), 'Jan 1, 2000, 12:00 AM', new \DateTime('2000-01-01'), 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2010-01-01'), 'Jan 1, 2010, 12:00 AM', '2000-01-01', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2000-01-01'), 'Jan 1, 2000, 12:00 AM', '2000-01-01', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2010-01-01 UTC'), 'Jan 1, 2010, 12:00 AM', '2000-01-01 UTC', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2000-01-01 UTC'), 'Jan 1, 2000, 12:00 AM', '2000-01-01 UTC', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new ComparisonTest_Class(5), '5', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'), + array(new ComparisonTest_Class(6), '6', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'), + array('333', '"333"', '22', '"22"', 'string'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LocaleValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LocaleValidatorTest.php new file mode 100644 index 0000000..e5e2f30 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LocaleValidatorTest.php @@ -0,0 +1,104 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Intl\Util\IntlTestHelper; +use Symfony\Component\Validator\Constraints\Locale; +use Symfony\Component\Validator\Constraints\LocaleValidator; +use Symfony\Component\Validator\Validation; + +class LocaleValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new LocaleValidator(); + } + + protected function setUp() + { + IntlTestHelper::requireIntl($this); + + parent::setUp(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Locale()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Locale()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Locale()); + } + + /** + * @dataProvider getValidLocales + */ + public function testValidLocales($locale) + { + $this->validator->validate($locale, new Locale()); + + $this->assertNoViolation(); + } + + public function getValidLocales() + { + return array( + array('en'), + array('en_US'), + array('pt'), + array('pt_PT'), + array('zh_Hans'), + ); + } + + /** + * @dataProvider getInvalidLocales + */ + public function testInvalidLocales($locale) + { + $constraint = new Locale(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($locale, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$locale.'"') + ->assertRaised(); + } + + public function getInvalidLocales() + { + return array( + array('EN'), + array('foobar'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LuhnValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LuhnValidatorTest.php new file mode 100644 index 0000000..b0e88c3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LuhnValidatorTest.php @@ -0,0 +1,127 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Luhn; +use Symfony\Component\Validator\Constraints\LuhnValidator; +use Symfony\Component\Validator\Validation; + +class LuhnValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new LuhnValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Luhn()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Luhn()); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getValidNumbers + */ + public function testValidNumbers($number) + { + $this->validator->validate($number, new Luhn()); + + $this->assertNoViolation(); + } + + public function getValidNumbers() + { + return array( + array('42424242424242424242'), + array('378282246310005'), + array('371449635398431'), + array('378734493671000'), + array('5610591081018250'), + array('30569309025904'), + array('38520000023237'), + array('6011111111111117'), + array('6011000990139424'), + array('3530111333300000'), + array('3566002020360505'), + array('5555555555554444'), + array('5105105105105100'), + array('4111111111111111'), + array('4012888888881881'), + array('4222222222222'), + array('5019717010103742'), + array('6331101999990016'), + ); + } + + /** + * @dataProvider getInvalidNumbers + */ + public function testInvalidNumbers($number, $code) + { + $constraint = new Luhn(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($number, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$number.'"') + ->setCode($code) + ->assertRaised(); + } + + public function getInvalidNumbers() + { + return array( + array('1234567812345678', Luhn::CHECKSUM_FAILED_ERROR), + array('4222222222222222', Luhn::CHECKSUM_FAILED_ERROR), + array('0000000000000000', Luhn::CHECKSUM_FAILED_ERROR), + array('000000!000000000', Luhn::INVALID_CHARACTERS_ERROR), + array('42-22222222222222', Luhn::INVALID_CHARACTERS_ERROR), + ); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + * @dataProvider getInvalidTypes + */ + public function testInvalidTypes($number) + { + $constraint = new Luhn(); + + $this->validator->validate($number, $constraint); + } + + public function getInvalidTypes() + { + return array( + array(0), + array(123), + array(42424242424242424242), + array(378282246310005), + array(371449635398431), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotBlankValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotBlankValidatorTest.php new file mode 100644 index 0000000..c248246 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotBlankValidatorTest.php @@ -0,0 +1,102 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\NotBlank; +use Symfony\Component\Validator\Constraints\NotBlankValidator; +use Symfony\Component\Validator\Validation; + +class NotBlankValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new NotBlankValidator(); + } + + /** + * @dataProvider getValidValues + */ + public function testValidValues($value) + { + $this->validator->validate($value, new NotBlank()); + + $this->assertNoViolation(); + } + + public function getValidValues() + { + return array( + array('foobar'), + array(0), + array(0.0), + array('0'), + array(1234), + ); + } + + public function testNullIsInvalid() + { + $constraint = new NotBlank(array( + 'message' => 'myMessage', + )); + + $this->validator->validate(null, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', 'null') + ->assertRaised(); + } + + public function testBlankIsInvalid() + { + $constraint = new NotBlank(array( + 'message' => 'myMessage', + )); + + $this->validator->validate('', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '""') + ->assertRaised(); + } + + public function testFalseIsInvalid() + { + $constraint = new NotBlank(array( + 'message' => 'myMessage', + )); + + $this->validator->validate(false, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', 'false') + ->assertRaised(); + } + + public function testEmptyArrayIsInvalid() + { + $constraint = new NotBlank(array( + 'message' => 'myMessage', + )); + + $this->validator->validate(array(), $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', 'array') + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php new file mode 100644 index 0000000..bc2c348 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php @@ -0,0 +1,69 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\NotEqualTo; +use Symfony\Component\Validator\Constraints\NotEqualToValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class NotEqualToValidatorTest extends AbstractComparisonValidatorTestCase +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new NotEqualToValidator(); + } + + protected function createConstraint(array $options) + { + return new NotEqualTo($options); + } + + /** + * {@inheritdoc} + */ + public function provideValidComparisons() + { + return array( + array(1, 2), + array('22', '333'), + array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01')), + array(new \DateTime('2001-01-01'), '2000-01-01'), + array(new \DateTime('2001-01-01 UTC'), '2000-01-01 UTC'), + array(new ComparisonTest_Class(6), new ComparisonTest_Class(5)), + array(null, 1), + ); + } + + /** + * {@inheritdoc} + */ + public function provideInvalidComparisons() + { + return array( + array(3, '3', 3, '3', 'integer'), + array('2', '"2"', 2, '2', 'integer'), + array('a', '"a"', 'a', '"a"', 'string'), + array(new \DateTime('2000-01-01'), 'Jan 1, 2000, 12:00 AM', new \DateTime('2000-01-01'), 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2000-01-01'), 'Jan 1, 2000, 12:00 AM', '2000-01-01', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new \DateTime('2000-01-01 UTC'), 'Jan 1, 2000, 12:00 AM', '2000-01-01 UTC', 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array(new ComparisonTest_Class(5), '5', new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php new file mode 100644 index 0000000..1fbd806 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php @@ -0,0 +1,92 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\NotIdenticalTo; +use Symfony\Component\Validator\Constraints\NotIdenticalToValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Daniel Holmes <daniel@danielholmes.org> + */ +class NotIdenticalToValidatorTest extends AbstractComparisonValidatorTestCase +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new NotIdenticalToValidator(); + } + + protected function createConstraint(array $options) + { + return new NotIdenticalTo($options); + } + + /** + * {@inheritdoc} + */ + public function provideValidComparisons() + { + return array( + array(1, 2), + array('2', 2), + array('22', '333'), + array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01')), + array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')), + array(new \DateTime('2001-01-01'), '2000-01-01'), + array(new \DateTime('2000-01-01'), '2000-01-01'), + array(new \DateTime('2001-01-01'), '2000-01-01'), + array(new \DateTime('2000-01-01 UTC'), '2000-01-01 UTC'), + array(null, 1), + ); + } + + public function provideAllInvalidComparisons() + { + $this->setDefaultTimezone('UTC'); + + // Don't call addPhp5Dot5Comparisons() automatically, as it does + // not take care of identical objects + $comparisons = $this->provideInvalidComparisons(); + + $this->restoreDefaultTimezone(); + + return $comparisons; + } + + /** + * {@inheritdoc} + */ + public function provideInvalidComparisons() + { + $date = new \DateTime('2000-01-01'); + $object = new ComparisonTest_Class(2); + + $comparisons = array( + array(3, '3', 3, '3', 'integer'), + array('a', '"a"', 'a', '"a"', 'string'), + array($date, 'Jan 1, 2000, 12:00 AM', $date, 'Jan 1, 2000, 12:00 AM', 'DateTime'), + array($object, '2', $object, '2', __NAMESPACE__.'\ComparisonTest_Class'), + ); + + if (version_compare(PHP_VERSION, '>=', '5.5')) { + $immutableDate = new \DateTimeImmutable('2000-01-01'); + $comparisons[] = array($immutableDate, 'Jan 1, 2000, 12:00 AM', $immutableDate, 'Jan 1, 2000, 12:00 AM', 'DateTime'); + } + + return $comparisons; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotNullValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotNullValidatorTest.php new file mode 100644 index 0000000..d338f31 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotNullValidatorTest.php @@ -0,0 +1,60 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\NotNull; +use Symfony\Component\Validator\Constraints\NotNullValidator; +use Symfony\Component\Validator\Validation; + +class NotNullValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new NotNullValidator(); + } + + /** + * @dataProvider getValidValues + */ + public function testValidValues($value) + { + $this->validator->validate($value, new NotNull()); + + $this->assertNoViolation(); + } + + public function getValidValues() + { + return array( + array(0), + array(false), + array(true), + array(''), + ); + } + + public function testNullIsInvalid() + { + $constraint = new NotNull(array( + 'message' => 'myMessage', + )); + + $this->validator->validate(null, $constraint); + + $this->buildViolation('myMessage')->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NullValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NullValidatorTest.php new file mode 100644 index 0000000..85df90a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NullValidatorTest.php @@ -0,0 +1,66 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Null; +use Symfony\Component\Validator\Constraints\NullValidator; +use Symfony\Component\Validator\Validation; + +class NullValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new NullValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Null()); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getInvalidValues + */ + public function testInvalidValues($value, $valueAsString) + { + $constraint = new Null(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', $valueAsString) + ->assertRaised(); + } + + public function getInvalidValues() + { + return array( + array(0, '0'), + array(false, 'false'), + array(true, 'true'), + array('', '""'), + array('foo bar', '"foo bar"'), + array(new \DateTime(), 'object'), + array(new \stdClass(), 'object'), + array(array(), 'array'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RangeValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RangeValidatorTest.php new file mode 100644 index 0000000..9b7056b --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RangeValidatorTest.php @@ -0,0 +1,403 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Intl\Util\IntlTestHelper; +use Symfony\Component\Validator\Constraints\Range; +use Symfony\Component\Validator\Constraints\RangeValidator; +use Symfony\Component\Validator\Validation; + +class RangeValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new RangeValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Range(array('min' => 10, 'max' => 20))); + + $this->assertNoViolation(); + } + + public function getTenToTwenty() + { + return array( + array(10.00001), + array(19.99999), + array('10.00001'), + array('19.99999'), + array(10), + array(20), + array(10.0), + array(20.0), + ); + } + + public function getLessThanTen() + { + return array( + array(9.99999, '9.99999'), + array('9.99999', '"9.99999"'), + array(5, '5'), + array(1.0, '1.0'), + ); + } + + public function getMoreThanTwenty() + { + return array( + array(20.000001, '20.000001'), + array('20.000001', '"20.000001"'), + array(21, '21'), + array(30.0, '30.0'), + ); + } + + /** + * @dataProvider getTenToTwenty + */ + public function testValidValuesMin($value) + { + $constraint = new Range(array('min' => 10)); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getTenToTwenty + */ + public function testValidValuesMax($value) + { + $constraint = new Range(array('max' => 20)); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getTenToTwenty + */ + public function testValidValuesMinMax($value) + { + $constraint = new Range(array('min' => 10, 'max' => 20)); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getLessThanTen + */ + public function testInvalidValuesMin($value, $formattedValue) + { + $constraint = new Range(array( + 'min' => 10, + 'minMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', $formattedValue) + ->setParameter('{{ limit }}', 10) + ->setCode(Range::BELOW_RANGE_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getMoreThanTwenty + */ + public function testInvalidValuesMax($value, $formattedValue) + { + $constraint = new Range(array( + 'max' => 20, + 'maxMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', $formattedValue) + ->setParameter('{{ limit }}', 20) + ->setCode(Range::BEYOND_RANGE_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getMoreThanTwenty + */ + public function testInvalidValuesCombinedMax($value, $formattedValue) + { + $constraint = new Range(array( + 'min' => 10, + 'max' => 20, + 'minMessage' => 'myMinMessage', + 'maxMessage' => 'myMaxMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMaxMessage') + ->setParameter('{{ value }}', $formattedValue) + ->setParameter('{{ limit }}', 20) + ->setCode(Range::BEYOND_RANGE_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getLessThanTen + */ + public function testInvalidValuesCombinedMin($value, $formattedValue) + { + $constraint = new Range(array( + 'min' => 10, + 'max' => 20, + 'minMessage' => 'myMinMessage', + 'maxMessage' => 'myMaxMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMinMessage') + ->setParameter('{{ value }}', $formattedValue) + ->setParameter('{{ limit }}', 10) + ->setCode(Range::BELOW_RANGE_ERROR) + ->assertRaised(); + } + + public function getTenthToTwentiethMarch2014() + { + // The provider runs before setUp(), so we need to manually fix + // the default timezone + $this->setDefaultTimezone('UTC'); + + $tests = array( + array(new \DateTime('March 10, 2014')), + array(new \DateTime('March 15, 2014')), + array(new \DateTime('March 20, 2014')), + ); + + if (version_compare(PHP_VERSION, '5.5.0-dev', '>=')) { + $tests[] = array(new \DateTimeImmutable('March 10, 2014')); + $tests[] = array(new \DateTimeImmutable('March 15, 2014')); + $tests[] = array(new \DateTimeImmutable('March 20, 2014')); + } + + $this->restoreDefaultTimezone(); + + return $tests; + } + + public function getSoonerThanTenthMarch2014() + { + // The provider runs before setUp(), so we need to manually fix + // the default timezone + $this->setDefaultTimezone('UTC'); + + $tests = array( + array(new \DateTime('March 20, 2013'), 'Mar 20, 2013, 12:00 AM'), + array(new \DateTime('March 9, 2014'), 'Mar 9, 2014, 12:00 AM'), + ); + + if (version_compare(PHP_VERSION, '5.5.0-dev', '>=')) { + $tests[] = array(new \DateTimeImmutable('March 20, 2013'), 'Mar 20, 2013, 12:00 AM'); + $tests[] = array(new \DateTimeImmutable('March 9, 2014'), 'Mar 9, 2014, 12:00 AM'); + } + + $this->restoreDefaultTimezone(); + + return $tests; + } + + public function getLaterThanTwentiethMarch2014() + { + // The provider runs before setUp(), so we need to manually fix + // the default timezone + $this->setDefaultTimezone('UTC'); + + $tests = array( + array(new \DateTime('March 21, 2014'), 'Mar 21, 2014, 12:00 AM'), + array(new \DateTime('March 9, 2015'), 'Mar 9, 2015, 12:00 AM'), + ); + + if (version_compare(PHP_VERSION, '5.5.0-dev', '>=')) { + $tests[] = array(new \DateTimeImmutable('March 21, 2014'), 'Mar 21, 2014, 12:00 AM'); + $tests[] = array(new \DateTimeImmutable('March 9, 2015'), 'Mar 9, 2015, 12:00 AM'); + } + + $this->restoreDefaultTimezone(); + + return $tests; + } + + /** + * @dataProvider getTenthToTwentiethMarch2014 + */ + public function testValidDatesMin($value) + { + $constraint = new Range(array('min' => 'March 10, 2014')); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getTenthToTwentiethMarch2014 + */ + public function testValidDatesMax($value) + { + $constraint = new Range(array('max' => 'March 20, 2014')); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getTenthToTwentiethMarch2014 + */ + public function testValidDatesMinMax($value) + { + $constraint = new Range(array('min' => 'March 10, 2014', 'max' => 'March 20, 2014')); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + /** + * @dataProvider getSoonerThanTenthMarch2014 + */ + public function testInvalidDatesMin($value, $dateTimeAsString) + { + // Conversion of dates to string differs between ICU versions + // Make sure we have the correct version loaded + IntlTestHelper::requireIntl($this); + + $constraint = new Range(array( + 'min' => 'March 10, 2014', + 'minMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', $dateTimeAsString) + ->setParameter('{{ limit }}', 'Mar 10, 2014, 12:00 AM') + ->setCode(Range::BELOW_RANGE_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getLaterThanTwentiethMarch2014 + */ + public function testInvalidDatesMax($value, $dateTimeAsString) + { + // Conversion of dates to string differs between ICU versions + // Make sure we have the correct version loaded + IntlTestHelper::requireIntl($this); + + $constraint = new Range(array( + 'max' => 'March 20, 2014', + 'maxMessage' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', $dateTimeAsString) + ->setParameter('{{ limit }}', 'Mar 20, 2014, 12:00 AM') + ->setCode(Range::BEYOND_RANGE_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getLaterThanTwentiethMarch2014 + */ + public function testInvalidDatesCombinedMax($value, $dateTimeAsString) + { + // Conversion of dates to string differs between ICU versions + // Make sure we have the correct version loaded + IntlTestHelper::requireIntl($this); + + $constraint = new Range(array( + 'min' => 'March 10, 2014', + 'max' => 'March 20, 2014', + 'minMessage' => 'myMinMessage', + 'maxMessage' => 'myMaxMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMaxMessage') + ->setParameter('{{ value }}', $dateTimeAsString) + ->setParameter('{{ limit }}', 'Mar 20, 2014, 12:00 AM') + ->setCode(Range::BEYOND_RANGE_ERROR) + ->assertRaised(); + } + + /** + * @dataProvider getSoonerThanTenthMarch2014 + */ + public function testInvalidDatesCombinedMin($value, $dateTimeAsString) + { + // Conversion of dates to string differs between ICU versions + // Make sure we have the correct version loaded + IntlTestHelper::requireIntl($this); + + $constraint = new Range(array( + 'min' => 'March 10, 2014', + 'max' => 'March 20, 2014', + 'minMessage' => 'myMinMessage', + 'maxMessage' => 'myMaxMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMinMessage') + ->setParameter('{{ value }}', $dateTimeAsString) + ->setParameter('{{ limit }}', 'Mar 10, 2014, 12:00 AM') + ->setCode(Range::BELOW_RANGE_ERROR) + ->assertRaised(); + } + + public function getInvalidValues() + { + return array( + array(9.999999), + array(20.000001), + array('9.999999'), + array('20.000001'), + array(new \stdClass()), + ); + } + + public function testNonNumeric() + { + $this->validator->validate('abcd', new Range(array( + 'min' => 10, + 'max' => 20, + 'invalidMessage' => 'myMessage', + ))); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"abcd"') + ->setCode(Range::INVALID_VALUE_ERROR) + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexTest.php new file mode 100644 index 0000000..ea37bb4 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexTest.php @@ -0,0 +1,87 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Constraints; + +use Symfony\Component\Validator\Constraints\Regex; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class RegexTest extends \PHPUnit_Framework_TestCase +{ + public function testConstraintGetDefaultOption() + { + $constraint = new Regex('/^[0-9]+$/'); + + $this->assertSame('/^[0-9]+$/', $constraint->pattern); + } + + public function provideHtmlPatterns() + { + return array( + // HTML5 wraps the pattern in ^(?:pattern)$ + array('/^[0-9]+$/', '[0-9]+'), + array('/[0-9]+$/', '.*[0-9]+'), + array('/^[0-9]+/', '[0-9]+.*'), + array('/[0-9]+/', '.*[0-9]+.*'), + // We need a smart way to allow matching of patterns that contain + // ^ and $ at various sub-clauses of an or-clause + // .*(pattern).* seems to work correctly + array('/[0-9]$|[a-z]+/', '.*([0-9]$|[a-z]+).*'), + array('/[0-9]$|^[a-z]+/', '.*([0-9]$|^[a-z]+).*'), + array('/^[0-9]|[a-z]+$/', '.*(^[0-9]|[a-z]+$).*'), + // Unescape escaped delimiters + array('/^[0-9]+\/$/', '[0-9]+/'), + array('#^[0-9]+\#$#', '[0-9]+#'), + // Cannot be converted + array('/^[0-9]+$/i', null), + + // Inverse matches are simple, just wrap in + // ((?!pattern).)* + array('/^[0-9]+$/', '((?!^[0-9]+$).)*', false), + array('/[0-9]+$/', '((?![0-9]+$).)*', false), + array('/^[0-9]+/', '((?!^[0-9]+).)*', false), + array('/[0-9]+/', '((?![0-9]+).)*', false), + array('/[0-9]$|[a-z]+/', '((?![0-9]$|[a-z]+).)*', false), + array('/[0-9]$|^[a-z]+/', '((?![0-9]$|^[a-z]+).)*', false), + array('/^[0-9]|[a-z]+$/', '((?!^[0-9]|[a-z]+$).)*', false), + array('/^[0-9]+\/$/', '((?!^[0-9]+/$).)*', false), + array('#^[0-9]+\#$#', '((?!^[0-9]+#$).)*', false), + array('/^[0-9]+$/i', null, false), + ); + } + + /** + * @dataProvider provideHtmlPatterns + */ + public function testGetHtmlPattern($pattern, $htmlPattern, $match = true) + { + $constraint = new Regex(array( + 'pattern' => $pattern, + 'match' => $match, + )); + + $this->assertSame($pattern, $constraint->pattern); + $this->assertSame($htmlPattern, $constraint->getHtmlPattern()); + } + + public function testGetCustomHtmlPattern() + { + $constraint = new Regex(array( + 'pattern' => '((?![0-9]$|[a-z]+).)*', + 'htmlPattern' => 'foobar', + )); + + $this->assertSame('((?![0-9]$|[a-z]+).)*', $constraint->pattern); + $this->assertSame('foobar', $constraint->getHtmlPattern()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexValidatorTest.php new file mode 100644 index 0000000..61917e3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexValidatorTest.php @@ -0,0 +1,97 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Regex; +use Symfony\Component\Validator\Constraints\RegexValidator; +use Symfony\Component\Validator\Validation; + +class RegexValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new RegexValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Regex(array('pattern' => '/^[0-9]+$/'))); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Regex(array('pattern' => '/^[0-9]+$/'))); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Regex(array('pattern' => '/^[0-9]+$/'))); + } + + /** + * @dataProvider getValidValues + */ + public function testValidValues($value) + { + $constraint = new Regex(array('pattern' => '/^[0-9]+$/')); + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + public function getValidValues() + { + return array( + array(0), + array('0'), + array('090909'), + array(90909), + ); + } + + /** + * @dataProvider getInvalidValues + */ + public function testInvalidValues($value) + { + $constraint = new Regex(array( + 'pattern' => '/^[0-9]+$/', + 'message' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$value.'"') + ->assertRaised(); + } + + public function getInvalidValues() + { + return array( + array('abcd'), + array('090foo'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TimeValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TimeValidatorTest.php new file mode 100644 index 0000000..a6ca143 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TimeValidatorTest.php @@ -0,0 +1,107 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Time; +use Symfony\Component\Validator\Constraints\TimeValidator; +use Symfony\Component\Validator\Validation; + +class TimeValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new TimeValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Time()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Time()); + + $this->assertNoViolation(); + } + + public function testDateTimeClassIsValid() + { + $this->validator->validate(new \DateTime(), new Time()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Time()); + } + + /** + * @dataProvider getValidTimes + */ + public function testValidTimes($time) + { + $this->validator->validate($time, new Time()); + + $this->assertNoViolation(); + } + + public function getValidTimes() + { + return array( + array('01:02:03'), + array('00:00:00'), + array('23:59:59'), + ); + } + + /** + * @dataProvider getInvalidTimes + */ + public function testInvalidTimes($time, $code) + { + $constraint = new Time(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($time, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$time.'"') + ->setCode($code) + ->assertRaised(); + } + + public function getInvalidTimes() + { + return array( + array('foobar', Time::INVALID_FORMAT_ERROR), + array('foobar 12:34:56', Time::INVALID_FORMAT_ERROR), + array('12:34:56 foobar', Time::INVALID_FORMAT_ERROR), + array('00:00', Time::INVALID_FORMAT_ERROR), + array('24:00:00', Time::INVALID_TIME_ERROR), + array('00:60:00', Time::INVALID_TIME_ERROR), + array('00:00:60', Time::INVALID_TIME_ERROR), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TrueValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TrueValidatorTest.php new file mode 100644 index 0000000..2cdc703 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TrueValidatorTest.php @@ -0,0 +1,56 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\True; +use Symfony\Component\Validator\Constraints\TrueValidator; +use Symfony\Component\Validator\Validation; + +class TrueValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new TrueValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new True()); + + $this->assertNoViolation(); + } + + public function testTrueIsValid() + { + $this->validator->validate(true, new True()); + + $this->assertNoViolation(); + } + + public function testFalseIsInvalid() + { + $constraint = new True(array( + 'message' => 'myMessage', + )); + + $this->validator->validate(false, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', 'false') + ->assertRaised(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php new file mode 100644 index 0000000..4836928 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php @@ -0,0 +1,185 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Type; +use Symfony\Component\Validator\Constraints\TypeValidator; +use Symfony\Component\Validator\Validation; + +class TypeValidatorTest extends AbstractConstraintValidatorTest +{ + protected static $file; + + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new TypeValidator(); + } + + public function testNullIsValid() + { + $constraint = new Type(array('type' => 'integer')); + + $this->validator->validate(null, $constraint); + + $this->assertNoViolation(); + } + + public function testEmptyIsValidIfString() + { + $constraint = new Type(array('type' => 'string')); + + $this->validator->validate('', $constraint); + + $this->assertNoViolation(); + } + + public function testEmptyIsInvalidIfNoString() + { + $constraint = new Type(array( + 'type' => 'integer', + 'message' => 'myMessage', + )); + + $this->validator->validate('', $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '""') + ->setParameter('{{ type }}', 'integer') + ->assertRaised(); + } + + /** + * @dataProvider getValidValues + */ + public function testValidValues($value, $type) + { + $constraint = new Type(array('type' => $type)); + + $this->validator->validate($value, $constraint); + + $this->assertNoViolation(); + } + + public function getValidValues() + { + $object = new \stdClass(); + $file = $this->createFile(); + + return array( + array(true, 'Boolean'), + array(false, 'Boolean'), + array(true, 'boolean'), + array(false, 'boolean'), + array(true, 'bool'), + array(false, 'bool'), + array(0, 'numeric'), + array('0', 'numeric'), + array(1.5, 'numeric'), + array('1.5', 'numeric'), + array(0, 'integer'), + array(1.5, 'float'), + array('12345', 'string'), + array(array(), 'array'), + array($object, 'object'), + array($object, 'stdClass'), + array($file, 'resource'), + array('12345', 'digit'), + array('12a34', 'alnum'), + array('abcde', 'alpha'), + array("\n\r\t", 'cntrl'), + array('arf12', 'graph'), + array('abcde', 'lower'), + array('ABCDE', 'upper'), + array('arf12', 'print'), + array('*&$()', 'punct'), + array("\n\r\t", 'space'), + array('AB10BC99', 'xdigit'), + ); + } + + /** + * @dataProvider getInvalidValues + */ + public function testInvalidValues($value, $type, $valueAsString) + { + $constraint = new Type(array( + 'type' => $type, + 'message' => 'myMessage', + )); + + $this->validator->validate($value, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', $valueAsString) + ->setParameter('{{ type }}', $type) + ->assertRaised(); + } + + public function getInvalidValues() + { + $object = new \stdClass(); + $file = $this->createFile(); + + return array( + array('foobar', 'numeric', '"foobar"'), + array('foobar', 'boolean', '"foobar"'), + array('0', 'integer', '"0"'), + array('1.5', 'float', '"1.5"'), + array(12345, 'string', '12345'), + array($object, 'boolean', 'object'), + array($object, 'numeric', 'object'), + array($object, 'integer', 'object'), + array($object, 'float', 'object'), + array($object, 'string', 'object'), + array($object, 'resource', 'object'), + array($file, 'boolean', 'resource'), + array($file, 'numeric', 'resource'), + array($file, 'integer', 'resource'), + array($file, 'float', 'resource'), + array($file, 'string', 'resource'), + array($file, 'object', 'resource'), + array('12a34', 'digit', '"12a34"'), + array('1a#23', 'alnum', '"1a#23"'), + array('abcd1', 'alpha', '"abcd1"'), + array("\nabc", 'cntrl', "\"\nabc\""), + array("abc\n", 'graph', "\"abc\n\""), + array('abCDE', 'lower', '"abCDE"'), + array('ABcde', 'upper', '"ABcde"'), + array("\nabc", 'print', "\"\nabc\""), + array('abc&$!', 'punct', '"abc&$!"'), + array("\nabc", 'space', "\"\nabc\""), + array('AR1012', 'xdigit', '"AR1012"'), + ); + } + + protected function createFile() + { + if (!static::$file) { + static::$file = fopen(__FILE__, 'r'); + } + + return static::$file; + } + + public static function tearDownAfterClass() + { + if (static::$file) { + fclose(static::$file); + static::$file = null; + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php new file mode 100644 index 0000000..3358c79 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php @@ -0,0 +1,179 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Url; +use Symfony\Component\Validator\Constraints\UrlValidator; +use Symfony\Component\Validator\Validation; + +class UrlValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new UrlValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Url()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Url()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Url()); + } + + /** + * @dataProvider getValidUrls + */ + public function testValidUrls($url) + { + $this->validator->validate($url, new Url()); + + $this->assertNoViolation(); + } + + public function getValidUrls() + { + return array( + array('http://a.pl'), + array('http://www.google.com'), + array('http://www.google.com.'), + array('http://www.google.museum'), + array('https://google.com/'), + array('https://google.com:80/'), + array('http://www.example.coop/'), + array('http://www.test-example.com/'), + array('http://www.symfony.com/'), + array('http://symfony.fake/blog/'), + array('http://symfony.com/?'), + array('http://symfony.com/search?type=&q=url+validator'), + array('http://symfony.com/#'), + array('http://symfony.com/#?'), + array('http://www.symfony.com/doc/current/book/validation.html#supported-constraints'), + array('http://very.long.domain.name.com/'), + array('http://localhost/'), + array('http://127.0.0.1/'), + array('http://127.0.0.1:80/'), + array('http://[::1]/'), + array('http://[::1]:80/'), + array('http://[1:2:3::4:5:6:7]/'), + array('http://sãopaulo.com/'), + array('http://xn--sopaulo-xwa.com/'), + array('http://sãopaulo.com.br/'), + array('http://xn--sopaulo-xwa.com.br/'), + array('http://пример.испытание/'), + array('http://xn--e1afmkfd.xn--80akhbyknj4f/'), + array('http://مثال.إختبار/'), + array('http://xn--mgbh0fb.xn--kgbechtv/'), + array('http://例子.测试/'), + array('http://xn--fsqu00a.xn--0zwm56d/'), + array('http://例子.測試/'), + array('http://xn--fsqu00a.xn--g6w251d/'), + array('http://例え.テスト/'), + array('http://xn--r8jz45g.xn--zckzah/'), + array('http://مثال.آزمایشی/'), + array('http://xn--mgbh0fb.xn--hgbk6aj7f53bba/'), + array('http://실례.테스트/'), + array('http://xn--9n2bp8q.xn--9t4b11yi5a/'), + array('http://العربية.idn.icann.org/'), + array('http://xn--ogb.idn.icann.org/'), + array('http://xn--e1afmkfd.xn--80akhbyknj4f.xn--e1afmkfd/'), + array('http://xn--espaa-rta.xn--ca-ol-fsay5a/'), + array('http://xn--d1abbgf6aiiy.xn--p1ai/'), + array('http://☎.com/'), + array('http://username:password@symfony.com'), + array('http://user-name@symfony.com'), + ); + } + + /** + * @dataProvider getInvalidUrls + */ + public function testInvalidUrls($url) + { + $constraint = new Url(array( + 'message' => 'myMessage', + )); + + $this->validator->validate($url, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$url.'"') + ->assertRaised(); + } + + public function getInvalidUrls() + { + return array( + array('google.com'), + array('://google.com'), + array('http ://google.com'), + array('http:/google.com'), + array('http://goog_le.com'), + array('http://google.com::aa'), + array('http://google.com:aa'), + array('http://symfony.com?'), + array('http://symfony.com#'), + array('ftp://google.fr'), + array('faked://google.fr'), + array('http://127.0.0.1:aa/'), + array('ftp://[::1]/'), + array('http://[::1'), + array('http://hello.☎/'), + array('http://:password@symfony.com'), + array('http://:password@@symfony.com'), + array('http://username:passwordsymfony.com'), + array('http://usern@me:password@symfony.com'), + ); + } + + /** + * @dataProvider getValidCustomUrls + */ + public function testCustomProtocolIsValid($url) + { + $constraint = new Url(array( + 'protocols' => array('ftp', 'file', 'git'), + )); + + $this->validator->validate($url, $constraint); + + $this->assertNoViolation(); + } + + public function getValidCustomUrls() + { + return array( + array('ftp://google.com'), + array('file://127.0.0.1'), + array('git://[::1]/'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php new file mode 100644 index 0000000..0abda39 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php @@ -0,0 +1,211 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Uuid; +use Symfony\Component\Validator\Constraints\UuidValidator; +use Symfony\Component\Validator\Validation; + +/** + * @author Colin O'Dell <colinodell@gmail.com> + */ +class UuidValidatorTest extends AbstractConstraintValidatorTest +{ + protected function getApiVersion() + { + return Validation::API_VERSION_2_5; + } + + protected function createValidator() + { + return new UuidValidator(); + } + + public function testNullIsValid() + { + $this->validator->validate(null, new Uuid()); + + $this->assertNoViolation(); + } + + public function testEmptyStringIsValid() + { + $this->validator->validate('', new Uuid()); + + $this->assertNoViolation(); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException + */ + public function testExpectsStringCompatibleType() + { + $this->validator->validate(new \stdClass(), new Uuid()); + } + + /** + * @dataProvider getValidStrictUuids + */ + public function testValidStrictUuids($uuid, $versions = null) + { + $constraint = new Uuid(); + + if (null !== $versions) { + $constraint->versions = $versions; + } + + $this->validator->validate($uuid, $constraint); + + $this->assertNoViolation(); + } + + public function getValidStrictUuids() + { + return array( + array('216fff40-98d9-11e3-a5e2-0800200c9a66'), // Version 1 UUID in lowercase + array('216fff40-98d9-11e3-a5e2-0800200c9a66', array(Uuid::V1_MAC)), + array('216FFF40-98D9-11E3-A5E2-0800200C9A66'), // Version 1 UUID in UPPERCASE + array('456daefb-5aa6-41b5-8dbc-068b05a8b201'), // Version 4 UUID in lowercase + array('456daEFb-5AA6-41B5-8DBC-068B05A8B201'), // Version 4 UUID in mixed case + array('456daEFb-5AA6-41B5-8DBC-068B05A8B201', array(Uuid::V4_RANDOM)), + ); + } + + /** + * @dataProvider getInvalidStrictUuids + */ + public function testInvalidStrictUuids($uuid, $code, $versions = null) + { + $constraint = new Uuid(array( + 'message' => 'testMessage', + )); + + if (null !== $versions) { + $constraint->versions = $versions; + } + + $this->validator->validate($uuid, $constraint); + + $this->buildViolation('testMessage') + ->setParameter('{{ value }}', '"'.$uuid.'"') + ->setCode($code) + ->assertRaised(); + } + + public function getInvalidStrictUuids() + { + return array( + array('216fff40-98d9-11e3-a5e2_0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), + array('216gff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), + array('216Gff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), + array('216fff40-98d9-11e3-a5e-20800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), + array('216f-ff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), + array('216fff40-98d9-11e3-a5e2-0800-200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), + array('216fff40-98d9-11e3-a5e2-0800200c-9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), + array('216fff40-98d9-11e3-a5e20800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), + array('216fff4098d911e3a5e20800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), + array('216fff40-98d9-11e3-a5e2-0800200c9a6', Uuid::TOO_SHORT_ERROR), + array('216fff40-98d9-11e3-a5e2-0800200c9a666', Uuid::TOO_LONG_ERROR), + array('216fff40-98d9-01e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-61e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-71e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-81e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-91e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-a1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-b1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-c1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-d1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-e1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-f1e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR), + array('216fff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR, array(Uuid::V2_DCE, Uuid::V3_MD5, Uuid::V4_RANDOM, Uuid::V5_SHA1)), + array('216fff40-98d9-21e3-a5e2-0800200c9a66', Uuid::INVALID_VERSION_ERROR, array(Uuid::V1_MAC, Uuid::V3_MD5, Uuid::V4_RANDOM, Uuid::V5_SHA1)), + array('216fff40-98d9-11e3-05e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-15e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-25e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-35e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-45e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-55e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-65e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-75e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-c5e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-d5e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-e5e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + array('216fff40-98d9-11e3-f5e2-0800200c9a66', Uuid::INVALID_VARIANT_ERROR), + + // Non-standard UUID allowed by some other systems + array('{216fff40-98d9-11e3-a5e2-0800200c9a66}', Uuid::INVALID_CHARACTERS_ERROR), + array('[216fff40-98d9-11e3-a5e2-0800200c9a66]', Uuid::INVALID_CHARACTERS_ERROR), + ); + } + + /** + * @dataProvider getValidNonStrictUuids + */ + public function testValidNonStrictUuids($uuid) + { + $constraint = new Uuid(array( + 'strict' => false, + )); + + $this->validator->validate($uuid, $constraint); + + $this->assertNoViolation(); + } + + public function getValidNonStrictUuids() + { + return array( + array('216fff40-98d9-11e3-a5e2-0800200c9a66'), // Version 1 UUID in lowercase + array('216FFF40-98D9-11E3-A5E2-0800200C9A66'), // Version 1 UUID in UPPERCASE + array('456daefb-5aa6-41b5-8dbc-068b05a8b201'), // Version 4 UUID in lowercase + array('456DAEFb-5AA6-41B5-8DBC-068b05a8B201'), // Version 4 UUID in mixed case + + // Non-standard UUIDs allowed by some other systems + array('216f-ff40-98d9-11e3-a5e2-0800-200c-9a66'), // Non-standard dash positions (every 4 chars) + array('216fff40-98d911e3-a5e20800-200c9a66'), // Non-standard dash positions (every 8 chars) + array('216fff4098d911e3a5e20800200c9a66'), // No dashes at all + array('{216fff40-98d9-11e3-a5e2-0800200c9a66}'), // Wrapped with curly braces + array('[216fff40-98d9-11e3-a5e2-0800200c9a66]'), // Wrapped with squared braces + ); + } + + /** + * @dataProvider getInvalidNonStrictUuids + */ + public function testInvalidNonStrictUuids($uuid, $code) + { + $constraint = new Uuid(array( + 'strict' => false, + 'message' => 'myMessage', + )); + + $this->validator->validate($uuid, $constraint); + + $this->buildViolation('myMessage') + ->setParameter('{{ value }}', '"'.$uuid.'"') + ->setCode($code) + ->assertRaised(); + } + + public function getInvalidNonStrictUuids() + { + return array( + array('216fff40-98d9-11e3-a5e2_0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), + array('216gff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), + array('216Gff40-98d9-11e3-a5e2-0800200c9a66', Uuid::INVALID_CHARACTERS_ERROR), + array('216fff40-98d9-11e3-a5e2_0800200c9a6', Uuid::INVALID_CHARACTERS_ERROR), + array('216fff40-98d9-11e3-a5e-20800200c9a66', Uuid::INVALID_HYPHEN_PLACEMENT_ERROR), + array('216fff40-98d9-11e3-a5e2-0800200c9a6', Uuid::TOO_SHORT_ERROR), + array('216fff40-98d9-11e3-a5e2-0800200c9a666', Uuid::TOO_LONG_ERROR), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ValidTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ValidTest.php new file mode 100644 index 0000000..3de6ab3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ValidTest.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Constraints; + +use Symfony\Component\Validator\Constraints\Valid; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class ValidTest extends \PHPUnit_Framework_TestCase +{ + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testRejectGroupsOption() + { + new Valid(array('groups' => 'foo')); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CallbackClass.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CallbackClass.php new file mode 100644 index 0000000..0f6a2f4 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CallbackClass.php @@ -0,0 +1,24 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\ExecutionContextInterface; + +/** + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class CallbackClass +{ + public static function callback($object, ExecutionContextInterface $context) + { + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ClassConstraint.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ClassConstraint.php new file mode 100644 index 0000000..a4dc777 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ClassConstraint.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +class ClassConstraint extends Constraint +{ + public function getTargets() + { + return self::CLASS_CONSTRAINT; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintA.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintA.php new file mode 100644 index 0000000..8a196dc --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintA.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +/** @Annotation */ +class ConstraintA extends Constraint +{ + public $property1; + public $property2; + + public function getDefaultOption() + { + return 'property2'; + } + + public function getTargets() + { + return array(self::PROPERTY_CONSTRAINT, self::CLASS_CONSTRAINT); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintAValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintAValidator.php new file mode 100644 index 0000000..b3b85c8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintAValidator.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\ExecutionContextInterface; + +class ConstraintAValidator extends ConstraintValidator +{ + public static $passedContext; + + public function initialize(ExecutionContextInterface $context) + { + parent::initialize($context); + + self::$passedContext = $context; + } + + public function validate($value, Constraint $constraint) + { + if ('VALID' != $value) { + $this->context->addViolation('message', array('param' => 'value')); + + return; + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintB.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintB.php new file mode 100644 index 0000000..6258923 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintB.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +/** @Annotation */ +class ConstraintB extends Constraint +{ + public function getTargets() + { + return array(self::PROPERTY_CONSTRAINT, self::CLASS_CONSTRAINT); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintC.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintC.php new file mode 100644 index 0000000..b0418b8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintC.php @@ -0,0 +1,30 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +/** @Annotation */ +class ConstraintC extends Constraint +{ + public $option1; + + public function getRequiredOptions() + { + return array('option1'); + } + + public function getTargets() + { + return array(self::PROPERTY_CONSTRAINT, self::CLASS_CONSTRAINT); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValue.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValue.php new file mode 100644 index 0000000..4ebd981 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValue.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +/** @Annotation */ +class ConstraintWithValue extends Constraint +{ + public $property; + public $value; + + public function getDefaultOption() + { + return 'property'; + } + + public function getTargets() + { + return array(self::PROPERTY_CONSTRAINT, self::CLASS_CONSTRAINT); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValueAsDefault.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValueAsDefault.php new file mode 100644 index 0000000..a975e07 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValueAsDefault.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +/** @Annotation */ +class ConstraintWithValueAsDefault extends Constraint +{ + public $property; + public $value; + + public function getDefaultOption() + { + return 'value'; + } + + public function getTargets() + { + return array(self::PROPERTY_CONSTRAINT, self::CLASS_CONSTRAINT); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Countable.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Countable.php new file mode 100644 index 0000000..282d78d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Countable.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +class Countable implements \Countable +{ + private $content; + + public function __construct(array $content) + { + $this->content = $content; + } + + public function count() + { + return count($this->content); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CustomArrayObject.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CustomArrayObject.php new file mode 100644 index 0000000..41eac96 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CustomArrayObject.php @@ -0,0 +1,70 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +/** + * This class is a hand written simplified version of PHP native `ArrayObject` + * class, to show that it behaves differently than the PHP native implementation. + */ +class CustomArrayObject implements \ArrayAccess, \IteratorAggregate, \Countable, \Serializable +{ + private $array; + + public function __construct(array $array = null) + { + $this->array = $array ?: array(); + } + + public function offsetExists($offset) + { + return array_key_exists($offset, $this->array); + } + + public function offsetGet($offset) + { + return $this->array[$offset]; + } + + public function offsetSet($offset, $value) + { + if (null === $offset) { + $this->array[] = $value; + } else { + $this->array[$offset] = $value; + } + } + + public function offsetUnset($offset) + { + unset($this->array[$offset]); + } + + public function getIterator() + { + return new \ArrayIterator($this->array); + } + + public function count() + { + return count($this->array); + } + + public function serialize() + { + return serialize($this->array); + } + + public function unserialize($serialized) + { + $this->array = (array) unserialize((string) $serialized); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Entity.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Entity.php new file mode 100644 index 0000000..2230d30 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Entity.php @@ -0,0 +1,100 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraints as Assert; +use Symfony\Component\Validator\ExecutionContextInterface; + +/** + * @Symfony\Component\Validator\Tests\Fixtures\ConstraintA + * @Assert\GroupSequence({"Foo", "Entity"}) + * @Assert\Callback({"Symfony\Component\Validator\Tests\Fixtures\CallbackClass", "callback"}) + */ +class Entity extends EntityParent implements EntityInterface +{ + /** + * @Assert\NotNull + * @Assert\Range(min=3) + * @Assert\All({@Assert\NotNull, @Assert\Range(min=3)}), + * @Assert\All(constraints={@Assert\NotNull, @Assert\Range(min=3)}) + * @Assert\Collection(fields={ + * "foo" = {@Assert\NotNull, @Assert\Range(min=3)}, + * "bar" = @Assert\Range(min=5) + * }) + * @Assert\Choice(choices={"A", "B"}, message="Must be one of %choices%") + */ + public $firstName; + protected $lastName; + public $reference; + public $reference2; + private $internal; + public $data = 'Overridden data'; + public $initialized = false; + + public function __construct($internal = null) + { + $this->internal = $internal; + } + + public function getInternal() + { + return $this->internal.' from getter'; + } + + public function setLastName($lastName) + { + $this->lastName = $lastName; + } + + /** + * @Assert\NotNull + */ + public function getLastName() + { + return $this->lastName; + } + + /** + * @Assert\True + */ + public function isValid() + { + return 'valid'; + } + + /** + * @Assert\True + */ + public function hasPermissions() + { + return 'permissions'; + } + + public function getData() + { + return 'Overridden data'; + } + + /** + * @Assert\Callback + */ + public function validateMe(ExecutionContextInterface $context) + { + } + + /** + * @Assert\Callback + */ + public static function validateMeStatic($object, ExecutionContextInterface $context) + { + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityInterface.php new file mode 100644 index 0000000..2901f26 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityInterface.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +interface EntityInterface +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityParent.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityParent.php new file mode 100644 index 0000000..422bb28 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityParent.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraints\NotNull; + +class EntityParent +{ + protected $firstName; + private $internal; + private $data = 'Data'; + + /** + * @NotNull + */ + protected $other; + + public function getData() + { + return 'Data'; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraint.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraint.php new file mode 100644 index 0000000..03019fc --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraint.php @@ -0,0 +1,24 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +class FailingConstraint extends Constraint +{ + public $message = 'Failed'; + + public function getTargets() + { + return array(self::PROPERTY_CONSTRAINT, self::CLASS_CONSTRAINT); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraintValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraintValidator.php new file mode 100644 index 0000000..a019dd6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraintValidator.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; + +class FailingConstraintValidator extends ConstraintValidator +{ + public function validate($value, Constraint $constraint) + { + $this->context->addViolation($constraint->message, array()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeClassMetadata.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeClassMetadata.php new file mode 100644 index 0000000..8c76a21 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeClassMetadata.php @@ -0,0 +1,26 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Mapping\ClassMetadata; + +class FakeClassMetadata extends ClassMetadata +{ + public function addCustomPropertyMetadata($propertyName, $metadata) + { + if (!isset($this->members[$propertyName])) { + $this->members[$propertyName] = array(); + } + + $this->members[$propertyName][] = $metadata; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeMetadataFactory.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeMetadataFactory.php new file mode 100644 index 0000000..e3f0d9a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeMetadataFactory.php @@ -0,0 +1,72 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Exception\NoSuchMetadataException; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\MetadataInterface; + +class FakeMetadataFactory implements MetadataFactoryInterface +{ + protected $metadatas = array(); + + public function getMetadataFor($class) + { + $hash = null; + + if (is_object($class)) { + $hash = spl_object_hash($class); + $class = get_class($class); + } + + if (!is_string($class)) { + throw new NoSuchMetadataException(sprintf('No metadata for type %s', gettype($class))); + } + + if (!isset($this->metadatas[$class])) { + if (isset($this->metadatas[$hash])) { + return $this->metadatas[$hash]; + } + + throw new NoSuchMetadataException(sprintf('No metadata for "%s"', $class)); + } + + return $this->metadatas[$class]; + } + + public function hasMetadataFor($class) + { + $hash = null; + + if (is_object($class)) { + $hash = spl_object_hash($class); + $class = get_class($class); + } + + if (!is_string($class)) { + return false; + } + + return isset($this->metadatas[$class]) || isset($this->metadatas[$hash]); + } + + public function addMetadata($metadata) + { + $this->metadatas[$metadata->getClassName()] = $metadata; + } + + public function addMetadataForValue($value, MetadataInterface $metadata) + { + $key = is_object($value) ? spl_object_hash($value) : $value; + $this->metadatas[$key] = $metadata; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FilesLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FilesLoader.php new file mode 100644 index 0000000..59d8ee8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FilesLoader.php @@ -0,0 +1,39 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Mapping\Loader\FilesLoader as BaseFilesLoader; +use Symfony\Component\Validator\Mapping\Loader\LoaderInterface; + +abstract class FilesLoader extends BaseFilesLoader +{ + protected $timesCalled = 0; + protected $loader; + + public function __construct(array $paths, LoaderInterface $loader) + { + $this->loader = $loader; + parent::__construct($paths); + } + + protected function getFileLoaderInstance($file) + { + $this->timesCalled++; + + return $this->loader; + } + + public function getTimesCalled() + { + return $this->timesCalled; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/GroupSequenceProviderEntity.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/GroupSequenceProviderEntity.php new file mode 100644 index 0000000..2b0beaf --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/GroupSequenceProviderEntity.php @@ -0,0 +1,36 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraints as Assert; +use Symfony\Component\Validator\GroupSequenceProviderInterface; + +/** + * @Assert\GroupSequenceProvider + */ +class GroupSequenceProviderEntity implements GroupSequenceProviderInterface +{ + public $firstName; + public $lastName; + + protected $sequence = array(); + + public function __construct($sequence) + { + $this->sequence = $sequence; + } + + public function getGroupSequence() + { + return $this->sequence; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraint.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraint.php new file mode 100644 index 0000000..6a9eaa7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraint.php @@ -0,0 +1,18 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +class InvalidConstraint extends Constraint +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraintValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraintValidator.php new file mode 100644 index 0000000..bd9a5cf --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraintValidator.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +class InvalidConstraintValidator +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/LegacyClassMetadata.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/LegacyClassMetadata.php new file mode 100644 index 0000000..6a832a1 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/LegacyClassMetadata.php @@ -0,0 +1,20 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\ClassBasedInterface; +use Symfony\Component\Validator\MetadataInterface; +use Symfony\Component\Validator\PropertyMetadataContainerInterface; + +interface LegacyClassMetadata extends MetadataInterface, PropertyMetadataContainerInterface, ClassBasedInterface +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/PropertyConstraint.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/PropertyConstraint.php new file mode 100644 index 0000000..fadb535 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/PropertyConstraint.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +class PropertyConstraint extends Constraint +{ + public function getTargets() + { + return self::PROPERTY_CONSTRAINT; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Reference.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Reference.php new file mode 100644 index 0000000..af29735 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Reference.php @@ -0,0 +1,29 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +class Reference +{ + public $value; + + private $privateValue; + + public function setPrivateValue($privateValue) + { + $this->privateValue = $privateValue; + } + + public function getPrivateValue() + { + return $this->privateValue; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/StubGlobalExecutionContext.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/StubGlobalExecutionContext.php new file mode 100644 index 0000000..6ae3663 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/StubGlobalExecutionContext.php @@ -0,0 +1,72 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\ConstraintViolationList; +use Symfony\Component\Validator\GlobalExecutionContextInterface; +use Symfony\Component\Validator\ValidationVisitorInterface; + +/** + * @since 2.5.3 + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated + */ +class StubGlobalExecutionContext implements GlobalExecutionContextInterface +{ + private $violations; + + private $root; + + private $visitor; + + public function __construct($root = null, ValidationVisitorInterface $visitor = null) + { + $this->violations = new ConstraintViolationList(); + $this->root = $root; + $this->visitor = $visitor; + } + + public function getViolations() + { + return $this->violations; + } + + public function setRoot($root) + { + $this->root = $root; + } + + public function getRoot() + { + return $this->root; + } + + public function setVisitor(ValidationVisitorInterface $visitor) + { + $this->visitor = $visitor; + } + + public function getVisitor() + { + return $this->visitor; + } + + public function getValidatorFactory() + { + } + + public function getMetadataFactory() + { + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/LegacyExecutionContextTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/LegacyExecutionContextTest.php new file mode 100644 index 0000000..4fec2aa --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/LegacyExecutionContextTest.php @@ -0,0 +1,336 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests; + +use Symfony\Component\Validator\Constraints\Collection; +use Symfony\Component\Validator\Constraints\All; +use Symfony\Component\Validator\ConstraintValidatorFactory; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; +use Symfony\Component\Validator\ExecutionContext; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; +use Symfony\Component\Validator\ValidationVisitor; + +/** + * @group legacy + */ +class LegacyExecutionContextTest extends \PHPUnit_Framework_TestCase +{ + const TRANS_DOMAIN = 'trans_domain'; + + private $visitor; + private $violations; + private $metadata; + private $metadataFactory; + private $globalContext; + private $translator; + + /** + * @var ExecutionContext + */ + private $context; + + protected function setUp() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + $this->visitor = $this->getMockBuilder('Symfony\Component\Validator\ValidationVisitor') + ->disableOriginalConstructor() + ->getMock(); + $this->violations = new ConstraintViolationList(); + $this->metadata = $this->getMock('Symfony\Component\Validator\MetadataInterface'); + $this->metadataFactory = $this->getMock('Symfony\Component\Validator\MetadataFactoryInterface'); + $this->globalContext = $this->getMock('Symfony\Component\Validator\GlobalExecutionContextInterface'); + $this->globalContext->expects($this->any()) + ->method('getRoot') + ->will($this->returnValue('Root')); + $this->globalContext->expects($this->any()) + ->method('getViolations') + ->will($this->returnValue($this->violations)); + $this->globalContext->expects($this->any()) + ->method('getVisitor') + ->will($this->returnValue($this->visitor)); + $this->globalContext->expects($this->any()) + ->method('getMetadataFactory') + ->will($this->returnValue($this->metadataFactory)); + $this->translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface'); + $this->context = new ExecutionContext($this->globalContext, $this->translator, self::TRANS_DOMAIN, $this->metadata, 'currentValue', 'Group', 'foo.bar'); + } + + protected function tearDown() + { + $this->globalContext = null; + $this->context = null; + } + + public function testInit() + { + $this->assertCount(0, $this->context->getViolations()); + $this->assertSame('Root', $this->context->getRoot()); + $this->assertSame('foo.bar', $this->context->getPropertyPath()); + $this->assertSame('Group', $this->context->getGroup()); + } + + public function testClone() + { + $clone = clone $this->context; + + // Cloning the context keeps the reference to the original violation + // list. This way we can efficiently duplicate context instances during + // the validation run and only modify the properties that need to be + // changed. + $this->assertSame($this->context->getViolations(), $clone->getViolations()); + } + + public function testAddViolation() + { + $this->translator->expects($this->once()) + ->method('trans') + ->with('Error', array('foo' => 'bar')) + ->will($this->returnValue('Translated error')); + + $this->context->addViolation('Error', array('foo' => 'bar'), 'invalid'); + + $this->assertEquals(new ConstraintViolationList(array( + new ConstraintViolation( + 'Translated error', + 'Error', + array('foo' => 'bar'), + 'Root', + 'foo.bar', + 'invalid' + ), + )), $this->context->getViolations()); + } + + public function testAddViolationUsesPreconfiguredValueIfNotPassed() + { + $this->translator->expects($this->once()) + ->method('trans') + ->with('Error', array()) + ->will($this->returnValue('Translated error')); + + $this->context->addViolation('Error'); + + $this->assertEquals(new ConstraintViolationList(array( + new ConstraintViolation( + 'Translated error', + 'Error', + array(), + 'Root', + 'foo.bar', + 'currentValue' + ), + )), $this->context->getViolations()); + } + + public function testAddViolationUsesPassedNullValue() + { + $this->translator->expects($this->once()) + ->method('trans') + ->with('Error', array('foo1' => 'bar1')) + ->will($this->returnValue('Translated error')); + $this->translator->expects($this->once()) + ->method('transChoice') + ->with('Choice error', 1, array('foo2' => 'bar2')) + ->will($this->returnValue('Translated choice error')); + + // passed null value should override preconfigured value "invalid" + $this->context->addViolation('Error', array('foo1' => 'bar1'), null); + $this->context->addViolation('Choice error', array('foo2' => 'bar2'), null, 1); + + $this->assertEquals(new ConstraintViolationList(array( + new ConstraintViolation( + 'Translated error', + 'Error', + array('foo1' => 'bar1'), + 'Root', + 'foo.bar', + null + ), + new ConstraintViolation( + 'Translated choice error', + 'Choice error', + array('foo2' => 'bar2'), + 'Root', + 'foo.bar', + null, + 1 + ), + )), $this->context->getViolations()); + } + + public function testAddViolationAt() + { + $this->translator->expects($this->once()) + ->method('trans') + ->with('Error', array('foo' => 'bar')) + ->will($this->returnValue('Translated error')); + + // override preconfigured property path + $this->context->addViolationAt('bam.baz', 'Error', array('foo' => 'bar'), 'invalid'); + + $this->assertEquals(new ConstraintViolationList(array( + new ConstraintViolation( + 'Translated error', + 'Error', + array('foo' => 'bar'), + 'Root', + 'foo.bar.bam.baz', + 'invalid' + ), + )), $this->context->getViolations()); + } + + public function testAddViolationAtUsesPreconfiguredValueIfNotPassed() + { + $this->translator->expects($this->once()) + ->method('trans') + ->with('Error', array()) + ->will($this->returnValue('Translated error')); + + $this->context->addViolationAt('bam.baz', 'Error'); + + $this->assertEquals(new ConstraintViolationList(array( + new ConstraintViolation( + 'Translated error', + 'Error', + array(), + 'Root', + 'foo.bar.bam.baz', + 'currentValue' + ), + )), $this->context->getViolations()); + } + + public function testAddViolationAtUsesPassedNullValue() + { + $this->translator->expects($this->once()) + ->method('trans') + ->with('Error', array('foo' => 'bar')) + ->will($this->returnValue('Translated error')); + $this->translator->expects($this->once()) + ->method('transChoice') + ->with('Choice error', 2, array('foo' => 'bar')) + ->will($this->returnValue('Translated choice error')); + + // passed null value should override preconfigured value "invalid" + $this->context->addViolationAt('bam.baz', 'Error', array('foo' => 'bar'), null); + $this->context->addViolationAt('bam.baz', 'Choice error', array('foo' => 'bar'), null, 2); + + $this->assertEquals(new ConstraintViolationList(array( + new ConstraintViolation( + 'Translated error', + 'Error', + array('foo' => 'bar'), + 'Root', + 'foo.bar.bam.baz', + null + ), + new ConstraintViolation( + 'Translated choice error', + 'Choice error', + array('foo' => 'bar'), + 'Root', + 'foo.bar.bam.baz', + null, + 2 + ), + )), $this->context->getViolations()); + } + + public function testAddViolationPluralTranslationError() + { + $this->translator->expects($this->once()) + ->method('transChoice') + ->with('foo') + ->will($this->throwException(new \InvalidArgumentException())); + $this->translator->expects($this->once()) + ->method('trans') + ->with('foo'); + + $this->context->addViolation('foo', array(), null, 2); + } + + public function testGetPropertyPath() + { + $this->assertEquals('foo.bar', $this->context->getPropertyPath()); + } + + public function testGetPropertyPathWithIndexPath() + { + $this->assertEquals('foo.bar[bam]', $this->context->getPropertyPath('[bam]')); + } + + public function testGetPropertyPathWithEmptyPath() + { + $this->assertEquals('foo.bar', $this->context->getPropertyPath('')); + } + + public function testGetPropertyPathWithEmptyCurrentPropertyPath() + { + $this->context = new ExecutionContext($this->globalContext, $this->translator, self::TRANS_DOMAIN, $this->metadata, 'currentValue', 'Group', ''); + + $this->assertEquals('bam.baz', $this->context->getPropertyPath('bam.baz')); + } + + public function testGetPropertyPathWithNestedCollectionsAndAllMixed() + { + $constraints = new Collection(array( + 'shelves' => new All(array('constraints' => array( + new Collection(array( + 'name' => new ConstraintA(), + 'books' => new All(array('constraints' => array( + new ConstraintA(), + ))), + )), + ))), + 'name' => new ConstraintA(), + )); + $data = array( + 'shelves' => array( + array( + 'name' => 'Research', + 'books' => array('foo', 'bar'), + ), + array( + 'name' => 'VALID', + 'books' => array('foozy', 'VALID', 'bazzy'), + ), + ), + 'name' => 'Library', + ); + $expectedViolationPaths = array( + '[shelves][0][name]', + '[shelves][0][books][0]', + '[shelves][0][books][1]', + '[shelves][1][books][0]', + '[shelves][1][books][2]', + '[name]', + ); + + $visitor = new ValidationVisitor('Root', $this->metadataFactory, new ConstraintValidatorFactory(), $this->translator); + $context = new ExecutionContext($visitor, $this->translator, self::TRANS_DOMAIN); + $context->validateValue($data, $constraints); + + foreach ($context->getViolations() as $violation) { + $violationPaths[] = $violation->getPropertyPath(); + } + + $this->assertEquals($expectedViolationPaths, $violationPaths); + } +} + +class ExecutionContextTest_TestClass +{ + public $myProperty; +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php new file mode 100644 index 0000000..a2de306 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php @@ -0,0 +1,84 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Cache; + +use Doctrine\Common\Cache\ArrayCache; +use Symfony\Component\Validator\Mapping\Cache\DoctrineCache; + +class DoctrineCacheTest extends \PHPUnit_Framework_TestCase +{ + private $cache; + + public function testWrite() + { + $meta = $this->getMockBuilder('Symfony\\Component\\Validator\\Mapping\\ClassMetadata') + ->disableOriginalConstructor() + ->setMethods(array('getClassName')) + ->getMock(); + + $meta->expects($this->once()) + ->method('getClassName') + ->will($this->returnValue('bar')); + + $this->cache->write($meta); + + $this->assertInstanceOf( + 'Symfony\\Component\\Validator\\Mapping\\ClassMetadata', + $this->cache->read('bar'), + 'write() stores metadata' + ); + } + + public function testHas() + { + $meta = $this->getMockBuilder('Symfony\\Component\\Validator\\Mapping\\ClassMetadata') + ->disableOriginalConstructor() + ->setMethods(array('getClassName')) + ->getMock(); + + $meta->expects($this->once()) + ->method('getClassName') + ->will($this->returnValue('bar')); + + $this->assertFalse($this->cache->has('bar'), 'has() returns false when there is no entry'); + + $this->cache->write($meta); + $this->assertTrue($this->cache->has('bar'), 'has() returns true when the is an entry'); + } + + public function testRead() + { + $meta = $this->getMockBuilder('Symfony\\Component\\Validator\\Mapping\\ClassMetadata') + ->disableOriginalConstructor() + ->setMethods(array('getClassName')) + ->getMock(); + + $meta->expects($this->once()) + ->method('getClassName') + ->will($this->returnValue('bar')); + + $this->assertFalse($this->cache->read('bar'), 'read() returns false when there is no entry'); + + $this->cache->write($meta); + + $this->assertInstanceOf( + 'Symfony\\Component\\Validator\\Mapping\\ClassMetadata', + $this->cache->read('bar'), + 'read() returns metadata' + ); + } + + protected function setUp() + { + $this->cache = new DoctrineCache(new ArrayCache()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/LegacyApcCacheTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/LegacyApcCacheTest.php new file mode 100644 index 0000000..bb69cf5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/LegacyApcCacheTest.php @@ -0,0 +1,83 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Cache; + +use Symfony\Component\Validator\Mapping\Cache\ApcCache; + +/** + * @group legacy + */ +class LegacyApcCacheTest extends \PHPUnit_Framework_TestCase +{ + protected function setUp() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + if (!extension_loaded('apc') || !ini_get('apc.enable_cli')) { + $this->markTestSkipped('APC is not loaded.'); + } + } + + public function testWrite() + { + $meta = $this->getMockBuilder('Symfony\\Component\\Validator\\Mapping\\ClassMetadata') + ->disableOriginalConstructor() + ->setMethods(array('getClassName')) + ->getMock(); + + $meta->expects($this->once()) + ->method('getClassName') + ->will($this->returnValue('bar')); + + $cache = new ApcCache('foo'); + $cache->write($meta); + + $this->assertInstanceOf('Symfony\\Component\\Validator\\Mapping\\ClassMetadata', apc_fetch('foobar'), '->write() stores metadata in APC'); + } + + public function testHas() + { + $meta = $this->getMockBuilder('Symfony\\Component\\Validator\\Mapping\\ClassMetadata') + ->disableOriginalConstructor() + ->setMethods(array('getClassName')) + ->getMock(); + + $meta->expects($this->once()) + ->method('getClassName') + ->will($this->returnValue('bar')); + + apc_delete('foobar'); + + $cache = new ApcCache('foo'); + $this->assertFalse($cache->has('bar'), '->has() returns false when there is no entry'); + + $cache->write($meta); + $this->assertTrue($cache->has('bar'), '->has() returns true when the is an entry'); + } + + public function testRead() + { + $meta = $this->getMockBuilder('Symfony\\Component\\Validator\\Mapping\\ClassMetadata') + ->disableOriginalConstructor() + ->setMethods(array('getClassName')) + ->getMock(); + + $meta->expects($this->once()) + ->method('getClassName') + ->will($this->returnValue('bar')); + + $cache = new ApcCache('foo'); + $cache->write($meta); + + $this->assertInstanceOf('Symfony\\Component\\Validator\\Mapping\\ClassMetadata', $cache->read('bar'), '->read() returns metadata'); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php new file mode 100644 index 0000000..8634ac5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php @@ -0,0 +1,280 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintB; +use Symfony\Component\Validator\Tests\Fixtures\PropertyConstraint; + +class ClassMetadataTest extends \PHPUnit_Framework_TestCase +{ + const CLASSNAME = 'Symfony\Component\Validator\Tests\Fixtures\Entity'; + const PARENTCLASS = 'Symfony\Component\Validator\Tests\Fixtures\EntityParent'; + const PROVIDERCLASS = 'Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity'; + + protected $metadata; + + protected function setUp() + { + $this->metadata = new ClassMetadata(self::CLASSNAME); + } + + protected function tearDown() + { + $this->metadata = null; + } + + public function testAddConstraintDoesNotAcceptValid() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\ConstraintDefinitionException'); + + $this->metadata->addConstraint(new Valid()); + } + + public function testAddConstraintRequiresClassConstraints() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\ConstraintDefinitionException'); + + $this->metadata->addConstraint(new PropertyConstraint()); + } + + public function testAddPropertyConstraints() + { + $this->metadata->addPropertyConstraint('firstName', new ConstraintA()); + $this->metadata->addPropertyConstraint('lastName', new ConstraintB()); + + $this->assertEquals(array('firstName', 'lastName'), $this->metadata->getConstrainedProperties()); + } + + public function testAddMultiplePropertyConstraints() + { + $this->metadata->addPropertyConstraints('lastName', array(new ConstraintA(), new ConstraintB())); + + $constraints = array( + new ConstraintA(array('groups' => array('Default', 'Entity'))), + new ConstraintB(array('groups' => array('Default', 'Entity'))), + ); + + $properties = $this->metadata->getPropertyMetadata('lastName'); + + $this->assertCount(1, $properties); + $this->assertEquals('lastName', $properties[0]->getName()); + $this->assertEquals($constraints, $properties[0]->getConstraints()); + } + + public function testAddGetterConstraints() + { + $this->metadata->addGetterConstraint('lastName', new ConstraintA()); + $this->metadata->addGetterConstraint('lastName', new ConstraintB()); + + $constraints = array( + new ConstraintA(array('groups' => array('Default', 'Entity'))), + new ConstraintB(array('groups' => array('Default', 'Entity'))), + ); + + $properties = $this->metadata->getPropertyMetadata('lastName'); + + $this->assertCount(1, $properties); + $this->assertEquals('getLastName', $properties[0]->getName()); + $this->assertEquals($constraints, $properties[0]->getConstraints()); + } + + public function testAddMultipleGetterConstraints() + { + $this->metadata->addGetterConstraints('lastName', array(new ConstraintA(), new ConstraintB())); + + $constraints = array( + new ConstraintA(array('groups' => array('Default', 'Entity'))), + new ConstraintB(array('groups' => array('Default', 'Entity'))), + ); + + $properties = $this->metadata->getPropertyMetadata('lastName'); + + $this->assertCount(1, $properties); + $this->assertEquals('getLastName', $properties[0]->getName()); + $this->assertEquals($constraints, $properties[0]->getConstraints()); + } + + public function testMergeConstraintsMergesClassConstraints() + { + $parent = new ClassMetadata(self::PARENTCLASS); + $parent->addConstraint(new ConstraintA()); + + $this->metadata->mergeConstraints($parent); + $this->metadata->addConstraint(new ConstraintA()); + + $constraints = array( + new ConstraintA(array('groups' => array( + 'Default', + 'EntityParent', + 'Entity', + ))), + new ConstraintA(array('groups' => array( + 'Default', + 'Entity', + ))), + ); + + $this->assertEquals($constraints, $this->metadata->getConstraints()); + } + + public function testMergeConstraintsMergesMemberConstraints() + { + $parent = new ClassMetadata(self::PARENTCLASS); + $parent->addPropertyConstraint('firstName', new ConstraintA()); + + $this->metadata->mergeConstraints($parent); + $this->metadata->addPropertyConstraint('firstName', new ConstraintA()); + + $constraints = array( + new ConstraintA(array('groups' => array( + 'Default', + 'EntityParent', + 'Entity', + ))), + new ConstraintA(array('groups' => array( + 'Default', + 'Entity', + ))), + ); + + $members = $this->metadata->getPropertyMetadata('firstName'); + + $this->assertCount(1, $members); + $this->assertEquals(self::PARENTCLASS, $members[0]->getClassName()); + $this->assertEquals($constraints, $members[0]->getConstraints()); + } + + public function testMemberMetadatas() + { + $this->metadata->addPropertyConstraint('firstName', new ConstraintA()); + + $this->assertTrue($this->metadata->hasPropertyMetadata('firstName')); + $this->assertFalse($this->metadata->hasPropertyMetadata('non_existant_field')); + } + + public function testMergeConstraintsKeepsPrivateMembersSeparate() + { + $parent = new ClassMetadata(self::PARENTCLASS); + $parent->addPropertyConstraint('internal', new ConstraintA()); + + $this->metadata->mergeConstraints($parent); + $this->metadata->addPropertyConstraint('internal', new ConstraintA()); + + $parentConstraints = array( + new ConstraintA(array('groups' => array( + 'Default', + 'EntityParent', + 'Entity', + ))), + ); + $constraints = array( + new ConstraintA(array('groups' => array( + 'Default', + 'Entity', + ))), + ); + + $members = $this->metadata->getPropertyMetadata('internal'); + + $this->assertCount(2, $members); + $this->assertEquals(self::PARENTCLASS, $members[0]->getClassName()); + $this->assertEquals($parentConstraints, $members[0]->getConstraints()); + $this->assertEquals(self::CLASSNAME, $members[1]->getClassName()); + $this->assertEquals($constraints, $members[1]->getConstraints()); + } + + public function testGetReflectionClass() + { + $reflClass = new \ReflectionClass(self::CLASSNAME); + + $this->assertEquals($reflClass, $this->metadata->getReflectionClass()); + } + + public function testSerialize() + { + $this->metadata->addConstraint(new ConstraintA(array('property1' => 'A'))); + $this->metadata->addConstraint(new ConstraintB(array('groups' => 'TestGroup'))); + $this->metadata->addPropertyConstraint('firstName', new ConstraintA()); + $this->metadata->addGetterConstraint('lastName', new ConstraintB()); + + $metadata = unserialize(serialize($this->metadata)); + + $this->assertEquals($this->metadata, $metadata); + } + + public function testGroupSequencesWorkIfContainingDefaultGroup() + { + $this->metadata->setGroupSequence(array('Foo', $this->metadata->getDefaultGroup())); + } + + public function testGroupSequencesFailIfNotContainingDefaultGroup() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\GroupDefinitionException'); + + $this->metadata->setGroupSequence(array('Foo', 'Bar')); + } + + public function testGroupSequencesFailIfContainingDefault() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\GroupDefinitionException'); + + $this->metadata->setGroupSequence(array('Foo', $this->metadata->getDefaultGroup(), Constraint::DEFAULT_GROUP)); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\GroupDefinitionException + */ + public function testGroupSequenceFailsIfGroupSequenceProviderIsSet() + { + $metadata = new ClassMetadata(self::PROVIDERCLASS); + $metadata->setGroupSequenceProvider(true); + $metadata->setGroupSequence(array('GroupSequenceProviderEntity', 'Foo')); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\GroupDefinitionException + */ + public function testGroupSequenceProviderFailsIfGroupSequenceIsSet() + { + $metadata = new ClassMetadata(self::PROVIDERCLASS); + $metadata->setGroupSequence(array('GroupSequenceProviderEntity', 'Foo')); + $metadata->setGroupSequenceProvider(true); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\GroupDefinitionException + */ + public function testGroupSequenceProviderFailsIfDomainClassIsInvalid() + { + $metadata = new ClassMetadata('stdClass'); + $metadata->setGroupSequenceProvider(true); + } + + public function testGroupSequenceProvider() + { + $metadata = new ClassMetadata(self::PROVIDERCLASS); + $metadata->setGroupSequenceProvider(true); + $this->assertTrue($metadata->isGroupSequenceProvider()); + } + + /** + * https://github.com/symfony/symfony/issues/11604. + */ + public function testGetPropertyMetadataReturnsEmptyArrayWithoutConfiguredMetadata() + { + $this->assertCount(0, $this->metadata->getPropertyMetadata('foo'), '->getPropertyMetadata() returns an empty collection if no metadata is configured for the given property'); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php new file mode 100644 index 0000000..641bf91 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Factory; + +use Symfony\Component\Validator\Mapping\Factory\BlackHoleMetadataFactory; + +class BlackHoleMetadataFactoryTest extends \PHPUnit_Framework_TestCase +{ + /** + * @expectedException \LogicException + */ + public function testGetMetadataForThrowsALogicException() + { + $metadataFactory = new BlackHoleMetadataFactory(); + $metadataFactory->getMetadataFor('foo'); + } + + public function testHasMetadataForReturnsFalse() + { + $metadataFactory = new BlackHoleMetadataFactory(); + + $this->assertFalse($metadataFactory->hasMetadataFor('foo')); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php new file mode 100644 index 0000000..74ee912 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php @@ -0,0 +1,118 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Factory; + +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory; +use Symfony\Component\Validator\Mapping\Loader\LoaderInterface; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; + +class LazyLoadingMetadataFactoryTest extends \PHPUnit_Framework_TestCase +{ + const CLASSNAME = 'Symfony\Component\Validator\Tests\Fixtures\Entity'; + const PARENTCLASS = 'Symfony\Component\Validator\Tests\Fixtures\EntityParent'; + + public function testLoadClassMetadata() + { + $factory = new LazyLoadingMetadataFactory(new TestLoader()); + $metadata = $factory->getMetadataFor(self::PARENTCLASS); + + $constraints = array( + new ConstraintA(array('groups' => array('Default', 'EntityParent'))), + ); + + $this->assertEquals($constraints, $metadata->getConstraints()); + } + + public function testMergeParentConstraints() + { + $factory = new LazyLoadingMetadataFactory(new TestLoader()); + $metadata = $factory->getMetadataFor(self::CLASSNAME); + + $constraints = array( + new ConstraintA(array('groups' => array( + 'Default', + 'EntityParent', + 'Entity', + ))), + new ConstraintA(array('groups' => array( + 'Default', + 'EntityInterface', + 'Entity', + ))), + new ConstraintA(array('groups' => array( + 'Default', + 'Entity', + ))), + ); + + $this->assertEquals($constraints, $metadata->getConstraints()); + } + + public function testWriteMetadataToCache() + { + $cache = $this->getMock('Symfony\Component\Validator\Mapping\Cache\CacheInterface'); + $factory = new LazyLoadingMetadataFactory(new TestLoader(), $cache); + + $tester = $this; + $constraints = array( + new ConstraintA(array('groups' => array('Default', 'EntityParent'))), + ); + + $cache->expects($this->never()) + ->method('has'); + $cache->expects($this->once()) + ->method('read') + ->with($this->equalTo(self::PARENTCLASS)) + ->will($this->returnValue(false)); + $cache->expects($this->once()) + ->method('write') + ->will($this->returnCallback(function ($metadata) use ($tester, $constraints) { + $tester->assertEquals($constraints, $metadata->getConstraints()); + })); + + $metadata = $factory->getMetadataFor(self::PARENTCLASS); + + $this->assertEquals(self::PARENTCLASS, $metadata->getClassName()); + $this->assertEquals($constraints, $metadata->getConstraints()); + } + + public function testReadMetadataFromCache() + { + $loader = $this->getMock('Symfony\Component\Validator\Mapping\Loader\LoaderInterface'); + $cache = $this->getMock('Symfony\Component\Validator\Mapping\Cache\CacheInterface'); + $factory = new LazyLoadingMetadataFactory($loader, $cache); + + $tester = $this; + $metadata = new ClassMetadata(self::PARENTCLASS); + $metadata->addConstraint(new ConstraintA()); + + $loader->expects($this->never()) + ->method('loadClassMetadata'); + + $cache->expects($this->never()) + ->method('has'); + $cache->expects($this->once()) + ->method('read') + ->will($this->returnValue($metadata)); + + $this->assertEquals($metadata, $factory->getMetadataFor(self::PARENTCLASS)); + } +} + +class TestLoader implements LoaderInterface +{ + public function loadClassMetadata(ClassMetadata $metadata) + { + $metadata->addConstraint(new ConstraintA()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php new file mode 100644 index 0000000..0781599 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php @@ -0,0 +1,62 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping; + +use Symfony\Component\Validator\Mapping\GetterMetadata; +use Symfony\Component\Validator\Tests\Fixtures\Entity; + +class GetterMetadataTest extends \PHPUnit_Framework_TestCase +{ + const CLASSNAME = 'Symfony\Component\Validator\Tests\Fixtures\Entity'; + + public function testInvalidPropertyName() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\ValidatorException'); + + new GetterMetadata(self::CLASSNAME, 'foobar'); + } + + public function testGetPropertyValueFromPublicGetter() + { + // private getters don't work yet because ReflectionMethod::setAccessible() + // does not exist yet in a stable PHP release + + $entity = new Entity('foobar'); + $metadata = new GetterMetadata(self::CLASSNAME, 'internal'); + + $this->assertEquals('foobar from getter', $metadata->getPropertyValue($entity)); + } + + public function testGetPropertyValueFromOverriddenPublicGetter() + { + $entity = new Entity(); + $metadata = new GetterMetadata(self::CLASSNAME, 'data'); + + $this->assertEquals('Overridden data', $metadata->getPropertyValue($entity)); + } + + public function testGetPropertyValueFromIsser() + { + $entity = new Entity(); + $metadata = new GetterMetadata(self::CLASSNAME, 'valid'); + + $this->assertEquals('valid', $metadata->getPropertyValue($entity)); + } + + public function testGetPropertyValueFromHasser() + { + $entity = new Entity(); + $metadata = new GetterMetadata(self::CLASSNAME, 'permissions'); + + $this->assertEquals('permissions', $metadata->getPropertyValue($entity)); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/LegacyElementMetadataTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/LegacyElementMetadataTest.php new file mode 100644 index 0000000..c77e6fe --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/LegacyElementMetadataTest.php @@ -0,0 +1,80 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping; + +use Symfony\Component\Validator\Mapping\ElementMetadata; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintB; + +/** + * @group legacy + */ +class LegacyElementMetadataTest extends \PHPUnit_Framework_TestCase +{ + protected $metadata; + + protected function setUp() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + $this->metadata = new TestElementMetadata(); + } + + protected function tearDown() + { + $this->metadata = null; + } + + public function testAddConstraints() + { + $this->metadata->addConstraint($constraint1 = new ConstraintA()); + $this->metadata->addConstraint($constraint2 = new ConstraintA()); + + $this->assertEquals(array($constraint1, $constraint2), $this->metadata->getConstraints()); + } + + public function testMultipleConstraintsOfTheSameType() + { + $constraint1 = new ConstraintA(array('property1' => 'A')); + $constraint2 = new ConstraintA(array('property1' => 'B')); + + $this->metadata->addConstraint($constraint1); + $this->metadata->addConstraint($constraint2); + + $this->assertEquals(array($constraint1, $constraint2), $this->metadata->getConstraints()); + } + + public function testFindConstraintsByGroup() + { + $constraint1 = new ConstraintA(array('groups' => 'TestGroup')); + $constraint2 = new ConstraintB(); + + $this->metadata->addConstraint($constraint1); + $this->metadata->addConstraint($constraint2); + + $this->assertEquals(array($constraint1), $this->metadata->findConstraints('TestGroup')); + } + + public function testSerialize() + { + $this->metadata->addConstraint(new ConstraintA(array('property1' => 'A'))); + $this->metadata->addConstraint(new ConstraintB(array('groups' => 'TestGroup'))); + + $metadata = unserialize(serialize($this->metadata)); + + $this->assertEquals($this->metadata, $metadata); + } +} + +class TestElementMetadata extends ElementMetadata +{ +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php new file mode 100644 index 0000000..08f219d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php @@ -0,0 +1,10 @@ +<?php + +namespace Symfony\Component\Validator\Tests\Mapping\Loader; + +use Symfony\Component\Validator\Mapping\ClassMetadata; + +abstract class AbstractStaticMethodLoader +{ + abstract public static function loadMetadata(ClassMetadata $metadata); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php new file mode 100644 index 0000000..ad98aa1 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php @@ -0,0 +1,172 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Loader; + +use Doctrine\Common\Annotations\AnnotationReader; +use Symfony\Component\Validator\Constraints\All; +use Symfony\Component\Validator\Constraints\Callback; +use Symfony\Component\Validator\Constraints\Choice; +use Symfony\Component\Validator\Constraints\Collection; +use Symfony\Component\Validator\Constraints\NotNull; +use Symfony\Component\Validator\Constraints\Range; +use Symfony\Component\Validator\Constraints\True; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; + +require_once __DIR__.'/../../../Constraints/All.php'; +require_once __DIR__.'/../../../Constraints/Callback.php'; +require_once __DIR__.'/../../../Constraints/Choice.php'; +require_once __DIR__.'/../../../Constraints/Collection.php'; +require_once __DIR__.'/../../../Constraints/GroupSequence.php'; +require_once __DIR__.'/../../../Constraints/GroupSequenceProvider.php'; +require_once __DIR__.'/../../../Constraints/NotNull.php'; +require_once __DIR__.'/../../../Constraints/Range.php'; +require_once __DIR__.'/../../Fixtures/ConstraintA.php'; + +class AnnotationLoaderTest extends \PHPUnit_Framework_TestCase +{ + public function testLoadClassMetadataReturnsTrueIfSuccessful() + { + $reader = new AnnotationReader(); + $loader = new AnnotationLoader($reader); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $this->assertTrue($loader->loadClassMetadata($metadata)); + } + + public function testLoadClassMetadataReturnsFalseIfNotSuccessful() + { + $loader = new AnnotationLoader(new AnnotationReader()); + $metadata = new ClassMetadata('\stdClass'); + + $this->assertFalse($loader->loadClassMetadata($metadata)); + } + + public function testLoadClassMetadata() + { + $loader = new AnnotationLoader(new AnnotationReader()); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $loader->loadClassMetadata($metadata); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + $expected->setGroupSequence(array('Foo', 'Entity')); + $expected->addConstraint(new ConstraintA()); + $expected->addConstraint(new Callback(array('Symfony\Component\Validator\Tests\Fixtures\CallbackClass', 'callback'))); + $expected->addConstraint(new Callback('validateMe')); + $expected->addConstraint(new Callback('validateMeStatic')); + $expected->addPropertyConstraint('firstName', new NotNull()); + $expected->addPropertyConstraint('firstName', new Range(array('min' => 3))); + $expected->addPropertyConstraint('firstName', new All(array(new NotNull(), new Range(array('min' => 3))))); + $expected->addPropertyConstraint('firstName', new All(array('constraints' => array(new NotNull(), new Range(array('min' => 3)))))); + $expected->addPropertyConstraint('firstName', new Collection(array('fields' => array( + 'foo' => array(new NotNull(), new Range(array('min' => 3))), + 'bar' => new Range(array('min' => 5)), + )))); + $expected->addPropertyConstraint('firstName', new Choice(array( + 'message' => 'Must be one of %choices%', + 'choices' => array('A', 'B'), + ))); + $expected->addGetterConstraint('lastName', new NotNull()); + $expected->addGetterConstraint('valid', new True()); + $expected->addGetterConstraint('permissions', new True()); + + // load reflection class so that the comparison passes + $expected->getReflectionClass(); + + $this->assertEquals($expected, $metadata); + } + + /** + * Test MetaData merge with parent annotation. + */ + public function testLoadParentClassMetadata() + { + $loader = new AnnotationLoader(new AnnotationReader()); + + // Load Parent MetaData + $parent_metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\EntityParent'); + $loader->loadClassMetadata($parent_metadata); + + $expected_parent = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\EntityParent'); + $expected_parent->addPropertyConstraint('other', new NotNull()); + $expected_parent->getReflectionClass(); + + $this->assertEquals($expected_parent, $parent_metadata); + } + /** + * Test MetaData merge with parent annotation. + */ + public function testLoadClassMetadataAndMerge() + { + $loader = new AnnotationLoader(new AnnotationReader()); + + // Load Parent MetaData + $parent_metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\EntityParent'); + $loader->loadClassMetadata($parent_metadata); + + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + // Merge parent metaData. + $metadata->mergeConstraints($parent_metadata); + + $loader->loadClassMetadata($metadata); + + $expected_parent = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\EntityParent'); + $expected_parent->addPropertyConstraint('other', new NotNull()); + $expected_parent->getReflectionClass(); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + $expected->mergeConstraints($expected_parent); + + $expected->setGroupSequence(array('Foo', 'Entity')); + $expected->addConstraint(new ConstraintA()); + $expected->addConstraint(new Callback(array('Symfony\Component\Validator\Tests\Fixtures\CallbackClass', 'callback'))); + $expected->addConstraint(new Callback('validateMe')); + $expected->addConstraint(new Callback('validateMeStatic')); + $expected->addPropertyConstraint('firstName', new NotNull()); + $expected->addPropertyConstraint('firstName', new Range(array('min' => 3))); + $expected->addPropertyConstraint('firstName', new All(array(new NotNull(), new Range(array('min' => 3))))); + $expected->addPropertyConstraint('firstName', new All(array('constraints' => array(new NotNull(), new Range(array('min' => 3)))))); + $expected->addPropertyConstraint('firstName', new Collection(array('fields' => array( + 'foo' => array(new NotNull(), new Range(array('min' => 3))), + 'bar' => new Range(array('min' => 5)), + )))); + $expected->addPropertyConstraint('firstName', new Choice(array( + 'message' => 'Must be one of %choices%', + 'choices' => array('A', 'B'), + ))); + $expected->addGetterConstraint('lastName', new NotNull()); + $expected->addGetterConstraint('valid', new True()); + $expected->addGetterConstraint('permissions', new True()); + + // load reflection class so that the comparison passes + $expected->getReflectionClass(); + + $this->assertEquals($expected, $metadata); + } + + public function testLoadGroupSequenceProviderAnnotation() + { + $loader = new AnnotationLoader(new AnnotationReader()); + + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity'); + $loader->loadClassMetadata($metadata); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity'); + $expected->setGroupSequenceProvider(true); + $expected->getReflectionClass(); + + $this->assertEquals($expected, $metadata); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php new file mode 100644 index 0000000..09e6e44 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php @@ -0,0 +1,48 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Loader; + +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\Loader\LoaderInterface; + +class FilesLoaderTest extends \PHPUnit_Framework_TestCase +{ + public function testCallsGetFileLoaderInstanceForeachPath() + { + $loader = $this->getFilesLoader($this->getFileLoader()); + $this->assertEquals(4, $loader->getTimesCalled()); + } + + public function testCallsActualFileLoaderForMetadata() + { + $fileLoader = $this->getFileLoader(); + $fileLoader->expects($this->exactly(4)) + ->method('loadClassMetadata'); + $loader = $this->getFilesLoader($fileLoader); + $loader->loadClassMetadata(new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity')); + } + + public function getFilesLoader(LoaderInterface $loader) + { + return $this->getMockForAbstractClass('Symfony\Component\Validator\Tests\Fixtures\FilesLoader', array(array( + __DIR__.'/constraint-mapping.xml', + __DIR__.'/constraint-mapping.yaml', + __DIR__.'/constraint-mapping.test', + __DIR__.'/constraint-mapping.txt', + ), $loader)); + } + + public function getFileLoader() + { + return $this->getMock('Symfony\Component\Validator\Mapping\Loader\LoaderInterface'); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/LoaderChainTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/LoaderChainTest.php new file mode 100644 index 0000000..647a568 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/LoaderChainTest.php @@ -0,0 +1,84 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Loader; + +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\Loader\LoaderChain; + +class LoaderChainTest extends \PHPUnit_Framework_TestCase +{ + public function testAllLoadersAreCalled() + { + $metadata = new ClassMetadata('\stdClass'); + + $loader1 = $this->getMock('Symfony\Component\Validator\Mapping\Loader\LoaderInterface'); + $loader1->expects($this->once()) + ->method('loadClassMetadata') + ->with($this->equalTo($metadata)); + + $loader2 = $this->getMock('Symfony\Component\Validator\Mapping\Loader\LoaderInterface'); + $loader2->expects($this->once()) + ->method('loadClassMetadata') + ->with($this->equalTo($metadata)); + + $chain = new LoaderChain(array( + $loader1, + $loader2, + )); + + $chain->loadClassMetadata($metadata); + } + + public function testReturnsTrueIfAnyLoaderReturnedTrue() + { + $metadata = new ClassMetadata('\stdClass'); + + $loader1 = $this->getMock('Symfony\Component\Validator\Mapping\Loader\LoaderInterface'); + $loader1->expects($this->any()) + ->method('loadClassMetadata') + ->will($this->returnValue(true)); + + $loader2 = $this->getMock('Symfony\Component\Validator\Mapping\Loader\LoaderInterface'); + $loader2->expects($this->any()) + ->method('loadClassMetadata') + ->will($this->returnValue(false)); + + $chain = new LoaderChain(array( + $loader1, + $loader2, + )); + + $this->assertTrue($chain->loadClassMetadata($metadata)); + } + + public function testReturnsFalseIfNoLoaderReturnedTrue() + { + $metadata = new ClassMetadata('\stdClass'); + + $loader1 = $this->getMock('Symfony\Component\Validator\Mapping\Loader\LoaderInterface'); + $loader1->expects($this->any()) + ->method('loadClassMetadata') + ->will($this->returnValue(false)); + + $loader2 = $this->getMock('Symfony\Component\Validator\Mapping\Loader\LoaderInterface'); + $loader2->expects($this->any()) + ->method('loadClassMetadata') + ->will($this->returnValue(false)); + + $chain = new LoaderChain(array( + $loader1, + $loader2, + )); + + $this->assertFalse($chain->loadClassMetadata($metadata)); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php new file mode 100644 index 0000000..5829336 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php @@ -0,0 +1,143 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Loader; + +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; + +class StaticMethodLoaderTest extends \PHPUnit_Framework_TestCase +{ + private $errorLevel; + + protected function setUp() + { + $this->errorLevel = error_reporting(); + } + + protected function tearDown() + { + error_reporting($this->errorLevel); + } + + public function testLoadClassMetadataReturnsTrueIfSuccessful() + { + $loader = new StaticMethodLoader('loadMetadata'); + $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderEntity'); + + $this->assertTrue($loader->loadClassMetadata($metadata)); + } + + public function testLoadClassMetadataReturnsFalseIfNotSuccessful() + { + $loader = new StaticMethodLoader('loadMetadata'); + $metadata = new ClassMetadata('\stdClass'); + + $this->assertFalse($loader->loadClassMetadata($metadata)); + } + + public function testLoadClassMetadata() + { + $loader = new StaticMethodLoader('loadMetadata'); + $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderEntity'); + + $loader->loadClassMetadata($metadata); + + $this->assertEquals(StaticLoaderEntity::$invokedWith, $metadata); + } + + public function testLoadClassMetadataDoesNotRepeatLoadWithParentClasses() + { + $loader = new StaticMethodLoader('loadMetadata'); + $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderDocument'); + $loader->loadClassMetadata($metadata); + $this->assertCount(0, $metadata->getConstraints()); + + $loader = new StaticMethodLoader('loadMetadata'); + $metadata = new ClassMetadata(__NAMESPACE__.'\BaseStaticLoaderDocument'); + $loader->loadClassMetadata($metadata); + $this->assertCount(1, $metadata->getConstraints()); + } + + public function testLoadClassMetadataIgnoresInterfaces() + { + $loader = new StaticMethodLoader('loadMetadata'); + $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderInterface'); + + $loader->loadClassMetadata($metadata); + + $this->assertCount(0, $metadata->getConstraints()); + } + + public function testLoadClassMetadataInAbstractClasses() + { + $loader = new StaticMethodLoader('loadMetadata'); + $metadata = new ClassMetadata(__NAMESPACE__.'\AbstractStaticLoader'); + + $loader->loadClassMetadata($metadata); + + $this->assertCount(1, $metadata->getConstraints()); + } + + public function testLoadClassMetadataIgnoresAbstractMethods() + { + // Disable error reporting, as AbstractStaticMethodLoader produces a + // strict standards error + error_reporting(0); + + if (0 !== error_reporting()) { + $this->markTestSkipped('Could not disable error reporting'); + } + + $metadata = new ClassMetadata(__NAMESPACE__.'\AbstractStaticMethodLoader'); + + $loader = new StaticMethodLoader('loadMetadata'); + $loader->loadClassMetadata($metadata); + + $this->assertCount(0, $metadata->getConstraints()); + } +} + +interface StaticLoaderInterface +{ + public static function loadMetadata(ClassMetadata $metadata); +} + +abstract class AbstractStaticLoader +{ + public static function loadMetadata(ClassMetadata $metadata) + { + $metadata->addConstraint(new ConstraintA()); + } +} + +class StaticLoaderEntity +{ + public static $invokedWith = null; + + public static function loadMetadata(ClassMetadata $metadata) + { + self::$invokedWith = $metadata; + } +} + +class StaticLoaderDocument extends BaseStaticLoaderDocument +{ +} + +class BaseStaticLoaderDocument +{ + public static function loadMetadata(ClassMetadata $metadata) + { + $metadata->addConstraint(new ConstraintA()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php new file mode 100644 index 0000000..8ab2065 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php @@ -0,0 +1,133 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Loader; + +use Symfony\Component\Validator\Constraints\All; +use Symfony\Component\Validator\Constraints\Callback; +use Symfony\Component\Validator\Constraints\Choice; +use Symfony\Component\Validator\Constraints\Collection; +use Symfony\Component\Validator\Constraints\NotNull; +use Symfony\Component\Validator\Constraints\Range; +use Symfony\Component\Validator\Constraints\Regex; +use Symfony\Component\Validator\Constraints\True; +use Symfony\Component\Validator\Exception\MappingException; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\Loader\XmlFileLoader; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintB; + +class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase +{ + public function testLoadClassMetadataReturnsTrueIfSuccessful() + { + $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $this->assertTrue($loader->loadClassMetadata($metadata)); + } + + public function testLoadClassMetadataReturnsFalseIfNotSuccessful() + { + $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); + $metadata = new ClassMetadata('\stdClass'); + + $this->assertFalse($loader->loadClassMetadata($metadata)); + } + + public function testLoadClassMetadata() + { + $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $loader->loadClassMetadata($metadata); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + $expected->setGroupSequence(array('Foo', 'Entity')); + $expected->addConstraint(new ConstraintA()); + $expected->addConstraint(new ConstraintB()); + $expected->addConstraint(new Callback('validateMe')); + $expected->addConstraint(new Callback('validateMeStatic')); + $expected->addConstraint(new Callback(array('Symfony\Component\Validator\Tests\Fixtures\CallbackClass', 'callback'))); + $expected->addPropertyConstraint('firstName', new NotNull()); + $expected->addPropertyConstraint('firstName', new Range(array('min' => 3))); + $expected->addPropertyConstraint('firstName', new Choice(array('A', 'B'))); + $expected->addPropertyConstraint('firstName', new All(array(new NotNull(), new Range(array('min' => 3))))); + $expected->addPropertyConstraint('firstName', new All(array('constraints' => array(new NotNull(), new Range(array('min' => 3)))))); + $expected->addPropertyConstraint('firstName', new Collection(array('fields' => array( + 'foo' => array(new NotNull(), new Range(array('min' => 3))), + 'bar' => array(new Range(array('min' => 5))), + )))); + $expected->addPropertyConstraint('firstName', new Choice(array( + 'message' => 'Must be one of %choices%', + 'choices' => array('A', 'B'), + ))); + $expected->addGetterConstraint('lastName', new NotNull()); + $expected->addGetterConstraint('valid', new True()); + $expected->addGetterConstraint('permissions', new True()); + + $this->assertEquals($expected, $metadata); + } + + public function testLoadClassMetadataWithNonStrings() + { + $loader = new XmlFileLoader(__DIR__.'/constraint-mapping-non-strings.xml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $loader->loadClassMetadata($metadata); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + $expected->addPropertyConstraint('firstName', new Regex(array('pattern' => '/^1/', 'match' => false))); + + $properties = $metadata->getPropertyMetadata('firstName'); + $constraints = $properties[0]->getConstraints(); + + $this->assertFalse($constraints[0]->match); + } + + public function testLoadGroupSequenceProvider() + { + $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity'); + + $loader->loadClassMetadata($metadata); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity'); + $expected->setGroupSequenceProvider(true); + + $this->assertEquals($expected, $metadata); + } + + public function testThrowExceptionIfDocTypeIsSet() + { + $loader = new XmlFileLoader(__DIR__.'/withdoctype.xml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $this->setExpectedException('\Symfony\Component\Validator\Exception\MappingException'); + $loader->loadClassMetadata($metadata); + } + + /** + * @see https://github.com/symfony/symfony/pull/12158 + */ + public function testDoNotModifyStateIfExceptionIsThrown() + { + $loader = new XmlFileLoader(__DIR__.'/withdoctype.xml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + try { + $loader->loadClassMetadata($metadata); + } catch (MappingException $e) { + $this->setExpectedException('\Symfony\Component\Validator\Exception\MappingException'); + $loader->loadClassMetadata($metadata); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php new file mode 100644 index 0000000..806a2b0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php @@ -0,0 +1,123 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping\Loader; + +use Symfony\Component\Validator\Constraints\All; +use Symfony\Component\Validator\Constraints\Callback; +use Symfony\Component\Validator\Constraints\Choice; +use Symfony\Component\Validator\Constraints\Collection; +use Symfony\Component\Validator\Constraints\NotNull; +use Symfony\Component\Validator\Constraints\Range; +use Symfony\Component\Validator\Constraints\True; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintB; + +class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase +{ + public function testLoadClassMetadataReturnsFalseIfEmpty() + { + $loader = new YamlFileLoader(__DIR__.'/empty-mapping.yml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $this->assertFalse($loader->loadClassMetadata($metadata)); + } + + public function testLoadClassMetadataThrowsExceptionIfNotAnArray() + { + $loader = new YamlFileLoader(__DIR__.'/nonvalid-mapping.yml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $this->setExpectedException('\InvalidArgumentException'); + $loader->loadClassMetadata($metadata); + } + + /** + * @see https://github.com/symfony/symfony/pull/12158 + */ + public function testDoNotModifyStateIfExceptionIsThrown() + { + $loader = new YamlFileLoader(__DIR__.'/nonvalid-mapping.yml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + try { + $loader->loadClassMetadata($metadata); + } catch (\InvalidArgumentException $e) { + // Call again. Again an exception should be thrown + $this->setExpectedException('\InvalidArgumentException'); + $loader->loadClassMetadata($metadata); + } + } + + public function testLoadClassMetadataReturnsTrueIfSuccessful() + { + $loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $this->assertTrue($loader->loadClassMetadata($metadata)); + } + + public function testLoadClassMetadataReturnsFalseIfNotSuccessful() + { + $loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml'); + $metadata = new ClassMetadata('\stdClass'); + + $this->assertFalse($loader->loadClassMetadata($metadata)); + } + + public function testLoadClassMetadata() + { + $loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $loader->loadClassMetadata($metadata); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + $expected->setGroupSequence(array('Foo', 'Entity')); + $expected->addConstraint(new ConstraintA()); + $expected->addConstraint(new ConstraintB()); + $expected->addConstraint(new Callback('validateMe')); + $expected->addConstraint(new Callback('validateMeStatic')); + $expected->addConstraint(new Callback(array('Symfony\Component\Validator\Tests\Fixtures\CallbackClass', 'callback'))); + $expected->addPropertyConstraint('firstName', new NotNull()); + $expected->addPropertyConstraint('firstName', new Range(array('min' => 3))); + $expected->addPropertyConstraint('firstName', new Choice(array('A', 'B'))); + $expected->addPropertyConstraint('firstName', new All(array(new NotNull(), new Range(array('min' => 3))))); + $expected->addPropertyConstraint('firstName', new All(array('constraints' => array(new NotNull(), new Range(array('min' => 3)))))); + $expected->addPropertyConstraint('firstName', new Collection(array('fields' => array( + 'foo' => array(new NotNull(), new Range(array('min' => 3))), + 'bar' => array(new Range(array('min' => 5))), + )))); + $expected->addPropertyConstraint('firstName', new Choice(array( + 'message' => 'Must be one of %choices%', + 'choices' => array('A', 'B'), + ))); + $expected->addGetterConstraint('lastName', new NotNull()); + $expected->addGetterConstraint('valid', new True()); + $expected->addGetterConstraint('permissions', new True()); + + $this->assertEquals($expected, $metadata); + } + + public function testLoadGroupSequenceProvider() + { + $loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity'); + + $loader->loadClassMetadata($metadata); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity'); + $expected->setGroupSequenceProvider(true); + + $this->assertEquals($expected, $metadata); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml new file mode 100644 index 0000000..dfd5edd --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" ?> + +<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> + + <namespace prefix="custom">Symfony\Component\Validator\Tests\Fixtures\</namespace> + + <class name="Symfony\Component\Validator\Tests\Fixtures\Entity"> + <property name="firstName"> + <!-- Constraint with a Boolean --> + <constraint name="Regex"> + <option name="pattern">/^1/</option> + <option name="match">false</option> + </constraint> + </property> + </class> + +</constraint-mapping> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml new file mode 100644 index 0000000..9b637e9 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml @@ -0,0 +1,119 @@ +<?xml version="1.0" ?> + +<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> + + <namespace prefix="custom">Symfony\Component\Validator\Tests\Fixtures\</namespace> + + <class name="Symfony\Component\Validator\Tests\Fixtures\Entity"> + + <group-sequence> + <value>Foo</value> + <value>Entity</value> + </group-sequence> + + <!-- CLASS CONSTRAINTS --> + + <!-- Custom constraint --> + <constraint name="Symfony\Component\Validator\Tests\Fixtures\ConstraintA" /> + + <!-- Custom constraint with namespace abbreviation--> + <constraint name="custom:ConstraintB" /> + + <!-- Callbacks --> + <constraint name="Callback">validateMe</constraint> + + <constraint name="Callback">validateMeStatic</constraint> + + <constraint name="Callback"> + <value>Symfony\Component\Validator\Tests\Fixtures\CallbackClass</value> + <value>callback</value> + </constraint> + + <!-- PROPERTY CONSTRAINTS --> + + <property name="firstName"> + + <!-- Constraint without value --> + <constraint name="NotNull" /> + + <!-- Constraint with single value --> + <constraint name="Range"> + <option name="min">3</option> + </constraint> + + <!-- Constraint with multiple values --> + <constraint name="Choice"> + <value>A</value> + <value>B</value> + </constraint> + + <!-- Constraint with child constraints --> + <constraint name="All"> + <constraint name="NotNull" /> + <constraint name="Range"> + <option name="min">3</option> + </constraint> + + </constraint> + + <!-- Option with child constraints --> + <constraint name="All"> + <option name="constraints"> + <constraint name="NotNull" /> + <constraint name="Range"> + <option name="min">3</option> + </constraint> + </option> + </constraint> + + <!-- Value with child constraints --> + <constraint name="Collection"> + <option name="fields"> + <value key="foo"> + <constraint name="NotNull" /> + <constraint name="Range"> + <option name="min">3</option> + </constraint> + </value> + <value key="bar"> + <constraint name="Range"> + <option name="min">5</option> + </constraint> + </value> + </option> + </constraint> + + <!-- Constraint with options --> + <constraint name="Choice"> + <!-- Option with single value --> + <option name="message"> Must be one of %choices% </option> + <!-- Option with multiple values --> + <option name="choices"> + <value>A</value> + <value>B</value> + </option> + </constraint> + </property> + + <!-- GETTER CONSTRAINTS --> + + <getter property="lastName"> + <constraint name="NotNull" /> + </getter> + <getter property="valid"> + <constraint name="True" /> + </getter> + <getter property="permissions"> + <constraint name="True" /> + </getter> + </class> + + <class name="Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity"> + + <!-- GROUP SEQUENCE PROVIDER --> + <group-sequence-provider /> + + </class> +</constraint-mapping> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml new file mode 100644 index 0000000..e96c5e0 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml @@ -0,0 +1,62 @@ +namespaces: + custom: Symfony\Component\Validator\Tests\Fixtures\ + +Symfony\Component\Validator\Tests\Fixtures\Entity: + group_sequence: + - Foo + - Entity + + constraints: + # Custom constraint + - Symfony\Component\Validator\Tests\Fixtures\ConstraintA: ~ + # Custom constraint with namespaces prefix + - "custom:ConstraintB": ~ + # Callbacks + - Callback: validateMe + - Callback: validateMeStatic + - Callback: [Symfony\Component\Validator\Tests\Fixtures\CallbackClass, callback] + + properties: + firstName: + # Constraint without value + - NotNull: ~ + # Constraint with single value + - Range: + min: 3 + # Constraint with multiple values + - Choice: [A, B] + # Constraint with child constraints + - All: + - NotNull: ~ + - Range: + min: 3 + # Option with child constraints + - All: + constraints: + - NotNull: ~ + - Range: + min: 3 + # Value with child constraints + - Collection: + fields: + foo: + - NotNull: ~ + - Range: + min: 3 + bar: + - Range: + min: 5 + # Constraint with options + - Choice: { choices: [A, B], message: Must be one of %choices% } + dummy: + + getters: + lastName: + - NotNull: ~ + valid: + - "True": ~ + permissions: + - "True": ~ + +Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity: + group_sequence_provider: true diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/empty-mapping.yml b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/empty-mapping.yml new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/empty-mapping.yml diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/nonvalid-mapping.yml b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/nonvalid-mapping.yml new file mode 100644 index 0000000..257cc56 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/nonvalid-mapping.yml @@ -0,0 +1 @@ +foo diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/withdoctype.xml b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/withdoctype.xml new file mode 100644 index 0000000..0beacc3 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/withdoctype.xml @@ -0,0 +1,7 @@ +<?xml version="1.0"?> +<!DOCTYPE foo> +<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> + <class name="Symfony\Component\Validator\Tests\Fixtures\Entity" /> +</constraint-mapping> diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php new file mode 100644 index 0000000..f91088d --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php @@ -0,0 +1,110 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping; + +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\Mapping\MemberMetadata; +use Symfony\Component\Validator\Tests\Fixtures\ClassConstraint; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintB; + +class MemberMetadataTest extends \PHPUnit_Framework_TestCase +{ + protected $metadata; + + protected function setUp() + { + $this->metadata = new TestMemberMetadata( + 'Symfony\Component\Validator\Tests\Fixtures\Entity', + 'getLastName', + 'lastName' + ); + } + + protected function tearDown() + { + $this->metadata = null; + } + + public function testAddValidSetsMemberToCascaded() + { + $result = $this->metadata->addConstraint(new Valid()); + + $this->assertEquals(array(), $this->metadata->getConstraints()); + $this->assertEquals($result, $this->metadata); + $this->assertTrue($this->metadata->isCascaded()); + } + + public function testAddOtherConstraintDoesNotSetMemberToCascaded() + { + $result = $this->metadata->addConstraint($constraint = new ConstraintA()); + + $this->assertEquals(array($constraint), $this->metadata->getConstraints()); + $this->assertEquals($result, $this->metadata); + $this->assertFalse($this->metadata->isCascaded()); + } + + public function testAddConstraintRequiresClassConstraints() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\ConstraintDefinitionException'); + + $this->metadata->addConstraint(new ClassConstraint()); + } + + public function testSerialize() + { + $this->metadata->addConstraint(new ConstraintA(array('property1' => 'A'))); + $this->metadata->addConstraint(new ConstraintB(array('groups' => 'TestGroup'))); + + $metadata = unserialize(serialize($this->metadata)); + + $this->assertEquals($this->metadata, $metadata); + } + + public function testSerializeCollectionCascaded() + { + $this->metadata->addConstraint(new Valid(array('traverse' => true, 'deep' => false))); + + $metadata = unserialize(serialize($this->metadata)); + + $this->assertEquals($this->metadata, $metadata); + } + + public function testSerializeCollectionCascadedDeeply() + { + $this->metadata->addConstraint(new Valid(array('traverse' => true, 'deep' => true))); + + $metadata = unserialize(serialize($this->metadata)); + + $this->assertEquals($this->metadata, $metadata); + } + + public function testSerializeCollectionNotCascaded() + { + $this->metadata->addConstraint(new Valid(array('traverse' => false))); + + $metadata = unserialize(serialize($this->metadata)); + + $this->assertEquals($this->metadata, $metadata); + } +} + +class TestMemberMetadata extends MemberMetadata +{ + public function getPropertyValue($object) + { + } + + protected function newReflectionMember($object) + { + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/PropertyMetadataTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/PropertyMetadataTest.php new file mode 100644 index 0000000..f411d95 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/PropertyMetadataTest.php @@ -0,0 +1,45 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Mapping; + +use Symfony\Component\Validator\Mapping\PropertyMetadata; +use Symfony\Component\Validator\Tests\Fixtures\Entity; + +class PropertyMetadataTest extends \PHPUnit_Framework_TestCase +{ + const CLASSNAME = 'Symfony\Component\Validator\Tests\Fixtures\Entity'; + const PARENTCLASS = 'Symfony\Component\Validator\Tests\Fixtures\EntityParent'; + + public function testInvalidPropertyName() + { + $this->setExpectedException('Symfony\Component\Validator\Exception\ValidatorException'); + + new PropertyMetadata(self::CLASSNAME, 'foobar'); + } + + public function testGetPropertyValueFromPrivateProperty() + { + $entity = new Entity('foobar'); + $metadata = new PropertyMetadata(self::CLASSNAME, 'internal'); + + $this->assertEquals('foobar', $metadata->getPropertyValue($entity)); + } + + public function testGetPropertyValueFromOverriddenPrivateProperty() + { + $entity = new Entity('foobar'); + $metadata = new PropertyMetadata(self::PARENTCLASS, 'data'); + + $this->assertTrue($metadata->isPublic($entity)); + $this->assertEquals('Overridden data', $metadata->getPropertyValue($entity)); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Util/PropertyPathTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Util/PropertyPathTest.php new file mode 100644 index 0000000..94802b6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Util/PropertyPathTest.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Util; + +use Symfony\Component\Validator\Util\PropertyPath; + +class PropertyPathTest extends \PHPUnit_Framework_TestCase +{ + /** + * @dataProvider provideAppendPaths + */ + public function testAppend($basePath, $subPath, $expectedPath, $message) + { + $this->assertSame($expectedPath, PropertyPath::append($basePath, $subPath), $message); + } + + public function provideAppendPaths() + { + return array( + array('foo', '', 'foo', 'It returns the basePath if subPath is empty'), + array('', 'bar', 'bar', 'It returns the subPath if basePath is empty'), + array('foo', 'bar', 'foo.bar', 'It append the subPath to the basePath'), + array('foo', '[bar]', 'foo[bar]', 'It does not include the dot separator if subPath uses the array notation'), + ); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/Abstract2Dot5ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/Abstract2Dot5ApiTest.php new file mode 100644 index 0000000..684731f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/Abstract2Dot5ApiTest.php @@ -0,0 +1,776 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Validator; + +use Symfony\Component\Validator\Constraints\Callback; +use Symfony\Component\Validator\Constraints\GroupSequence; +use Symfony\Component\Validator\Constraints\NotNull; +use Symfony\Component\Validator\Constraints\Traverse; +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\ConstraintViolationInterface; +use Symfony\Component\Validator\Context\ExecutionContextInterface; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\Tests\Fixtures\Entity; +use Symfony\Component\Validator\Tests\Fixtures\FailingConstraint; +use Symfony\Component\Validator\Tests\Fixtures\FakeClassMetadata; +use Symfony\Component\Validator\Tests\Fixtures\Reference; +use Symfony\Component\Validator\Validator\ValidatorInterface; + +/** + * Verifies that a validator satisfies the API of Symfony 2.5+. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +abstract class Abstract2Dot5ApiTest extends AbstractValidatorTest +{ + /** + * @var ValidatorInterface + */ + protected $validator; + + /** + * @param MetadataFactoryInterface $metadataFactory + * + * @return ValidatorInterface + */ + abstract protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array()); + + protected function setUp() + { + parent::setUp(); + + $this->validator = $this->createValidator($this->metadataFactory); + } + + protected function validate($value, $constraints = null, $groups = null) + { + return $this->validator->validate($value, $constraints, $groups); + } + + protected function validateProperty($object, $propertyName, $groups = null) + { + return $this->validator->validateProperty($object, $propertyName, $groups); + } + + protected function validatePropertyValue($object, $propertyName, $value, $groups = null) + { + return $this->validator->validatePropertyValue($object, $propertyName, $value, $groups); + } + + public function testValidateConstraintWithoutGroup() + { + $violations = $this->validator->validate(null, new NotNull()); + + $this->assertCount(1, $violations); + } + + public function testGroupSequenceAbortsAfterFailedGroup() + { + $entity = new Entity(); + + $callback1 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message 1'); + }; + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message 2'); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => function () {}, + 'groups' => 'Group 1', + ))); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group 2', + ))); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group 3', + ))); + + $sequence = new GroupSequence(array('Group 1', 'Group 2', 'Group 3')); + $violations = $this->validator->validate($entity, new Valid(), $sequence); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message 1', $violations[0]->getMessage()); + } + + public function testGroupSequenceIncludesReferences() + { + $entity = new Entity(); + $entity->reference = new Reference(); + + $callback1 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Reference violation 1'); + }; + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Reference violation 2'); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group 1', + ))); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group 2', + ))); + + $sequence = new GroupSequence(array('Group 1', 'Entity')); + $violations = $this->validator->validate($entity, new Valid(), $sequence); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Reference violation 1', $violations[0]->getMessage()); + } + + public function testValidateInSeparateContext() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new Reference(); + + $callback1 = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $violations = $context + ->getValidator() + // Since the validator is not context aware, the group must + // be passed explicitly + ->validate($value->reference, new Valid(), 'Group') + ; + + /** @var ConstraintViolationInterface[] $violations */ + $test->assertCount(1, $violations); + $test->assertSame('Message value', $violations[0]->getMessage()); + $test->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $test->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $test->assertSame('', $violations[0]->getPropertyPath()); + // The root is different as we're in a new context + $test->assertSame($entity->reference, $violations[0]->getRoot()); + $test->assertSame($entity->reference, $violations[0]->getInvalidValue()); + $test->assertNull($violations[0]->getMessagePluralization()); + $test->assertNull($violations[0]->getCode()); + + // Verify that this method is called + $context->addViolation('Separate violation'); + }; + + $callback2 = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($entity->reference, $context->getRoot()); + $test->assertSame($entity->reference, $context->getValue()); + $test->assertSame($entity->reference, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group', + ))); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group', + ))); + + $violations = $this->validator->validate($entity, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $test->assertSame('Separate violation', $violations[0]->getMessage()); + } + + public function testValidateInContext() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new Reference(); + + $callback1 = function ($value, ExecutionContextInterface $context) use ($test) { + $previousValue = $context->getValue(); + $previousObject = $context->getObject(); + $previousMetadata = $context->getMetadata(); + $previousPath = $context->getPropertyPath(); + $previousGroup = $context->getGroup(); + + $context + ->getValidator() + ->inContext($context) + ->atPath('subpath') + ->validate($value->reference) + ; + + // context changes shouldn't leak out of the validate() call + $test->assertSame($previousValue, $context->getValue()); + $test->assertSame($previousObject, $context->getObject()); + $test->assertSame($previousMetadata, $context->getMetadata()); + $test->assertSame($previousPath, $context->getPropertyPath()); + $test->assertSame($previousGroup, $context->getGroup()); + }; + + $callback2 = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('subpath', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity->reference, $context->getValue()); + $test->assertSame($entity->reference, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group', + ))); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group', + ))); + + $violations = $this->validator->validate($entity, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('subpath', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity->reference, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testValidateArrayInContext() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new Reference(); + + $callback1 = function ($value, ExecutionContextInterface $context) use ($test) { + $previousValue = $context->getValue(); + $previousObject = $context->getObject(); + $previousMetadata = $context->getMetadata(); + $previousPath = $context->getPropertyPath(); + $previousGroup = $context->getGroup(); + + $context + ->getValidator() + ->inContext($context) + ->atPath('subpath') + ->validate(array('key' => $value->reference)) + ; + + // context changes shouldn't leak out of the validate() call + $test->assertSame($previousValue, $context->getValue()); + $test->assertSame($previousObject, $context->getObject()); + $test->assertSame($previousMetadata, $context->getMetadata()); + $test->assertSame($previousPath, $context->getPropertyPath()); + $test->assertSame($previousGroup, $context->getGroup()); + }; + + $callback2 = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('subpath[key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity->reference, $context->getValue()); + $test->assertSame($entity->reference, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group', + ))); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group', + ))); + + $violations = $this->validator->validate($entity, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('subpath[key]', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity->reference, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testTraverseTraversableByDefault() + { + $test = $this; + $entity = new Entity(); + $traversable = new \ArrayIterator(array('key' => $entity)); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity, $traversable) { + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('[key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->metadata, $context->getMetadata()); + $test->assertSame($traversable, $context->getRoot()); + $test->assertSame($entity, $context->getValue()); + $test->assertSame($entity, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadataFactory->addMetadata(new ClassMetadata('ArrayIterator')); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($traversable, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('[key]', $violations[0]->getPropertyPath()); + $this->assertSame($traversable, $violations[0]->getRoot()); + $this->assertSame($entity, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testTraversalEnabledOnClass() + { + $entity = new Entity(); + $traversable = new \ArrayIterator(array('key' => $entity)); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message'); + }; + + $traversableMetadata = new ClassMetadata('ArrayIterator'); + $traversableMetadata->addConstraint(new Traverse(true)); + + $this->metadataFactory->addMetadata($traversableMetadata); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($traversable, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + } + + public function testTraversalDisabledOnClass() + { + $test = $this; + $entity = new Entity(); + $traversable = new \ArrayIterator(array('key' => $entity)); + + $callback = function ($value, ExecutionContextInterface $context) use ($test) { + $test->fail('Should not be called'); + }; + + $traversableMetadata = new ClassMetadata('ArrayIterator'); + $traversableMetadata->addConstraint(new Traverse(false)); + + $this->metadataFactory->addMetadata($traversableMetadata); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($traversable, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(0, $violations); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException + */ + public function testExpectTraversableIfTraversalEnabledOnClass() + { + $entity = new Entity(); + + $this->metadata->addConstraint(new Traverse(true)); + + $this->validator->validate($entity); + } + + public function testReferenceTraversalDisabledOnClass() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new \ArrayIterator(array('key' => new Reference())); + + $callback = function ($value, ExecutionContextInterface $context) use ($test) { + $test->fail('Should not be called'); + }; + + $traversableMetadata = new ClassMetadata('ArrayIterator'); + $traversableMetadata->addConstraint(new Traverse(false)); + + $this->metadataFactory->addMetadata($traversableMetadata); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + $this->metadata->addPropertyConstraint('reference', new Valid()); + + $violations = $this->validate($entity, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(0, $violations); + } + + public function testReferenceTraversalEnabledOnReferenceDisabledOnClass() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new \ArrayIterator(array('key' => new Reference())); + + $callback = function ($value, ExecutionContextInterface $context) use ($test) { + $test->fail('Should not be called'); + }; + + $traversableMetadata = new ClassMetadata('ArrayIterator'); + $traversableMetadata->addConstraint(new Traverse(false)); + + $this->metadataFactory->addMetadata($traversableMetadata); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + $this->metadata->addPropertyConstraint('reference', new Valid(array( + 'traverse' => true, + ))); + + $violations = $this->validate($entity, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(0, $violations); + } + + public function testReferenceTraversalDisabledOnReferenceEnabledOnClass() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new \ArrayIterator(array('key' => new Reference())); + + $callback = function ($value, ExecutionContextInterface $context) use ($test) { + $test->fail('Should not be called'); + }; + + $traversableMetadata = new ClassMetadata('ArrayIterator'); + $traversableMetadata->addConstraint(new Traverse(true)); + + $this->metadataFactory->addMetadata($traversableMetadata); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + $this->metadata->addPropertyConstraint('reference', new Valid(array( + 'traverse' => false, + ))); + + $violations = $this->validate($entity, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(0, $violations); + } + + public function testReferenceTraversalRecursionEnabledOnReferenceTraversalEnabledOnClass() + { + $entity = new Entity(); + $entity->reference = new \ArrayIterator(array( + 2 => new \ArrayIterator(array('key' => new Reference())), + )); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message'); + }; + + $traversableMetadata = new ClassMetadata('ArrayIterator'); + $traversableMetadata->addConstraint(new Traverse(true)); + + $this->metadataFactory->addMetadata($traversableMetadata); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + $this->metadata->addPropertyConstraint('reference', new Valid(array( + 'deep' => true, + ))); + + $violations = $this->validate($entity, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + } + + public function testReferenceTraversalRecursionDisabledOnReferenceTraversalEnabledOnClass() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new \ArrayIterator(array( + 2 => new \ArrayIterator(array('key' => new Reference())), + )); + + $callback = function ($value, ExecutionContextInterface $context) use ($test) { + $test->fail('Should not be called'); + }; + + $traversableMetadata = new ClassMetadata('ArrayIterator'); + $traversableMetadata->addConstraint(new Traverse(true)); + + $this->metadataFactory->addMetadata($traversableMetadata); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + $this->metadata->addPropertyConstraint('reference', new Valid(array( + 'deep' => false, + ))); + + $violations = $this->validate($entity, new Valid(), 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(0, $violations); + } + + public function testAddCustomizedViolation() + { + $entity = new Entity(); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->buildViolation('Message %param%') + ->setParameter('%param%', 'value') + ->setInvalidValue('Invalid value') + ->setPlural(2) + ->setCode(42) + ->addViolation(); + }; + + $this->metadata->addConstraint(new Callback($callback)); + + $violations = $this->validator->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame('Invalid value', $violations[0]->getInvalidValue()); + $this->assertSame(2, $violations[0]->getMessagePluralization()); + $this->assertSame(42, $violations[0]->getCode()); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnsupportedMetadataException + */ + public function testMetadataMustImplementClassMetadataInterface() + { + $entity = new Entity(); + + $metadata = $this->getMock('Symfony\Component\Validator\Tests\Fixtures\LegacyClassMetadata'); + $metadata->expects($this->any()) + ->method('getClassName') + ->will($this->returnValue(get_class($entity))); + + $this->metadataFactory->addMetadata($metadata); + + $this->validator->validate($entity); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnsupportedMetadataException + */ + public function testReferenceMetadataMustImplementClassMetadataInterface() + { + $entity = new Entity(); + $entity->reference = new Reference(); + + $metadata = $this->getMock('Symfony\Component\Validator\Tests\Fixtures\LegacyClassMetadata'); + $metadata->expects($this->any()) + ->method('getClassName') + ->will($this->returnValue(get_class($entity->reference))); + + $this->metadataFactory->addMetadata($metadata); + + $this->metadata->addPropertyConstraint('reference', new Valid()); + + $this->validator->validate($entity); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\UnsupportedMetadataException + * @group legacy + */ + public function testLegacyPropertyMetadataMustImplementPropertyMetadataInterface() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + $entity = new Entity(); + + // Legacy interface + $propertyMetadata = $this->getMock('Symfony\Component\Validator\MetadataInterface'); + $metadata = new FakeClassMetadata(get_class($entity)); + $metadata->addCustomPropertyMetadata('firstName', $propertyMetadata); + + $this->metadataFactory->addMetadata($metadata); + + $this->validator->validate($entity); + } + + public function testNoDuplicateValidationIfClassConstraintInMultipleGroups() + { + $entity = new Entity(); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message'); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => array('Group 1', 'Group 2'), + ))); + + $violations = $this->validator->validate($entity, new Valid(), array('Group 1', 'Group 2')); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + } + + public function testNoDuplicateValidationIfPropertyConstraintInMultipleGroups() + { + $entity = new Entity(); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message'); + }; + + $this->metadata->addPropertyConstraint('firstName', new Callback(array( + 'callback' => $callback, + 'groups' => array('Group 1', 'Group 2'), + ))); + + $violations = $this->validator->validate($entity, new Valid(), array('Group 1', 'Group 2')); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\RuntimeException + */ + public function testValidateFailsIfNoConstraintsAndNoObjectOrArray() + { + $this->validate('Foobar'); + } + + public function testAccessCurrentObject() + { + $test = $this; + $called = false; + $entity = new Entity(); + $entity->firstName = 'Bernhard'; + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity, &$called) { + $called = true; + $test->assertSame($entity, $context->getObject()); + }; + + $this->metadata->addConstraint(new Callback($callback)); + $this->metadata->addPropertyConstraint('firstName', new Callback($callback)); + + $this->validator->validate($entity); + + $this->assertTrue($called); + } + + public function testInitializeObjectsOnFirstValidation() + { + $test = $this; + $entity = new Entity(); + $entity->initialized = false; + + // prepare initializers that set "initialized" to true + $initializer1 = $this->getMock('Symfony\\Component\\Validator\\ObjectInitializerInterface'); + $initializer2 = $this->getMock('Symfony\\Component\\Validator\\ObjectInitializerInterface'); + + $initializer1->expects($this->once()) + ->method('initialize') + ->with($entity) + ->will($this->returnCallback(function ($object) { + $object->initialized = true; + })); + + $initializer2->expects($this->once()) + ->method('initialize') + ->with($entity); + + $this->validator = $this->createValidator($this->metadataFactory, array( + $initializer1, + $initializer2, + )); + + // prepare constraint which + // * checks that "initialized" is set to true + // * validates the object again + $callback = function ($object, ExecutionContextInterface $context) use ($test) { + $test->assertTrue($object->initialized); + + // validate again in same group + $validator = $context->getValidator()->inContext($context); + + $validator->validate($object); + + // validate again in other group + $validator->validate($object, null, 'SomeGroup'); + }; + + $this->metadata->addConstraint(new Callback($callback)); + + $this->validate($entity); + + $this->assertTrue($entity->initialized); + } + + public function testPassConstraintToViolation() + { + $constraint = new FailingConstraint(); + $violations = $this->validate('Foobar', $constraint); + + $this->assertCount(1, $violations); + $this->assertSame($constraint, $violations[0]->getConstraint()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractLegacyApiTest.php new file mode 100644 index 0000000..a4c1fe8 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractLegacyApiTest.php @@ -0,0 +1,315 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Validator; + +use Symfony\Component\Validator\Constraints\Callback; +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\ConstraintViolationInterface; +use Symfony\Component\Validator\ExecutionContextInterface; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\Tests\Fixtures\Entity; +use Symfony\Component\Validator\Tests\Fixtures\Reference; +use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface; + +/** + * Verifies that a validator satisfies the API of Symfony < 2.5. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +abstract class AbstractLegacyApiTest extends AbstractValidatorTest +{ + /** + * @var LegacyValidatorInterface + */ + protected $validator; + + /** + * @param MetadataFactoryInterface $metadataFactory + * + * @return LegacyValidatorInterface + */ + abstract protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array()); + + protected function setUp() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + parent::setUp(); + + $this->validator = $this->createValidator($this->metadataFactory); + } + + protected function validate($value, $constraints = null, $groups = null) + { + if (null === $constraints) { + $constraints = new Valid(); + } + + if ($constraints instanceof Valid) { + return $this->validator->validate($value, $groups, $constraints->traverse, $constraints->deep); + } + + return $this->validator->validateValue($value, $constraints, $groups); + } + + protected function validateProperty($object, $propertyName, $groups = null) + { + return $this->validator->validateProperty($object, $propertyName, $groups); + } + + protected function validatePropertyValue($object, $propertyName, $value, $groups = null) + { + return $this->validator->validatePropertyValue($object, $propertyName, $value, $groups); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException + */ + public function testTraversableTraverseDisabled() + { + $test = $this; + $entity = new Entity(); + $traversable = new \ArrayIterator(array('key' => $entity)); + + $callback = function () use ($test) { + $test->fail('Should not be called'); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $this->validator->validate($traversable, 'Group'); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException + */ + public function testRecursiveTraversableRecursiveTraversalDisabled() + { + $test = $this; + $entity = new Entity(); + $traversable = new \ArrayIterator(array( + 2 => new \ArrayIterator(array('key' => $entity)), + )); + + $callback = function () use ($test) { + $test->fail('Should not be called'); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $this->validator->validate($traversable, 'Group'); + } + + public function testValidateInContext() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new Reference(); + + $callback1 = function ($value, ExecutionContextInterface $context) use ($test) { + $previousValue = $context->getValue(); + $previousMetadata = $context->getMetadata(); + $previousPath = $context->getPropertyPath(); + $previousGroup = $context->getGroup(); + + $context->validate($value->reference, 'subpath'); + + // context changes shouldn't leak out of the validate() call + $test->assertSame($previousValue, $context->getValue()); + $test->assertSame($previousMetadata, $context->getMetadata()); + $test->assertSame($previousPath, $context->getPropertyPath()); + $test->assertSame($previousGroup, $context->getGroup()); + }; + + $callback2 = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('subpath', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($test->metadataFactory, $context->getMetadataFactory()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity->reference, $context->getValue()); + $test->assertSame($entity->reference, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group', + ))); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group', + ))); + + $violations = $this->validator->validate($entity, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('subpath', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity->reference, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testValidateArrayInContext() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new Reference(); + + $callback1 = function ($value, ExecutionContextInterface $context) use ($test) { + $previousValue = $context->getValue(); + $previousMetadata = $context->getMetadata(); + $previousPath = $context->getPropertyPath(); + $previousGroup = $context->getGroup(); + + $context->validate(array('key' => $value->reference), 'subpath'); + + // context changes shouldn't leak out of the validate() call + $test->assertSame($previousValue, $context->getValue()); + $test->assertSame($previousMetadata, $context->getMetadata()); + $test->assertSame($previousPath, $context->getPropertyPath()); + $test->assertSame($previousGroup, $context->getGroup()); + }; + + $callback2 = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('subpath[key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($test->metadataFactory, $context->getMetadataFactory()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity->reference, $context->getValue()); + $test->assertSame($entity->reference, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group', + ))); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group', + ))); + + $violations = $this->validator->validate($entity, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('subpath[key]', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity->reference, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testAddCustomizedViolation() + { + $entity = new Entity(); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation( + 'Message %param%', + array('%param%' => 'value'), + 'Invalid value', + 2, + 'Code' + ); + }; + + $this->metadata->addConstraint(new Callback($callback)); + + $violations = $this->validator->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame('Invalid value', $violations[0]->getInvalidValue()); + $this->assertSame(2, $violations[0]->getMessagePluralization()); + $this->assertSame('Code', $violations[0]->getCode()); + } + + public function testInitializeObjectsOnFirstValidation() + { + $test = $this; + $entity = new Entity(); + $entity->initialized = false; + + // prepare initializers that set "initialized" to true + $initializer1 = $this->getMock('Symfony\\Component\\Validator\\ObjectInitializerInterface'); + $initializer2 = $this->getMock('Symfony\\Component\\Validator\\ObjectInitializerInterface'); + + $initializer1->expects($this->once()) + ->method('initialize') + ->with($entity) + ->will($this->returnCallback(function ($object) { + $object->initialized = true; + })); + + $initializer2->expects($this->once()) + ->method('initialize') + ->with($entity); + + $this->validator = $this->createValidator($this->metadataFactory, array( + $initializer1, + $initializer2, + )); + + // prepare constraint which + // * checks that "initialized" is set to true + // * validates the object again + $callback = function ($object, ExecutionContextInterface $context) use ($test) { + $test->assertTrue($object->initialized); + + // validate again in same group + $context->validate($object); + + // validate again in other group + $context->validate($object, '', 'SomeGroup'); + }; + + $this->metadata->addConstraint(new Callback($callback)); + + $this->validate($entity); + + $this->assertTrue($entity->initialized); + } + + public function testGetMetadataFactory() + { + $this->assertSame($this->metadataFactory, $this->validator->getMetadataFactory()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php new file mode 100644 index 0000000..b1c4edb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php @@ -0,0 +1,1288 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Validator; + +use Symfony\Component\Validator\Constraints\Callback; +use Symfony\Component\Validator\Constraints\GroupSequence; +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\ConstraintViolationInterface; +use Symfony\Component\Validator\ExecutionContextInterface; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Tests\Fixtures\Entity; +use Symfony\Component\Validator\Tests\Fixtures\FakeMetadataFactory; +use Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity; +use Symfony\Component\Validator\Tests\Fixtures\Reference; + +/** + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +abstract class AbstractValidatorTest extends \PHPUnit_Framework_TestCase +{ + const ENTITY_CLASS = 'Symfony\Component\Validator\Tests\Fixtures\Entity'; + + const REFERENCE_CLASS = 'Symfony\Component\Validator\Tests\Fixtures\Reference'; + + /** + * @var FakeMetadataFactory + */ + public $metadataFactory; + + /** + * @var ClassMetadata + */ + public $metadata; + + /** + * @var ClassMetadata + */ + public $referenceMetadata; + + protected function setUp() + { + $this->metadataFactory = new FakeMetadataFactory(); + $this->metadata = new ClassMetadata(self::ENTITY_CLASS); + $this->referenceMetadata = new ClassMetadata(self::REFERENCE_CLASS); + $this->metadataFactory->addMetadata($this->metadata); + $this->metadataFactory->addMetadata($this->referenceMetadata); + } + + protected function tearDown() + { + $this->metadataFactory = null; + $this->metadata = null; + $this->referenceMetadata = null; + } + + abstract protected function validate($value, $constraints = null, $groups = null); + + abstract protected function validateProperty($object, $propertyName, $groups = null); + + abstract protected function validatePropertyValue($object, $propertyName, $value, $groups = null); + + public function testValidate() + { + $test = $this; + + $callback = function ($value, ExecutionContextInterface $context) use ($test) { + $test->assertNull($context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame('Bernhard', $context->getRoot()); + $test->assertSame('Bernhard', $context->getValue()); + $test->assertSame('Bernhard', $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $constraint = new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + )); + + $violations = $this->validate('Bernhard', $constraint, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('', $violations[0]->getPropertyPath()); + $this->assertSame('Bernhard', $violations[0]->getRoot()); + $this->assertSame('Bernhard', $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testClassConstraint() + { + $test = $this; + $entity = new Entity(); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->metadata, $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity, $context->getValue()); + $test->assertSame($entity, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testPropertyConstraint() + { + $test = $this; + $entity = new Entity(); + $entity->firstName = 'Bernhard'; + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $propertyMetadatas = $test->metadata->getPropertyMetadata('firstName'); + + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertSame('firstName', $context->getPropertyName()); + $test->assertSame('firstName', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($propertyMetadatas[0], $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame('Bernhard', $context->getValue()); + $test->assertSame('Bernhard', $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('firstName', new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('firstName', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame('Bernhard', $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testGetterConstraint() + { + $test = $this; + $entity = new Entity(); + $entity->setLastName('Schussek'); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $propertyMetadatas = $test->metadata->getPropertyMetadata('lastName'); + + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertSame('lastName', $context->getPropertyName()); + $test->assertSame('lastName', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($propertyMetadatas[0], $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame('Schussek', $context->getValue()); + $test->assertSame('Schussek', $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addGetterConstraint('lastName', new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('lastName', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame('Schussek', $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testArray() + { + $test = $this; + $entity = new Entity(); + $array = array('key' => $entity); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity, $array) { + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('[key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->metadata, $context->getMetadata()); + $test->assertSame($array, $context->getRoot()); + $test->assertSame($entity, $context->getValue()); + $test->assertSame($entity, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($array, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('[key]', $violations[0]->getPropertyPath()); + $this->assertSame($array, $violations[0]->getRoot()); + $this->assertSame($entity, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testRecursiveArray() + { + $test = $this; + $entity = new Entity(); + $array = array(2 => array('key' => $entity)); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity, $array) { + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('[2][key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->metadata, $context->getMetadata()); + $test->assertSame($array, $context->getRoot()); + $test->assertSame($entity, $context->getValue()); + $test->assertSame($entity, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($array, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('[2][key]', $violations[0]->getPropertyPath()); + $this->assertSame($array, $violations[0]->getRoot()); + $this->assertSame($entity, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testTraversable() + { + $test = $this; + $entity = new Entity(); + $traversable = new \ArrayIterator(array('key' => $entity)); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity, $traversable) { + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('[key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->metadata, $context->getMetadata()); + $test->assertSame($traversable, $context->getRoot()); + $test->assertSame($entity, $context->getValue()); + $test->assertSame($entity, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($traversable, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('[key]', $violations[0]->getPropertyPath()); + $this->assertSame($traversable, $violations[0]->getRoot()); + $this->assertSame($entity, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testRecursiveTraversable() + { + $test = $this; + $entity = new Entity(); + $traversable = new \ArrayIterator(array( + 2 => new \ArrayIterator(array('key' => $entity)), + )); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity, $traversable) { + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('[2][key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->metadata, $context->getMetadata()); + $test->assertSame($traversable, $context->getRoot()); + $test->assertSame($entity, $context->getValue()); + $test->assertSame($entity, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($traversable, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('[2][key]', $violations[0]->getPropertyPath()); + $this->assertSame($traversable, $violations[0]->getRoot()); + $this->assertSame($entity, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testReferenceClassConstraint() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new Reference(); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('reference', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity->reference, $context->getValue()); + $test->assertSame($entity->reference, $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('reference', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity->reference, $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testReferencePropertyConstraint() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new Reference(); + $entity->reference->value = 'Foobar'; + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $propertyMetadatas = $test->referenceMetadata->getPropertyMetadata('value'); + + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertSame('value', $context->getPropertyName()); + $test->assertSame('reference.value', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($propertyMetadatas[0], $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame('Foobar', $context->getValue()); + $test->assertSame('Foobar', $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->referenceMetadata->addPropertyConstraint('value', new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('reference.value', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame('Foobar', $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testReferenceGetterConstraint() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new Reference(); + $entity->reference->setPrivateValue('Bamboo'); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $propertyMetadatas = $test->referenceMetadata->getPropertyMetadata('privateValue'); + + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertSame('privateValue', $context->getPropertyName()); + $test->assertSame('reference.privateValue', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($propertyMetadatas[0], $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame('Bamboo', $context->getValue()); + $test->assertSame('Bamboo', $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->referenceMetadata->addPropertyConstraint('privateValue', new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('reference.privateValue', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame('Bamboo', $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testsIgnoreNullReference() + { + $entity = new Entity(); + $entity->reference = null; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + + $violations = $this->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(0, $violations); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException + */ + public function testFailOnScalarReferences() + { + $entity = new Entity(); + $entity->reference = 'string'; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + + $this->validate($entity); + } + + public function testArrayReference() + { + $test = $this; + $entity = new Entity(); + $entity->reference = array('key' => new Reference()); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('reference[key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity->reference['key'], $context->getValue()); + $test->assertSame($entity->reference['key'], $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('reference[key]', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity->reference['key'], $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + // https://github.com/symfony/symfony/issues/6246 + public function testRecursiveArrayReference() + { + $test = $this; + $entity = new Entity(); + $entity->reference = array(2 => array('key' => new Reference())); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('reference[2][key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity->reference[2]['key'], $context->getValue()); + $test->assertSame($entity->reference[2]['key'], $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('reference[2][key]', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity->reference[2]['key'], $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testArrayTraversalCannotBeDisabled() + { + $entity = new Entity(); + $entity->reference = array('key' => new Reference()); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid(array( + 'traverse' => false, + ))); + $this->referenceMetadata->addConstraint(new Callback($callback)); + + $violations = $this->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + } + + public function testRecursiveArrayTraversalCannotBeDisabled() + { + $entity = new Entity(); + $entity->reference = array(2 => array('key' => new Reference())); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid(array( + 'traverse' => false, + ))); + $this->referenceMetadata->addConstraint(new Callback($callback)); + + $violations = $this->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + } + + public function testIgnoreScalarsDuringArrayTraversal() + { + $entity = new Entity(); + $entity->reference = array('string', 1234); + + $this->metadata->addPropertyConstraint('reference', new Valid()); + + $violations = $this->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(0, $violations); + } + + public function testIgnoreNullDuringArrayTraversal() + { + $entity = new Entity(); + $entity->reference = array(null); + + $this->metadata->addPropertyConstraint('reference', new Valid()); + + $violations = $this->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(0, $violations); + } + + public function testTraversableReference() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new \ArrayIterator(array('key' => new Reference())); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('reference[key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity->reference['key'], $context->getValue()); + $test->assertSame($entity->reference['key'], $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('reference[key]', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity->reference['key'], $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testDisableTraversableTraversal() + { + $entity = new Entity(); + $entity->reference = new \ArrayIterator(array('key' => new Reference())); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadataFactory->addMetadata(new ClassMetadata('ArrayIterator')); + $this->metadata->addPropertyConstraint('reference', new Valid(array( + 'traverse' => false, + ))); + $this->referenceMetadata->addConstraint(new Callback($callback)); + + $violations = $this->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(0, $violations); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException + */ + public function testMetadataMustExistIfTraversalIsDisabled() + { + $entity = new Entity(); + $entity->reference = new \ArrayIterator(); + + $this->metadata->addPropertyConstraint('reference', new Valid(array( + 'traverse' => false, + ))); + + $this->validate($entity); + } + + public function testEnableRecursiveTraversableTraversal() + { + $test = $this; + $entity = new Entity(); + $entity->reference = new \ArrayIterator(array( + 2 => new \ArrayIterator(array('key' => new Reference())), + )); + + $callback = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $test->assertSame($test::REFERENCE_CLASS, $context->getClassName()); + $test->assertNull($context->getPropertyName()); + $test->assertSame('reference[2][key]', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($test->referenceMetadata, $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame($entity->reference[2]['key'], $context->getValue()); + $test->assertSame($entity->reference[2]['key'], $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid(array( + 'deep' => true, + ))); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group', + ))); + + $violations = $this->validate($entity, null, 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('reference[2][key]', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame($entity->reference[2]['key'], $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testValidateProperty() + { + $test = $this; + $entity = new Entity(); + $entity->firstName = 'Bernhard'; + $entity->setLastName('Schussek'); + + $callback1 = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $propertyMetadatas = $test->metadata->getPropertyMetadata('firstName'); + + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertSame('firstName', $context->getPropertyName()); + $test->assertSame('firstName', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($propertyMetadatas[0], $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame('Bernhard', $context->getValue()); + $test->assertSame('Bernhard', $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Other violation'); + }; + + $this->metadata->addPropertyConstraint('firstName', new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group', + ))); + $this->metadata->addPropertyConstraint('lastName', new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group', + ))); + + $violations = $this->validateProperty($entity, 'firstName', 'Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('firstName', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame('Bernhard', $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + /** + * Cannot be UnsupportedMetadataException for BC with Symfony < 2.5. + * + * @expectedException \Symfony\Component\Validator\Exception\ValidatorException + * @group legacy + */ + public function testLegacyValidatePropertyFailsIfPropertiesNotSupported() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + // $metadata does not implement PropertyMetadataContainerInterface + $metadata = $this->getMock('Symfony\Component\Validator\MetadataInterface'); + + $this->metadataFactory->addMetadataForValue('VALUE', $metadata); + + $this->validateProperty('VALUE', 'someProperty'); + } + + /** + * https://github.com/symfony/symfony/issues/11604 + */ + public function testValidatePropertyWithoutConstraints() + { + $entity = new Entity(); + $violations = $this->validateProperty($entity, 'lastName'); + + $this->assertCount(0, $violations, '->validateProperty() returns no violations if no constraints have been configured for the property being validated'); + } + + public function testValidatePropertyValue() + { + $test = $this; + $entity = new Entity(); + $entity->setLastName('Schussek'); + + $callback1 = function ($value, ExecutionContextInterface $context) use ($test, $entity) { + $propertyMetadatas = $test->metadata->getPropertyMetadata('firstName'); + + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertSame('firstName', $context->getPropertyName()); + $test->assertSame('firstName', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($propertyMetadatas[0], $context->getMetadata()); + $test->assertSame($entity, $context->getRoot()); + $test->assertSame('Bernhard', $context->getValue()); + $test->assertSame('Bernhard', $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Other violation'); + }; + + $this->metadata->addPropertyConstraint('firstName', new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group', + ))); + $this->metadata->addPropertyConstraint('lastName', new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group', + ))); + + $violations = $this->validatePropertyValue( + $entity, + 'firstName', + 'Bernhard', + 'Group' + ); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('firstName', $violations[0]->getPropertyPath()); + $this->assertSame($entity, $violations[0]->getRoot()); + $this->assertSame('Bernhard', $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + public function testValidatePropertyValueWithClassName() + { + $test = $this; + + $callback1 = function ($value, ExecutionContextInterface $context) use ($test) { + $propertyMetadatas = $test->metadata->getPropertyMetadata('firstName'); + + $test->assertSame($test::ENTITY_CLASS, $context->getClassName()); + $test->assertSame('firstName', $context->getPropertyName()); + $test->assertSame('', $context->getPropertyPath()); + $test->assertSame('Group', $context->getGroup()); + $test->assertSame($propertyMetadatas[0], $context->getMetadata()); + $test->assertSame('Bernhard', $context->getRoot()); + $test->assertSame('Bernhard', $context->getValue()); + $test->assertSame('Bernhard', $value); + + $context->addViolation('Message %param%', array('%param%' => 'value')); + }; + + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Other violation'); + }; + + $this->metadata->addPropertyConstraint('firstName', new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group', + ))); + $this->metadata->addPropertyConstraint('lastName', new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group', + ))); + + $violations = $this->validatePropertyValue( + self::ENTITY_CLASS, + 'firstName', + 'Bernhard', + 'Group' + ); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Message value', $violations[0]->getMessage()); + $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); + $this->assertSame(array('%param%' => 'value'), $violations[0]->getMessageParameters()); + $this->assertSame('', $violations[0]->getPropertyPath()); + $this->assertSame('Bernhard', $violations[0]->getRoot()); + $this->assertSame('Bernhard', $violations[0]->getInvalidValue()); + $this->assertNull($violations[0]->getMessagePluralization()); + $this->assertNull($violations[0]->getCode()); + } + + /** + * Cannot be UnsupportedMetadataException for BC with Symfony < 2.5. + * + * @expectedException \Symfony\Component\Validator\Exception\ValidatorException + * @group legacy + */ + public function testLegacyValidatePropertyValueFailsIfPropertiesNotSupported() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + // $metadata does not implement PropertyMetadataContainerInterface + $metadata = $this->getMock('Symfony\Component\Validator\MetadataInterface'); + + $this->metadataFactory->addMetadataForValue('VALUE', $metadata); + + $this->validatePropertyValue('VALUE', 'someProperty', 'someValue'); + } + + /** + * https://github.com/symfony/symfony/issues/11604 + */ + public function testValidatePropertyValueWithoutConstraints() + { + $entity = new Entity(); + $violations = $this->validatePropertyValue($entity, 'lastName', 'foo'); + + $this->assertCount(0, $violations, '->validatePropertyValue() returns no violations if no constraints have been configured for the property being validated'); + } + + public function testValidateObjectOnlyOncePerGroup() + { + $entity = new Entity(); + $entity->reference = new Reference(); + $entity->reference2 = $entity->reference; + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message'); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->metadata->addPropertyConstraint('reference2', new Valid()); + $this->referenceMetadata->addConstraint(new Callback($callback)); + + $violations = $this->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + } + + public function testValidateDifferentObjectsSeparately() + { + $entity = new Entity(); + $entity->reference = new Reference(); + $entity->reference2 = new Reference(); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message'); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->metadata->addPropertyConstraint('reference2', new Valid()); + $this->referenceMetadata->addConstraint(new Callback($callback)); + + $violations = $this->validate($entity); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(2, $violations); + } + + public function testValidateSingleGroup() + { + $entity = new Entity(); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message'); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group 1', + ))); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group 2', + ))); + + $violations = $this->validate($entity, null, 'Group 2'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + } + + public function testValidateMultipleGroups() + { + $entity = new Entity(); + + $callback = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Message'); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group 1', + ))); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback, + 'groups' => 'Group 2', + ))); + + $violations = $this->validate($entity, null, array('Group 1', 'Group 2')); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(2, $violations); + } + + public function testReplaceDefaultGroupByGroupSequenceObject() + { + $entity = new Entity(); + + $callback1 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in Group 2'); + }; + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in Group 3'); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => function () {}, + 'groups' => 'Group 1', + ))); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group 2', + ))); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group 3', + ))); + + $sequence = new GroupSequence(array('Group 1', 'Group 2', 'Group 3', 'Entity')); + $this->metadata->setGroupSequence($sequence); + + $violations = $this->validate($entity, null, 'Default'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Violation in Group 2', $violations[0]->getMessage()); + } + + public function testReplaceDefaultGroupByGroupSequenceArray() + { + $entity = new Entity(); + + $callback1 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in Group 2'); + }; + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in Group 3'); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => function () {}, + 'groups' => 'Group 1', + ))); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group 2', + ))); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group 3', + ))); + + $sequence = array('Group 1', 'Group 2', 'Group 3', 'Entity'); + $this->metadata->setGroupSequence($sequence); + + $violations = $this->validate($entity, null, 'Default'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Violation in Group 2', $violations[0]->getMessage()); + } + + public function testPropagateDefaultGroupToReferenceWhenReplacingDefaultGroup() + { + $entity = new Entity(); + $entity->reference = new Reference(); + + $callback1 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in Default group'); + }; + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in group sequence'); + }; + + $this->metadata->addPropertyConstraint('reference', new Valid()); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Default', + ))); + $this->referenceMetadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group 1', + ))); + + $sequence = new GroupSequence(array('Group 1', 'Entity')); + $this->metadata->setGroupSequence($sequence); + + $violations = $this->validate($entity, null, 'Default'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Violation in Default group', $violations[0]->getMessage()); + } + + public function testValidateCustomGroupWhenDefaultGroupWasReplaced() + { + $entity = new Entity(); + + $callback1 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in other group'); + }; + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in group sequence'); + }; + + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Other Group', + ))); + $this->metadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group 1', + ))); + + $sequence = new GroupSequence(array('Group 1', 'Entity')); + $this->metadata->setGroupSequence($sequence); + + $violations = $this->validate($entity, null, 'Other Group'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Violation in other group', $violations[0]->getMessage()); + } + + public function testReplaceDefaultGroupWithObjectFromGroupSequenceProvider() + { + $sequence = new GroupSequence(array('Group 1', 'Group 2', 'Group 3', 'Entity')); + $entity = new GroupSequenceProviderEntity($sequence); + + $callback1 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in Group 2'); + }; + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in Group 3'); + }; + + $metadata = new ClassMetadata(get_class($entity)); + $metadata->addConstraint(new Callback(array( + 'callback' => function () {}, + 'groups' => 'Group 1', + ))); + $metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group 2', + ))); + $metadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group 3', + ))); + $metadata->setGroupSequenceProvider(true); + + $this->metadataFactory->addMetadata($metadata); + + $violations = $this->validate($entity, null, 'Default'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Violation in Group 2', $violations[0]->getMessage()); + } + + public function testReplaceDefaultGroupWithArrayFromGroupSequenceProvider() + { + $sequence = array('Group 1', 'Group 2', 'Group 3', 'Entity'); + $entity = new GroupSequenceProviderEntity($sequence); + + $callback1 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in Group 2'); + }; + $callback2 = function ($value, ExecutionContextInterface $context) { + $context->addViolation('Violation in Group 3'); + }; + + $metadata = new ClassMetadata(get_class($entity)); + $metadata->addConstraint(new Callback(array( + 'callback' => function () {}, + 'groups' => 'Group 1', + ))); + $metadata->addConstraint(new Callback(array( + 'callback' => $callback1, + 'groups' => 'Group 2', + ))); + $metadata->addConstraint(new Callback(array( + 'callback' => $callback2, + 'groups' => 'Group 3', + ))); + $metadata->setGroupSequenceProvider(true); + + $this->metadataFactory->addMetadata($metadata); + + $violations = $this->validate($entity, null, 'Default'); + + /** @var ConstraintViolationInterface[] $violations */ + $this->assertCount(1, $violations); + $this->assertSame('Violation in Group 2', $violations[0]->getMessage()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php new file mode 100644 index 0000000..624abd4 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php @@ -0,0 +1,41 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Validator; + +use Symfony\Component\Validator\ConstraintValidatorFactory; +use Symfony\Component\Validator\Context\LegacyExecutionContextFactory; +use Symfony\Component\Validator\DefaultTranslator; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\Validator\LegacyValidator; + +/** + * @group legacy + */ +class LegacyValidator2Dot5ApiTest extends Abstract2Dot5ApiTest +{ + protected function setUp() + { + if (PHP_VERSION_ID < 50309) { + $this->markTestSkipped('Not supported prior to PHP 5.3.9'); + } + + parent::setUp(); + } + + protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array()) + { + $contextFactory = new LegacyExecutionContextFactory($metadataFactory, new DefaultTranslator()); + $validatorFactory = new ConstraintValidatorFactory(); + + return new LegacyValidator($contextFactory, $metadataFactory, $validatorFactory, $objectInitializers); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidatorLegacyApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidatorLegacyApiTest.php new file mode 100644 index 0000000..965a769 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidatorLegacyApiTest.php @@ -0,0 +1,41 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Validator; + +use Symfony\Component\Validator\ConstraintValidatorFactory; +use Symfony\Component\Validator\Context\LegacyExecutionContextFactory; +use Symfony\Component\Validator\DefaultTranslator; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\Validator\LegacyValidator; + +/** + * @group legacy + */ +class LegacyValidatorLegacyApiTest extends AbstractLegacyApiTest +{ + protected function setUp() + { + if (PHP_VERSION_ID < 50309) { + $this->markTestSkipped('Not supported prior to PHP 5.3.9'); + } + + parent::setUp(); + } + + protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array()) + { + $contextFactory = new LegacyExecutionContextFactory($metadataFactory, new DefaultTranslator()); + $validatorFactory = new ConstraintValidatorFactory(); + + return new LegacyValidator($contextFactory, $metadataFactory, $validatorFactory, $objectInitializers); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php new file mode 100644 index 0000000..6235fda --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php @@ -0,0 +1,29 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Validator; + +use Symfony\Component\Validator\ConstraintValidatorFactory; +use Symfony\Component\Validator\Context\ExecutionContextFactory; +use Symfony\Component\Validator\DefaultTranslator; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\Validator\RecursiveValidator; + +class RecursiveValidator2Dot5ApiTest extends Abstract2Dot5ApiTest +{ + protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array()) + { + $contextFactory = new ExecutionContextFactory(new DefaultTranslator()); + $validatorFactory = new ConstraintValidatorFactory(); + + return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $objectInitializers); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php new file mode 100644 index 0000000..e2585d7 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php @@ -0,0 +1,160 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests; + +use Symfony\Component\Validator\Validation; +use Symfony\Component\Validator\ValidatorBuilder; +use Symfony\Component\Validator\ValidatorBuilderInterface; + +class ValidatorBuilderTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var ValidatorBuilderInterface + */ + protected $builder; + + protected function setUp() + { + $this->builder = new ValidatorBuilder(); + } + + protected function tearDown() + { + $this->builder = null; + } + + public function testAddObjectInitializer() + { + $this->assertSame($this->builder, $this->builder->addObjectInitializer( + $this->getMock('Symfony\Component\Validator\ObjectInitializerInterface') + )); + } + + public function testAddObjectInitializers() + { + $this->assertSame($this->builder, $this->builder->addObjectInitializers(array())); + } + + public function testAddXmlMapping() + { + $this->assertSame($this->builder, $this->builder->addXmlMapping('mapping')); + } + + public function testAddXmlMappings() + { + $this->assertSame($this->builder, $this->builder->addXmlMappings(array())); + } + + public function testAddYamlMapping() + { + $this->assertSame($this->builder, $this->builder->addYamlMapping('mapping')); + } + + public function testAddYamlMappings() + { + $this->assertSame($this->builder, $this->builder->addYamlMappings(array())); + } + + public function testAddMethodMapping() + { + $this->assertSame($this->builder, $this->builder->addMethodMapping('mapping')); + } + + public function testAddMethodMappings() + { + $this->assertSame($this->builder, $this->builder->addMethodMappings(array())); + } + + public function testEnableAnnotationMapping() + { + $this->assertSame($this->builder, $this->builder->enableAnnotationMapping()); + } + + public function testDisableAnnotationMapping() + { + $this->assertSame($this->builder, $this->builder->disableAnnotationMapping()); + } + + public function testSetMetadataCache() + { + $this->assertSame($this->builder, $this->builder->setMetadataCache( + $this->getMock('Symfony\Component\Validator\Mapping\Cache\CacheInterface')) + ); + } + + public function testSetConstraintValidatorFactory() + { + $this->assertSame($this->builder, $this->builder->setConstraintValidatorFactory( + $this->getMock('Symfony\Component\Validator\ConstraintValidatorFactoryInterface')) + ); + } + + public function testSetTranslator() + { + $this->assertSame($this->builder, $this->builder->setTranslator( + $this->getMock('Symfony\Component\Translation\TranslatorInterface')) + ); + } + + public function testSetTranslationDomain() + { + $this->assertSame($this->builder, $this->builder->setTranslationDomain('TRANS_DOMAIN')); + } + + /** + * @group legacy + */ + public function testLegacyDefaultApiVersion() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + if (PHP_VERSION_ID < 50309) { + // Old implementation on PHP < 5.3.9 + $this->assertInstanceOf('Symfony\Component\Validator\Validator', $this->builder->getValidator()); + } else { + // Legacy compatible implementation on PHP >= 5.3.9 + $this->assertInstanceOf('Symfony\Component\Validator\Validator\LegacyValidator', $this->builder->getValidator()); + } + } + + /** + * @group legacy + */ + public function testLegacySetApiVersion24() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + $this->assertSame($this->builder, $this->builder->setApiVersion(Validation::API_VERSION_2_4)); + $this->assertInstanceOf('Symfony\Component\Validator\Validator', $this->builder->getValidator()); + } + + public function testSetApiVersion25() + { + $this->assertSame($this->builder, $this->builder->setApiVersion(Validation::API_VERSION_2_5)); + $this->assertInstanceOf('Symfony\Component\Validator\Validator\RecursiveValidator', $this->builder->getValidator()); + } + + /** + * @group legacy + */ + public function testLegacySetApiVersion24And25() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + if (PHP_VERSION_ID < 50309) { + $this->markTestSkipped('Not supported prior to PHP 5.3.9'); + } + + $this->assertSame($this->builder, $this->builder->setApiVersion(Validation::API_VERSION_2_5_BC)); + $this->assertInstanceOf('Symfony\Component\Validator\Validator\LegacyValidator', $this->builder->getValidator()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorTest.php b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorTest.php new file mode 100644 index 0000000..3cc36f5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorTest.php @@ -0,0 +1,36 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests; + +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\ConstraintValidatorFactory; +use Symfony\Component\Validator\DefaultTranslator; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\Tests\Fixtures\Entity; +use Symfony\Component\Validator\Tests\Validator\AbstractLegacyApiTest; +use Symfony\Component\Validator\Validator as LegacyValidator; + +class ValidatorTest extends AbstractLegacyApiTest +{ + protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array()) + { + return new LegacyValidator($metadataFactory, new ConstraintValidatorFactory(), new DefaultTranslator(), 'validators', $objectInitializers); + } + + /** + * @expectedException \Symfony\Component\Validator\Exception\ValidatorException + */ + public function testValidateValueRejectsValid() + { + $this->validator->validateValue(new Entity(), new Valid()); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Util/PropertyPath.php b/vendor/symfony/validator/Symfony/Component/Validator/Util/PropertyPath.php new file mode 100644 index 0000000..4d397a9 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Util/PropertyPath.php @@ -0,0 +1,57 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Util; + +/** + * Contains utility methods for dealing with property paths. + * + * For more extensive functionality, use Symfony's PropertyAccess component. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class PropertyPath +{ + /** + * Appends a path to a given property path. + * + * If the base path is empty, the appended path will be returned unchanged. + * If the base path is not empty, and the appended path starts with a + * squared opening bracket ("["), the concatenation of the two paths is + * returned. Otherwise, the concatenation of the two paths is returned, + * separated by a dot ("."). + * + * @param string $basePath The base path + * @param string $subPath The path to append + * + * @return string The concatenation of the two property paths + */ + public static function append($basePath, $subPath) + { + if ('' !== (string) $subPath) { + if ('[' === $subPath{0}) { + return $basePath.$subPath; + } + + return $basePath ? $basePath.'.'.$subPath : $subPath; + } + + return $basePath; + } + + /** + * Not instantiable. + */ + private function __construct() + { + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Validation.php b/vendor/symfony/validator/Symfony/Component/Validator/Validation.php new file mode 100644 index 0000000..b304dbb --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Validation.php @@ -0,0 +1,66 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Entry point for the Validator component. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +final class Validation +{ + /** + * The Validator API provided by Symfony 2.4 and older. + */ + const API_VERSION_2_4 = 1; + + /** + * The Validator API provided by Symfony 2.5 and newer. + */ + const API_VERSION_2_5 = 2; + + /** + * The Validator API provided by Symfony 2.5 and newer with a backwards + * compatibility layer for 2.4 and older. + */ + const API_VERSION_2_5_BC = 3; + + /** + * Creates a new validator. + * + * If you want to configure the validator, use + * {@link createValidatorBuilder()} instead. + * + * @return ValidatorInterface The new validator. + */ + public static function createValidator() + { + return self::createValidatorBuilder()->getValidator(); + } + + /** + * Creates a configurable builder for validator objects. + * + * @return ValidatorBuilderInterface The new builder. + */ + public static function createValidatorBuilder() + { + return new ValidatorBuilder(); + } + + /** + * This class cannot be instantiated. + */ + private function __construct() + { + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitor.php b/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitor.php new file mode 100644 index 0000000..3af8249 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitor.php @@ -0,0 +1,210 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\Exception\NoSuchMetadataException; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +/** + * Default implementation of {@link ValidationVisitorInterface} and + * {@link GlobalExecutionContextInterface}. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + */ +class ValidationVisitor implements ValidationVisitorInterface, GlobalExecutionContextInterface +{ + /** + * @var mixed + */ + private $root; + + /** + * @var MetadataFactoryInterface + */ + private $metadataFactory; + + /** + * @var ConstraintValidatorFactoryInterface + */ + private $validatorFactory; + + /** + * @var TranslatorInterface + */ + private $translator; + + /** + * @var null|string + */ + private $translationDomain; + + /** + * @var array + */ + private $objectInitializers; + + /** + * @var ConstraintViolationList + */ + private $violations; + + /** + * @var array + */ + private $validatedObjects = array(); + + /** + * Creates a new validation visitor. + * + * @param mixed $root The value passed to the validator. + * @param MetadataFactoryInterface $metadataFactory The factory for obtaining metadata instances. + * @param ConstraintValidatorFactoryInterface $validatorFactory The factory for creating constraint validators. + * @param TranslatorInterface $translator The translator for translating violation messages. + * @param string|null $translationDomain The domain of the translation messages. + * @param ObjectInitializerInterface[] $objectInitializers The initializers for preparing objects before validation. + * + * @throws UnexpectedTypeException If any of the object initializers is not an instance of ObjectInitializerInterface + */ + public function __construct($root, MetadataFactoryInterface $metadataFactory, ConstraintValidatorFactoryInterface $validatorFactory, TranslatorInterface $translator, $translationDomain = null, array $objectInitializers = array()) + { + foreach ($objectInitializers as $initializer) { + if (!$initializer instanceof ObjectInitializerInterface) { + throw new UnexpectedTypeException($initializer, 'Symfony\Component\Validator\ObjectInitializerInterface'); + } + } + + $this->root = $root; + $this->metadataFactory = $metadataFactory; + $this->validatorFactory = $validatorFactory; + $this->translator = $translator; + $this->translationDomain = $translationDomain; + $this->objectInitializers = $objectInitializers; + $this->violations = new ConstraintViolationList(); + } + + /** + * {@inheritdoc} + */ + public function visit(MetadataInterface $metadata, $value, $group, $propertyPath) + { + $context = new ExecutionContext( + $this, + $this->translator, + $this->translationDomain, + $metadata, + $value, + $group, + $propertyPath + ); + + $context->validateValue($value, $metadata->findConstraints($group)); + } + + /** + * {@inheritdoc} + */ + public function validate($value, $group, $propertyPath, $traverse = false, $deep = false) + { + if (null === $value) { + return; + } + + if (is_object($value)) { + $hash = spl_object_hash($value); + + // Exit, if the object is already validated for the current group + if (isset($this->validatedObjects[$hash][$group])) { + return; + } + + // Initialize if the object wasn't initialized before + if (!isset($this->validatedObjects[$hash])) { + foreach ($this->objectInitializers as $initializer) { + if (!$initializer instanceof ObjectInitializerInterface) { + throw new \LogicException('Validator initializers must implement ObjectInitializerInterface.'); + } + $initializer->initialize($value); + } + } + + // Remember validating this object before starting and possibly + // traversing the object graph + $this->validatedObjects[$hash][$group] = true; + } + + // Validate arrays recursively by default, otherwise every driver needs + // to implement special handling for arrays. + // https://github.com/symfony/symfony/issues/6246 + if (is_array($value) || ($traverse && $value instanceof \Traversable)) { + foreach ($value as $key => $element) { + // Ignore any scalar values in the collection + if (is_object($element) || is_array($element)) { + // Only repeat the traversal if $deep is set + $this->validate($element, $group, $propertyPath.'['.$key.']', $deep, $deep); + } + } + + try { + $this->metadataFactory->getMetadataFor($value)->accept($this, $value, $group, $propertyPath); + } catch (NoSuchMetadataException $e) { + // Metadata doesn't necessarily have to exist for + // traversable objects, because we know how to validate + // them anyway. Optionally, additional metadata is supported. + } + } else { + $this->metadataFactory->getMetadataFor($value)->accept($this, $value, $group, $propertyPath); + } + } + + /** + * {@inheritdoc} + */ + public function getViolations() + { + return $this->violations; + } + + /** + * {@inheritdoc} + */ + public function getRoot() + { + return $this->root; + } + + /** + * {@inheritdoc} + */ + public function getVisitor() + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function getValidatorFactory() + { + return $this->validatorFactory; + } + + /** + * {@inheritdoc} + */ + public function getMetadataFactory() + { + return $this->metadataFactory; + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitorInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitorInterface.php new file mode 100644 index 0000000..483a1b5 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitorInterface.php @@ -0,0 +1,86 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Validates values against constraints defined in {@link MetadataInterface} + * instances. + * + * This interface is an implementation of the Visitor design pattern. A value + * is validated by first passing it to the {@link validate} method. That method + * will determine the matching {@link MetadataInterface} for validating the + * value. It then calls the {@link MetadataInterface::accept} method of that + * metadata. <tt>accept()</tt> does two things: + * + * <ol> + * <li>It calls {@link visit} to validate the value against the constraints of + * the metadata.</li> + * <li>It calls <tt>accept()</tt> on all nested metadata instances with the + * corresponding values extracted from the current value. For example, if the + * current metadata represents a class and the current value is an object of + * that class, the metadata contains nested instances for each property of that + * class. It forwards the call to these nested metadata with the values of the + * corresponding properties in the original object.</li> + * </ol> + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + */ +interface ValidationVisitorInterface +{ + /** + * Validates a value. + * + * If the value is an array or a traversable object, you can set the + * parameter <tt>$traverse</tt> to <tt>true</tt> in order to run through + * the collection and validate each element. If these elements can be + * collections again and you want to traverse them recursively, set the + * parameter <tt>$deep</tt> to <tt>true</tt> as well. + * + * If you set <tt>$traversable</tt> to <tt>true</tt>, the visitor will + * nevertheless try to find metadata for the collection and validate its + * constraints. If no such metadata is found, the visitor ignores that and + * only iterates the collection. + * + * If you don't set <tt>$traversable</tt> to <tt>true</tt> and the visitor + * does not find metadata for the given value, it will fail with an + * exception. + * + * @param mixed $value The value to validate. + * @param string $group The validation group to validate. + * @param string $propertyPath The current property path in the validation graph. + * @param bool $traverse Whether to traverse the value if it is traversable. + * @param bool $deep Whether to traverse nested traversable values recursively. + * + * @throws Exception\NoSuchMetadataException If no metadata can be found for + * the given value. + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + */ + public function validate($value, $group, $propertyPath, $traverse = false, $deep = false); + + /** + * Validates a value against the constraints defined in some metadata. + * + * This method implements the Visitor design pattern. See also + * {@link ValidationVisitorInterface}. + * + * @param MetadataInterface $metadata The metadata holding the constraints. + * @param mixed $value The value to validate. + * @param string $group The validation group to validate. + * @param string $propertyPath The current property path in the validation graph. + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + */ + public function visit(MetadataInterface $metadata, $value, $group, $propertyPath); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Validator.php b/vendor/symfony/validator/Symfony/Component/Validator/Validator.php new file mode 100644 index 0000000..6edbb7a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Validator.php @@ -0,0 +1,235 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\Exception\ValidatorException; + +/** + * Default implementation of {@link ValidatorInterface}. + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Validator\RecursiveValidator} instead. + */ +class Validator implements ValidatorInterface, Mapping\Factory\MetadataFactoryInterface +{ + /** + * @var MetadataFactoryInterface + */ + private $metadataFactory; + + /** + * @var ConstraintValidatorFactoryInterface + */ + private $validatorFactory; + + /** + * @var TranslatorInterface + */ + private $translator; + + /** + * @var null|string + */ + private $translationDomain; + + /** + * @var array + */ + private $objectInitializers; + + public function __construct( + MetadataFactoryInterface $metadataFactory, + ConstraintValidatorFactoryInterface $validatorFactory, + TranslatorInterface $translator, + $translationDomain = 'validators', + array $objectInitializers = array() + ) { + $this->metadataFactory = $metadataFactory; + $this->validatorFactory = $validatorFactory; + $this->translator = $translator; + $this->translationDomain = $translationDomain; + $this->objectInitializers = $objectInitializers; + } + + /** + * {@inheritdoc} + */ + public function getMetadataFactory() + { + return $this->metadataFactory; + } + + /** + * {@inheritdoc} + */ + public function getMetadataFor($value) + { + return $this->metadataFactory->getMetadataFor($value); + } + + /** + * {@inheritdoc} + */ + public function hasMetadataFor($value) + { + return $this->metadataFactory->hasMetadataFor($value); + } + + /** + * {@inheritdoc} + */ + public function validate($value, $groups = null, $traverse = false, $deep = false) + { + $visitor = $this->createVisitor($value); + + foreach ($this->resolveGroups($groups) as $group) { + $visitor->validate($value, $group, '', $traverse, $deep); + } + + return $visitor->getViolations(); + } + + /** + * {@inheritdoc} + * + * @throws ValidatorException If the metadata for the value does not support properties. + */ + public function validateProperty($containingValue, $property, $groups = null) + { + $visitor = $this->createVisitor($containingValue); + $metadata = $this->metadataFactory->getMetadataFor($containingValue); + + if (!$metadata instanceof PropertyMetadataContainerInterface) { + $valueAsString = is_scalar($containingValue) + ? '"'.$containingValue.'"' + : 'the value of type '.gettype($containingValue); + + throw new ValidatorException(sprintf('The metadata for %s does not support properties.', $valueAsString)); + } + + foreach ($this->resolveGroups($groups) as $group) { + if (!$metadata->hasPropertyMetadata($property)) { + continue; + } + + foreach ($metadata->getPropertyMetadata($property) as $propMeta) { + $propMeta->accept($visitor, $propMeta->getPropertyValue($containingValue), $group, $property); + } + } + + return $visitor->getViolations(); + } + + /** + * {@inheritdoc} + * + * @throws ValidatorException If the metadata for the value does not support properties. + */ + public function validatePropertyValue($containingValue, $property, $value, $groups = null) + { + $visitor = $this->createVisitor(is_object($containingValue) ? $containingValue : $value); + $metadata = $this->metadataFactory->getMetadataFor($containingValue); + + if (!$metadata instanceof PropertyMetadataContainerInterface) { + $valueAsString = is_scalar($containingValue) + ? '"'.$containingValue.'"' + : 'the value of type '.gettype($containingValue); + + throw new ValidatorException(sprintf('The metadata for '.$valueAsString.' does not support properties.')); + } + + // If $containingValue is passed as class name, take $value as root + // and start the traversal with an empty property path + $propertyPath = is_object($containingValue) ? $property : ''; + + foreach ($this->resolveGroups($groups) as $group) { + if (!$metadata->hasPropertyMetadata($property)) { + continue; + } + + foreach ($metadata->getPropertyMetadata($property) as $propMeta) { + $propMeta->accept($visitor, $value, $group, $propertyPath); + } + } + + return $visitor->getViolations(); + } + + /** + * {@inheritdoc} + */ + public function validateValue($value, $constraints, $groups = null) + { + $context = new ExecutionContext($this->createVisitor($value), $this->translator, $this->translationDomain); + + $constraints = is_array($constraints) ? $constraints : array($constraints); + + foreach ($constraints as $constraint) { + if ($constraint instanceof Valid) { + // Why can't the Valid constraint be executed directly? + // + // It cannot be executed like regular other constraints, because regular + // constraints are only executed *if they belong to the validated group*. + // The Valid constraint, on the other hand, is always executed and propagates + // the group to the cascaded object. The propagated group depends on + // + // * Whether a group sequence is currently being executed. Then the default + // group is propagated. + // + // * Otherwise the validated group is propagated. + + throw new ValidatorException( + sprintf( + 'The constraint %s cannot be validated. Use the method validate() instead.', + get_class($constraint) + ) + ); + } + + $context->validateValue($value, $constraint, '', $groups); + } + + return $context->getViolations(); + } + + /** + * @param mixed $root + * + * @return ValidationVisitor + */ + private function createVisitor($root) + { + return new ValidationVisitor( + $root, + $this->metadataFactory, + $this->validatorFactory, + $this->translator, + $this->translationDomain, + $this->objectInitializers + ); + } + + /** + * @param null|string|string[] $groups + * + * @return string[] + */ + private function resolveGroups($groups) + { + return $groups ? (array) $groups : array(Constraint::DEFAULT_GROUP); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Validator/ContextualValidatorInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Validator/ContextualValidatorInterface.php new file mode 100644 index 0000000..767f895 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Validator/ContextualValidatorInterface.php @@ -0,0 +1,89 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Validator; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintViolationListInterface; + +/** + * A validator in a specific execution context. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface ContextualValidatorInterface +{ + /** + * Appends the given path to the property path of the context. + * + * If called multiple times, the path will always be reset to the context's + * original path with the given path appended to it. + * + * @param string $path The path to append + * + * @return ContextualValidatorInterface This validator + */ + public function atPath($path); + + /** + * Validates a value against a constraint or a list of constraints. + * + * If no constraint is passed, the constraint + * {@link \Symfony\Component\Validator\Constraints\Valid} is assumed. + * + * @param mixed $value The value to validate + * @param Constraint|Constraint[] $constraints The constraint(s) to validate + * against + * @param array|null $groups The validation groups to + * validate. If none is given, + * "Default" is assumed + * + * @return ContextualValidatorInterface This validator + */ + public function validate($value, $constraints = null, $groups = null); + + /** + * Validates a property of an object against the constraints specified + * for this property. + * + * @param object $object The object + * @param string $propertyName The name of the validated property + * @param array|null $groups The validation groups to validate. If + * none is given, "Default" is assumed + * + * @return ContextualValidatorInterface This validator + */ + public function validateProperty($object, $propertyName, $groups = null); + + /** + * Validates a value against the constraints specified for an object's + * property. + * + * @param object|string $objectOrClass The object or its class name + * @param string $propertyName The name of the property + * @param mixed $value The value to validate against the + * property's constraints + * @param array|null $groups The validation groups to validate. If + * none is given, "Default" is assumed + * + * @return ContextualValidatorInterface This validator + */ + public function validatePropertyValue($objectOrClass, $propertyName, $value, $groups = null); + + /** + * Returns the violations that have been generated so far in the context + * of the validator. + * + * @return ConstraintViolationListInterface The constraint violations + */ + public function getViolations(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Validator/LegacyValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Validator/LegacyValidator.php new file mode 100644 index 0000000..ce3501f --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Validator/LegacyValidator.php @@ -0,0 +1,79 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Validator; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Constraints\GroupSequence; +use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface; + +/** + * A validator that supports both the API of Symfony < 2.5 and Symfony 2.5+. + * + * This class is incompatible with PHP versions < 5.3.9, because it implements + * two different interfaces specifying the same method validate(): + * + * - {@link \Symfony\Component\Validator\ValidatorInterface} + * - {@link \Symfony\Component\Validator\Validator\ValidatorInterface} + * + * In PHP versions prior to 5.3.9, either use {@link RecursiveValidator} or the + * deprecated class {@link \Symfony\Component\Validator\Validator} instead. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @see \Symfony\Component\Validator\ValidatorInterface + * @see \Symfony\Component\Validator\Validator\ValidatorInterface + * + * @deprecated Implemented for backwards compatibility with Symfony < 2.5. + * To be removed in Symfony 3.0. + */ +class LegacyValidator extends RecursiveValidator implements LegacyValidatorInterface +{ + public function validate($value, $groups = null, $traverse = false, $deep = false) + { + $numArgs = func_num_args(); + + // Use new signature if constraints are given in the second argument + if (self::testConstraints($groups) && ($numArgs < 3 || 3 === $numArgs && self::testGroups($traverse))) { + // Rename to avoid total confusion ;) + $constraints = $groups; + $groups = $traverse; + + return parent::validate($value, $constraints, $groups); + } + + $constraint = new Valid(array('traverse' => $traverse, 'deep' => $deep)); + + return parent::validate($value, $constraint, $groups); + } + + public function validateValue($value, $constraints, $groups = null) + { + return parent::validate($value, $constraints, $groups); + } + + public function getMetadataFactory() + { + return $this->metadataFactory; + } + + private static function testConstraints($constraints) + { + return null === $constraints || $constraints instanceof Constraint || (is_array($constraints) && current($constraints) instanceof Constraint); + } + + private static function testGroups($groups) + { + return null === $groups || is_string($groups) || $groups instanceof GroupSequence || (is_array($groups) && (is_string(current($groups)) || current($groups) instanceof GroupSequence)); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php new file mode 100644 index 0000000..191decd --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php @@ -0,0 +1,866 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Validator; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Constraints\GroupSequence; +use Symfony\Component\Validator\ConstraintValidatorFactoryInterface; +use Symfony\Component\Validator\Context\ExecutionContextInterface; +use Symfony\Component\Validator\Exception\ConstraintDefinitionException; +use Symfony\Component\Validator\Exception\NoSuchMetadataException; +use Symfony\Component\Validator\Exception\RuntimeException; +use Symfony\Component\Validator\Exception\UnsupportedMetadataException; +use Symfony\Component\Validator\Exception\ValidatorException; +use Symfony\Component\Validator\Mapping\CascadingStrategy; +use Symfony\Component\Validator\Mapping\ClassMetadataInterface; +use Symfony\Component\Validator\Mapping\GenericMetadata; +use Symfony\Component\Validator\Mapping\MetadataInterface; +use Symfony\Component\Validator\Mapping\PropertyMetadataInterface; +use Symfony\Component\Validator\Mapping\TraversalStrategy; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\ObjectInitializerInterface; +use Symfony\Component\Validator\Util\PropertyPath; + +/** + * Recursive implementation of {@link ContextualValidatorInterface}. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class RecursiveContextualValidator implements ContextualValidatorInterface +{ + /** + * @var ExecutionContextInterface + */ + private $context; + + /** + * @var MetadataFactoryInterface + */ + private $metadataFactory; + + /** + * @var ConstraintValidatorFactoryInterface + */ + private $validatorFactory; + + /** + * @var ObjectInitializerInterface[] + */ + private $objectInitializers; + + /** + * Creates a validator for the given context. + * + * @param ExecutionContextInterface $context The execution context + * @param MetadataFactoryInterface $metadataFactory The factory for + * fetching the metadata + * of validated objects + * @param ConstraintValidatorFactoryInterface $validatorFactory The factory for creating + * constraint validators + * @param ObjectInitializerInterface[] $objectInitializers The object initializers + */ + public function __construct(ExecutionContextInterface $context, MetadataFactoryInterface $metadataFactory, ConstraintValidatorFactoryInterface $validatorFactory, array $objectInitializers = array()) + { + $this->context = $context; + $this->defaultPropertyPath = $context->getPropertyPath(); + $this->defaultGroups = array($context->getGroup() ?: Constraint::DEFAULT_GROUP); + $this->metadataFactory = $metadataFactory; + $this->validatorFactory = $validatorFactory; + $this->objectInitializers = $objectInitializers; + } + + /** + * {@inheritdoc} + */ + public function atPath($path) + { + $this->defaultPropertyPath = $this->context->getPropertyPath($path); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function validate($value, $constraints = null, $groups = null) + { + $groups = $groups ? $this->normalizeGroups($groups) : $this->defaultGroups; + + $previousValue = $this->context->getValue(); + $previousObject = $this->context->getObject(); + $previousMetadata = $this->context->getMetadata(); + $previousPath = $this->context->getPropertyPath(); + $previousGroup = $this->context->getGroup(); + + // If explicit constraints are passed, validate the value against + // those constraints + if (null !== $constraints) { + // You can pass a single constraint or an array of constraints + // Make sure to deal with an array in the rest of the code + if (!is_array($constraints)) { + $constraints = array($constraints); + } + + $metadata = new GenericMetadata(); + $metadata->addConstraints($constraints); + + $this->validateGenericNode( + $value, + null, + is_object($value) ? spl_object_hash($value) : null, + $metadata, + $this->defaultPropertyPath, + $groups, + null, + TraversalStrategy::IMPLICIT, + $this->context + ); + + $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath); + $this->context->setGroup($previousGroup); + + return $this; + } + + // If an object is passed without explicit constraints, validate that + // object against the constraints defined for the object's class + if (is_object($value)) { + $this->validateObject( + $value, + $this->defaultPropertyPath, + $groups, + TraversalStrategy::IMPLICIT, + $this->context + ); + + $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath); + $this->context->setGroup($previousGroup); + + return $this; + } + + // If an array is passed without explicit constraints, validate each + // object in the array + if (is_array($value)) { + $this->validateEachObjectIn( + $value, + $this->defaultPropertyPath, + $groups, + true, + $this->context + ); + + $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath); + $this->context->setGroup($previousGroup); + + return $this; + } + + throw new RuntimeException(sprintf( + 'Cannot validate values of type "%s" automatically. Please '. + 'provide a constraint.', + gettype($value) + )); + } + + /** + * {@inheritdoc} + */ + public function validateProperty($object, $propertyName, $groups = null) + { + $classMetadata = $this->metadataFactory->getMetadataFor($object); + + if (!$classMetadata instanceof ClassMetadataInterface) { + // Cannot be UnsupportedMetadataException because of BC with + // Symfony < 2.5 + throw new ValidatorException(sprintf( + 'The metadata factory should return instances of '. + '"\Symfony\Component\Validator\Mapping\ClassMetadataInterface", '. + 'got: "%s".', + is_object($classMetadata) ? get_class($classMetadata) : gettype($classMetadata) + )); + } + + $propertyMetadatas = $classMetadata->getPropertyMetadata($propertyName); + $groups = $groups ? $this->normalizeGroups($groups) : $this->defaultGroups; + $cacheKey = spl_object_hash($object); + $propertyPath = PropertyPath::append($this->defaultPropertyPath, $propertyName); + + $previousValue = $this->context->getValue(); + $previousObject = $this->context->getObject(); + $previousMetadata = $this->context->getMetadata(); + $previousPath = $this->context->getPropertyPath(); + $previousGroup = $this->context->getGroup(); + + foreach ($propertyMetadatas as $propertyMetadata) { + $propertyValue = $propertyMetadata->getPropertyValue($object); + + $this->validateGenericNode( + $propertyValue, + $object, + $cacheKey.':'.$propertyName, + $propertyMetadata, + $propertyPath, + $groups, + null, + TraversalStrategy::IMPLICIT, + $this->context + ); + } + + $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath); + $this->context->setGroup($previousGroup); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function validatePropertyValue($objectOrClass, $propertyName, $value, $groups = null) + { + $classMetadata = $this->metadataFactory->getMetadataFor($objectOrClass); + + if (!$classMetadata instanceof ClassMetadataInterface) { + // Cannot be UnsupportedMetadataException because of BC with + // Symfony < 2.5 + throw new ValidatorException(sprintf( + 'The metadata factory should return instances of '. + '"\Symfony\Component\Validator\Mapping\ClassMetadataInterface", '. + 'got: "%s".', + is_object($classMetadata) ? get_class($classMetadata) : gettype($classMetadata) + )); + } + + $propertyMetadatas = $classMetadata->getPropertyMetadata($propertyName); + $groups = $groups ? $this->normalizeGroups($groups) : $this->defaultGroups; + + if (is_object($objectOrClass)) { + $object = $objectOrClass; + $cacheKey = spl_object_hash($objectOrClass); + $propertyPath = PropertyPath::append($this->defaultPropertyPath, $propertyName); + } else { + // $objectOrClass contains a class name + $object = null; + $cacheKey = null; + $propertyPath = $this->defaultPropertyPath; + } + + $previousValue = $this->context->getValue(); + $previousObject = $this->context->getObject(); + $previousMetadata = $this->context->getMetadata(); + $previousPath = $this->context->getPropertyPath(); + $previousGroup = $this->context->getGroup(); + + foreach ($propertyMetadatas as $propertyMetadata) { + $this->validateGenericNode( + $value, + $object, + $cacheKey.':'.$propertyName, + $propertyMetadata, + $propertyPath, + $groups, + null, + TraversalStrategy::IMPLICIT, + $this->context + ); + } + + $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath); + $this->context->setGroup($previousGroup); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getViolations() + { + return $this->context->getViolations(); + } + + /** + * Normalizes the given group or list of groups to an array. + * + * @param mixed $groups The groups to normalize + * + * @return array A group array + */ + protected function normalizeGroups($groups) + { + if (is_array($groups)) { + return $groups; + } + + return array($groups); + } + /** + * Validates an object against the constraints defined for its class. + * + * If no metadata is available for the class, but the class is an instance + * of {@link \Traversable} and the selected traversal strategy allows + * traversal, the object will be iterated and each nested object will be + * validated instead. + * + * @param object $object The object to cascade + * @param string $propertyPath The current property path + * @param string[] $groups The validated groups + * @param int $traversalStrategy The strategy for traversing the + * cascaded object + * @param ExecutionContextInterface $context The current execution context + * + * @throws NoSuchMetadataException If the object has no associated metadata + * and does not implement {@link \Traversable} + * or if traversal is disabled via the + * $traversalStrategy argument + * @throws UnsupportedMetadataException If the metadata returned by the + * metadata factory does not implement + * {@link ClassMetadataInterface} + */ + private function validateObject($object, $propertyPath, array $groups, $traversalStrategy, ExecutionContextInterface $context) + { + try { + $classMetadata = $this->metadataFactory->getMetadataFor($object); + + if (!$classMetadata instanceof ClassMetadataInterface) { + throw new UnsupportedMetadataException(sprintf( + 'The metadata factory should return instances of '. + '"Symfony\Component\Validator\Mapping\ClassMetadataInterface", '. + 'got: "%s".', + is_object($classMetadata) ? get_class($classMetadata) : gettype($classMetadata) + )); + } + + $this->validateClassNode( + $object, + spl_object_hash($object), + $classMetadata, + $propertyPath, + $groups, + null, + $traversalStrategy, + $context + ); + } catch (NoSuchMetadataException $e) { + // Rethrow if not Traversable + if (!$object instanceof \Traversable) { + throw $e; + } + + // Rethrow unless IMPLICIT or TRAVERSE + if (!($traversalStrategy & (TraversalStrategy::IMPLICIT | TraversalStrategy::TRAVERSE))) { + throw $e; + } + + $this->validateEachObjectIn( + $object, + $propertyPath, + $groups, + $traversalStrategy & TraversalStrategy::STOP_RECURSION, + $context + ); + } + } + + /** + * Validates each object in a collection against the constraints defined + * for their classes. + * + * If the parameter $recursive is set to true, nested {@link \Traversable} + * objects are iterated as well. Nested arrays are always iterated, + * regardless of the value of $recursive. + * + * @param array|\Traversable $collection The collection + * @param string $propertyPath The current property path + * @param string[] $groups The validated groups + * @param bool $stopRecursion Whether to disable + * recursive iteration. For + * backwards compatibility + * with Symfony < 2.5. + * @param ExecutionContextInterface $context The current execution context + * + * @see ClassNode + * @see CollectionNode + */ + private function validateEachObjectIn($collection, $propertyPath, array $groups, $stopRecursion, ExecutionContextInterface $context) + { + if ($stopRecursion) { + $traversalStrategy = TraversalStrategy::NONE; + } else { + $traversalStrategy = TraversalStrategy::IMPLICIT; + } + + foreach ($collection as $key => $value) { + if (is_array($value)) { + // Arrays are always cascaded, independent of the specified + // traversal strategy + // (BC with Symfony < 2.5) + $this->validateEachObjectIn( + $value, + $propertyPath.'['.$key.']', + $groups, + $stopRecursion, + $context + ); + + continue; + } + + // Scalar and null values in the collection are ignored + // (BC with Symfony < 2.5) + if (is_object($value)) { + $this->validateObject( + $value, + $propertyPath.'['.$key.']', + $groups, + $traversalStrategy, + $context + ); + } + } + } + + /** + * Validates a class node. + * + * A class node is a combination of an object with a {@link ClassMetadataInterface} + * instance. Each class node (conceptionally) has zero or more succeeding + * property nodes: + * + * (Article:class node) + * \ + * ($title:property node) + * + * This method validates the passed objects against all constraints defined + * at class level. It furthermore triggers the validation of each of the + * class' properties against the constraints for that property. + * + * If the selected traversal strategy allows traversal, the object is + * iterated and each nested object is validated against its own constraints. + * The object is not traversed if traversal is disabled in the class + * metadata. + * + * If the passed groups contain the group "Default", the validator will + * check whether the "Default" group has been replaced by a group sequence + * in the class metadata. If this is the case, the group sequence is + * validated instead. + * + * @param object $object The validated object + * @param string $cacheKey The key for caching + * the validated object + * @param ClassMetadataInterface $metadata The class metadata of + * the object + * @param string $propertyPath The property path leading + * to the object + * @param string[] $groups The groups in which the + * object should be validated + * @param string[]|null $cascadedGroups The groups in which + * cascaded objects should + * be validated + * @param int $traversalStrategy The strategy used for + * traversing the object + * @param ExecutionContextInterface $context The current execution context + * + * @throws UnsupportedMetadataException If a property metadata does not + * implement {@link PropertyMetadataInterface} + * @throws ConstraintDefinitionException If traversal was enabled but the + * object does not implement + * {@link \Traversable} + * + * @see TraversalStrategy + */ + private function validateClassNode($object, $cacheKey, ClassMetadataInterface $metadata = null, $propertyPath, array $groups, $cascadedGroups, $traversalStrategy, ExecutionContextInterface $context) + { + $context->setNode($object, $object, $metadata, $propertyPath); + + if (!$context->isObjectInitialized($cacheKey)) { + foreach ($this->objectInitializers as $initializer) { + $initializer->initialize($object); + } + + $context->markObjectAsInitialized($cacheKey); + } + + foreach ($groups as $key => $group) { + // If the "Default" group is replaced by a group sequence, remember + // to cascade the "Default" group when traversing the group + // sequence + $defaultOverridden = false; + + // Use the object hash for group sequences + $groupHash = is_object($group) ? spl_object_hash($group) : $group; + + if ($context->isGroupValidated($cacheKey, $groupHash)) { + // Skip this group when validating the properties and when + // traversing the object + unset($groups[$key]); + + continue; + } + + $context->markGroupAsValidated($cacheKey, $groupHash); + + // Replace the "Default" group by the group sequence defined + // for the class, if applicable. + // This is done after checking the cache, so that + // spl_object_hash() isn't called for this sequence and + // "Default" is used instead in the cache. This is useful + // if the getters below return different group sequences in + // every call. + if (Constraint::DEFAULT_GROUP === $group) { + if ($metadata->hasGroupSequence()) { + // The group sequence is statically defined for the class + $group = $metadata->getGroupSequence(); + $defaultOverridden = true; + } elseif ($metadata->isGroupSequenceProvider()) { + // The group sequence is dynamically obtained from the validated + // object + /** @var \Symfony\Component\Validator\GroupSequenceProviderInterface $object */ + $group = $object->getGroupSequence(); + $defaultOverridden = true; + + if (!$group instanceof GroupSequence) { + $group = new GroupSequence($group); + } + } + } + + // If the groups (=[<G1,G2>,G3,G4]) contain a group sequence + // (=<G1,G2>), then call validateClassNode() with each entry of the + // group sequence and abort if necessary (G1, G2) + if ($group instanceof GroupSequence) { + $this->stepThroughGroupSequence( + $object, + $object, + $cacheKey, + $metadata, + $propertyPath, + $traversalStrategy, + $group, + $defaultOverridden ? Constraint::DEFAULT_GROUP : null, + $context + ); + + // Skip the group sequence when validating properties, because + // stepThroughGroupSequence() already validates the properties + unset($groups[$key]); + + continue; + } + + $this->validateInGroup($object, $cacheKey, $metadata, $group, $context); + } + + // If no more groups should be validated for the property nodes, + // we can safely quit + if (0 === count($groups)) { + return; + } + + // Validate all properties against their constraints + foreach ($metadata->getConstrainedProperties() as $propertyName) { + // If constraints are defined both on the getter of a property as + // well as on the property itself, then getPropertyMetadata() + // returns two metadata objects, not just one + foreach ($metadata->getPropertyMetadata($propertyName) as $propertyMetadata) { + if (!$propertyMetadata instanceof PropertyMetadataInterface) { + throw new UnsupportedMetadataException(sprintf( + 'The property metadata instances should implement '. + '"Symfony\Component\Validator\Mapping\PropertyMetadataInterface", '. + 'got: "%s".', + is_object($propertyMetadata) ? get_class($propertyMetadata) : gettype($propertyMetadata) + )); + } + + $propertyValue = $propertyMetadata->getPropertyValue($object); + + $this->validateGenericNode( + $propertyValue, + $object, + $cacheKey.':'.$propertyName, + $propertyMetadata, + $propertyPath + ? $propertyPath.'.'.$propertyName + : $propertyName, + $groups, + $cascadedGroups, + TraversalStrategy::IMPLICIT, + $context + ); + } + } + + // If no specific traversal strategy was requested when this method + // was called, use the traversal strategy of the class' metadata + if ($traversalStrategy & TraversalStrategy::IMPLICIT) { + // Keep the STOP_RECURSION flag, if it was set + $traversalStrategy = $metadata->getTraversalStrategy() + | ($traversalStrategy & TraversalStrategy::STOP_RECURSION); + } + + // Traverse only if IMPLICIT or TRAVERSE + if (!($traversalStrategy & (TraversalStrategy::IMPLICIT | TraversalStrategy::TRAVERSE))) { + return; + } + + // If IMPLICIT, stop unless we deal with a Traversable + if ($traversalStrategy & TraversalStrategy::IMPLICIT && !$object instanceof \Traversable) { + return; + } + + // If TRAVERSE, fail if we have no Traversable + if (!$object instanceof \Traversable) { + // Must throw a ConstraintDefinitionException for backwards + // compatibility reasons with Symfony < 2.5 + throw new ConstraintDefinitionException(sprintf( + 'Traversal was enabled for "%s", but this class '. + 'does not implement "\Traversable".', + get_class($object) + )); + } + + $this->validateEachObjectIn( + $object, + $propertyPath, + $groups, + $traversalStrategy & TraversalStrategy::STOP_RECURSION, + $context + ); + } + + /** + * Validates a node that is not a class node. + * + * Currently, two such node types exist: + * + * - property nodes, which consist of the value of an object's + * property together with a {@link PropertyMetadataInterface} instance + * - generic nodes, which consist of a value and some arbitrary + * constraints defined in a {@link MetadataInterface} container + * + * In both cases, the value is validated against all constraints defined + * in the passed metadata object. Then, if the value is an instance of + * {@link \Traversable} and the selected traversal strategy permits it, + * the value is traversed and each nested object validated against its own + * constraints. Arrays are always traversed. + * + * @param mixed $value The validated value + * @param object|null $object The current object + * @param string $cacheKey The key for caching + * the validated value + * @param MetadataInterface $metadata The metadata of the + * value + * @param string $propertyPath The property path leading + * to the value + * @param string[] $groups The groups in which the + * value should be validated + * @param string[]|null $cascadedGroups The groups in which + * cascaded objects should + * be validated + * @param int $traversalStrategy The strategy used for + * traversing the value + * @param ExecutionContextInterface $context The current execution context + * + * @see TraversalStrategy + */ + private function validateGenericNode($value, $object, $cacheKey, MetadataInterface $metadata = null, $propertyPath, array $groups, $cascadedGroups, $traversalStrategy, ExecutionContextInterface $context) + { + $context->setNode($value, $object, $metadata, $propertyPath); + + foreach ($groups as $key => $group) { + if ($group instanceof GroupSequence) { + $this->stepThroughGroupSequence( + $value, + $object, + $cacheKey, + $metadata, + $propertyPath, + $traversalStrategy, + $group, + null, + $context + ); + + // Skip the group sequence when cascading, as the cascading + // logic is already done in stepThroughGroupSequence() + unset($groups[$key]); + + continue; + } + + $this->validateInGroup($value, $cacheKey, $metadata, $group, $context); + } + + if (0 === count($groups)) { + return; + } + + if (null === $value) { + return; + } + + $cascadingStrategy = $metadata->getCascadingStrategy(); + + // Quit unless we have an array or a cascaded object + if (!is_array($value) && !($cascadingStrategy & CascadingStrategy::CASCADE)) { + return; + } + + // If no specific traversal strategy was requested when this method + // was called, use the traversal strategy of the node's metadata + if ($traversalStrategy & TraversalStrategy::IMPLICIT) { + // Keep the STOP_RECURSION flag, if it was set + $traversalStrategy = $metadata->getTraversalStrategy() + | ($traversalStrategy & TraversalStrategy::STOP_RECURSION); + } + + // The $cascadedGroups property is set, if the "Default" group is + // overridden by a group sequence + // See validateClassNode() + $cascadedGroups = count($cascadedGroups) > 0 + ? $cascadedGroups + : $groups; + + if (is_array($value)) { + // Arrays are always traversed, independent of the specified + // traversal strategy + // (BC with Symfony < 2.5) + $this->validateEachObjectIn( + $value, + $propertyPath, + $cascadedGroups, + $traversalStrategy & TraversalStrategy::STOP_RECURSION, + $context + ); + + return; + } + + // If the value is a scalar, pass it anyway, because we want + // a NoSuchMetadataException to be thrown in that case + // (BC with Symfony < 2.5) + $this->validateObject( + $value, + $propertyPath, + $cascadedGroups, + $traversalStrategy, + $context + ); + + // Currently, the traversal strategy can only be TRAVERSE for a + // generic node if the cascading strategy is CASCADE. Thus, traversable + // objects will always be handled within validateObject() and there's + // nothing more to do here. + + // see GenericMetadata::addConstraint() + } + + /** + * Sequentially validates a node's value in each group of a group sequence. + * + * If any of the constraints generates a violation, subsequent groups in the + * group sequence are skipped. + * + * @param mixed $value The validated value + * @param object|null $object The current object + * @param string $cacheKey The key for caching + * the validated value + * @param MetadataInterface $metadata The metadata of the + * value + * @param string $propertyPath The property path leading + * to the value + * @param int $traversalStrategy The strategy used for + * traversing the value + * @param GroupSequence $groupSequence The group sequence + * @param string[]|null $cascadedGroup The group that should + * be passed to cascaded + * objects instead of + * the group sequence + * @param ExecutionContextInterface $context The execution context + */ + private function stepThroughGroupSequence($value, $object, $cacheKey, MetadataInterface $metadata = null, $propertyPath, $traversalStrategy, GroupSequence $groupSequence, $cascadedGroup, ExecutionContextInterface $context) + { + $violationCount = count($context->getViolations()); + $cascadedGroups = $cascadedGroup ? array($cascadedGroup) : null; + + foreach ($groupSequence->groups as $groupInSequence) { + $groups = array($groupInSequence); + + if ($metadata instanceof ClassMetadataInterface) { + $this->validateClassNode( + $value, + $cacheKey, + $metadata, + $propertyPath, + $groups, + $cascadedGroups, + $traversalStrategy, + $context + ); + } else { + $this->validateGenericNode( + $value, + $object, + $cacheKey, + $metadata, + $propertyPath, + $groups, + $cascadedGroups, + $traversalStrategy, + $context + ); + } + + // Abort sequence validation if a violation was generated + if (count($context->getViolations()) > $violationCount) { + break; + } + } + } + + /** + * Validates a node's value against all constraints in the given group. + * + * @param mixed $value The validated value + * @param string $cacheKey The key for caching the + * validated value + * @param MetadataInterface $metadata The metadata of the value + * @param string $group The group to validate + * @param ExecutionContextInterface $context The execution context + */ + private function validateInGroup($value, $cacheKey, MetadataInterface $metadata, $group, ExecutionContextInterface $context) + { + $context->setGroup($group); + + foreach ($metadata->findConstraints($group) as $constraint) { + // Prevent duplicate validation of constraints, in the case + // that constraints belong to multiple validated groups + if (null !== $cacheKey) { + $constraintHash = spl_object_hash($constraint); + + if ($context->isConstraintValidated($cacheKey, $constraintHash)) { + continue; + } + + $context->markConstraintAsValidated($cacheKey, $constraintHash); + } + + $context->setConstraint($constraint); + + $validator = $this->validatorFactory->getInstance($constraint); + $validator->initialize($context); + $validator->validate($value, $constraint); + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveValidator.php b/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveValidator.php new file mode 100644 index 0000000..ddf0850 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveValidator.php @@ -0,0 +1,140 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Validator; + +use Symfony\Component\Validator\ConstraintValidatorFactoryInterface; +use Symfony\Component\Validator\Context\ExecutionContextFactoryInterface; +use Symfony\Component\Validator\Context\ExecutionContextInterface; +use Symfony\Component\Validator\MetadataFactoryInterface; +use Symfony\Component\Validator\ObjectInitializerInterface; + +/** + * Recursive implementation of {@link ValidatorInterface}. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class RecursiveValidator implements ValidatorInterface +{ + /** + * @var ExecutionContextFactoryInterface + */ + protected $contextFactory; + + /** + * @var MetadataFactoryInterface + */ + protected $metadataFactory; + + /** + * @var ConstraintValidatorFactoryInterface + */ + protected $validatorFactory; + + /** + * @var ObjectInitializerInterface[] + */ + protected $objectInitializers; + + /** + * Creates a new validator. + * + * @param ExecutionContextFactoryInterface $contextFactory The factory for + * creating new contexts + * @param MetadataFactoryInterface $metadataFactory The factory for + * fetching the metadata + * of validated objects + * @param ConstraintValidatorFactoryInterface $validatorFactory The factory for creating + * constraint validators + * @param ObjectInitializerInterface[] $objectInitializers The object initializers + */ + public function __construct(ExecutionContextFactoryInterface $contextFactory, MetadataFactoryInterface $metadataFactory, ConstraintValidatorFactoryInterface $validatorFactory, array $objectInitializers = array()) + { + $this->contextFactory = $contextFactory; + $this->metadataFactory = $metadataFactory; + $this->validatorFactory = $validatorFactory; + $this->objectInitializers = $objectInitializers; + } + + /** + * {@inheritdoc} + */ + public function startContext($root = null) + { + return new RecursiveContextualValidator( + $this->contextFactory->createContext($this, $root), + $this->metadataFactory, + $this->validatorFactory, + $this->objectInitializers + ); + } + + /** + * {@inheritdoc} + */ + public function inContext(ExecutionContextInterface $context) + { + return new RecursiveContextualValidator( + $context, + $this->metadataFactory, + $this->validatorFactory, + $this->objectInitializers + ); + } + + /** + * {@inheritdoc} + */ + public function getMetadataFor($object) + { + return $this->metadataFactory->getMetadataFor($object); + } + + /** + * {@inheritdoc} + */ + public function hasMetadataFor($object) + { + return $this->metadataFactory->hasMetadataFor($object); + } + + /** + * {@inheritdoc} + */ + public function validate($value, $constraints = null, $groups = null) + { + return $this->startContext($value) + ->validate($value, $constraints, $groups) + ->getViolations(); + } + + /** + * {@inheritdoc} + */ + public function validateProperty($object, $propertyName, $groups = null) + { + return $this->startContext($object) + ->validateProperty($object, $propertyName, $groups) + ->getViolations(); + } + + /** + * {@inheritdoc} + */ + public function validatePropertyValue($objectOrClass, $propertyName, $value, $groups = null) + { + // If a class name is passed, take $value as root + return $this->startContext(is_object($objectOrClass) ? $objectOrClass : $value) + ->validatePropertyValue($objectOrClass, $propertyName, $value, $groups) + ->getViolations(); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Validator/ValidatorInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Validator/ValidatorInterface.php new file mode 100644 index 0000000..2582bf6 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Validator/ValidatorInterface.php @@ -0,0 +1,100 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Validator; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintViolationListInterface; +use Symfony\Component\Validator\Context\ExecutionContextInterface; +use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface; + +/** + * Validates PHP values against constraints. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface ValidatorInterface extends MetadataFactoryInterface +{ + /** + * Validates a value against a constraint or a list of constraints. + * + * If no constraint is passed, the constraint + * {@link \Symfony\Component\Validator\Constraints\Valid} is assumed. + * + * @param mixed $value The value to validate + * @param Constraint|Constraint[] $constraints The constraint(s) to validate + * against + * @param array|null $groups The validation groups to + * validate. If none is given, + * "Default" is assumed + * + * @return ConstraintViolationListInterface A list of constraint violations. + * If the list is empty, validation + * succeeded + */ + public function validate($value, $constraints = null, $groups = null); + + /** + * Validates a property of an object against the constraints specified + * for this property. + * + * @param object $object The object + * @param string $propertyName The name of the validated property + * @param array|null $groups The validation groups to validate. If + * none is given, "Default" is assumed + * + * @return ConstraintViolationListInterface A list of constraint violations. + * If the list is empty, validation + * succeeded + */ + public function validateProperty($object, $propertyName, $groups = null); + + /** + * Validates a value against the constraints specified for an object's + * property. + * + * @param object|string $objectOrClass The object or its class name + * @param string $propertyName The name of the property + * @param mixed $value The value to validate against the + * property's constraints + * @param array|null $groups The validation groups to validate. If + * none is given, "Default" is assumed + * + * @return ConstraintViolationListInterface A list of constraint violations. + * If the list is empty, validation + * succeeded + */ + public function validatePropertyValue($objectOrClass, $propertyName, $value, $groups = null); + + /** + * Starts a new validation context and returns a validator for that context. + * + * The returned validator collects all violations generated within its + * context. You can access these violations with the + * {@link ContextualValidatorInterface::getViolations()} method. + * + * @return ContextualValidatorInterface The validator for the new context + */ + public function startContext(); + + /** + * Returns a validator in the given execution context. + * + * The returned validator adds all generated violations to the given + * context. + * + * @param ExecutionContextInterface $context The execution context + * + * @return ContextualValidatorInterface The validator for that context + */ + public function inContext(ExecutionContextInterface $context); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilder.php b/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilder.php new file mode 100644 index 0000000..1d65478 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilder.php @@ -0,0 +1,412 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +use Doctrine\Common\Annotations\AnnotationReader; +use Doctrine\Common\Annotations\CachedReader; +use Doctrine\Common\Annotations\Reader; +use Doctrine\Common\Cache\ArrayCache; +use Symfony\Component\PropertyAccess\PropertyAccessorInterface; +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\Context\ExecutionContextFactory; +use Symfony\Component\Validator\Context\LegacyExecutionContextFactory; +use Symfony\Component\Validator\Exception\InvalidArgumentException; +use Symfony\Component\Validator\Exception\ValidatorException; +use Symfony\Component\Validator\Mapping\Cache\CacheInterface; +use Symfony\Component\Validator\Mapping\ClassMetadataFactory; +use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory; +use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader; +use Symfony\Component\Validator\Mapping\Loader\LoaderChain; +use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader; +use Symfony\Component\Validator\Mapping\Loader\XmlFileLoader; +use Symfony\Component\Validator\Mapping\Loader\XmlFilesLoader; +use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader; +use Symfony\Component\Validator\Mapping\Loader\YamlFilesLoader; +use Symfony\Component\Validator\Validator\LegacyValidator; +use Symfony\Component\Validator\Validator\RecursiveValidator; +use Symfony\Component\Validator\Validator as ValidatorV24; + +/** + * The default implementation of {@link ValidatorBuilderInterface}. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class ValidatorBuilder implements ValidatorBuilderInterface +{ + /** + * @var array + */ + private $initializers = array(); + + /** + * @var array + */ + private $xmlMappings = array(); + + /** + * @var array + */ + private $yamlMappings = array(); + + /** + * @var array + */ + private $methodMappings = array(); + + /** + * @var Reader|null + */ + private $annotationReader; + + /** + * @var MetadataFactoryInterface|null + */ + private $metadataFactory; + + /** + * @var ConstraintValidatorFactoryInterface|null + */ + private $validatorFactory; + + /** + * @var CacheInterface|null + */ + private $metadataCache; + + /** + * @var TranslatorInterface|null + */ + private $translator; + + /** + * @var null|string + */ + private $translationDomain; + + /** + * @var PropertyAccessorInterface|null + */ + private $propertyAccessor; + + /** + * @var int|null + */ + private $apiVersion; + + /** + * {@inheritdoc} + */ + public function addObjectInitializer(ObjectInitializerInterface $initializer) + { + $this->initializers[] = $initializer; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function addObjectInitializers(array $initializers) + { + $this->initializers = array_merge($this->initializers, $initializers); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function addXmlMapping($path) + { + if (null !== $this->metadataFactory) { + throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); + } + + $this->xmlMappings[] = $path; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function addXmlMappings(array $paths) + { + if (null !== $this->metadataFactory) { + throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); + } + + $this->xmlMappings = array_merge($this->xmlMappings, $paths); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function addYamlMapping($path) + { + if (null !== $this->metadataFactory) { + throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); + } + + $this->yamlMappings[] = $path; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function addYamlMappings(array $paths) + { + if (null !== $this->metadataFactory) { + throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); + } + + $this->yamlMappings = array_merge($this->yamlMappings, $paths); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function addMethodMapping($methodName) + { + if (null !== $this->metadataFactory) { + throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); + } + + $this->methodMappings[] = $methodName; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function addMethodMappings(array $methodNames) + { + if (null !== $this->metadataFactory) { + throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); + } + + $this->methodMappings = array_merge($this->methodMappings, $methodNames); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function enableAnnotationMapping(Reader $annotationReader = null) + { + if (null !== $this->metadataFactory) { + throw new ValidatorException('You cannot enable annotation mapping after setting a custom metadata factory. Configure your metadata factory instead.'); + } + + if (null === $annotationReader) { + if (!class_exists('Doctrine\Common\Annotations\AnnotationReader') || !class_exists('Doctrine\Common\Cache\ArrayCache')) { + throw new \RuntimeException('Enabling annotation based constraint mapping requires the packages doctrine/annotations and doctrine/cache to be installed.'); + } + + $annotationReader = new CachedReader(new AnnotationReader(), new ArrayCache()); + } + + $this->annotationReader = $annotationReader; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function disableAnnotationMapping() + { + $this->annotationReader = null; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setMetadataFactory(MetadataFactoryInterface $metadataFactory) + { + if (count($this->xmlMappings) > 0 || count($this->yamlMappings) > 0 || count($this->methodMappings) > 0 || null !== $this->annotationReader) { + throw new ValidatorException('You cannot set a custom metadata factory after adding custom mappings. You should do either of both.'); + } + + $this->metadataFactory = $metadataFactory; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setMetadataCache(CacheInterface $cache) + { + if (null !== $this->metadataFactory) { + throw new ValidatorException('You cannot set a custom metadata cache after setting a custom metadata factory. Configure your metadata factory instead.'); + } + + $this->metadataCache = $cache; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setConstraintValidatorFactory(ConstraintValidatorFactoryInterface $validatorFactory) + { + if (null !== $this->propertyAccessor) { + throw new ValidatorException('You cannot set a validator factory after setting a custom property accessor. Remove the call to setPropertyAccessor() if you want to call setConstraintValidatorFactory().'); + } + + $this->validatorFactory = $validatorFactory; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setTranslator(TranslatorInterface $translator) + { + $this->translator = $translator; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setTranslationDomain($translationDomain) + { + $this->translationDomain = $translationDomain; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setPropertyAccessor(PropertyAccessorInterface $propertyAccessor) + { + if (null !== $this->validatorFactory) { + throw new ValidatorException('You cannot set a property accessor after setting a custom validator factory. Configure your validator factory instead.'); + } + + $this->propertyAccessor = $propertyAccessor; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setApiVersion($apiVersion) + { + if (!in_array($apiVersion, array(Validation::API_VERSION_2_4, Validation::API_VERSION_2_5, Validation::API_VERSION_2_5_BC))) { + throw new InvalidArgumentException(sprintf( + 'The requested API version is invalid: "%s"', + $apiVersion + )); + } + + if (PHP_VERSION_ID < 50309 && $apiVersion === Validation::API_VERSION_2_5_BC) { + throw new InvalidArgumentException(sprintf( + 'The Validator API that is compatible with both Symfony 2.4 '. + 'and Symfony 2.5 can only be used on PHP 5.3.9 and higher. '. + 'Your current PHP version is %s.', + PHP_VERSION + )); + } + + $this->apiVersion = $apiVersion; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getValidator() + { + $metadataFactory = $this->metadataFactory; + $apiVersion = $this->apiVersion; + + if (null === $apiVersion) { + $apiVersion = PHP_VERSION_ID < 50309 + ? Validation::API_VERSION_2_4 + : Validation::API_VERSION_2_5_BC; + } + + if (!$metadataFactory) { + $loaders = array(); + + if (count($this->xmlMappings) > 1) { + $loaders[] = new XmlFilesLoader($this->xmlMappings); + } elseif (1 === count($this->xmlMappings)) { + $loaders[] = new XmlFileLoader($this->xmlMappings[0]); + } + + if (count($this->yamlMappings) > 1) { + $loaders[] = new YamlFilesLoader($this->yamlMappings); + } elseif (1 === count($this->yamlMappings)) { + $loaders[] = new YamlFileLoader($this->yamlMappings[0]); + } + + foreach ($this->methodMappings as $methodName) { + $loaders[] = new StaticMethodLoader($methodName); + } + + if ($this->annotationReader) { + $loaders[] = new AnnotationLoader($this->annotationReader); + } + + $loader = null; + + if (count($loaders) > 1) { + $loader = new LoaderChain($loaders); + } elseif (1 === count($loaders)) { + $loader = $loaders[0]; + } + + if (Validation::API_VERSION_2_5 === $apiVersion) { + $metadataFactory = new LazyLoadingMetadataFactory($loader, $this->metadataCache); + } else { + $metadataFactory = new ClassMetadataFactory($loader, $this->metadataCache); + } + } + + $validatorFactory = $this->validatorFactory ?: new ConstraintValidatorFactory($this->propertyAccessor); + $translator = $this->translator ?: new DefaultTranslator(); + + if (Validation::API_VERSION_2_4 === $apiVersion) { + return new ValidatorV24($metadataFactory, $validatorFactory, $translator, $this->translationDomain, $this->initializers); + } + + if (Validation::API_VERSION_2_5 === $apiVersion) { + $contextFactory = new ExecutionContextFactory($translator, $this->translationDomain); + + return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $this->initializers); + } + + $contextFactory = new LegacyExecutionContextFactory($metadataFactory, $translator, $this->translationDomain); + + return new LegacyValidator($contextFactory, $metadataFactory, $validatorFactory, $this->initializers); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilderInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilderInterface.php new file mode 100644 index 0000000..2fd0f9c --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilderInterface.php @@ -0,0 +1,193 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +use Doctrine\Common\Annotations\Reader; +use Symfony\Component\PropertyAccess\PropertyAccessorInterface; +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\Mapping\Cache\CacheInterface; + +/** + * A configurable builder for ValidatorInterface objects. + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface ValidatorBuilderInterface +{ + /** + * Adds an object initializer to the validator. + * + * @param ObjectInitializerInterface $initializer The initializer + * + * @return ValidatorBuilderInterface The builder object + */ + public function addObjectInitializer(ObjectInitializerInterface $initializer); + + /** + * Adds a list of object initializers to the validator. + * + * @param array $initializers The initializer + * + * @return ValidatorBuilderInterface The builder object + */ + public function addObjectInitializers(array $initializers); + + /** + * Adds an XML constraint mapping file to the validator. + * + * @param string $path The path to the mapping file + * + * @return ValidatorBuilderInterface The builder object + */ + public function addXmlMapping($path); + + /** + * Adds a list of XML constraint mapping files to the validator. + * + * @param array $paths The paths to the mapping files + * + * @return ValidatorBuilderInterface The builder object + */ + public function addXmlMappings(array $paths); + + /** + * Adds a YAML constraint mapping file to the validator. + * + * @param string $path The path to the mapping file + * + * @return ValidatorBuilderInterface The builder object + */ + public function addYamlMapping($path); + + /** + * Adds a list of YAML constraint mappings file to the validator. + * + * @param array $paths The paths to the mapping files + * + * @return ValidatorBuilderInterface The builder object + */ + public function addYamlMappings(array $paths); + + /** + * Enables constraint mapping using the given static method. + * + * @param string $methodName The name of the method + * + * @return ValidatorBuilderInterface The builder object + */ + public function addMethodMapping($methodName); + + /** + * Enables constraint mapping using the given static methods. + * + * @param array $methodNames The names of the methods + * + * @return ValidatorBuilderInterface The builder object + */ + public function addMethodMappings(array $methodNames); + + /** + * Enables annotation based constraint mapping. + * + * @param Reader $annotationReader The annotation reader to be used + * + * @return ValidatorBuilderInterface The builder object + */ + public function enableAnnotationMapping(Reader $annotationReader = null); + + /** + * Disables annotation based constraint mapping. + * + * @return ValidatorBuilderInterface The builder object + */ + public function disableAnnotationMapping(); + + /** + * Sets the class metadata factory used by the validator. + * + * @param MetadataFactoryInterface $metadataFactory The metadata factory + * + * @return ValidatorBuilderInterface The builder object + */ + public function setMetadataFactory(MetadataFactoryInterface $metadataFactory); + + /** + * Sets the cache for caching class metadata. + * + * @param CacheInterface $cache The cache instance + * + * @return ValidatorBuilderInterface The builder object + */ + public function setMetadataCache(CacheInterface $cache); + + /** + * Sets the constraint validator factory used by the validator. + * + * @param ConstraintValidatorFactoryInterface $validatorFactory The validator factory + * + * @return ValidatorBuilderInterface The builder object + */ + public function setConstraintValidatorFactory(ConstraintValidatorFactoryInterface $validatorFactory); + + /** + * Sets the translator used for translating violation messages. + * + * @param TranslatorInterface $translator The translator instance + * + * @return ValidatorBuilderInterface The builder object + */ + public function setTranslator(TranslatorInterface $translator); + + /** + * Sets the default translation domain of violation messages. + * + * The same message can have different translations in different domains. + * Pass the domain that is used for violation messages by default to this + * method. + * + * @param string $translationDomain The translation domain of the violation messages + * + * @return ValidatorBuilderInterface The builder object + */ + public function setTranslationDomain($translationDomain); + + /** + * Sets the property accessor for resolving property paths. + * + * @param PropertyAccessorInterface $propertyAccessor The property accessor + * + * @return ValidatorBuilderInterface The builder object + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + */ + public function setPropertyAccessor(PropertyAccessorInterface $propertyAccessor); + + /** + * Sets the API version that the returned validator should support. + * + * @param int $apiVersion The required API version + * + * @return ValidatorBuilderInterface The builder object + * + * @see Validation::API_VERSION_2_4 + * @see Validation::API_VERSION_2_5 + * @see Validation::API_VERSION_2_5_BC + */ + public function setApiVersion($apiVersion); + + /** + * Builds and returns a new validator object. + * + * @return ValidatorInterface The built validator. + */ + public function getValidator(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/ValidatorInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/ValidatorInterface.php new file mode 100644 index 0000000..03c8921 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/ValidatorInterface.php @@ -0,0 +1,114 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator; + +/** + * Validates values and graphs of objects and arrays. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @api + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Validator\ValidatorInterface} instead. + */ +interface ValidatorInterface +{ + /** + * Validates a value. + * + * The accepted values depend on the {@link MetadataFactoryInterface} + * implementation. + * + * The signature changed with Symfony 2.5 (see + * {@link Validator\ValidatorInterface::validate()}. This signature will be + * disabled in Symfony 3.0. + * + * @param mixed $value The value to validate + * @param array|null $groups The validation groups to validate. + * @param bool $traverse Whether to traverse the value if it is traversable. + * @param bool $deep Whether to traverse nested traversable values recursively. + * + * @return ConstraintViolationListInterface A list of constraint violations. If the + * list is empty, validation succeeded. + * + * @api + */ + public function validate($value, $groups = null, $traverse = false, $deep = false); + + /** + * Validates a property of a value against its current value. + * + * The accepted values depend on the {@link MetadataFactoryInterface} + * implementation. + * + * @param mixed $containingValue The value containing the property. + * @param string $property The name of the property to validate. + * @param array|null $groups The validation groups to validate. + * + * @return ConstraintViolationListInterface A list of constraint violations. If the + * list is empty, validation succeeded. + * + * @api + */ + public function validateProperty($containingValue, $property, $groups = null); + + /** + * Validate a property of a value against a potential value. + * + * The accepted values depend on the {@link MetadataFactoryInterface} + * implementation. + * + * @param mixed $containingValue The value containing the property. + * @param string $property The name of the property to validate + * @param string $value The value to validate against the + * constraints of the property. + * @param array|null $groups The validation groups to validate. + * + * @return ConstraintViolationListInterface A list of constraint violations. If the + * list is empty, validation succeeded. + * + * @api + */ + public function validatePropertyValue($containingValue, $property, $value, $groups = null); + + /** + * Validates a value against a constraint or a list of constraints. + * + * @param mixed $value The value to validate. + * @param Constraint|Constraint[] $constraints The constraint(s) to validate against. + * @param array|null $groups The validation groups to validate. + * + * @return ConstraintViolationListInterface A list of constraint violations. If the + * list is empty, validation succeeded. + * + * @api + * + * @deprecated Renamed to {@link Validator\ValidatorInterface::validate()} + * in Symfony 2.5. Will be removed in Symfony 3.0. + */ + public function validateValue($value, $constraints, $groups = null); + + /** + * Returns the factory for metadata instances. + * + * @return MetadataFactoryInterface The metadata factory. + * + * @api + * + * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0. + * Use {@link Validator\ValidatorInterface::getMetadataFor()} or + * {@link Validator\ValidatorInterface::hasMetadataFor()} + * instead. + */ + public function getMetadataFactory(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilder.php b/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilder.php new file mode 100644 index 0000000..b752c39 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilder.php @@ -0,0 +1,225 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Violation; + +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; +use Symfony\Component\Validator\Util\PropertyPath; + +/** + * Default implementation of {@link ConstraintViolationBuilderInterface}. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @internal You should not instantiate or use this class. Code against + * {@link ConstraintViolationBuilderInterface} instead. + */ +class ConstraintViolationBuilder implements ConstraintViolationBuilderInterface +{ + /** + * @var ConstraintViolationList + */ + private $violations; + + /** + * @var string + */ + private $message; + + /** + * @var array + */ + private $parameters; + + /** + * @var mixed + */ + private $root; + + /** + * @var mixed + */ + private $invalidValue; + + /** + * @var string + */ + private $propertyPath; + + /** + * @var TranslatorInterface + */ + private $translator; + + /** + * @var string|null + */ + private $translationDomain; + + /** + * @var int|null + */ + private $plural; + + /** + * @var Constraint + */ + private $constraint; + + /** + * @var mixed + */ + private $code; + + /** + * @var mixed + */ + private $cause; + + public function __construct(ConstraintViolationList $violations, Constraint $constraint, $message, array $parameters, $root, $propertyPath, $invalidValue, TranslatorInterface $translator, $translationDomain = null) + { + $this->violations = $violations; + $this->message = $message; + $this->parameters = $parameters; + $this->root = $root; + $this->propertyPath = $propertyPath; + $this->invalidValue = $invalidValue; + $this->translator = $translator; + $this->translationDomain = $translationDomain; + $this->constraint = $constraint; + } + + /** + * {@inheritdoc} + */ + public function atPath($path) + { + $this->propertyPath = PropertyPath::append($this->propertyPath, $path); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setParameter($key, $value) + { + $this->parameters[$key] = $value; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setParameters(array $parameters) + { + $this->parameters = $parameters; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setTranslationDomain($translationDomain) + { + $this->translationDomain = $translationDomain; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setInvalidValue($invalidValue) + { + $this->invalidValue = $invalidValue; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setPlural($number) + { + $this->plural = $number; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setCode($code) + { + $this->code = $code; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setCause($cause) + { + $this->cause = $cause; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function addViolation() + { + if (null === $this->plural) { + $translatedMessage = $this->translator->trans( + $this->message, + $this->parameters, + $this->translationDomain + ); + } else { + try { + $translatedMessage = $this->translator->transChoice( + $this->message, + $this->plural, + $this->parameters, + $this->translationDomain# + ); + } catch (\InvalidArgumentException $e) { + $translatedMessage = $this->translator->trans( + $this->message, + $this->parameters, + $this->translationDomain + ); + } + } + + $this->violations->add(new ConstraintViolation( + $translatedMessage, + $this->message, + $this->parameters, + $this->root, + $this->propertyPath, + $this->invalidValue, + $this->plural, + $this->code, + $this->constraint, + $this->cause + )); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilderInterface.php b/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilderInterface.php new file mode 100644 index 0000000..3dc270a --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilderInterface.php @@ -0,0 +1,115 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Violation; + +/** + * Builds {@link \Symfony\Component\Validator\ConstraintViolationInterface} + * objects. + * + * Use the various methods on this interface to configure the built violation. + * Finally, call {@link addViolation()} to add the violation to the current + * execution context. + * + * @since 2.5 + * @author Bernhard Schussek <bschussek@gmail.com> + */ +interface ConstraintViolationBuilderInterface +{ + /** + * Stores the property path at which the violation should be generated. + * + * The passed path will be appended to the current property path of the + * execution context. + * + * @param string $path The property path + * + * @return ConstraintViolationBuilderInterface This builder + */ + public function atPath($path); + + /** + * Sets a parameter to be inserted into the violation message. + * + * @param string $key The name of the parameter + * @param string $value The value to be inserted in the parameter's place + * + * @return ConstraintViolationBuilderInterface This builder + */ + public function setParameter($key, $value); + + /** + * Sets all parameters to be inserted into the violation message. + * + * @param array $parameters An array with the parameter names as keys and + * the values to be inserted in their place as + * values + * + * @return ConstraintViolationBuilderInterface This builder + */ + public function setParameters(array $parameters); + + /** + * Sets the translation domain which should be used for translating the + * violation message. + * + * @param string $translationDomain The translation domain + * + * @return ConstraintViolationBuilderInterface This builder + * + * @see \Symfony\Component\Translation\TranslatorInterface + */ + public function setTranslationDomain($translationDomain); + + /** + * Sets the invalid value that caused this violation. + * + * @param mixed $invalidValue The invalid value + * + * @return ConstraintViolationBuilderInterface This builder + */ + public function setInvalidValue($invalidValue); + + /** + * Sets the number which determines how the plural form of the violation + * message is chosen when it is translated. + * + * @param int $number The number for determining the plural form + * + * @return ConstraintViolationBuilderInterface This builder + * + * @see \Symfony\Component\Translation\TranslatorInterface::transChoice() + */ + public function setPlural($number); + + /** + * Sets the violation code. + * + * @param int $code The violation code + * + * @return ConstraintViolationBuilderInterface This builder + */ + public function setCode($code); + + /** + * Sets the cause of the violation. + * + * @param mixed $cause The cause of the violation + * + * @return ConstraintViolationBuilderInterface This builder + */ + public function setCause($cause); + + /** + * Adds the violation to the current execution context. + */ + public function addViolation(); +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/Violation/LegacyConstraintViolationBuilder.php b/vendor/symfony/validator/Symfony/Component/Validator/Violation/LegacyConstraintViolationBuilder.php new file mode 100644 index 0000000..5519f42 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/Violation/LegacyConstraintViolationBuilder.php @@ -0,0 +1,164 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Violation; + +use Symfony\Component\Validator\ExecutionContextInterface; + +/** + * Backwards-compatible implementation of {@link ConstraintViolationBuilderInterface}. + * + * @author Bernhard Schussek <bschussek@gmail.com> + * + * @internal You should not instantiate or use this class. Code against + * {@link ConstraintViolationBuilderInterface} instead. + * + * @deprecated This class will be removed in Symfony 3.0. + */ +class LegacyConstraintViolationBuilder implements ConstraintViolationBuilderInterface +{ + /** + * @var ExecutionContextInterface + */ + private $context; + + /** + * @var string + */ + private $message; + + /** + * @var array + */ + private $parameters; + + /** + * @var mixed + */ + private $invalidValue; + + /** + * @var string + */ + private $propertyPath; + + /** + * @var int|null + */ + private $plural; + + /** + * @var mixed + */ + private $code; + + public function __construct(ExecutionContextInterface $context, $message, array $parameters) + { + $this->context = $context; + $this->message = $message; + $this->parameters = $parameters; + $this->invalidValue = $context->getValue(); + } + + /** + * {@inheritdoc} + */ + public function atPath($path) + { + $this->propertyPath = $path; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setParameter($key, $value) + { + $this->parameters[$key] = $value; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setParameters(array $parameters) + { + $this->parameters = $parameters; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setTranslationDomain($translationDomain) + { + // can't be set in the old API + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setInvalidValue($invalidValue) + { + $this->invalidValue = $invalidValue; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setPlural($number) + { + $this->plural = $number; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setCode($code) + { + $this->code = $code; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setCause($cause) + { + // do nothing - we can't save the cause through the old API + + return $this; + } + + /** + * {@inheritdoc} + */ + public function addViolation() + { + if ($this->propertyPath) { + $this->context->addViolationAt($this->propertyPath, $this->message, $this->parameters, $this->invalidValue, $this->plural, $this->code); + + return; + } + + $this->context->addViolation($this->message, $this->parameters, $this->invalidValue, $this->plural, $this->code); + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/composer.json b/vendor/symfony/validator/Symfony/Component/Validator/composer.json new file mode 100644 index 0000000..2d781ea --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/composer.json @@ -0,0 +1,56 @@ +{ + "name": "symfony/validator", + "type": "library", + "description": "Symfony Validator Component", + "keywords": [], + "homepage": "http://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3", + "symfony/translation": "~2.0,>=2.0.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7", + "doctrine/common": "~2.3", + "symfony/http-foundation": "~2.1", + "symfony/intl": "~2.3", + "symfony/yaml": "~2.0,>=2.0.5", + "symfony/config": "~2.2", + "symfony/property-access": "~2.3", + "symfony/expression-language": "~2.4", + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "egulias/email-validator": "~1.2,>=1.2.1" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/yaml": "", + "symfony/config": "", + "egulias/email-validator": "Strict (RFC compliant) email validation", + "symfony/property-access": "For using the 2.4 Validator API", + "symfony/expression-language": "For using the 2.4 Expression validator" + }, + "autoload": { + "psr-0": { "Symfony\\Component\\Validator\\": "" } + }, + "target-dir": "Symfony/Component/Validator", + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + } +} diff --git a/vendor/symfony/validator/Symfony/Component/Validator/phpunit.xml.dist b/vendor/symfony/validator/Symfony/Component/Validator/phpunit.xml.dist new file mode 100644 index 0000000..1bf4391 --- /dev/null +++ b/vendor/symfony/validator/Symfony/Component/Validator/phpunit.xml.dist @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd" + backupGlobals="false" + colors="true" + bootstrap="vendor/autoload.php" +> + <php> + <ini name="error_reporting" value="-1" /> + </php> + + <testsuites> + <testsuite name="Symfony Validator Component Test Suite"> + <directory>./Tests/</directory> + </testsuite> + </testsuites> + + <filter> + <whitelist> + <directory>./</directory> + <exclude> + <directory>./vendor</directory> + <directory>./Tests</directory> + </exclude> + </whitelist> + </filter> +</phpunit> |
