From 4f871e40aa5c38984f18f09a06789bca46e31ddf Mon Sep 17 00:00:00 2001 From: Frank Wall Date: Wed, 30 Mar 2016 18:19:55 +0200 Subject: [PATCH] support multiple values in ModelRelationField, fixes #868 --- .../Base/FieldTypes/ModelRelationField.php | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) 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 7aefd8623..b10502bf1 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/ModelRelationField.php @@ -30,6 +30,7 @@ namespace OPNsense\Base\FieldTypes; use Phalcon\Validation\Validator\InclusionIn; +use OPNsense\Base\Validators\CsvListValidator; /** * Class ModelRelationField defines a relation to another entity within the model, acts like a select item. @@ -42,6 +43,11 @@ class ModelRelationField extends BaseField */ protected $internalIsContainer = false; + /** + * @var bool field may contain multiple data nodes at once + */ + private $internalMultiSelect = false; + /** * @var string default validation message string */ @@ -107,6 +113,19 @@ class ModelRelationField extends BaseField } } + /** + * select if multiple data nodes may be selected at once + * @param $value boolean value Y/N + */ + public function setmultiple($value) + { + if (trim(strtoupper($value)) == "Y") { + $this->internalMultiSelect = true; + } else { + $this->internalMultiSelect = false; + } + } + /** * get valid options, descriptions and selected value * @return array @@ -121,8 +140,9 @@ class ModelRelationField extends BaseField $result[""] = array("value"=>"none", "selected" => 0); } + $datanodes = explode(',', $this->internalValue); foreach (self::$internalOptionList[$this->internalCacheKey] as $optKey => $optValue) { - if ($optKey == $this->internalValue && $this->internalValue != null) { + if (in_array($optKey, $datanodes)) { $selected = 1; } else { $selected = 0; @@ -142,14 +162,9 @@ class ModelRelationField extends BaseField { $validators = parent::getValidators(); if ($this->internalValue != null) { - if (array_key_exists($this->internalCacheKey, self::$internalOptionList) && - count(self::$internalOptionList[$this->internalCacheKey]) > 0) { - $validators[] = new InclusionIn(array('message' => $this->internalValidationMessage, - 'domain' => array_keys(self::$internalOptionList[$this->internalCacheKey]))); - } else { - $validators[] = new InclusionIn(array('message' => $this->internalValidationMessage, - 'domain' => array())); - } + // field may contain more than one entries + $validators[] = new CsvListValidator(array('message' => $this->internalValidationMessage, + 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey]))); } return $validators; }