<?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; } }