From c2ea9aa3039eb4d24ba53a7aa2190642150f20eb Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Tue, 13 Feb 2024 18:16:32 +0100 Subject: [PATCH] mvc: Phalcon framework dependency (https://github.com/opnsense/core/issues/6389) Add simple Message class and remove "Messages" dependancy in Validation.php, which should be backwards compatible with all existing validations. By moving \Phalcon\Filter\Validation() into validate() we're making the validation paths more explicit, if an objects implements ValidatorInterface, it uses phalcon, otherwise it's a simple BaseValidator passing messages back to $this->appendMessage(). The original phalcon Message class has additional fields we don't use, we only use fieldname for tracking purposes and the message itself. --- .../models/OPNsense/Base/Messages/Message.php | 89 +++++++++++++++++++ .../app/models/OPNsense/Base/Validation.php | 31 +++---- 2 files changed, 102 insertions(+), 18 deletions(-) create mode 100644 src/opnsense/mvc/app/models/OPNsense/Base/Messages/Message.php diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/Messages/Message.php b/src/opnsense/mvc/app/models/OPNsense/Base/Messages/Message.php new file mode 100644 index 000000000..ab1f36f45 --- /dev/null +++ b/src/opnsense/mvc/app/models/OPNsense/Base/Messages/Message.php @@ -0,0 +1,89 @@ +message = $message; + $this->field = $field; + } + + /** + * Magic __toString method returns verbose message + */ + public function __toString() + { + return $this->message; + } + + /** + * @return string + */ + public function getField() + { + return $this->field; + } + + /** + * @return string + */ + public function getMessage() + { + return $this->message; + } + + /** + * Sets field name related to message + */ + public function setField($field) + { + $this->field = $field; + return $this; + } + + /** + * Sets verbose message + */ + public function setMessage($message) + { + $this->message = $message; + return $this; + } +} diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/Validation.php b/src/opnsense/mvc/app/models/OPNsense/Base/Validation.php index bb665ca28..dc578e50c 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/Validation.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/Validation.php @@ -28,20 +28,16 @@ namespace OPNsense\Base; -use Phalcon\Messages\Messages; - class Validation { private $validators = []; private $messages = null; - private $phalcon_validation = null; private $data = []; public function __construct($validators = []) { $this->validators = $validators; - $this->phalcon_validation = new \Phalcon\Filter\Validation(); - $this->messages = new Messages(); + $this->messages = []; $this->data = []; } @@ -51,7 +47,7 @@ class Validation */ public function appendMessage($message) { - $this->messages->appendMessage($message); + $this->messages[] = $message; } /** @@ -64,14 +60,10 @@ class Validation */ public function add($key, $validator) { - if (is_a($validator, "OPNsense\\Base\\BaseValidator")) { - if (empty($this->validators[$key])) { - $this->validators[$key] = []; - } - $this->validators[$key][] = $validator; - } else { - $this->phalcon_validation->add($key, $validator); + if (empty($this->validators[$key])) { + $this->validators[$key] = []; } + $this->validators[$key][] = $validator; return $this; } @@ -82,17 +74,20 @@ class Validation */ public function validate($data) { - $validatorData = $this->validators; $this->data = $data; - - foreach ($validatorData as $field => $validators) { + $phalcon_validation = new \Phalcon\Filter\Validation(); + foreach ($this->validators as $field => $validators) { foreach ($validators as $validator) { - $validator->validate($this, $field); + if (is_a($validator, 'Phalcon\Filter\Validation\ValidatorInterface')) { + $phalcon_validation->add($field, $validator); + } else { + $validator->validate($this, $field); + } } } // XXX: temporary dual validation - $phalconMsgs = $this->phalcon_validation->validate($data); + $phalconMsgs = $phalcon_validation->validate($data); if (!empty($phalconMsgs)) { foreach ($phalconMsgs as $phalconMsg) { $this->messages[] = $phalconMsg;