/** * 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; }
/** * 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 = 'default') { $_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; } // keep track of failed fields for current pass static $_failed_fields = array(); $_ret = true; $_sess =& $_SESSION['SmartyValidate'][$form]['validators']; $_smarty_assign_fields = array(); 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; } $_field = $_sess[$_key]['field']; $_field_key = null; $_empty = isset($_sess[$_key]['empty']) ? $_sess[$_key]['empty'] : false; $_assign = isset($_sess[$_key]['assign']) ? $_sess[$_key]['assign'] : null; $_append = isset($_sess[$_key]['append']) ? $_sess[$_key]['append'] : null; $_message = isset($_sess[$_key]['message']) ? $_sess[$_key]['message'] : null; // 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 (in_array($_field, $_failed_fields)) { // already failed, skip this test continue; } 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 (is_array($formvars[$_field]) && !$_trans_on_array) { if ($_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; $_ret = !$_ret ? false : $_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 ($_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']) { $_failed_fields[] = $_field; if (isset($_append)) { $_smarty_assign_fields[$_append][$_field] = $_message; } if (isset($_assign)) { $_smarty_assign_fields[$_assign] = $_message; } $_ret = false; if (isset($_sess[$_key]['halt']) && $_sess[$_key]['halt']) { break; } } } // set validation state of form $_SESSION['SmartyValidate'][$form]['is_error'] = !$_ret; SmartyValidate::_smarty_assign($_smarty_assign_fields); return $_ret; }