diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/AuthenticationServerField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/AuthenticationServerField.php index f0d76e32b..7270269d9 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/AuthenticationServerField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/AuthenticationServerField.php @@ -67,6 +67,11 @@ class AuthenticationServerField extends BaseField */ private $internalMultiSelect = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "please specify a valid authentication server"; + /** * generate validation data (list of AuthServers) */ @@ -158,26 +163,19 @@ class AuthenticationServerField extends BaseField */ public function getValidators() { - - if ($this->internalValidationMessage == null) { - $msg = "please specify a valid authentication server"; - } else { - $msg = $this->internalValidationMessage; - } - - if (($this->internalIsRequired == true || $this->internalValue != null)) { + $validators = parent::getValidators(); + if ($this->internalValue != null) { if ($this->internalMultiSelect) { // field may contain more than one authentication server - return array(new CsvListValidator(array('message' => $msg, - 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey])))); + $validators[] = new CsvListValidator(array('message' => $this->internalValidationMessage, + 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey]))); } else { // single authentication server selection - return array(new InclusionIn(array('message' => $msg, - 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey])))); + $validators[] = new InclusionIn(array('message' => $this->internalValidationMessage, + 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey]))); } - } else { - // empty field and not required, skip this validation. - return array(); } + + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/AutoNumberField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/AutoNumberField.php index 886848f9e..64a03ff7c 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/AutoNumberField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/AutoNumberField.php @@ -43,6 +43,11 @@ class AutoNumberField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "invalid integer value"; + /** * maximum value for this field * @var integer @@ -122,23 +127,15 @@ class AutoNumberField extends BaseField */ public function getValidators() { - if ($this->internalValidationMessage == null) { - $msg = "invalid integer value" ; - } else { - $msg = $this->internalValidationMessage; - } + $validators = parent::getValidators(); - if (($this->internalIsRequired == true || $this->internalValue != null)) { - $result = array(); - $result[] = new MinMaxValidator(array('message' => $msg, + if ($this->internalValue != null) { + $validators[] = new MinMaxValidator(array('message' => $this->internalValidationMessage, "min" => $this->minimum_value, "max" => $this->maximum_value )); - $result[] = new IntegerValidator(array('message' => $msg)); - return $result; - } else { - // empty field and not required, skip this validation. - return array(); + $validators[] = new IntegerValidator(array('message' => $this->internalValidationMessage)); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php index 0ba53943f..573a03a79 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php @@ -30,6 +30,8 @@ namespace OPNsense\Base\FieldTypes; +use Phalcon\Validation\Validator\PresenceOf; + /** * Class BaseField * @package OPNsense\Base\FieldTypes @@ -323,13 +325,30 @@ abstract class BaseField return $this->internalChildnodes; } + /** + * check if this field is unused and required + * @return bool + */ + protected function isEmptyAndRequired() + { + if ($this->internalIsRequired && ($this->internalValue == "" || $this->internalValue == null)) { + return true; + } else { + return false; + } + } + /** * return field validators for this field * @return array returns validators for this field type (empty if none) */ public function getValidators() { - return array(); + $validators = array(); + if ($this->isEmptyAndRequired()) { + $validators[] = new PresenceOf(array('message' => $this->internalValidationMessage)) ; + } + return $validators; } /** diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BooleanField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BooleanField.php index 40163f4f7..3d2eb4c79 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BooleanField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BooleanField.php @@ -41,6 +41,10 @@ class BooleanField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "value should be a boolean (0,1)"; /** * retrieve field validators for this field type @@ -51,16 +55,11 @@ class BooleanField extends BaseField // regexp for validating boolean values. $regex_mask = "/^([0,1]){1}$/"; - if ($this->internalValidationMessage == null) { - $msg = "value should be a boolean (0,1)" ; - } else { - $msg = $this->internalValidationMessage; - } - if ($this->internalIsRequired == true || $this->internalValue != null) { - return array(new Regex(array('message' => $msg,'pattern'=>trim($regex_mask)))); - } else { - // empty field and not required, skip this validation. - return array(); + $validators = parent::getValidators(); + if ($this->internalValue != null) { + $validators[] = new Regex(array('message' => $this->internalValidationMessage, + 'pattern'=>trim($regex_mask))); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/CSVListField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/CSVListField.php index a14350d04..77d13c25c 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/CSVListField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/CSVListField.php @@ -42,6 +42,11 @@ class CSVListField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "list validation error"; + /** * item separator * @var string @@ -126,15 +131,11 @@ class CSVListField extends BaseField */ public function getValidators() { - if ($this->internalValidationMessage == null) { - $msg = "list validation error" ; - } else { - $msg = $this->internalValidationMessage; - } - if (($this->internalIsRequired || $this->internalValue != null) && $this->internalMask != null) { - return array(new Regex(array('message' => $msg,'pattern'=>trim($this->internalMask)))); - } else { - return array(); + $validators = parent::getValidators(); + if ($this->internalValue != null && $this->internalMask != null) { + $validators[] = new Regex(array('message' => $this->internalValidationMessage, + 'pattern'=>trim($this->internalMask))); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/CertificateField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/CertificateField.php index e2ecd6b85..347d04bca 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/CertificateField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/CertificateField.php @@ -49,6 +49,11 @@ class CertificateField extends BaseField */ private $certificateType = "cert"; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "option not in list"; + /** * @var array collected options */ @@ -110,16 +115,11 @@ class CertificateField extends BaseField */ public function getValidators() { - if ($this->internalValidationMessage == null) { - $msg = "option not in list" ; - } else { - $msg = $this->internalValidationMessage; - } - if (($this->internalIsRequired == true || $this->internalValue != null)) { - return array(new InclusionIn(array('message' => $msg,'domain'=>array_keys(self::$internalOptionList)))); - } else { - // empty field and not required, skip this validation. - return array(); + $validators = parent::getValidators(); + if ($this->internalValue != null) { + $validators[] = new InclusionIn(array('message' => $this->internalValidationMessage, + 'domain'=>array_keys(self::$internalOptionList))); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ConfigdActionsField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ConfigdActionsField.php index 847bda400..d90a40447 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ConfigdActionsField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ConfigdActionsField.php @@ -48,6 +48,11 @@ class ConfigdActionsField extends BaseField */ private static $internalOptionList = array(); + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "please specify a valid action"; + /** * @var array filters to use on the configd selection */ @@ -151,19 +156,11 @@ class ConfigdActionsField extends BaseField */ public function getValidators() { - - if ($this->internalValidationMessage == null) { - $msg = "please specify a valid action"; - } else { - $msg = $this->internalValidationMessage; - } - - if (($this->internalIsRequired == true || $this->internalValue != null)) { - return array(new InclusionIn(array('message' => $msg, - 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey])))); - } else { - // empty field and not required, skip this validation. - return array(); + $validators = parent::getValidators(); + if ($this->internalValue != null) { + $validators[] = new InclusionIn(array('message' => $this->internalValidationMessage, + 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey]))); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/EmailField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/EmailField.php index 644ed4cf1..f345e6db4 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/EmailField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/EmailField.php @@ -42,22 +42,21 @@ class EmailField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "email address invalid"; + /** * retrieve field validators for this field type * @return array returns Email validator */ public function getValidators() { - if ($this->internalValidationMessage == null) { - $msg = "email address invalid" ; - } else { - $msg = $this->internalValidationMessage; - } - if ($this->internalIsRequired == true || $this->internalValue != null) { - return array(new Email(array('message' => $msg))); - } else { - // empty field and not required, skip this validation. - return array(); + $validators = parent::getValidators(); + if ($this->internalValue != null) { + $validators[] = new Email(array('message' => $this->internalValidationMessage)); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/IntegerField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/IntegerField.php index a534dc838..bcc080c65 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/IntegerField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/IntegerField.php @@ -42,6 +42,11 @@ class IntegerField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "invalid integer value"; + /** * maximum value for this field * @var integer @@ -94,23 +99,14 @@ class IntegerField extends BaseField */ public function getValidators() { - if ($this->internalValidationMessage == null) { - $msg = "invalid integer value" ; - } else { - $msg = $this->internalValidationMessage; - } - - if (($this->internalIsRequired == true || $this->internalValue != null)) { - $result = array(); - $result[] = new MinMaxValidator(array('message' => $msg, + $validators = parent::getValidators(); + if ($this->internalValue != null) { + $result[] = new MinMaxValidator(array('message' => $this->internalValidationMessage, "min" => $this->minimum_value, "max" => $this->maximum_value - )); - $result[] = new IntegerValidator(array('message' => $msg)); - return $result; - } else { - // empty field and not required, skip this validation. - return array(); + )); + $result[] = new IntegerValidator(array('message' => $this->internalValidationMessage)); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/InterfaceField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/InterfaceField.php index c56ffd79b..43efcbcdf 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/InterfaceField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/InterfaceField.php @@ -45,6 +45,11 @@ class InterfaceField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "please specify a valid interface"; + /** * @var array collected options */ @@ -160,30 +165,22 @@ class InterfaceField extends BaseField /** * retrieve field validators for this field type - * @return array returns Text/regex validator + * @return array returns validators */ public function getValidators() { - - if ($this->internalValidationMessage == null) { - $msg = "please specify a valid interface"; - } else { - $msg = $this->internalValidationMessage; - } - - if (($this->internalIsRequired == true || $this->internalValue != null)) { + $validators = parent::getValidators(); + if ($this->internalValue != null) { if ($this->internalMultiSelect) { // field may contain more than one interface - return array(new CsvListValidator(array('message' => $msg, - 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey])))); + $validators[] = new CsvListValidator(array('message' => $this->internalValidationMessage, + 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey]))); } else { // single interface selection - return array(new InclusionIn(array('message' => $msg, - 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey])))); + $validators[] = new InclusionIn(array('message' => $this->internalValidationMessage, + 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey]))); } - } else { - // empty field and not required, skip this validation. - return array(); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php index eed2da80f..844bb00e8 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php @@ -42,6 +42,11 @@ class ModelRelationField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "option not in list"; + /** * @var array collected options */ @@ -135,25 +140,17 @@ class ModelRelationField extends BaseField */ public function getValidators() { - if ($this->internalValidationMessage == null) { - $msg = "option not in list"; - } else { - $msg = $this->internalValidationMessage; - } - - if (($this->internalIsRequired == true || $this->internalValue != null) - ) { + $validators = parent::getValidators(); + if ($this->internalValue != null) { if (array_key_exists($this->internalCacheKey, self::$internalOptionList) && count(self::$internalOptionList[$this->internalCacheKey]) > 0) { - return array(new InclusionIn(array('message' => $msg, + return array(new InclusionIn(array('message' => $this->internalValidationMessage, 'domain' => array_keys(self::$internalOptionList[$this->internalCacheKey])))); } else { - return array(new InclusionIn(array('message' => $msg, + return array(new InclusionIn(array('message' => $this->internalValidationMessage, 'domain' => array()))); } - } else { - // empty field and not required, skip this validation. - return array(); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/NetworkField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/NetworkField.php index a85d58030..6ccd2f18d 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/NetworkField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/NetworkField.php @@ -42,6 +42,11 @@ class NetworkField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "please specify a valid network segment or address (IPv4/IPv6) "; + /** * always lowercase / trim networks * @param string $value @@ -57,23 +62,13 @@ class NetworkField extends BaseField */ public function getValidators() { - - if ($this->internalValidationMessage == null) { - $msg = "please specify a valid network segment or address (IPv4/IPv6) " ; - } else { - $msg = $this->internalValidationMessage; - } - - if (($this->internalIsRequired == true || $this->internalValue != null)) { - if ($this->internalValue == "any") { + $validators = parent::getValidators(); + if ($this->internalValue != null) { + if ($this->internalValue != "any") { // accept any as target - return array(); - } else { - return array(new NetworkValidator(array('message' => $msg))); + $validators[] = new NetworkValidator(array('message' => $this->internalValidationMessage)); } - } else { - // empty field and not required, skip this validation. - return array(); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/OptionField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/OptionField.php index 78ea6b462..7e52c23a7 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/OptionField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/OptionField.php @@ -42,6 +42,11 @@ class OptionField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "option not in list"; + /** * @var array valid options for this list */ @@ -92,22 +97,18 @@ class OptionField extends BaseField return $result; } + /** * retrieve field validators for this field type * @return array returns InclusionIn validator */ public function getValidators() { - if ($this->internalValidationMessage == null) { - $msg = "option not in list" ; - } else { - $msg = $this->internalValidationMessage; - } - if (($this->internalIsRequired == true || $this->internalValue != null)) { - return array(new InclusionIn(array('message' => $msg,'domain'=>array_keys($this->internalOptionList)))); - } else { - // empty field and not required, skip this validation. - return array(); + $validators = parent::getValidators(); + if ($this->internalValue != null) { + $validators[] = new InclusionIn(array('message' => $this->internalValidationMessage, + 'domain'=>array_keys($this->internalOptionList))); } + return $validators; } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/TextField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/TextField.php index a6fe77ba8..bf26675da 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/TextField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/TextField.php @@ -42,6 +42,11 @@ class TextField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "text validation error"; + /** * @var null|string validation mask (regex) */ @@ -62,16 +67,12 @@ class TextField extends BaseField */ public function getValidators() { - $validators = array(); - if ($this->internalValidationMessage == null) { - $msg = "text validation error" ; - } else { - $msg = $this->internalValidationMessage; - } - if ($this->internalIsRequired && empty($this->internalValue)) { - $validators[] = new PresenceOf(array('message' => $msg)) ; - } elseif ($this->internalValue != null && $this->internalMask != null) { - $validators[] = new Regex(array('message' => $msg,'pattern'=>trim($this->internalMask))); + $validators = parent::getValidators(); + if ($this->internalValue != null) { + if ($this->internalValue != null && $this->internalMask != null) { + $validators[] = new Regex(array('message' => $this->internalValidationMessage, + 'pattern'=>trim($this->internalMask))); + } } return $validators; } diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/UrlField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/UrlField.php index a39bc7f0a..86ed94646 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/UrlField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/UrlField.php @@ -42,22 +42,21 @@ class UrlField extends BaseField */ protected $internalIsContainer = false; + /** + * @var string default validation message string + */ + protected $internalValidationMessage = "invalid url"; + /** * retrieve field validators for this field type * @return array returns Url validator */ public function getValidators() { - if ($this->internalValidationMessage == null) { - $msg = "invalid url" ; - } else { - $msg = $this->internalValidationMessage; - } - if ($this->internalIsRequired == true || $this->internalValue != null) { - return array(new UrlValidator(array('message' => $msg))); - } else { - // empty field and not required, skip this validation. - return array(); + $validators = parent::getValidators(); + if ($this->internalValue != null) { + $validators[] = new UrlValidator(array('message' => $this->internalValidationMessage)); } + return $validators; } }