/**
     * 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;
    }
Exemplo n.º 2
0
 /**
  * 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;
 }