663 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			663 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * Project:     SmartyValidate: Form Validator for the Smarty Template Engine
 | |
|  * File:        SmartyValidate.class.php
 | |
|  * Author:      Monte Ohrt <monte at newdigitalgroup dot com>
 | |
|  * Website:     http://www.phpinsider.com/php/code/SmartyValidate/
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2.1 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * This library is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, write to the Free Software
 | |
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
|  *
 | |
|  * @link http://www.phpinsider.com/php/code/SmartyValidate/
 | |
|  * @copyright 2001-2005 New Digital Group, Inc.
 | |
|  * @author Monte Ohrt <monte at newdigitalgroup dot com>
 | |
|  * @package SmartyValidate
 | |
|  * @version 2.8
 | |
|  */
 | |
| 
 | |
| if(!defined('SMARTY_VALIDATE_DEFAULT_FORM'))
 | |
|     define('SMARTY_VALIDATE_DEFAULT_FORM', 'default');
 | |
| 
 | |
| class SmartyValidate {
 | |
| 
 | |
|     /**
 | |
|      * Class Constructor
 | |
|      */
 | |
|     function SmartyValidate() { }
 | |
| 
 | |
|     
 | |
|     /**
 | |
|      * initialize the validator
 | |
|      *
 | |
|      * @param obj    $smarty the smarty object
 | |
|      * @param string $reset reset the default form?
 | |
|      */
 | |
|     function connect(&$smarty, $reset = false) {
 | |
|         if(SmartyValidate::is_valid_smarty_object($smarty)) {
 | |
|             SmartyValidate::_object_instance('Smarty', $smarty);
 | |
|             SmartyValidate::register_form(SMARTY_VALIDATE_DEFAULT_FORM, $reset);
 | |
|         } else {
 | |
|             trigger_error("SmartyValidate: [connect] I need a valid Smarty object.");
 | |
|             return false;
 | |
|         }
 | |
|     }   
 | |
| 
 | |
|     /**
 | |
|      * test if object is a valid smarty object
 | |
|      *
 | |
|      * @param obj    $smarty_obj the smarty object
 | |
|      */
 | |
|     function is_valid_smarty_object(&$smarty_obj) {
 | |
|         return (is_object($smarty_obj) && (strtolower(get_class($smarty_obj)) == 'smarty' || is_subclass_of($smarty_obj, 'smarty')));
 | |
|         
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * clear the entire SmartyValidate session
 | |
|      *
 | |
|      */
 | |
|     function disconnect() {
 | |
|         unset($_SESSION['SmartyValidate']);
 | |
|         SmartyValidate::_object_instance('-', $_dummy);
 | |
|     }    
 | |
|             
 | |
|     /**
 | |
|      * initialize the session data
 | |
|      *
 | |
|      * @param string $form the name of the form being validated
 | |
|      * @param string $reset reset an already registered form?
 | |
|      */
 | |
|     function register_form($form, $reset = false) {
 | |
|         if(SmartyValidate::is_registered_form($form) && !$reset) {
 | |
|             return false;
 | |
|         } else {
 | |
|             $_SESSION['SmartyValidate'][$form] = array();
 | |
|             $_SESSION['SmartyValidate'][$form]['registered_funcs']['criteria'] = array();
 | |
|             $_SESSION['SmartyValidate'][$form]['registered_funcs']['transform'] = array();
 | |
|             $_SESSION['SmartyValidate'][$form]['validators'] = array();
 | |
|             $_SESSION['SmartyValidate'][$form]['is_error'] = false;
 | |
|             $_SESSION['SmartyValidate'][$form]['is_init'] = true;
 | |
|             SmartyValidate::_smarty_assign();
 | |
|             return true;
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * unregister a form from the session
 | |
|      *
 | |
|      * @param string $form the name of the form being validated
 | |
|      */
 | |
|     function unregister_form($form) {
 | |
|         unset($_SESSION['SmartyValidate'][$form]);
 | |
|     }    
 | |
|     
 | |
|     /**
 | |
|      * test if the session data is initialized
 | |
|      *
 | |
|      * @param string $form the name of the form being validated
 | |
|      */
 | |
|     function is_registered_form($form = SMARTY_VALIDATE_DEFAULT_FORM) {    
 | |
|         return isset($_SESSION['SmartyValidate'][$form]);
 | |
|     }
 | |
|     
 | |
|     function _failed_fields(&$formvars, $form = SMARTY_VALIDATE_DEFAULT_FORM, $revalidate = false)
 | |
|     {
 | |
|         // keep track of failed fields
 | |
|         static $_failed_fields = array();
 | |
|         
 | |
|         if(isset($_failed_fields[$form]) && !$revalidate) {
 | |
|             // already validated the form
 | |
|             return $_failed_fields[$form];
 | |
|         }
 | |
|         
 | |
|         // failed fields for current pass
 | |
|         $_ret = array(); 
 | |
|         
 | |
|         $_sess =& $_SESSION['SmartyValidate'][$form]['validators'];
 | |
|         
 | |
|         foreach($_sess as $_key => $_val) {
 | |
|             
 | |
|             if(isset($_SESSION['SmartyValidate'][$form]['page'])
 | |
|                 && $_sess[$_key]['page'] != $_SESSION['SmartyValidate'][$form]['page']) {
 | |
|                 // not on page, do not validate
 | |
|                 continue;
 | |
|             }
 | |
| 
 | |
|             $_full_field = $_field = $_sess[$_key]['field'];
 | |
|             $_field_key = null;
 | |
|             $_empty = isset($_sess[$_key]['empty']) ? $_sess[$_key]['empty'] : false;
 | |
|             $_message = isset($_sess[$_key]['message']) ? $_sess[$_key]['message'] : null;
 | |
| 
 | |
|             if(is_array($_ret) && in_array($_full_field, $_ret)) {
 | |
|                 // already failed, skip this test
 | |
|                 continue;   
 | |
|             }
 | |
|             
 | |
|             // field is name-keyed array, pull it apart
 | |
|             if(($_lpos = strpos($_field, '[')) !== false && ($_rpos = strpos($_field, ']')) !== false) {
 | |
|                 if (($_keylen = ($_rpos - $_lpos - 1)) > 0) {
 | |
|                     $_field_key = substr($_field, $_lpos+1, $_keylen);
 | |
|                 }
 | |
|                 $_field = substr($_field, 0, $_lpos);                    
 | |
|             }
 | |
|             
 | |
|             if(isset($_sess[$_key]['transform'])) {
 | |
|                 $_trans_names = preg_split('![\s,]+!', $_sess[$_key]['transform'], -1, PREG_SPLIT_NO_EMPTY);
 | |
|                 if($_sess[$_key]['trim']) {
 | |
|                     // put trim on front of transform array
 | |
|                     array_unshift($_trans_names, 'trim');
 | |
|                 }
 | |
|                 foreach($_trans_names as $_trans_name) {
 | |
|                     if(substr($_trans_name,0,1) == '@') {
 | |
|                         // transformation will apply to entire array
 | |
|                         $_trans_on_array = true;   
 | |
|                         $_trans_name = substr($_trans_name,1);   
 | |
|                     } else {
 | |
|                         // transformation will apply to each array element
 | |
|                         $_trans_on_array = false;
 | |
|                     }
 | |
|                                         
 | |
|                     if(strpos($_trans_name,':') !== false) {
 | |
|                         // transform has parameters, put them in $formvars
 | |
|                         $_trans_parts = explode(':', $_trans_name);
 | |
|                         $_trans_name = array_shift($_trans_parts);
 | |
|                         $_trans_index = 2;
 | |
|                         foreach($_trans_parts as $_trans_param) {
 | |
|                             $_trans_field = $_trans_name . $_trans_index;
 | |
|                             $_sess[$_key][$_trans_field] = $_trans_param; 
 | |
|                             $_trans_index++;
 | |
|                         }
 | |
|                     }
 | |
|                     
 | |
|                     if(is_array($formvars[$_field]) && !$_trans_on_array) {
 | |
|                         if(isset($_field_key)) {
 | |
|                             // only apply to given key
 | |
|                             if(($_new_val = SmartyValidate::_execute_transform($_trans_name, $formvars[$_field][$_field_key], $_sess[$_key], $formvars, $form)) !== false)
 | |
|                                 $formvars[$_field][$_field_key] = $_new_val;
 | |
|                             
 | |
|                         } else {
 | |
|                             // apply to all keys
 | |
|                             for($_x = 0, $_y = count($formvars[$_field]); $_x < $_y; $_x++) {
 | |
|                                 if(($_new_val = SmartyValidate::_execute_transform($_trans_name, $formvars[$_field][$_x], $_sess[$_key], $formvars, $form)) !== false)
 | |
|                                     $formvars[$_field][$_x] = $_new_val;
 | |
|                             }
 | |
|                         }
 | |
|                     } else {
 | |
|                          if(($_new_val = SmartyValidate::_execute_transform($_trans_name, $formvars[$_field], $_sess[$_key], $formvars, $form)) !== false)
 | |
|                              $formvars[$_field] = $_new_val;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if((!isset($formvars[$_field]) && (!isset($_FILES[$_field])))
 | |
|                 || (
 | |
|                     ((is_array($formvars[$_field]) && count($_field) == 0) || (is_string($formvars[$_field]) && strlen($formvars[$_field]) == 0)) && $_empty
 | |
|                    )
 | |
|                 ) {
 | |
|                 // field must exist, or else fails automatically
 | |
|                 $_sess[$_key]['valid'] = $_empty;
 | |
|             } else {
 | |
|                 if(substr($_val['criteria'],0,1) == '@') {
 | |
|                     // criteria will apply to entire array or given key
 | |
|                     $_criteria_on_array = true;   
 | |
|                     $_val['criteria'] = substr($_val['criteria'],1);
 | |
|                 } else {
 | |
|                     // criteria will apply to each array element
 | |
|                     $_criteria_on_array = false;
 | |
|                 }
 | |
|                 
 | |
|                 if(is_array($formvars[$_field]) && !$_criteria_on_array) {
 | |
|                     if(isset($_field_key)) {
 | |
|                         // only apply to given key
 | |
|                         $_sess[$_key]['valid'] = SmartyValidate::_is_valid_criteria($_val['criteria'], $formvars[$_field][$_field_key], $_empty, $_sess[$_key], $formvars, $form);
 | |
|                     } else {
 | |
|                         // apply to all keys
 | |
|                         for($_x = 0, $_y = count($formvars[$_field]); $_x < $_y; $_x++) {
 | |
|                             if(! $_sess[$_key]['valid'] = SmartyValidate::_is_valid_criteria($_val['criteria'], $formvars[$_field][$_x], $_empty, $_sess[$_key], $formvars, $form)) {
 | |
|                                 // found invalid array element, exit for loop
 | |
|                                 break;
 | |
|                             }   
 | |
|                         }
 | |
|                     }
 | |
|                 } else {
 | |
|                     $_sess[$_key]['valid'] = SmartyValidate::_is_valid_criteria($_val['criteria'], $formvars[$_field], $_empty, $_sess[$_key], $formvars, $form);
 | |
|                 }
 | |
|             }
 | |
|             
 | |
|             if(!$_sess[$_key]['valid']) {
 | |
|                 $_ret[] = $_full_field;
 | |
|                 if(isset($_sess[$_key]['halt']) && $_sess[$_key]['halt'])
 | |
|                     break;
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         $_failed_fields[$form] = $_ret;
 | |
|         
 | |
|         return $_ret;
 | |
|     }    
 | |
|             
 | |
|     /**
 | |
|      * validate the form
 | |
|      *
 | |
|      * @param string $formvars the array of submitted for variables
 | |
|      * @param string $form the name of the form being validated
 | |
|      */
 | |
|     function is_valid(&$formvars, $form = SMARTY_VALIDATE_DEFAULT_FORM) {
 | |
|         
 | |
|         static $_is_valid = array();
 | |
|         
 | |
|         if(isset($_is_valid[$form])) {
 | |
|             // already validated the form
 | |
|             return $_is_valid[$form];
 | |
|         }
 | |
|         
 | |
|         $_smarty_obj =& SmartyValidate::_object_instance('Smarty', $_dummy);
 | |
|         if(!SmartyValidate::is_valid_smarty_object($_smarty_obj)) {
 | |
|             trigger_error("SmartyValidate: [is_valid] No valid smarty object, call connect() first.");
 | |
|             return false;            
 | |
|         }        
 | |
| 
 | |
|         if(!SmartyValidate::is_registered_form($form)) {
 | |
|             trigger_error("SmartyValidate: [is_valid] form '$form' is not registered.");
 | |
|             return false;
 | |
|         } elseif ($_SESSION['SmartyValidate'][$form]['is_init']) {
 | |
|             // first run, skip validation
 | |
|             return false;
 | |
|         } elseif (count($_SESSION['SmartyValidate'][$form]['validators']) == 0) {
 | |
|             // nothing to validate
 | |
|             return true;   
 | |
|         }
 | |
|         
 | |
|         // check for failed fields
 | |
|         $_failed_fields = SmartyValidate::_failed_fields($formvars, $form);
 | |
|         $_ret = is_array($_failed_fields) && count($_failed_fields) == 0;
 | |
|                                
 | |
|         // set validation state of form
 | |
|         $_SESSION['SmartyValidate'][$form]['is_error'] = !$_ret;
 | |
|         
 | |
|         $_is_valid[$form] = $_ret;
 | |
|         
 | |
|         return $_ret;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * register a callable function for form verification
 | |
|      *
 | |
|      * @param string $func_name the function being registered
 | |
|      */
 | |
|     function register_object($object_name, &$object) {
 | |
|         if(!is_object($object)) {
 | |
|             trigger_error("SmartyValidate: [register_object] not a valid object.");
 | |
|             return false;
 | |
|         }
 | |
|         SmartyValidate::_object_instance($object_name, $object);
 | |
|     }    
 | |
|     
 | |
|     /**
 | |
|      * register a callable function for form verification
 | |
|      *
 | |
|      * @param string $func_name the function being registered
 | |
|      */
 | |
|     function is_registered_object($object_name) {
 | |
|         $_object =& SmartyValidate::_object_instance($object_name, $_dummy);
 | |
|         return is_object($_object);
 | |
|     }    
 | |
| 
 | |
|     /**
 | |
|      * register a callable function for form verification
 | |
|      *
 | |
|      * @param string $func_name the function being registered
 | |
|      */
 | |
|     function register_criteria($name, $func_name, $form = SMARTY_VALIDATE_DEFAULT_FORM) {
 | |
|         return SmartyValidate::_register_function('criteria', $name, $func_name, $form);
 | |
|     }    
 | |
|             
 | |
|     /**
 | |
|      * register a callable function for form verification
 | |
|      *
 | |
|      * @param string $func_name the function being registered
 | |
|      */
 | |
|     function register_transform($name, $func_name, $form = SMARTY_VALIDATE_DEFAULT_FORM) {
 | |
|         return SmartyValidate::_register_function('transform', $name, $func_name, $form);
 | |
|     }    
 | |
|         
 | |
|     /**
 | |
|      * test if a criteria function is registered
 | |
|      *
 | |
|      * @param string $var the value being booleanized
 | |
|      */
 | |
|     function is_registered_criteria($name, $form = SMARTY_VALIDATE_DEFAULT_FORM) {  
 | |
|         if(!SmartyValidate::is_registered_form($form)) {
 | |
|             trigger_error("SmartyValidate: [is_registered_criteria] form '$form' is not registered.");
 | |
|             return false;
 | |
|         }
 | |
|         return isset($_SESSION['SmartyValidate'][$form]['registered_funcs']['criteria'][$name]);
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * test if a tranform function is registered
 | |
|      *
 | |
|      * @param string $var the value being booleanized
 | |
|      */
 | |
|     function is_registered_transform($name, $form = SMARTY_VALIDATE_DEFAULT_FORM) {
 | |
|         if(!SmartyValidate::is_registered_form($form)) {
 | |
|             trigger_error("SmartyValidate: [is_registered_transform] form '$form' is not registered.");
 | |
|             return false;
 | |
|         }
 | |
|         return isset($_SESSION['SmartyValidate'][$form]['registered_funcs']['transform'][$name]);
 | |
|     }    
 | |
| 
 | |
|     /**
 | |
|      * register a validator
 | |
|      *
 | |
|      * @param string $id the id of the validator
 | |
|      * @param string $field the field to be validated
 | |
|      * @param string $criteria the name of the criteria function
 | |
|      * @param string $empty allow field to be empty (optional)
 | |
|      * @param string $halt stop validation if this one fails (optional)
 | |
|      * @param string $transform transform function(s) to apply (optional)
 | |
|      * @param string $form name of the form (optional)
 | |
|      */
 | |
|     function register_validator($id, $field, $criteria, $empty = false, $halt = false, $transform = null, $form = SMARTY_VALIDATE_DEFAULT_FORM) {
 | |
|         if(!SmartyValidate::is_registered_form($form)) {
 | |
|             trigger_error("SmartyValidate: [register_validator] form '$form' is not registered.");
 | |
|             return false;
 | |
|         }
 | |
|         SmartyValidate::unregister_validator($id,$form);
 | |
|         
 | |
|         $_field = explode(':', $field);
 | |
|         $_validator = array();
 | |
|                 
 | |
|         foreach($_field as $_key => $_val) {
 | |
|             if($_key == 0)
 | |
|                 $_validator['field'] = $_val;
 | |
|             else {
 | |
|                 $_field_name = 'field';
 | |
|                 $_field_name .= $_key + 1;
 | |
|                 $_validator[$_field_name] = $_val;   
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         $_validator['id'] = $id;
 | |
|         $_validator['criteria'] = $criteria;
 | |
|         $_validator['message'] = '';
 | |
|         $_validator['trim'] = false;
 | |
|         $_validator['empty'] = $empty;
 | |
|         $_validator['halt'] = $halt;
 | |
|         $_validator['transform'] = $transform;
 | |
|                
 | |
|         $_SESSION['SmartyValidate'][$form]['validators'][]  = $_validator;
 | |
|     }    
 | |
| 
 | |
|     /**
 | |
|      * register a validator
 | |
|      *
 | |
|      * @param string $id the id of the validator
 | |
|      * @param string $transform the name of the transform function(s)
 | |
|      * @param string $form name of the form (optional)
 | |
|      */
 | |
|     function set_transform($id, $transform, $form = SMARTY_VALIDATE_DEFAULT_FORM) {
 | |
|                 
 | |
|         if(($_validator_key = SmartyValidate::is_registered_validator($id,$form)) === false) {
 | |
|             trigger_error("SmartyValidate: [set_transform] validator '$id' is not registered.");
 | |
|             return false;               
 | |
|         }
 | |
|                 
 | |
|         $_SESSION['SmartyValidate'][$form]['validators'][$_validator_key]['transform'] = $transform;
 | |
|     }    
 | |
|     
 | |
|     
 | |
|     /**
 | |
|      * test if a validator is registered
 | |
|      *
 | |
|      * @param string $id the validator to test
 | |
|      */
 | |
|     function is_registered_validator($id, $form = SMARTY_VALIDATE_DEFAULT_FORM) {  
 | |
|         if(!SmartyValidate::is_registered_form($form)) {
 | |
|             trigger_error("SmartyValidate: [is_registered_validator] form '$form' is not registered.");
 | |
|             return false;
 | |
|         }
 | |
|         
 | |
|         foreach($_SESSION['SmartyValidate'][$form]['validators'] as $_key => $_val) {
 | |
|             if($_SESSION['SmartyValidate'][$form]['validators'][$_key]['id'] == $id) {
 | |
|                 // return array index of validator
 | |
|                 return $_key;
 | |
|             }
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * unregister a validator
 | |
|      *
 | |
|      * @param string $id the validator to unregister
 | |
|      */
 | |
|     function unregister_validator($id, $form = SMARTY_VALIDATE_DEFAULT_FORM) {  
 | |
|         if(!SmartyValidate::is_registered_form($form)) {
 | |
|             return false;
 | |
|         }
 | |
|         
 | |
|         foreach($_SESSION['SmartyValidate'][$form]['validators'] as $_key => $_val) {
 | |
|             if(isset($_SESSION['SmartyValidate'][$form]['validators'][$_key]['id'])
 | |
|                     && $_SESSION['SmartyValidate'][$form]['validators'][$_key]['id'] == $id) {
 | |
|                unset($_SESSION['SmartyValidate'][$form]['validators'][$_key]);
 | |
|                break;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|     }        
 | |
| 
 | |
|     /**
 | |
|      * set the current page of the form
 | |
|      *
 | |
|      * @param string $page the name of the page being validated
 | |
|      * @param string $form the name of the form being validated
 | |
|      */
 | |
|     function set_page($page, $form = SMARTY_VALIDATE_DEFAULT_FORM) {
 | |
|         $_SESSION['SmartyValidate'][$form]['page'] = $page;
 | |
|         $_SESSION['SmartyValidate'][$form]['is_error'] = false;
 | |
|         $_SESSION['SmartyValidate'][$form]['is_init'] = true;
 | |
|     }    
 | |
|             
 | |
|     /**
 | |
|      * return actual function name of registered func
 | |
|      *
 | |
|      * @param string $type the type of func
 | |
|      * @param string $name the registered name
 | |
|      * @param string $form the form name
 | |
|      */
 | |
|     function _execute_transform($name, $value, $params, &$formvars, $form) {
 | |
|         
 | |
|         if(SmartyValidate::is_registered_transform($name, $form)) {
 | |
|             $_func_name = SmartyValidate::_get_registered_func_name('transform', $name, $form);
 | |
|         } else {
 | |
|             $_func_name = 'smarty_validate_transform_' . $name;
 | |
|             if(!function_exists($_func_name)) {            
 | |
|                 $_smarty_obj =& SmartyValidate::_object_instance('Smarty', $_dummy);
 | |
|                 if($_plugin_file = $_smarty_obj->_get_plugin_filepath('validate_transform', $name)) {
 | |
|                     include_once($_plugin_file);
 | |
|                 } else {
 | |
|                     trigger_error("SmartyValidate: [is_valid] transform function '$name' was not found.");
 | |
|                     return false;                    
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         if(strpos($_func_name,'->') !== false) {
 | |
|             // object method
 | |
|             preg_match('!(\w+)->(\w+)!', $_func_name, $_match);
 | |
|             $_object_name = $_match[1];
 | |
|             $_method_name = $_match[2];
 | |
|             $_object =& SmartyValidate::_object_instance($_object_name, $_dummy);
 | |
|             if(!method_exists($_object, $_method_name)) {
 | |
|                 trigger_error("SmartyValidate: [is_valid] method '$_method_name' is not valid for object '$_object_name'.");
 | |
|                 return false;                
 | |
|             }
 | |
|             return $_object->$_method_name($value, $params, $formvars);
 | |
|         } else {
 | |
|             return $_func_name($value, $params, $formvars);   
 | |
|         }        
 | |
|     }    
 | |
|     
 | |
|     /**
 | |
|      * register a callable function for form verification
 | |
|      *
 | |
|      * @param string $func_name the function being registered
 | |
|      */
 | |
|     function _register_function($type, $name, $func_name, $form = SMARTY_VALIDATE_DEFAULT_FORM) {
 | |
|         if(!SmartyValidate::is_registered_form($form)) {
 | |
|             trigger_error("SmartyValidate: [register_$type] form '$form' is not registered.");
 | |
|             return false;
 | |
|         }
 | |
|         if(strpos($func_name,'->') !== false) {
 | |
|             // object method
 | |
|             preg_match('!(\w+)->(\w+)!', $func_name, $_match);
 | |
|             $_object_name = $_match[1];
 | |
|             $_method_name = $_match[2];
 | |
|             $_object =& SmartyValidate::_object_instance($_object_name, $_dummy);
 | |
|             if(!method_exists($_object, $_method_name)) {
 | |
|                 trigger_error("SmartyValidate: [register_$type] method '$_method_name' is not valid for object '$_object_name'.");
 | |
|                 return false;                
 | |
|             }
 | |
|         } elseif (strpos($func_name,'::') !== false) {
 | |
|             // static method
 | |
|             preg_match('!(\w+)::(\w+)!', $func_name, $_match);
 | |
|             if(!is_callable(array($_match[1], $_match[2]))) {
 | |
|                 trigger_error("SmartyValidate: [register_$type] static method '$func_name' does not exist.");
 | |
|                 return false;                
 | |
|             }            
 | |
|         } elseif(!function_exists($func_name)) {
 | |
|             trigger_error("SmartyValidate: [register_$type] function '$func_name' does not exist.");
 | |
|             return false;
 | |
|         }
 | |
|         $_SESSION['SmartyValidate'][$form]['registered_funcs'][$type][$name] = $func_name;
 | |
|         return true;
 | |
|     }    
 | |
| 
 | |
|     /**
 | |
|      * return actual function name of registered func
 | |
|      *
 | |
|      * @param string $type the type of func
 | |
|      * @param string $name the registered name
 | |
|      * @param string $form the form name
 | |
|      */
 | |
|     function _get_registered_func_name($type,$name,$form) {
 | |
|         return isset($_SESSION['SmartyValidate'][$form]['registered_funcs'][$type][$name])
 | |
|            ? $_SESSION['SmartyValidate'][$form]['registered_funcs'][$type][$name]
 | |
|            : false;
 | |
|     }
 | |
|     
 | |
|             
 | |
|     /**
 | |
|      * booleanize a value
 | |
|      *
 | |
|      * @param string $var the value being booleanized
 | |
|      */
 | |
|     function _booleanize($var) {
 | |
|         if(in_array(strtolower($var), array(true, 1, 'true','on','yes','y'),true)) {
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * validate criteria for given value
 | |
|      *
 | |
|      * @param string $criteria the criteria to test against
 | |
|      * @param string $value the value being tested
 | |
|      * @param string $empty skip empty values or not
 | |
|      */
 | |
|     function _is_valid_criteria($criteria, $value, $empty, &$params, &$formvars, $form) {
 | |
|         if(SmartyValidate::is_registered_criteria($criteria,$form)) {
 | |
|             $_func_name = SmartyValidate::_get_registered_func_name('criteria',$criteria, $form);
 | |
|         } else {
 | |
|             $_func_name = 'smarty_validate_criteria_' . $criteria;
 | |
|             if(!function_exists($_func_name)) {            
 | |
|                 $_smarty_obj =& SmartyValidate::_object_instance('Smarty', $_dummy);
 | |
|                 if($_plugin_file = $_smarty_obj->_get_plugin_filepath('validate_criteria', $criteria)) {
 | |
|                     include_once($_plugin_file);
 | |
|                 } else {
 | |
|                     trigger_error("SmartyValidate: [is_valid] criteria function '$criteria' was not found.");
 | |
|                     return false;                    
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         if(strpos($_func_name,'->') !== false) {
 | |
|             // object method
 | |
|             preg_match('!(\w+)->(\w+)!', $_func_name, $_match);
 | |
|             $_object_name = $_match[1];
 | |
|             $_method_name = $_match[2];            
 | |
|             $_object =& SmartyValidate::_object_instance($_object_name, $_dummy);
 | |
|             if(!method_exists($_object, $_method_name)) {
 | |
|                 trigger_error("SmartyValidate: [is_valid] method '$_method_name' is not valid for object '$_object_name'.");
 | |
|                 return false;                
 | |
|             }
 | |
|             return $_object->$_method_name($value, $empty, $params, $formvars);
 | |
|         } else {
 | |
|             return $_func_name($value, $empty, $params, $formvars);   
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * get or set an object instance
 | |
|      *
 | |
|      * @param string $name the object name
 | |
|      * @param object $object the object being set
 | |
|      */
 | |
|     function &_object_instance($name, &$object) {
 | |
|         $return = false;
 | |
|         static $_objects = array();
 | |
|         if ($name=='-') {
 | |
|             unset ($_objects);
 | |
|             static $_objects = array();
 | |
|         }
 | |
|         if(!is_object($object)) {
 | |
|             if (isset($_objects[$name]))
 | |
|                 return $_objects[$name];
 | |
|             else
 | |
|                 return $return;
 | |
|         } else {
 | |
|             $_objects[$name] =& $object;
 | |
|             return $object;
 | |
|         }
 | |
|     }    
 | |
|     
 | |
|     /**
 | |
|      * get or set the smarty object instance
 | |
|      *
 | |
|      * @param string $value the value being tested
 | |
|      */
 | |
|     function _smarty_assign($vars = array()) {
 | |
|         
 | |
|         $_smarty_obj =& SmartyValidate::_object_instance('Smarty', $_dummy);
 | |
|         
 | |
|         if(!is_object($_smarty_obj)) {
 | |
|             trigger_error("SmartyValidate: [assign] no valid smarty object found, call connect() first.");
 | |
|             return false;
 | |
|         }              
 | |
|                         
 | |
|         if(!empty($vars)) {
 | |
|             $_smarty_obj->assign($vars);
 | |
|         }
 | |
|         foreach($_SESSION['SmartyValidate'] as $_key => $_val) {
 | |
|             $_info[$_key]['is_error'] = isset($_SESSION['SmartyValidate'][$_key]['is_error']) ? $_SESSION['SmartyValidate'][$_key]['is_error'] : null;        
 | |
|         }
 | |
|         $_smarty_obj->assign('validate', $_info);
 | |
|         
 | |
|     }    
 | |
|         
 | |
| }
 | |
| 
 | |
| ?>
 | 
