sintonia/legacy/application/forms/customvalidators/ConditionalNotEmpty.php

71 lines
2.4 KiB
PHP

<?php
/**
* Check if a field is empty but only when specific fields have specific values.
*
* WARNING: you need to include this file directly when using it, it clashes with the
* way zf1 Zend_Loader_PluginLoader expects it to be found. Another way around this
* might be to rename the class and have the new name get loaded proper.
*
* Since this is only getting used in a few places I am re-adding the
* require_once there to get this fixed for now.
*/
class ConditionalNotEmpty extends Zend_Validate_Abstract
{
public const KEY_IS_EMPTY = 'keyIsEmpty';
protected $_messageTemplates;
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;
$this->_messageTemplates = [
self::KEY_IS_EMPTY => _("Value is required and can't be empty"),
];
}
/**
* 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 bool - 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;
}
}