From cc5f5f05eee8de911796cf0a10e9fae2c86ab122 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Sun, 5 Aug 2018 17:00:52 +0200 Subject: [PATCH] MVC, handle validations. remove duplicate messages, when a fieldtype validates on multiple conditions, there may be duplicate texts in the validation output. for example: ``` $validators[] = new MinMaxValidator(array('message' => $this->internalValidationMessage, "min" => $this->minimum_value, "max" => $this->maximum_value )); $validators[] = new Numericality(array('message' => $this->internalValidationMessage)); ``` Will both fail when `122.99XX` is inserted, raising `internalValidationMessage` message twice --- .../OPNsense/Base/ApiMutableModelControllerBase.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php b/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php index 4cd619bf7..9abe9f5f0 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php @@ -154,14 +154,17 @@ abstract class ApiMutableModelControllerBase extends ApiControllerBase } else { $fieldnm = $resultPrefix.".".$msg->getField(); } + $msgText = $msg->getMessage(); if (empty($result["validations"][$fieldnm])) { - $result["validations"][$fieldnm] = $msg->getMessage(); + $result["validations"][$fieldnm] = $msgText; } elseif (!is_array($result["validations"][$fieldnm])) { // multiple validations, switch to array type output $result["validations"][$fieldnm] = array($result["validations"][$fieldnm]); - $result["validations"][$fieldnm][] = $msg->getMessage(); - } else { - $result["validations"][$fieldnm][] = $msg->getMessage(); + if (!in_array($msgText, $result["validations"][$fieldnm])) { + $result["validations"][$fieldnm][] = $msgText; + } + } elseif (!in_array($msgText, $result["validations"][$fieldnm])) { + $result["validations"][$fieldnm][] = $msgText; } } return $result;