www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > core/assistant/lib/BaseValidator.php

    <?php
class BaseValidator
{
	var $_sys, $_db, $_tbpre;
	
	function	BaseValidator($sys)
	{
		$this->_sys = $sys;
		$this->_db  = $sys->database();
		
		$this->_tbpre = isset($GLOBALS['_tbpre']) ? $GLOBALS['_tbpre'] : null;		
		if (!$this->_tbpre && defined('DB_PREFIX')) $this->_tbpre = DB_PREFIX;		
	}
	
	function validateInsertBefore(&$row)
	{
		return true;
	}
	
	function validateInsertAfter(&$row)
	{	
		return true;	
	}
	
	function validateUpdateBefore(&$row)
	{
		return true;
	}
	
	function validateUpdateAfter(&$row)
	{		
		return true;
	}
	
	function validateDeleteBefore(&$row)
	{
		return true;
	}
	
	function validateDeleteAfter(&$row)
	{		
		return true;
	}
	
	function loadValidators($dir, $table, $sys)
	{
		$validators = array();		
		foreach (as_find_files($dir, '/'.$table.'.([a-zA-Z0-9_]*).validator.php/') as $file => $matches)
		{
			include_once($dir.$file);
			$clsname = $table.'_'.$matches[1].'Validator';
			if (class_exists($clsname))
			{				
				$cls = new $clsname($sys);
				if (is_a($cls, 'BaseValidator'))
				{
					$validators[] = $cls;
				}
			}	
		}
		return $validators;
	}
	
	function runValidateBefore($validators, $action, &$row)
	{		
		foreach ($validators as $v)
		{
			LogUtils::log_str('validate before '.$action.':'.get_class($v));	
			switch ($action)
			{
				case 'insert': 
					if (!$v->ValidateInsertBefore($row)) return false;
					break;
				case 'update': 
					if (!$v->ValidateUpdateBefore($row)) return false; 
					break;
				case 'delete': 
					if (!$v->ValidateDeleteBefore($row)) return false; 
					break;
			}
		}
		
		return true;
	}
	
	function runValidateAfter($validators, $action, &$row)
	{
		foreach ($validators as $v)
		{
			LogUtils::log_str('validate after '.$action.':'.get_class($v));	
			switch ($action)
			{
				case 'insert': 
					if (!$v->ValidateInsertAfter($row)) return false;
					break;
				case 'update': 
					if (!$v->ValidateUpdateAfter($row)) return false; 
					break;
				case 'delete': 
					if (!$v->ValidateDeleteAfter($row)) return false; 
					break;
			}			
		}
		
		return true;
	}
}

?>