<?php
class e_form
{
var $method = 'post';
var $action;
var $fields = array();
var $hide_predefined = 0; // Substitute with hidden input if already have value for it
var $predefined_values = array();
var $validation_script;
function Form( $predefined_values = array() )
{
global $_var;
$this->predefined_values = $predefined_values;
}
function addField( $field )
{
global $_url;
if ( $this->predefined_values[$field->name] )
$field->default_value = $this->predefined_values[$field->name];
$this->fields[$field->name] = $field;
if ( $field->js_validation )
{
$this->validation_script .= "
if ( !( {$field->js_validation} ) )
{
report_error( $(\"input[name={$field->name}]\"), '{$field->validation_error_msg}' );
return false;
}
";
}
elseif ( $field->validation )
{
/*
$this->validation_script .= "
validate_field( $(\"input[name={$field->name}]\"), '" . urlencode( base64_encode( $field->validation ) ) . "', '{$field->validation_error_msg}' );
if ( window.ret == false )
return false;
";
*/
}
}
function render()
{
global $_var;
global $_url;
$_var['jcode'] .= <<<EOT
window.ret = true;
function report_error( ctrl, msg )
{
ctrl.parent().addClass( "field_error" );
ctrl.parent().find("div.err_msg").show();
ctrl.parent().find("div.err_msg").html( msg );
ctrl.focus();
}
function validate_field( ctrl, validation, error_msg )
{
$.getJSON( '{$_url['site_full']}ajaxhandle.php?ff_validate=' + validation + '&ff_value=' + ctrl.val(),
function(data)
{
if ( data == 0 )
{
report_error( ctrl, error_msg );
window.ret = false;
}
}
);
ctrl.hide();
ctrl.show();
}
$("form.fieldform").submit ( function()
{
$(this).find("input").parent().removeClass("field_error");
$(this).find("input").parent().find("div.err_msg").hide();
{$this->validation_script}
return window.ret;
}
);
EOT;
$ret .= '<form enctype="multipart/form-data" method="' . $this->method . '" action="' . $this->action . '" class="fieldform"><table class="fieldform" cellspacing="0" cellpadding="0">';
foreach( $this->fields as $field )
{
if ( ( $this->hide_predefined && $field->default_value ) || $field->type == 'hidden' )
{
$ret .= '<input type="hidden" name="' . $field->name . '" value="' . $field->default_value . '" />';
continue;
}
$ret .= '<tr><td class="label">' . $field->label . '</td><td class="value">' . $field->presentation() . '<div class="err_msg"></div></td>';
if ( $field->description )
$ret .= '<td class="description">' . $field->description . '</td>';
$ret .= '</tr>';
}
$ret .= '<tr><td></td><td align="center"><input type="submit" class="button" name="submitbutton" value="' . strm( 'submit' ) . '" /></td></tr></table></form>';
return $ret;
}
// generate sql out of form input
function generate_sql( $names, $values )
{
foreach( $names as $index => $key )
{
// exclude fields by names
if ( in_array( $key, array( 'confirmpassword', 'photo', 'statement', 'photoupload' ) ) )
continue;
// different handling for different field types
switch( $this->fields[$key]->type )
{
case 'password':
$ret .= "`{$key}` = '" . md5( trim( $values[$key] ) ) . "',";
break;
case 'checkbox':
$ret .= "`{$key}` = ";
$ret .= $values[$key] ? "'1'," : "'0',";
break;
default:
$ret .= "`{$key}` = '" . trim( $values[$key] ) . "',";
break;
}
}
$ret = substr( $ret, 0, strlen( $ret ) - 1 );
return $ret;
}
// validate user input
function validate_input( $array )
{
global $_var;
// No data then return false
if ( !$array )
return false;
// return value
$ret = true;
$array = array_reverse( $array );
foreach( $array as $key => $value )
{
// kicking out non-field junk
if ( !in_array( $key, array_keys( $this->fields ) ) )
continue;
$f = &$this->fields[$key];
$f->default_value = stripslashes( $value );
if ( !$f->validation )
continue;
$code = sprintf( $f->validation, $value, $value );
if ( !eval( "return $code ? 1 : 0;" ) )
{
$_var['jcode'] .= "\nreport_error( $(\"input[name={$f->name}]\"), '{$f->validation_error_msg}' );";
$ret = false;
}
}
return $ret;
//return false;
}
}
?>