Ensure form field maximum and minimum length do not contradict each other
authorMatthias Schmidt <gravatronics@live.com>
Sun, 31 Dec 2017 16:37:37 +0000 (17:37 +0100)
committerMatthias Schmidt <gravatronics@live.com>
Sun, 31 Dec 2017 16:37:37 +0000 (17:37 +0100)
See #2509

wcfsetup/install/files/lib/system/form/builder/field/TMaximumLengthFormField.class.php
wcfsetup/install/files/lib/system/form/builder/field/TMinimumLengthFormField.class.php

index 64fe8d1ece8cddf3cbbb313008e6627d91942501..28494efd38a8dc20ff1330e33c14f265a3329729 100644 (file)
@@ -20,7 +20,7 @@ trait TMaximumLengthFormField {
        /**
         * Returns the maximum length of the values of this field or `null` if no placeholder
         * has been set.
-        *
+        * 
         * @return      null|int
         */
        public function getMaximumLength() {
@@ -30,10 +30,10 @@ trait TMaximumLengthFormField {
        /**
         * Sets the maximum length of the values of this field. If `null` is passed, the
         * maximum length is removed.
-        *
+        * 
         * @param       null|int        $maximumLength  maximum field value length
         * @return      static                          this field
-        *
+        * 
         * @throws      \InvalidArgumentException       if the given maximum length is no integer or otherwise invalid
         */
        public function maximumLength($maximumLength = null) {
@@ -43,7 +43,14 @@ trait TMaximumLengthFormField {
                        }
                        
                        if ($maximumLength <= 0) {
-                               throw new \InvalidArgumentException("Maximum length must be positive, '" . $maximumLength . "' given.");
+                               throw new \InvalidArgumentException("Maximum length must be positive, '{$maximumLength}' given.");
+                       }
+                       
+                       if ($this instanceof IMinimumLengthFormField) {
+                               $minimumLength = $this->getMinimumLength();
+                               if ($minimumLength !== null && $minimumLength > $maximumLength) {
+                                       throw new \InvalidArgumentException("Minimum length ({$minimumLength}) cannot be greater than maximum length ({$maximumLength}).");
+                               }
                        }
                }
                
index 5d1bd301af6f9508d55bdb166dedbc0d44d5736c..88e53c0bf1b8cb086a7311205c85b6b6236afa78 100644 (file)
@@ -43,7 +43,14 @@ trait TMinimumLengthFormField {
                        }
                        
                        if ($minimumLength < 0) {
-                               throw new \InvalidArgumentException("Minimum length must be non-negative, '" . $minimumLength . "' given.");
+                               throw new \InvalidArgumentException("Minimum length must be non-negative, '{$minimumLength}' given.");
+                       }
+                       
+                       if ($this instanceof IMaximumLengthFormField) {
+                               $maximumLength = $this->getMaximumLength();
+                               if ($maximumLength !== null && $minimumLength > $maximumLength) {
+                                       throw new \InvalidArgumentException("Minimum length ({$minimumLength}) cannot be greater than maximum length ({$maximumLength}).");
+                               }
                        }
                }