<?php
/***********************************************************************
Copyright (C) 2004 Julian Hammer (julian.hammer@u-sys.org)
The form_o_mat class is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The form_o_mat class 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston,
MA 02111-1307 USA
************************************************************************/
class form_o_mat
{
var $id; //Form name (to identify if it was send)
var $action; //Where should this form post? (if nothing, it self)
var $caption; //Caption to show the user
var $target = "_self"; //What should the target be?
var $style; //If there is a css class for this form, put the name here
var $enctype; //Will automaticly be set to multipart/form-data if there is a form with a file obj.
var $hide = FALSE; //Shuld the form be hidden if there are no errors in the send data?
var $_error=""; //Intern error trigger
var $_error_msg=""; //Intern error message to be displayed
var $_data=""; //Intern usage for storing the form data
function insert_object( $name, $caption, $needed=FALSE, $type="text", $size="", $value="" )
{
$needed_signal = "";
if( isset( $_POST[$this->id] ) )
{
$this->_check_data( $name, $type, $needed );
$value = $_POST[$name];
}
if( $needed == TRUE )
{
$needed_signal = "* ";
}
$return = '<tr><td valign="top"><b>'. $caption .'</b>'. $needed_signal .'</td><td valign="top">';
$value = htmlspecialchars( $value );
switch( $type )
{
case 'password':
$size = preg_replace( "/\D/i", "", $size );
if( !empty( $size ) )
{
$size = 'size="'. $size .'"';
}
$attribs = 'type="password" '. $size;
if( !empty( $value ) )
{
$value = 'value="'. $value .'"';
}
$return .= '<input name="'. $name .'" '. $attribs .' '. $value .'>';
break;
case 'file':
$this->enctype = 'multipart/form-data';
$size = preg_replace( "/\D/i", "", $size );
if( !empty( $size ) )
{
$size = 'size="'. $size .'"';
}
$attribs = 'type="file" '. $size;
if( !empty( $value ) )
{
$value = 'value="'. $value .'"';
}
$return .= '<input name="'. $name .'" '. $attribs .' '. $value .'>';
break;
case 'textarea':
$size = explode( 'x', $size );
if( !empty( $size[0] ) AND !empty( $size[1] ) )
{
$size = 'cols="'. $size[0] .'" rows="'.$size[1] .'"';
}
$return .= '<textarea name="'. $name .'" '. $size .'">'. $value .'</textarea>';
break;
default:
$size = preg_replace( "/\D/i", "", $size );
if( !empty( $size ) )
{
$size = 'size="'. $size .'"';
}
$attribs = 'type="text" '. $size;
if( !empty( $value ) )
{
$value = 'value="'. $value .'"';
}
$return .= '<input name="'. $name .'" '. $attribs .' '. $value .'>';
}
$return .= '</td><td valign="top">'. $this->_error_msg .'</td></tr>';
$this->_data .= $return;
return true;
}
function insert_object_group( $name, $caption, $value, $needed="", $type="", $description="" )
{
if( isset( $_POST[$this->id] ) )
{
$this->_check_data( $name, $type, $needed );
}
if( $needed == TRUE )
{
$needed_signal = "* ";
}
$return = '<tr><td valign="top"><b>'. $caption .'</b>'. $needed_signal .'</td><td valign="top">';
if( !is_array( $value ) OR ( !empty( $description ) AND !is_array( $description ) ) )
{
return false;
}
switch( $type )
{
case 'radio':
if( empty( $description ) )
{
$description = $value;
}
foreach( $value as $key => $item )
{
if( isset( $_POST[$this->id] ) AND $_POST[$name] == $item )
{
$checked = "checked";
}
else
{
$checked = "";
}
$return .= '<label><input type="radio" name="'. $name .'" value="'. $item .'" '. $checked .'>'. $description[$key] .'</label><br/>';
}
break;
case 'check':
if( empty( $description ) )
{
$description = $value;
}
foreach( $value as $key => $item )
{
if( @in_array( $item, $_POST[$name] ) )
{
$checked = "checked";
}
else
{
$checked = "";
}
$return .= '<label><input type="checkbox" name="'. $name .'[]" value="'. $item .'" '. $checked .'>'. $description[$key] .'</label><br/>';
}
break;
default:
$return .= '<select name="'. $name .'">';
if( empty( $description ) )
{
$description = $value;
}
$return .= '<option value="">-- select what is true --</option>';
foreach( $value as $key => $item )
{
if( isset( $_POST[$this->id] ) AND $_POST[$name] == $item )
{
$selected = "selected";
}
else
{
$selected = "";
}
$return .= '<option value="'. $item .'" '. $selected .'>'. $description[$key] .'</option>';
}
$return .= '</select>';
}
$return .= '</td><td valign="top">'. $this->_error_msg .'</td></tr>';
$this->_data .= $return;
return true;
}
function _check_data( $name, $type, $needed )
{
if( $type == TRUE AND $needed != FALSE )
{
if( $type == 'check' )
{
$string = "";
$i = "";
if( isset( $_POST[$name] ) )
{
$i = count( $_POST[$name] );
}
while( $i > 0 )
{
$i--;
$string .= 'i';
}
}
else
{
$string = $_POST[$name];
}
$count = strlen( $string );
if( $needed == 1 )
{
if( $count >= $needed )
{
$this->_error_msg = "";
return true;
}
else
{
$this->_error_msg = "this information must be entered";
$this->_error = TRUE;
return false;
}
}
else
{
$needed = explode( "-", $needed );
if( !empty( $needed[1] ) )
{
if( ( $count <= max( $needed[0], $needed[1] ) ) AND ( $count >= min( $needed[0], $needed[1] ) ) )
{
$this->_error_msg = "";
return true;
}
else
{
$this->_error_msg = 'must be '. min( $needed[0], $needed[1] ) .' to '. max( $needed[0], $needed[1] ) .' characters long!';
$this->_error = TRUE;
return false;
}
}
else
{
if( empty( $needed[1] ) )
{
if( $count >= $needed[0] )
{
$this->_error_msg = "";
return true;
}
else
{
$this->_error_msg = 'this information must be atleast '. $needed[0] .' characers long!';
$this->_error = TRUE;
return false;
}
}
}
}
}
else
{
$this->_error_msg = "";
return true;
}
}
function dump_form()
{
$style = "";
if( !empty( $this->style ) )
{
$style = 'class="'. $this->style .'"';
}
if( empty( $this->action ) )
{
$this->action = $_SERVER['REQUEST_URI'];
}
if( !empty( $this->caption ) )
{
$result = '<h2>'. $this->caption .'</h2>';
}
if( !empty( $this->enctype ) )
{
$enctype = 'enctype="'. $this->enctype .'"';
}
$result .= '<table>'. $this->_data .'<tr><td valign="top"> </td><td valign="top">* This information is required<td valign="top"></td></tr></table>';
$return = '<form action="'. $this->action .'" method="post" target="'. $this->target .'" '. $style .'>';
$return .= $result;
$return .= '<input name="'. $this->id .'" type="submit"><input type="reset"></form>';
if( $this->_error == FALSE AND $this->hide == TRUE AND isset( $_POST[$this->id] ) )
{
return true;
}
else
{
return $return;
}
}
}
?>
|