summaryrefslogtreecommitdiffstats
path: root/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2015-05-02 15:54:22 +0200
committerStefan Suhren <suhren.stefan@fh-swf.de>2015-05-02 15:54:22 +0200
commitf6933b82bbdb767480abf4cf6818b2db56fae1cc (patch)
tree377440bff6bc52b83aed6b07273ee478424184f3 /Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator
parent14f4818cc4279de6e911189db718339381f03b8a (diff)
downloadInternetTechnologien-f6933b82bbdb767480abf4cf6818b2db56fae1cc.tar.gz
InternetTechnologien-f6933b82bbdb767480abf4cf6818b2db56fae1cc.zip
Use composer to pull in propel and set it up
Diffstat (limited to 'Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator')
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/.gitignore3
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/CHANGELOG.md159
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ClassBasedInterface.php30
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraint.php321
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php216
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php51
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactoryInterface.php29
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorInterface.php37
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolation.php233
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationInterface.php136
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationList.php159
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationListInterface.php83
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparison.php49
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php74
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/All.php40
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AllValidator.php58
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Blank.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php40
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Callback.php77
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CallbackValidator.php76
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardScheme.php47
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardSchemeValidator.php122
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Choice.php54
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ChoiceValidator.php103
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php87
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Optional.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Required.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php94
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Composite.php152
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Count.php56
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountValidator.php60
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Country.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountryValidator.php54
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Currency.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CurrencyValidator.php54
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Date.php35
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTime.php37
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTimeValidator.php68
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateValidator.php78
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Email.php40
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EmailValidator.php130
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualTo.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualToValidator.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Existence.php30
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Expression.php59
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ExpressionValidator.php117
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/False.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FalseValidator.php42
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/File.php86
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FileValidator.php240
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThan.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqual.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqualValidator.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanValidator.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequence.php196
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequenceProvider.php22
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Iban.php41
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php143
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalTo.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalToValidator.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Image.php81
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ImageValidator.php182
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Ip.php82
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IpValidator.php103
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Isbn.php65
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IsbnValidator.php192
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Issn.php44
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IssnValidator.php132
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Language.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LanguageValidator.php54
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Length.php58
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LengthValidator.php98
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThan.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqual.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqualValidator.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanValidator.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Locale.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LocaleValidator.php54
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Luhn.php37
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LuhnValidator.php96
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlank.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlankValidator.php40
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualTo.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualToValidator.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalTo.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalToValidator.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNull.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNullValidator.php38
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Null.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NullValidator.php40
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Optional.php22
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Range.php51
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RangeValidator.php80
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Regex.php98
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RegexValidator.php53
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Required.php22
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Time.php35
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TimeValidator.php78
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Traverse.php54
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/True.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TrueValidator.php44
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Type.php44
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TypeValidator.php56
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Url.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UrlValidator.php67
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Uuid.php77
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UuidValidator.php264
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Valid.php45
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContext.php404
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactory.php64
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactoryInterface.php37
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextInterface.php226
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContext.php156
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContextFactory.php73
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/DefaultTranslator.php167
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/BadMethodCallException.php21
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/ConstraintDefinitionException.php16
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/ExceptionInterface.php21
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/GroupDefinitionException.php16
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidArgumentException.php21
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidOptionsException.php29
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/MappingException.php16
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/MissingOptionsException.php29
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/NoSuchMetadataException.php19
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/OutOfBoundsException.php21
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/RuntimeException.php21
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnexpectedTypeException.php20
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnsupportedMetadataException.php20
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/ValidatorException.php16
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContext.php293
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContextInterface.php329
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/GlobalExecutionContextInterface.php71
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/GroupSequenceProviderInterface.php26
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/LICENSE19
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/BlackholeMetadataFactory.php24
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/ApcCache.php55
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php45
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php69
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/CascadingStrategy.php53
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadata.php548
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php26
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataInterface.php80
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ElementMetadata.php24
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/BlackHoleMetadataFactory.php40
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php153
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/MetadataFactoryInterface.php24
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GenericMetadata.php243
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GetterMetadata.php77
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AbstractLoader.php91
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php95
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FileLoader.php56
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FilesLoader.php61
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php62
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderInterface.php31
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php71
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php219
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFilesLoader.php31
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php179
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFilesLoader.php31
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd160
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php251
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MetadataInterface.php58
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadata.php71
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadataInterface.php36
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/TraversalStrategy.php66
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/MetadataFactoryInterface.php43
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/MetadataInterface.php73
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ObjectInitializerInterface.php35
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataContainerInterface.php45
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataInterface.php47
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/README.md126
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.af.xlf227
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ar.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.az.xlf227
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.bg.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ca.xlf307
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cs.xlf307
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cy.xlf227
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.da.xlf247
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.de.xlf311
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.el.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.en.xlf311
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.es.xlf311
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.et.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.eu.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fa.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fi.xlf227
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fr.xlf311
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.gl.xlf315
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.he.xlf307
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hr.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hu.xlf311
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hy.xlf187
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.id.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.it.xlf307
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ja.xlf315
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lb.xlf303
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lt.xlf307
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.mn.xlf151
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nb.xlf155
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nl.xlf311
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.no.xlf227
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pl.xlf311
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt.xlf307
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf315
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ro.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ru.xlf311
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sk.xlf307
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sl.xlf311
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sq.xlf227
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf303
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf303
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sv.xlf307
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.th.xlf303
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.tr.xlf227
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.uk.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.vi.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf283
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintTest.php209
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationListTest.php134
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationTest.php55
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php173
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php545
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllTest.php41
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllValidatorTest.php93
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/BlankValidatorTest.php69
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php336
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CardSchemeValidatorTest.php133
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ChoiceValidatorTest.php287
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php112
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php20
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayTest.php20
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php22
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorTest.php389
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CompositeTest.php137
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorArrayTest.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorCountableTest.php25
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorTest.php203
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountryValidatorTest.php116
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CurrencyValidatorTest.php116
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateTimeValidatorTest.php110
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateValidatorTest.php106
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php105
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php69
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php214
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FalseValidatorTest.php56
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileTest.php107
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorObjectTest.php22
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorPathTest.php36
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorTest.php477
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/foo0
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test.gifbin0 -> 801 bytes
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_4by3.gifbin0 -> 57 bytes
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_landscape.gifbin0 -> 43 bytes
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_portrait.gifbin0 -> 43 bytes
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php71
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php74
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GroupSequenceTest.php84
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php193
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php89
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php329
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IpValidatorTest.php444
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php271
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IssnValidatorTest.php187
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LanguageValidatorTest.php114
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php25
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayLegacyApiTest.php25
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php25
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObjectLegacyApiTest.php25
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php25
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObjectLegacyApiTest.php25
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArrayLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountableLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObjectLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPathLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php37
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidatorLegacyApiTest.php29
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidatorLegacyApiTest.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LengthValidatorTest.php255
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php74
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php73
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LocaleValidatorTest.php104
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LuhnValidatorTest.php127
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotBlankValidatorTest.php102
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php69
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php92
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotNullValidatorTest.php60
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NullValidatorTest.php66
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RangeValidatorTest.php403
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexTest.php87
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexValidatorTest.php97
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TimeValidatorTest.php107
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TrueValidatorTest.php56
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php185
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php179
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php211
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ValidTest.php28
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CallbackClass.php24
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ClassConstraint.php22
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintA.php31
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintAValidator.php37
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintB.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintC.php30
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValue.php31
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValueAsDefault.php31
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Countable.php27
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CustomArrayObject.php70
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Entity.php100
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityInterface.php16
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityParent.php31
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraint.php24
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraintValidator.php23
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeClassMetadata.php26
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeMetadataFactory.php72
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FilesLoader.php39
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/GroupSequenceProviderEntity.php36
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraint.php18
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraintValidator.php16
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/LegacyClassMetadata.php20
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/PropertyConstraint.php22
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Reference.php29
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/StubGlobalExecutionContext.php72
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/LegacyExecutionContextTest.php336
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php84
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/LegacyApcCacheTest.php83
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php280
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php33
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php118
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php62
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/LegacyElementMetadataTest.php80
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php10
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php172
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php48
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/LoaderChainTest.php84
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php143
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php133
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php123
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml19
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml119
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml62
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/empty-mapping.yml0
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/nonvalid-mapping.yml1
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/withdoctype.xml7
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php110
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/PropertyMetadataTest.php45
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Util/PropertyPathTest.php35
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/Abstract2Dot5ApiTest.php776
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractLegacyApiTest.php315
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php1288
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php41
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidatorLegacyApiTest.php41
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php29
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php160
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorTest.php36
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Util/PropertyPath.php57
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validation.php66
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitor.php210
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitorInterface.php86
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator.php235
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/ContextualValidatorInterface.php89
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/LegacyValidator.php79
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php866
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveValidator.php140
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/ValidatorInterface.php100
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilder.php412
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilderInterface.php193
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidatorInterface.php114
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilder.php225
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilderInterface.php115
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Violation/LegacyConstraintViolationBuilder.php164
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/composer.json56
-rw-r--r--Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/phpunit.xml.dist28
450 files changed, 46533 insertions, 0 deletions
diff --git a/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/.gitignore b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/.gitignore
new file mode 100644
index 0000000..c49a5d8
--- /dev/null
+++ b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/.gitignore
@@ -0,0 +1,3 @@
+vendor/
+composer.lock
+phpunit.xml
diff --git a/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/CHANGELOG.md b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/CHANGELOG.md
new file mode 100644
index 0000000..329eaf3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ClassBasedInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ClassBasedInterface.php
new file mode 100644
index 0000000..fe532ef
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraint.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraint.php
new file mode 100644
index 0000000..a8ae634
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php
new file mode 100644
index 0000000..61c994a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php
new file mode 100644
index 0000000..cc6981b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactoryInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactoryInterface.php
new file mode 100644
index 0000000..5e21627
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorInterface.php
new file mode 100644
index 0000000..f7538a1
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolation.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolation.php
new file mode 100644
index 0000000..8f4744f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationInterface.php
new file mode 100644
index 0000000..232fb55
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationList.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationList.php
new file mode 100644
index 0000000..cccfa86
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationListInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ConstraintViolationListInterface.php
new file mode 100644
index 0000000..088c70c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparison.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparison.php
new file mode 100644
index 0000000..fb1f1f3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php
new file mode 100644
index 0000000..ec734b3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/All.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/All.php
new file mode 100644
index 0000000..3250fcf
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AllValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AllValidator.php
new file mode 100644
index 0000000..a655afc
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Blank.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Blank.php
new file mode 100644
index 0000000..766ce6c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php
new file mode 100644
index 0000000..031c7a5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Callback.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Callback.php
new file mode 100644
index 0000000..312952a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CallbackValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CallbackValidator.php
new file mode 100644
index 0000000..9939306
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardScheme.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardScheme.php
new file mode 100644
index 0000000..14f3b5d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardSchemeValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CardSchemeValidator.php
new file mode 100644
index 0000000..0e7de08
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Choice.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Choice.php
new file mode 100644
index 0000000..39a6457
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ChoiceValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ChoiceValidator.php
new file mode 100644
index 0000000..cf5774c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php
new file mode 100644
index 0000000..708c8ed
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Optional.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Optional.php
new file mode 100644
index 0000000..f7a9204
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Required.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection/Required.php
new file mode 100644
index 0000000..e358343
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php
new file mode 100644
index 0000000..c3180d2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Composite.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Composite.php
new file mode 100644
index 0000000..22a748c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Count.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Count.php
new file mode 100644
index 0000000..a3e12fe
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountValidator.php
new file mode 100644
index 0000000..d44f537
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Country.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Country.php
new file mode 100644
index 0000000..ff6f3d0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountryValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CountryValidator.php
new file mode 100644
index 0000000..0d001f7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Currency.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Currency.php
new file mode 100644
index 0000000..c09fe88
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CurrencyValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CurrencyValidator.php
new file mode 100644
index 0000000..5585426
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Date.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Date.php
new file mode 100644
index 0000000..2bc444f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTime.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTime.php
new file mode 100644
index 0000000..ae67ff3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTimeValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateTimeValidator.php
new file mode 100644
index 0000000..b459c78
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/DateValidator.php
new file mode 100644
index 0000000..77f0111
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Email.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Email.php
new file mode 100644
index 0000000..3697717
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EmailValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EmailValidator.php
new file mode 100644
index 0000000..8d3a7c5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualTo.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualTo.php
new file mode 100644
index 0000000..8d3d752
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualToValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/EqualToValidator.php
new file mode 100644
index 0000000..3739dbe
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Existence.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Existence.php
new file mode 100644
index 0000000..5ea6ffe
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Expression.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Expression.php
new file mode 100644
index 0000000..dfa242c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ExpressionValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ExpressionValidator.php
new file mode 100644
index 0000000..fd3e903
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/False.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/False.php
new file mode 100644
index 0000000..fc2e3e4
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FalseValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FalseValidator.php
new file mode 100644
index 0000000..206780c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/File.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/File.php
new file mode 100644
index 0000000..ae0ad67
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FileValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/FileValidator.php
new file mode 100644
index 0000000..9d225a9
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThan.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThan.php
new file mode 100644
index 0000000..ec7fafb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqual.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqual.php
new file mode 100644
index 0000000..36fdd9c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqualValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanOrEqualValidator.php
new file mode 100644
index 0000000..2363204
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GreaterThanValidator.php
new file mode 100644
index 0000000..fdcf0c1
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequence.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequence.php
new file mode 100644
index 0000000..72bfb16
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequenceProvider.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/GroupSequenceProvider.php
new file mode 100644
index 0000000..3904473
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Iban.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Iban.php
new file mode 100644
index 0000000..66ce09a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php
new file mode 100644
index 0000000..35995d2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalTo.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalTo.php
new file mode 100644
index 0000000..6d00286
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalToValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IdenticalToValidator.php
new file mode 100644
index 0000000..a186726
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Image.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Image.php
new file mode 100644
index 0000000..904ef97
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ImageValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/ImageValidator.php
new file mode 100644
index 0000000..e183e27
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Ip.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Ip.php
new file mode 100644
index 0000000..27f0b2d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IpValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IpValidator.php
new file mode 100644
index 0000000..2bbe7e4
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Isbn.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Isbn.php
new file mode 100644
index 0000000..67d177f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IsbnValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IsbnValidator.php
new file mode 100644
index 0000000..5980857
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Issn.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Issn.php
new file mode 100644
index 0000000..39716a2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IssnValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IssnValidator.php
new file mode 100644
index 0000000..1f17c38
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Language.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Language.php
new file mode 100644
index 0000000..e7c29dc
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LanguageValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LanguageValidator.php
new file mode 100644
index 0000000..be7ad28
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Length.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Length.php
new file mode 100644
index 0000000..8d00480
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LengthValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LengthValidator.php
new file mode 100644
index 0000000..f822047
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThan.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThan.php
new file mode 100644
index 0000000..b116320
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqual.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqual.php
new file mode 100644
index 0000000..7faca84
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqualValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanOrEqualValidator.php
new file mode 100644
index 0000000..dcc93b2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LessThanValidator.php
new file mode 100644
index 0000000..081316a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Locale.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Locale.php
new file mode 100644
index 0000000..12a5546
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LocaleValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LocaleValidator.php
new file mode 100644
index 0000000..748e5cf
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Luhn.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Luhn.php
new file mode 100644
index 0000000..24f5bc7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LuhnValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/LuhnValidator.php
new file mode 100644
index 0000000..d58bfbf
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlank.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlank.php
new file mode 100644
index 0000000..c578c6d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlankValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotBlankValidator.php
new file mode 100644
index 0000000..9deab15
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualTo.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualTo.php
new file mode 100644
index 0000000..abd8092
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualToValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotEqualToValidator.php
new file mode 100644
index 0000000..5710a85
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalTo.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalTo.php
new file mode 100644
index 0000000..fb4ef3f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalToValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotIdenticalToValidator.php
new file mode 100644
index 0000000..ed8dc1c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNull.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNull.php
new file mode 100644
index 0000000..60416c7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNullValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NotNullValidator.php
new file mode 100644
index 0000000..a7a905a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Null.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Null.php
new file mode 100644
index 0000000..3104550
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NullValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/NullValidator.php
new file mode 100644
index 0000000..1e6c3a5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Optional.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Optional.php
new file mode 100644
index 0000000..dab8b43
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Range.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Range.php
new file mode 100644
index 0000000..a12afff
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RangeValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RangeValidator.php
new file mode 100644
index 0000000..ebae112
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Regex.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Regex.php
new file mode 100644
index 0000000..3cdf514
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RegexValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/RegexValidator.php
new file mode 100644
index 0000000..5916e85
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Required.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Required.php
new file mode 100644
index 0000000..bd77a90
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Time.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Time.php
new file mode 100644
index 0000000..7998c6f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TimeValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TimeValidator.php
new file mode 100644
index 0000000..bfecf95
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Traverse.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Traverse.php
new file mode 100644
index 0000000..4abae6c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/True.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/True.php
new file mode 100644
index 0000000..788e36a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TrueValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TrueValidator.php
new file mode 100644
index 0000000..a01f5bb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Type.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Type.php
new file mode 100644
index 0000000..fc4cc72
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TypeValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/TypeValidator.php
new file mode 100644
index 0000000..66217d0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Url.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Url.php
new file mode 100644
index 0000000..e867ee1
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UrlValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UrlValidator.php
new file mode 100644
index 0000000..3d18477
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Uuid.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Uuid.php
new file mode 100644
index 0000000..3c67a3a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UuidValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/UuidValidator.php
new file mode 100644
index 0000000..0ae04e2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Valid.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Valid.php
new file mode 100644
index 0000000..b0f518b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContext.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContext.php
new file mode 100644
index 0000000..f329615
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactory.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactory.php
new file mode 100644
index 0000000..d94a806
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactoryInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextFactoryInterface.php
new file mode 100644
index 0000000..f0ee001
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/ExecutionContextInterface.php
new file mode 100644
index 0000000..4865204
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContext.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContext.php
new file mode 100644
index 0000000..de34b1f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContextFactory.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Context/LegacyExecutionContextFactory.php
new file mode 100644
index 0000000..cf5cd07
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/DefaultTranslator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/DefaultTranslator.php
new file mode 100644
index 0000000..06967de
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/BadMethodCallException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/BadMethodCallException.php
new file mode 100644
index 0000000..939161b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/ConstraintDefinitionException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/ConstraintDefinitionException.php
new file mode 100644
index 0000000..b24fdd6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/ExceptionInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/ExceptionInterface.php
new file mode 100644
index 0000000..77d09b9
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/GroupDefinitionException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/GroupDefinitionException.php
new file mode 100644
index 0000000..ab7e91d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidArgumentException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000..22da39b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidOptionsException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/InvalidOptionsException.php
new file mode 100644
index 0000000..ce87c42
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/MappingException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/MappingException.php
new file mode 100644
index 0000000..4c8c057
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/MissingOptionsException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/MissingOptionsException.php
new file mode 100644
index 0000000..07c5d9e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/NoSuchMetadataException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/NoSuchMetadataException.php
new file mode 100644
index 0000000..4cac74c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/OutOfBoundsException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/OutOfBoundsException.php
new file mode 100644
index 0000000..30906e8
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/RuntimeException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/RuntimeException.php
new file mode 100644
index 0000000..df4a50c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnexpectedTypeException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnexpectedTypeException.php
new file mode 100644
index 0000000..49d8cc2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnsupportedMetadataException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/UnsupportedMetadataException.php
new file mode 100644
index 0000000..c6ece50
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/ValidatorException.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Exception/ValidatorException.php
new file mode 100644
index 0000000..28bd470
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContext.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContext.php
new file mode 100644
index 0000000..31911b8
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContextInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ExecutionContextInterface.php
new file mode 100644
index 0000000..ebef4bd
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/GlobalExecutionContextInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/GlobalExecutionContextInterface.php
new file mode 100644
index 0000000..06dbf3e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/GroupSequenceProviderInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/GroupSequenceProviderInterface.php
new file mode 100644
index 0000000..62e8a5e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/LICENSE b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/LICENSE
new file mode 100644
index 0000000..43028bc
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/BlackholeMetadataFactory.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/BlackholeMetadataFactory.php
new file mode 100644
index 0000000..7913e15
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/ApcCache.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/ApcCache.php
new file mode 100644
index 0000000..64929b0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php
new file mode 100644
index 0000000..e8047c6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php
new file mode 100644
index 0000000..6dd5447
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/CascadingStrategy.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/CascadingStrategy.php
new file mode 100644
index 0000000..ff2853f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadata.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadata.php
new file mode 100644
index 0000000..a234939
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php
new file mode 100644
index 0000000..9b05edd
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ClassMetadataInterface.php
new file mode 100644
index 0000000..bb76c2c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ElementMetadata.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/ElementMetadata.php
new file mode 100644
index 0000000..1b971c9
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/BlackHoleMetadataFactory.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/BlackHoleMetadataFactory.php
new file mode 100644
index 0000000..5b38d0c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php
new file mode 100644
index 0000000..b6ef076
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/MetadataFactoryInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Factory/MetadataFactoryInterface.php
new file mode 100644
index 0000000..ef25174
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GenericMetadata.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GenericMetadata.php
new file mode 100644
index 0000000..904dcd7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GetterMetadata.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/GetterMetadata.php
new file mode 100644
index 0000000..0cf9992
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AbstractLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AbstractLoader.php
new file mode 100644
index 0000000..2ae8988
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php
new file mode 100644
index 0000000..af0bf52
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FileLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FileLoader.php
new file mode 100644
index 0000000..326bbdf
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FilesLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/FilesLoader.php
new file mode 100644
index 0000000..571c7e7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php
new file mode 100644
index 0000000..970d906
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/LoaderInterface.php
new file mode 100644
index 0000000..5dadc82
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php
new file mode 100644
index 0000000..4ff2257
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php
new file mode 100644
index 0000000..2961b00
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFilesLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFilesLoader.php
new file mode 100644
index 0000000..6017c3f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php
new file mode 100644
index 0000000..e293a6e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFilesLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/YamlFilesLoader.php
new file mode 100644
index 0000000..235856f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd b/Aufgabe06/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/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php
new file mode 100644
index 0000000..a0bbe0d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MetadataInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MetadataInterface.php
new file mode 100644
index 0000000..fda1dbb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadata.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadata.php
new file mode 100644
index 0000000..7319294
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadataInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/PropertyMetadataInterface.php
new file mode 100644
index 0000000..79e2c79
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/TraversalStrategy.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Mapping/TraversalStrategy.php
new file mode 100644
index 0000000..5122c47
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/MetadataFactoryInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/MetadataFactoryInterface.php
new file mode 100644
index 0000000..4c0cbad
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/MetadataInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/MetadataInterface.php
new file mode 100644
index 0000000..60abfeb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ObjectInitializerInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ObjectInitializerInterface.php
new file mode 100644
index 0000000..0426bc8
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataContainerInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataContainerInterface.php
new file mode 100644
index 0000000..91b286a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/PropertyMetadataInterface.php
new file mode 100644
index 0000000..c18ae83
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/README.md b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/README.md
new file mode 100644
index 0000000..f6891ff
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.af.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.af.xlf
new file mode 100644
index 0000000..177bb00
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ar.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ar.xlf
new file mode 100644
index 0000000..b448c2e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.az.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.az.xlf
new file mode 100644
index 0000000..add868c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.bg.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.bg.xlf
new file mode 100644
index 0000000..7c5da55
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ca.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ca.xlf
new file mode 100644
index 0000000..85b6970
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cs.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cs.xlf
new file mode 100644
index 0000000..2ae47b2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cy.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.cy.xlf
new file mode 100644
index 0000000..da7cb9a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.da.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.da.xlf
new file mode 100644
index 0000000..14e479a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.de.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.de.xlf
new file mode 100644
index 0000000..d2e13c6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.el.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.el.xlf
new file mode 100644
index 0000000..4fa0d42
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.en.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.en.xlf
new file mode 100644
index 0000000..6509ab1
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.es.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.es.xlf
new file mode 100644
index 0000000..ee8ffe6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.et.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.et.xlf
new file mode 100644
index 0000000..d047c8b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.eu.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.eu.xlf
new file mode 100644
index 0000000..b2edefd
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fa.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fa.xlf
new file mode 100644
index 0000000..98b4bd6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fi.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fi.xlf
new file mode 100644
index 0000000..3f5a07e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fr.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.fr.xlf
new file mode 100644
index 0000000..237a3b4
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.gl.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.gl.xlf
new file mode 100644
index 0000000..1d0cc13
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.he.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.he.xlf
new file mode 100644
index 0000000..6510514
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hr.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hr.xlf
new file mode 100644
index 0000000..a11e825
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hu.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hu.xlf
new file mode 100644
index 0000000..f5cbd0d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hy.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.hy.xlf
new file mode 100644
index 0000000..664c085
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.id.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.id.xlf
new file mode 100644
index 0000000..742f4a1
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.it.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.it.xlf
new file mode 100644
index 0000000..5a411ea
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ja.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ja.xlf
new file mode 100644
index 0000000..63eecc0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lb.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lb.xlf
new file mode 100644
index 0000000..8281c7c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lt.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.lt.xlf
new file mode 100644
index 0000000..a556c45
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.mn.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.mn.xlf
new file mode 100644
index 0000000..dfe7eeb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nb.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nb.xlf
new file mode 100644
index 0000000..a8b790c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nl.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.nl.xlf
new file mode 100644
index 0000000..c2372c9
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.no.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.no.xlf
new file mode 100644
index 0000000..ea01c63
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pl.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pl.xlf
new file mode 100644
index 0000000..ac7406c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt.xlf
new file mode 100644
index 0000000..d563c92
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf
new file mode 100644
index 0000000..bff91e3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ro.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ro.xlf
new file mode 100644
index 0000000..27346a9
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ru.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.ru.xlf
new file mode 100644
index 0000000..8e6e7c2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sk.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sk.xlf
new file mode 100644
index 0000000..46f3ec3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sl.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sl.xlf
new file mode 100644
index 0000000..b41d1ae
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sq.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sq.xlf
new file mode 100644
index 0000000..ffc8ccf
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf
new file mode 100644
index 0000000..81f5210
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf
new file mode 100644
index 0000000..60c093a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sv.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.sv.xlf
new file mode 100644
index 0000000..fbcb5f2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.th.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.th.xlf
new file mode 100644
index 0000000..0237a30
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.tr.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.tr.xlf
new file mode 100644
index 0000000..a7906ea
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.uk.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.uk.xlf
new file mode 100644
index 0000000..02ecd5a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.vi.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.vi.xlf
new file mode 100644
index 0000000..e1833c7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf
new file mode 100644
index 0000000..5ffc643
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf
new file mode 100644
index 0000000..d9d5f2f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintTest.php
new file mode 100644
index 0000000..f63570c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationListTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationListTest.php
new file mode 100644
index 0000000..30d7ff0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ConstraintViolationTest.php
new file mode 100644
index 0000000..2ceb016
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php
new file mode 100644
index 0000000..4013fd4
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AbstractConstraintValidatorTest.php
new file mode 100644
index 0000000..d55e464
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllTest.php
new file mode 100644
index 0000000..36b5198
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/AllValidatorTest.php
new file mode 100644
index 0000000..57dd600
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/BlankValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/BlankValidatorTest.php
new file mode 100644
index 0000000..a7f3d7d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CallbackValidatorTest.php
new file mode 100644
index 0000000..9bb12a2
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CardSchemeValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CardSchemeValidatorTest.php
new file mode 100644
index 0000000..aab54e5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ChoiceValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ChoiceValidatorTest.php
new file mode 100644
index 0000000..579d6aa
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php
new file mode 100644
index 0000000..79f50b0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayObjectTest.php
new file mode 100644
index 0000000..a3c4b33
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorArrayTest.php
new file mode 100644
index 0000000..7517d0c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorCustomArrayObjectTest.php
new file mode 100644
index 0000000..3d4c296
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionValidatorTest.php
new file mode 100644
index 0000000..0376814
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CompositeTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CompositeTest.php
new file mode 100644
index 0000000..21cb461
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorArrayTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorArrayTest.php
new file mode 100644
index 0000000..5f562e7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorCountableTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorCountableTest.php
new file mode 100644
index 0000000..7d46967
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountValidatorTest.php
new file mode 100644
index 0000000..6713166
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountryValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CountryValidatorTest.php
new file mode 100644
index 0000000..b133511
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CurrencyValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CurrencyValidatorTest.php
new file mode 100644
index 0000000..e5bb060
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateTimeValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateTimeValidatorTest.php
new file mode 100644
index 0000000..25d88aa
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/DateValidatorTest.php
new file mode 100644
index 0000000..21f0a2d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php
new file mode 100644
index 0000000..0361333
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php
new file mode 100644
index 0000000..c20db15
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php
new file mode 100644
index 0000000..3d4ef75
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FalseValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FalseValidatorTest.php
new file mode 100644
index 0000000..479888e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileTest.php
new file mode 100644
index 0000000..2ee4681
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorObjectTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorObjectTest.php
new file mode 100644
index 0000000..f35f93b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorPathTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorPathTest.php
new file mode 100644
index 0000000..11b8d4c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/FileValidatorTest.php
new file mode 100644
index 0000000..176b49f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/foo b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/foo
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/foo
diff --git a/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test.gif b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test.gif
new file mode 100644
index 0000000..6b44fc7
--- /dev/null
+++ b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test.gif
Binary files differ
diff --git a/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_4by3.gif b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_4by3.gif
new file mode 100644
index 0000000..64dd3ff
--- /dev/null
+++ b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_4by3.gif
Binary files differ
diff --git a/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_landscape.gif b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_landscape.gif
new file mode 100644
index 0000000..8701235
--- /dev/null
+++ b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_landscape.gif
Binary files differ
diff --git a/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_portrait.gif b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_portrait.gif
new file mode 100644
index 0000000..cc480ca
--- /dev/null
+++ b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_portrait.gif
Binary files differ
diff --git a/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php
new file mode 100644
index 0000000..41708f6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php
new file mode 100644
index 0000000..85a2b1d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GroupSequenceTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GroupSequenceTest.php
new file mode 100644
index 0000000..85b60b5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php
new file mode 100644
index 0000000..ab9839a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php
new file mode 100644
index 0000000..4b71062
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php
new file mode 100644
index 0000000..18f9c1b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IpValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IpValidatorTest.php
new file mode 100644
index 0000000..fc40e61
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php
new file mode 100644
index 0000000..e73b89d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IssnValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IssnValidatorTest.php
new file mode 100644
index 0000000..a6d3994
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LanguageValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LanguageValidatorTest.php
new file mode 100644
index 0000000..6f7c390
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..d5a41fb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidatorLegacyApiTest.php
new file mode 100644
index 0000000..649bfe1
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..0cfb1aa
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidatorLegacyApiTest.php
new file mode 100644
index 0000000..00b8a7a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..efcb5ec
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidatorLegacyApiTest.php
new file mode 100644
index 0000000..8f3ea2b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..0f467dd
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidatorLegacyApiTest.php
new file mode 100644
index 0000000..e4b4184
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..71277f7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidatorLegacyApiTest.php
new file mode 100644
index 0000000..9237df5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php
new file mode 100644
index 0000000..3826914
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayLegacyApiTest.php
new file mode 100644
index 0000000..45ca1df
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php
new file mode 100644
index 0000000..22dbe46
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObjectLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObjectLegacyApiTest.php
new file mode 100644
index 0000000..f28aed3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php
new file mode 100644
index 0000000..29ce241
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObjectLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObjectLegacyApiTest.php
new file mode 100644
index 0000000..b04053f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php
new file mode 100644
index 0000000..2ab8b19
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArrayLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArrayLegacyApiTest.php
new file mode 100644
index 0000000..d362988
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php
new file mode 100644
index 0000000..d0239bb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountableLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountableLegacyApiTest.php
new file mode 100644
index 0000000..33b8795
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..30685d4
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidatorLegacyApiTest.php
new file mode 100644
index 0000000..85cd5d0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..6c2f6a5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidatorLegacyApiTest.php
new file mode 100644
index 0000000..be19302
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..aab7d43
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidatorLegacyApiTest.php
new file mode 100644
index 0000000..3235f42
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..12ccb5e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidatorLegacyApiTest.php
new file mode 100644
index 0000000..e5f1019
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..1c7008a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidatorLegacyApiTest.php
new file mode 100644
index 0000000..3a72cfb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..914e580
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidatorLegacyApiTest.php
new file mode 100644
index 0000000..374bba0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..3d65f4e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidatorLegacyApiTest.php
new file mode 100644
index 0000000..5f7cb12
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php
new file mode 100644
index 0000000..3035e41
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObjectLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObjectLegacyApiTest.php
new file mode 100644
index 0000000..97d5f59
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php
new file mode 100644
index 0000000..a154144
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPathLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPathLegacyApiTest.php
new file mode 100644
index 0000000..2c298df
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..5f4a17e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidatorLegacyApiTest.php
new file mode 100644
index 0000000..08822a5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..799e5d8
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidatorLegacyApiTest.php
new file mode 100644
index 0000000..0808e9b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..6dac309
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidatorLegacyApiTest.php
new file mode 100644
index 0000000..0ffc4b1
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..99cd986
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidatorLegacyApiTest.php
new file mode 100644
index 0000000..aade84f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..1fee081
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidatorLegacyApiTest.php
new file mode 100644
index 0000000..d36c175
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..99933cf
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidatorLegacyApiTest.php
new file mode 100644
index 0000000..315f2f9
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..29455bd
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidatorLegacyApiTest.php
new file mode 100644
index 0000000..1568270
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..3713fb0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidatorLegacyApiTest.php
new file mode 100644
index 0000000..2ff3104
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..f712075
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidatorLegacyApiTest.php
new file mode 100644
index 0000000..a6471b3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..686d376
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidatorLegacyApiTest.php
new file mode 100644
index 0000000..655f3d6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..f345ec3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidatorLegacyApiTest.php
new file mode 100644
index 0000000..2e07ab0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..074450d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidatorLegacyApiTest.php
new file mode 100644
index 0000000..27592b0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..4d119bb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidatorLegacyApiTest.php
new file mode 100644
index 0000000..f55d422
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..8207ca0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidatorLegacyApiTest.php
new file mode 100644
index 0000000..5855526
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..a6d0faa
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidatorLegacyApiTest.php
new file mode 100644
index 0000000..0aaaa77
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..e48450e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidatorLegacyApiTest.php
new file mode 100644
index 0000000..df88f96
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..2c00cf5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidatorLegacyApiTest.php
new file mode 100644
index 0000000..25819a6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..39b0038
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidatorLegacyApiTest.php
new file mode 100644
index 0000000..41a9e54
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..958e446
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidatorLegacyApiTest.php
new file mode 100644
index 0000000..79536ce
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..fe23ce8
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidatorLegacyApiTest.php
new file mode 100644
index 0000000..866a59a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..dbae24e
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidatorLegacyApiTest.php
new file mode 100644
index 0000000..ed1a464
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..d4a0678
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidatorLegacyApiTest.php
new file mode 100644
index 0000000..2458d87
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..3d00252
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidatorLegacyApiTest.php
new file mode 100644
index 0000000..706c083
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..aed1d0a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidatorLegacyApiTest.php
new file mode 100644
index 0000000..26eb39f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..287d719
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidatorLegacyApiTest.php
new file mode 100644
index 0000000..0830ddb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php
new file mode 100644
index 0000000..b5efc76
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidatorLegacyApiTest.php
new file mode 100644
index 0000000..4a4e362
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LengthValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LengthValidatorTest.php
new file mode 100644
index 0000000..24b6306
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php
new file mode 100644
index 0000000..7518135
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php
new file mode 100644
index 0000000..d555870
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LocaleValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LocaleValidatorTest.php
new file mode 100644
index 0000000..e5e2f30
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LuhnValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LuhnValidatorTest.php
new file mode 100644
index 0000000..b0e88c3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotBlankValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotBlankValidatorTest.php
new file mode 100644
index 0000000..c248246
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php
new file mode 100644
index 0000000..bc2c348
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php
new file mode 100644
index 0000000..1fbd806
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotNullValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotNullValidatorTest.php
new file mode 100644
index 0000000..d338f31
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NullValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NullValidatorTest.php
new file mode 100644
index 0000000..85df90a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RangeValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RangeValidatorTest.php
new file mode 100644
index 0000000..9b7056b
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexTest.php
new file mode 100644
index 0000000..ea37bb4
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/RegexValidatorTest.php
new file mode 100644
index 0000000..61917e3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TimeValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TimeValidatorTest.php
new file mode 100644
index 0000000..a6ca143
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TrueValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TrueValidatorTest.php
new file mode 100644
index 0000000..2cdc703
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php
new file mode 100644
index 0000000..4836928
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php
new file mode 100644
index 0000000..3358c79
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php
new file mode 100644
index 0000000..0abda39
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ValidTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/ValidTest.php
new file mode 100644
index 0000000..3de6ab3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CallbackClass.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CallbackClass.php
new file mode 100644
index 0000000..0f6a2f4
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ClassConstraint.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ClassConstraint.php
new file mode 100644
index 0000000..a4dc777
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintA.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintA.php
new file mode 100644
index 0000000..8a196dc
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintAValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintAValidator.php
new file mode 100644
index 0000000..b3b85c8
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintB.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintB.php
new file mode 100644
index 0000000..6258923
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintC.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintC.php
new file mode 100644
index 0000000..b0418b8
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValue.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValue.php
new file mode 100644
index 0000000..4ebd981
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValueAsDefault.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/ConstraintWithValueAsDefault.php
new file mode 100644
index 0000000..a975e07
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Countable.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Countable.php
new file mode 100644
index 0000000..282d78d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CustomArrayObject.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/CustomArrayObject.php
new file mode 100644
index 0000000..41eac96
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Entity.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Entity.php
new file mode 100644
index 0000000..2230d30
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityInterface.php
new file mode 100644
index 0000000..2901f26
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityParent.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/EntityParent.php
new file mode 100644
index 0000000..422bb28
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraint.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraint.php
new file mode 100644
index 0000000..03019fc
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraintValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FailingConstraintValidator.php
new file mode 100644
index 0000000..a019dd6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeClassMetadata.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeClassMetadata.php
new file mode 100644
index 0000000..8c76a21
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeMetadataFactory.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FakeMetadataFactory.php
new file mode 100644
index 0000000..e3f0d9a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FilesLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/FilesLoader.php
new file mode 100644
index 0000000..59d8ee8
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/GroupSequenceProviderEntity.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/GroupSequenceProviderEntity.php
new file mode 100644
index 0000000..2b0beaf
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraint.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraint.php
new file mode 100644
index 0000000..6a9eaa7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraintValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/InvalidConstraintValidator.php
new file mode 100644
index 0000000..bd9a5cf
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/LegacyClassMetadata.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/LegacyClassMetadata.php
new file mode 100644
index 0000000..6a832a1
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/PropertyConstraint.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/PropertyConstraint.php
new file mode 100644
index 0000000..fadb535
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Reference.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/Reference.php
new file mode 100644
index 0000000..af29735
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/StubGlobalExecutionContext.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Fixtures/StubGlobalExecutionContext.php
new file mode 100644
index 0000000..6ae3663
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/LegacyExecutionContextTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/LegacyExecutionContextTest.php
new file mode 100644
index 0000000..4fec2aa
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php
new file mode 100644
index 0000000..a2de306
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/LegacyApcCacheTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Cache/LegacyApcCacheTest.php
new file mode 100644
index 0000000..bb69cf5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php
new file mode 100644
index 0000000..8634ac5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php
new file mode 100644
index 0000000..641bf91
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php
new file mode 100644
index 0000000..74ee912
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php
new file mode 100644
index 0000000..0781599
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/LegacyElementMetadataTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/LegacyElementMetadataTest.php
new file mode 100644
index 0000000..c77e6fe
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractStaticMethodLoader.php
new file mode 100644
index 0000000..08f219d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php
new file mode 100644
index 0000000..ad98aa1
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php
new file mode 100644
index 0000000..09e6e44
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/LoaderChainTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/LoaderChainTest.php
new file mode 100644
index 0000000..647a568
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php
new file mode 100644
index 0000000..5829336
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php
new file mode 100644
index 0000000..8ab2065
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php
new file mode 100644
index 0000000..806a2b0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml
new file mode 100644
index 0000000..dfd5edd
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml
new file mode 100644
index 0000000..9b637e9
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml
new file mode 100644
index 0000000..e96c5e0
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/empty-mapping.yml b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/empty-mapping.yml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/empty-mapping.yml
diff --git a/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/nonvalid-mapping.yml b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/nonvalid-mapping.yml
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/nonvalid-mapping.yml
@@ -0,0 +1 @@
+foo
diff --git a/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/withdoctype.xml b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/withdoctype.xml
new file mode 100644
index 0000000..0beacc3
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php
new file mode 100644
index 0000000..f91088d
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/PropertyMetadataTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/PropertyMetadataTest.php
new file mode 100644
index 0000000..f411d95
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Util/PropertyPathTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Util/PropertyPathTest.php
new file mode 100644
index 0000000..94802b6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/Abstract2Dot5ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/Abstract2Dot5ApiTest.php
new file mode 100644
index 0000000..684731f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractLegacyApiTest.php
new file mode 100644
index 0000000..a4c1fe8
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/AbstractValidatorTest.php
new file mode 100644
index 0000000..b1c4edb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidator2Dot5ApiTest.php
new file mode 100644
index 0000000..624abd4
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidatorLegacyApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/LegacyValidatorLegacyApiTest.php
new file mode 100644
index 0000000..965a769
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php
new file mode 100644
index 0000000..6235fda
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php
new file mode 100644
index 0000000..e2585d7
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorTest.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Tests/ValidatorTest.php
new file mode 100644
index 0000000..3cc36f5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Util/PropertyPath.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Util/PropertyPath.php
new file mode 100644
index 0000000..4d397a9
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validation.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validation.php
new file mode 100644
index 0000000..b304dbb
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitor.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitor.php
new file mode 100644
index 0000000..3af8249
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitorInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidationVisitorInterface.php
new file mode 100644
index 0000000..483a1b5
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator.php
new file mode 100644
index 0000000..6edbb7a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/ContextualValidatorInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/ContextualValidatorInterface.php
new file mode 100644
index 0000000..767f895
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/LegacyValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/LegacyValidator.php
new file mode 100644
index 0000000..ce3501f
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php
new file mode 100644
index 0000000..191decd
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveValidator.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveValidator.php
new file mode 100644
index 0000000..ddf0850
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/ValidatorInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Validator/ValidatorInterface.php
new file mode 100644
index 0000000..2582bf6
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilder.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilder.php
new file mode 100644
index 0000000..1d65478
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilderInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidatorBuilderInterface.php
new file mode 100644
index 0000000..2fd0f9c
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidatorInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/ValidatorInterface.php
new file mode 100644
index 0000000..03c8921
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilder.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilder.php
new file mode 100644
index 0000000..b752c39
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilderInterface.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Violation/ConstraintViolationBuilderInterface.php
new file mode 100644
index 0000000..3dc270a
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Violation/LegacyConstraintViolationBuilder.php b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/Violation/LegacyConstraintViolationBuilder.php
new file mode 100644
index 0000000..5519f42
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/composer.json b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/composer.json
new file mode 100644
index 0000000..2d781ea
--- /dev/null
+++ b/Aufgabe06/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/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/phpunit.xml.dist b/Aufgabe06/vendor/symfony/validator/Symfony/Component/Validator/phpunit.xml.dist
new file mode 100644
index 0000000..1bf4391
--- /dev/null
+++ b/Aufgabe06/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>