[TASK] Streamline phpdoc annotations in EXT:extbase
[Packages/TYPO3.CMS.git] / typo3 / sysext / extbase / Classes / Validation / Validator / StringLengthValidator.php
index f28cda6..f0b8f9b 100644 (file)
 <?php
 namespace TYPO3\CMS\Extbase\Validation\Validator;
 
-/***************************************************************
- *  Copyright notice
+/*
+ * This file is part of the TYPO3 CMS project.
  *
- *  (c) 2010-2013 Extbase Team (http://forge.typo3.org/projects/typo3v4-mvc)
- *  Extbase is a backport of TYPO3 Flow. All credits go to the TYPO3 Flow team.
- *  All rights reserved
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
  *
- *  This script is part of the TYPO3 project. The TYPO3 project is
- *  free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
  *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
+ * The TYPO3 project - inspiring people to share!
+ */
+
 /**
- * Validator for string length
+ * Validator for string length.
  */
-class StringLengthValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {
+class StringLengthValidator extends AbstractValidator
+{
+    /**
+     * @var array
+     */
+    protected $supportedOptions = [
+        'minimum' => [0, 'Minimum length for a valid string', 'integer'],
+        'maximum' => [PHP_INT_MAX, 'Maximum length for a valid string', 'integer']
+    ];
 
-       /**
-        * Returns TRUE, if the given property ($value) is a valid string and its length
-        * is between 'minimum' (defaults to 0 if not specified) and 'maximum' (defaults to infinite if not specified)
-        * to be specified in the validation options.
-        *
-        * If at least one error occurred, the result is FALSE.
-        *
-        * @param mixed $value The value that should be validated
-        * @throws \TYPO3\CMS\Extbase\Validation\Exception\InvalidSubjectException
-        * @throws \TYPO3\CMS\Extbase\Validation\Exception\InvalidValidationOptionsException
-        * @return boolean TRUE if the value is valid, FALSE if an error occured
-        */
-       public function isValid($value) {
-               $this->errors = array();
-               if (isset($this->options['minimum']) && isset($this->options['maximum']) && $this->options['maximum'] < $this->options['minimum']) {
-                       throw new \TYPO3\CMS\Extbase\Validation\Exception\InvalidValidationOptionsException('The \'maximum\' is shorter than the \'minimum\' in the StringLengthValidator.', 1238107096);
-               }
-               if (is_object($value) && !method_exists($value, '__toString')) {
-                       throw new \TYPO3\CMS\Extbase\Validation\Exception\InvalidSubjectException('The given object could not be converted to a string.', 1238110957);
-               }
-               // TODO Use \TYPO3\CMS\Core\Charset\CharsetConverter::strlen() instead; How do we get the charset?
-               $stringLength = strlen($value);
-               $isValid = TRUE;
-               if (isset($this->options['minimum']) && $stringLength < $this->options['minimum']) {
-                       $isValid = FALSE;
-               }
-               if (isset($this->options['maximum']) && $stringLength > $this->options['maximum']) {
-                       $isValid = FALSE;
-               }
-               if ($isValid === FALSE) {
-                       if (isset($this->options['minimum']) && isset($this->options['maximum'])) {
-                               $this->addError(
-                                       \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate(
-                                               'validator.stringlength.between',
-                                               'extbase',
-                                               array (
-                                                       $this->options['minimum'],
-                                                       $this->options['maximum']
-                                               )
-                                       ), 1238108067, array($this->options['minimum'], $this->options['maximum']));
-                       } elseif (isset($this->options['minimum'])) {
-                               $this->addError(
-                                       \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate(
-                                               'validator.stringlength.less',
-                                               'extbase',
-                                               array(
-                                                       $this->options['minimum']
-                                               )
-                                       ), 1238108068, array($this->options['minimum']));
-                       } else {
-                               $this->addError(
-                                       \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate(
-                                               'validator.stringlength.exceed',
-                                               'extbase',
-                                               array(
-                                                       $this->options['maximum']
-                                               )
-                                       ), 1238108069, array($this->options['maximum']));
-                       }
-               }
-               return $isValid;
-       }
-}
+    /**
+     * Checks if the given value is a valid string (or can be cast to a string
+     * if an object is given) and its length is between minimum and maximum
+     * specified in the validation options.
+     *
+     * @param mixed $value The value that should be validated
+     * @throws \TYPO3\CMS\Extbase\Validation\Exception\InvalidValidationOptionsException
+     */
+    public function isValid($value)
+    {
+        if ($this->options['maximum'] < $this->options['minimum']) {
+            throw new \TYPO3\CMS\Extbase\Validation\Exception\InvalidValidationOptionsException('The \'maximum\' is shorter than the \'minimum\' in the StringLengthValidator.', 1238107096);
+        }
+
+        if (is_object($value)) {
+            if (!method_exists($value, '__toString')) {
+                $this->addError('The given object could not be converted to a string.', 1238110957);
+                return;
+            }
+        } elseif (!is_string($value)) {
+            $this->addError('The given value was not a valid string.', 1269883975);
+            return;
+        }
 
-?>
\ No newline at end of file
+        $stringLength = mb_strlen($value, 'utf-8');
+        $isValid = true;
+        if ($stringLength < $this->options['minimum']) {
+            $isValid = false;
+        }
+        if ($stringLength > $this->options['maximum']) {
+            $isValid = false;
+        }
+
+        if ($isValid === false) {
+            if ($this->options['minimum'] > 0 && $this->options['maximum'] < PHP_INT_MAX) {
+                $this->addError(
+                    $this->translateErrorMessage(
+                        'validator.stringlength.between',
+                        'extbase',
+                        [
+                            $this->options['minimum'],
+                            $this->options['maximum']
+                        ]
+                    ),
+                    1428504122,
+                    [$this->options['minimum'], $this->options['maximum']]
+                );
+            } elseif ($this->options['minimum'] > 0) {
+                $this->addError(
+                    $this->translateErrorMessage(
+                        'validator.stringlength.less',
+                        'extbase',
+                        [
+                            $this->options['minimum']
+                        ]
+                    ),
+                    1238108068,
+                    [$this->options['minimum']]
+                );
+            } else {
+                $this->addError(
+                    $this->translateErrorMessage(
+                        'validator.stringlength.exceed',
+                        'extbase',
+                        [
+                            $this->options['maximum']
+                        ]
+                    ),
+                    1238108069,
+                    [$this->options['maximum']]
+                );
+            }
+        }
+    }
+}