Commit 7b63bf0e authored by Ad Schellevis's avatar Ad Schellevis

(mvc) extend InterfaceField type to support multiple interface selection

parent 5bf6420b
...@@ -29,8 +29,9 @@ ...@@ -29,8 +29,9 @@
*/ */
namespace OPNsense\Base\FieldTypes; namespace OPNsense\Base\FieldTypes;
use OPNsense\Core\Config;
use Phalcon\Validation\Validator\InclusionIn; use Phalcon\Validation\Validator\InclusionIn;
use OPNsense\Core\Config;
use OPNsense\Base\Validators\CsvListValidator;
/** /**
* Class InterfaceField field type to select usable interfaces, currently this is kind of a backward compatibility * Class InterfaceField field type to select usable interfaces, currently this is kind of a backward compatibility
...@@ -59,6 +60,11 @@ class InterfaceField extends BaseField ...@@ -59,6 +60,11 @@ class InterfaceField extends BaseField
*/ */
private $internalCacheKey = '*'; private $internalCacheKey = '*';
/**
* @var bool field may contain multiple interfaces at once
*/
private $internalMultiSelect = false;
/** /**
* generate validation data (list of interfaces and well know ports) * generate validation data (list of interfaces and well know ports)
*/ */
...@@ -113,6 +119,19 @@ class InterfaceField extends BaseField ...@@ -113,6 +119,19 @@ class InterfaceField extends BaseField
} }
} }
/**
* select if multiple interfaces may be selected at once
* @param $value boolean value 0/1
*/
public function setmultiple($value)
{
if ($value == 1) {
$this->internalMultiSelect = true;
} else {
$this->internalMultiSelect = false;
}
}
/** /**
* get valid options, descriptions and selected value * get valid options, descriptions and selected value
* @return array * @return array
...@@ -125,8 +144,10 @@ class InterfaceField extends BaseField ...@@ -125,8 +144,10 @@ class InterfaceField extends BaseField
$result[""] = array("value"=>"none", "selected" => 0); $result[""] = array("value"=>"none", "selected" => 0);
} }
// explode interfaces
$interfaces = explode(',', $this->internalValue);
foreach (self::$internalOptionList[$this->internalCacheKey] as $optKey => $optValue) { foreach (self::$internalOptionList[$this->internalCacheKey] as $optKey => $optValue) {
if ($optKey == $this->internalValue) { if (in_array($optKey, $interfaces)) {
$selected = 1; $selected = 1;
} else { } else {
$selected = 0; $selected = 0;
...@@ -134,8 +155,6 @@ class InterfaceField extends BaseField ...@@ -134,8 +155,6 @@ class InterfaceField extends BaseField
$result[$optKey] = array("value"=>$optValue, "selected" => $selected); $result[$optKey] = array("value"=>$optValue, "selected" => $selected);
} }
return $result; return $result;
} }
...@@ -152,8 +171,15 @@ class InterfaceField extends BaseField ...@@ -152,8 +171,15 @@ class InterfaceField extends BaseField
} }
if (($this->internalIsRequired == true || $this->internalValue != null)) { if (($this->internalIsRequired == true || $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]))));
} else {
// single interface selection
return array(new InclusionIn(array('message' => $msg, return array(new InclusionIn(array('message' => $msg,
'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey])))); 'domain'=>array_keys(self::$internalOptionList[$this->internalCacheKey]))));
}
} else { } else {
// empty field and not required, skip this validation. // empty field and not required, skip this validation.
return array(); return array();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment