diff --git a/airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php b/airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php new file mode 100644 index 000000000..2f89fe667 --- /dev/null +++ b/airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php @@ -0,0 +1,62 @@ + 'Value is required and can\'t be empty' + ); + + protected $_fieldValues; + + /** + * Constructs a new ConditionalNotEmpty validator. + * + * @param array $fieldValues - the names and expected values of the fields we're depending on; + * E.g., if we have a field that should only be validated when two other + * fields PARENT_1 and PARENT_2 have values of '1' and '0' respectively, then + * $fieldValues should contain ('PARENT_1'=>'1', 'PARENT_2'=>'0') + */ + public function __construct($fieldValues) + { + $this->_fieldValues = $fieldValues; + } + + /** + * Implements Zend_Validate_Abstract. + * Given names and expected values of the fields we're depending on ($_fieldValues), + * this function returns true if the expected values doesn't match the actual user input, + * or if $value is not empty. Returns false otherwise. + * + * @param String $value - this field's value + * @param array $context - names and values of the rest of the fields in this form + * @return boolean - true if valid; false otherwise + */ + public function isValid($value, $context = null) + { + if ($value != "") { + return true; + } + + if (is_array($context)) { + foreach($this->_fieldValues as $fieldName=>$fieldValue) { + if (!isset($context[$fieldName]) || $context[$fieldName] != $fieldValue) { + return true; + } + } + } elseif (is_string($context)) { + if (!isset($context) || $context != $fieldValue) { + return true; + } + } + + $this->_error(self::KEY_IS_EMPTY); + return false; + } +} + +?>