1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135:
<?php
namespace MvcCore\Ext\Forms\Validators;
class ValueInOptions
extends \MvcCore\Ext\Forms\Validator
implements \MvcCore\Ext\Forms\Fields\IMultiple,
\MvcCore\Ext\Forms\Fields\IOptions {
use \MvcCore\Ext\Forms\Field\Props\Multiple;
use \MvcCore\Ext\Forms\Field\Props\Options;
const ERROR_VALID_OPTION = 0;
protected static $errorMessages = [
self::ERROR_VALID_OPTION => "Field '{0}' requires a valid option.",
];
protected static $fieldSpecificProperties = [
'multiple' => NULL,
'options' => NULL,
];
public function Validate ($rawSubmittedValue) {
$submittedValue = $this->getSubmittedValueCorrectType($rawSubmittedValue);
if (
($this->multiple && count($submittedValue) === 0) ||
(!$this->multiple && $submittedValue === NULL)
) return $submittedValue;
$result = $this->completeSafeValueByOptions($submittedValue);
if (
($this->multiple && count($result) !== count($submittedValue)) ||
(!$this->multiple && $result === NULL && $rawSubmittedValue !== NULL)
)
$this->field->AddValidationError(
static::GetErrorMessage(self::ERROR_VALID_OPTION)
);
return $result;
}
protected function completeSafeValueByOptions ($submittedValue) {
if ($this->field instanceof \MvcCore\Ext\Forms\Fields\IOptions) {
$flattenOptions = $this->field->GetFlattenOptions();
} else {
$flattenOptions = $this->GetFlattenOptions($this->options);
}
if ($this->multiple) {
$result = [];
foreach ($submittedValue as & $submittedValueItem) {
if (array_key_exists($submittedValueItem, $flattenOptions))
$result[] = $submittedValueItem;
}
} else {
$result = NULL;
if (array_key_exists($submittedValue, $flattenOptions))
$result = $submittedValue;
}
return $result;
}
protected function getSubmittedValueCorrectType ($rawSubmittedValue) {
$rawSubmittedValueIsArray = is_array($rawSubmittedValue);
if ($this->multiple) {
if ($rawSubmittedValueIsArray) {
return $rawSubmittedValue;
} else if ($rawSubmittedValue === NULL) {
return [];
} else {
$rawSubmittedValue = trim((string) $rawSubmittedValue);
return mb_strlen($rawSubmittedValue) > 0
? [$rawSubmittedValue]
: [];
}
} else {
if ($rawSubmittedValueIsArray) {
return isset($rawSubmittedValue[0]) && mb_strlen(trim((string) $rawSubmittedValue[0])) > 0
? $rawSubmittedValue[0]
: NULL;
} else if ($rawSubmittedValue === NULL) {
return NULL;
} else {
$rawSubmittedValue = trim((string) $rawSubmittedValue);
return mb_strlen($rawSubmittedValue) > 0
? $rawSubmittedValue
: NULL;
}
}
}
}