HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/PvdBoogaard/indoorski.nl/backup/oude-site/cms/lib/Interspire/Validator.php
<?php

/**
 * 
 */

/**
 * 
 */
class Interspire_Validator
{
	private
		/**
		 * 
		 */
		$_values = array(),
		
		/**
		 * 
		 */
		$_validators = array(),
		
		/**
		 * 
		 */
		$_errors = array();
	
	
	
	/**
	 * 
	 */
	public function __construct($post = null, $validators = null)
	{
		$this->addValues($post);
		$this->addValidators($validators);
	}
	
	/**
	 * 
	 */
	public function addValues($values, $value = null)
	{
		// if there are fields
		if ($values) {
			// allow an array as the first argument
			if (is_string($values)) {
				$values = array($values => $value);
			}
			
			// foreach of the fields, set its name as the key
			// and its value as the value
			foreach ($values as $valueId => $value) {
				$this->_values[$valueId] = $value;
			}
		}
		
		return $this;
	}
	
	/**
	 * 
	 */
	public function removeValues($valueNames)
	{
		// remove each field passed
		foreach ((array) $valueNames as $valueName) {
			unset($this->_values[$valueName]);
		}
		
		return $this;
	}
	
	/**
	 * 
	 */
	public function addValidators($values, $validators = null)
	{
		// if there are fields
		if ($values) {
			// allow an array as the first argument
			if (is_string($values)) {
				$values = array($values => $validators);
			}
			
			// foreach of the fields, add their corresponding rule
			foreach ($values as $valueId => $validators) {
				// strict coding
				if (!isset($this->_validators[$valueId])) {
					$this->_validators[$valueId] = array();
				}
				
				// accept a single instance or an array of instances
				if (!is_array($validators)) {
					$validators = array($validators);
				}
				
				// for each rule, add it to the field
				foreach ($validators as $validator) {
					$this->_validators[$valueId][] = $validator;
				}
			}
		}
		
		return $this;
	}
	
	/**
	 * 
	 */
	public function removeValidators($values, $validator = null)
	{
		// accept both 2 arguments or an array as the first
		if (is_string($values)) {
			$values = array($values => $validator);
		}
		
		// go through each field passed, and remove the validation rules specified
		foreach ($values as $valueId => $validator) {
			// if the rule is null, then we will remove all validation rules for the current field
			if (is_null($validator)) {
				unset($this->_values[$valueId]);
				
				continue;
			}
			
			// otherwise loop through each validation rule set and remove it if it is
			// an isntance of the classname passed
			foreach ($this->_validators[$valueId] as $valueRuleKey => $valueRuleInstanceName) {
				if ($valueRuleInstanceName instanceof $validator) {
					unset($this->_validators[$valueId][$k]);
				}
			}
		}
	}
	
	/**
	 * Retrieves the errors. The array key contains the valueId/fieldName in which
	 * the error was thrown on and the value is an array of all the errors on that
	 * field. If a valueId is supplied, then only the error messages for that valueId
	 * are returned.
	 * 
	 * @return Array
	 * 
	 * @param $valueId[optional] The id of the field/value of the error messages to retrieve.
	 */
	public function getErrors($valueId = null)
	{
		// if set, return a single field's errors
		if ($valueId) {
			return $this->_errors[$valueId];
		}
		
		// otherwise, return all errors
		return $this->_errors;
	}
	
	/**
	 * Returns a flat array of all of the error messages
	 */
	public function getErrorMessages()
	{
		$errorMessages = array();
		
		foreach ($this->_errors as $msgs) {
			foreach ($msgs as $msg) {
				$errorMessages[] = $msg;
			}
		}
		
		return $errorMessages;
	}
	
	/**
	 * Validates the passed in fields. If validated, it can be called again to revalidate the
	 * fields if they were since modified.
	 */
	public function validate()
	{
		// reset the errors
		$this->_errors = array();
		
		// validate each rule against each field's value
		foreach ($this->_validators as $valueId => $validators) {
			foreach ($validators as $validator) {
				$validator->value = $this->_values[$valueId];
				
				if (!$validator->isValid()) {
					// if not already an array, set the fields errors to an array
					if (!isset($this->_errors[$valueId])) {
						$this->_errors[$valueId] = array();
					}
					
					// set the error message
					$this->_errors[$valueId][] = $validator->errorMessage;
				}
			}
		}
		
		return $this;
	}
	
	/**
	 * Returns whether a specific field is valid or not based on the most recent call to Interspire_Validation::validate().
	 */
	public function isValid($valueId)
	{
		return !isset($this->_errors[$valueId]);
	}
}