All pastes #444627 Raw Edit

Stuff

public text v1 · immutable
·published 2007-04-17 12:57 UTC
rendered paste body
<?php

	/**
	 * 
	 * Object used to generate and validate forms.
	 * 
	 * @name form
	 * @author Christian Joudrey
	 * @since 2006-06-27
	 * @version 1.0
	 * @package reptileframework
	 * @subpackage layout
	 * 
	 */
	
	class form
	{
		
		/**
		 * Array containing field validators.
		 *
		 * @ignore
		 */
		
		var $_validators = array();
		
		/**
		 * Array containing error messages.
		 *
		 * @ignore 
		 */
		
		var $_errors = array
		(
			'Invalid callback function "%s"',
			'Invalid validator "%s"',
			'Invalid field type "%s"',
			'Invalid eval code "%s"'
		);
		
		/**
		 * Array containing form fields.
		 *
		 * @ignore
		 */
		
		var $_fields = array();
		
		/**
		 * Array containing valid field types
		 *
		 * @ignore
		 */
		
		var $_field_types = array();

		/**
		 * Base skin filename
		 *
		 * @ignore
		 */
		
		var $_skin_filename;
		
		/**
		 * Base skin template object
		 *
		 * @ignore
		 */
		
		var $_skin_object;		
		
		/**
		 * Fields template object
		 *
		 * @ignore
		 */
		
		var $_skin_field;
		
		/**
		 * Form method (POST/GET)
		 *
		 * @ignore 
		 */
		
		var $_form_method;
		
		/**
		 * Form action
		 *
		 * @ignore
		 */
		
		var $_form_action;
		
		/**
		 * Form name
		 *
		 * @ignore
		 */
		
		var $_form_name;
		
		/**
		 * Form object constructor.
		 * 
		 * <code>
		 * $frm_login = new form('login_form.htm', 'login.php', 'loginfrm', 'POST');
		 * </code>
		 *
		 * @param string $skin_filename
		 * @param string $action
		 * @param string $method
		 * @return form
		 */
		
		function form($skin_filename, $action = '', $name = '', $method = 'POST')
		{
			
			if (!defined('FORM_ERROR_INVALID_CALLBACK'))
			{
				
				/**
				 * Error code sent when an invalid callback function is used.
				 *
				 * @ignore
				 */
			
				define('FORM_ERROR_INVALID_CALLBACK', 0);
				
				/**
				 * Error code sent when a field is assigned a non-existant validator
				 *
				 * @ignore
				 */
				
				define('FORM_ERROR_INVALID_VALIDATOR', 1);
				
				/**
				 * Error code sent when a field is assigned a non-existant field type
				 *
				 * @ignore
				 */
				
				define('FORM_ERROR_INVALID_FIELD_TYPE', 2);				
				
				/**
				 * Error code sent when an error occurs in an eval()
				 *
				 * @ignore
				 */
				
				define('FORM_ERROR_INVALID_EVAL', 3);
			
			}
			
			$this->_skin_filename 	= $skin_filename;
			$this->_skin_object 	= new template($skin_filename);
			$this->_skin_field 		= new template();
			
			$this->_form_action 	= $action;
			$this->_form_method 	= $method;
			$this->_form_name	 	= $name;
			
			$this->add_field_type('hidden', '$this->_field_type_hidden');
			$this->add_field_type('text', '$this->_field_type_text');
			$this->add_field_type('textarea', '$this->_field_type_textarea');
			$this->add_field_type('fcktextarea', '$this->_field_type_fcktextarea');
			$this->add_field_type('password', '$this->_field_type_password');
			$this->add_field_type('submit', '$this->_field_type_submit');
			$this->add_field_type('button', '$this->_field_type_button');
			$this->add_field_type('phone', '$this->_field_type_phone_number');
			$this->add_field_type('yesno', '$this->_field_type_yesno');
			$this->add_field_type('checkbox', '$this->_field_type_checkbox');
			$this->add_field_type('yesnolabel', '$this->_field_type_yesnolabel');
			$this->add_field_type('country', '$this->_field_type_country');
			$this->add_field_type('state', '$this->_field_type_state');
			$this->add_field_type('malefemale', '$this->_field_type_malefemale');
			$this->add_field_type('label', '$this->_field_type_label');
			$this->add_field_type('select', '$this->_field_type_selectbox');
			$this->add_field_type('file', '$this->_field_type_file');
			$this->add_field_type('date', '$this->_field_type_date');
						
			$this->add_validator('date', '$this->_date_validator');
			$this->add_validator('email', '$this->_email_validator');
			$this->add_validator('required', '$this->_required_validator');
			$this->add_validator('username_exists', '$this->_username_validator');
			$this->add_validator('select', '$this->_selectbox_validator');
		}
		
		/**
		 * Assign a callback function to a validator.
		 *
		 * <code>
		 * $frm_login = new form('login_form.htm', 'login.php', 'POST');
		 * $frm_login->add_validator('username_validator', 'username_check');
		 * $frm_login->add_field('Username', 'username', 'text', 'username_validator');
		 * </code>
		 * 
		 * Sample callback function:
		 * 
		 * <code>
	 	 * function _required_validator($name, $value)
		 * {
		 * 	if ($value != '')
		 * 	{
		 * 		return(true);
		 * 	}
		 * 	else 
		 * 	{
		 * 		return(array('error' => 'true', 'error_message' => 'Field is Empty'));
		 * 	}
		 * }
		 * </code>
		 * 
		 * @param string $name
		 * @param string $callback
		 */
		
		function add_validator($name, $callback)
		{
			if (substr($callback, 0, 7) == '$this->')
			{
				if (!method_exists($this, substr($callback, 7)))
				{
					$this->_report_error(FORM_ERROR_INVALID_CALLBACK, '$this->'.substr($callback, 7));
				}
			}
			elseif (!function_exists($callback))
			{
				$this->_report_error(FORM_ERROR_INVALID_CALLBACK, $callback);
			}
			
			$this->_validators[$name] = $callback;
		}
		
		/**
		 * Assign a callback function to a field type.
		 * 
		 * This function is used to create custom fields.
		 *
		 * Sample callback function:
		 * 
		 * <code>
		 * function _field_type_text($title, $name, $value, $error, $error_message)
		 * {
		 * 	$field_html = $this->_skin_object->get_block('input text');
		 * 	$this->_skin_field->load_raw($field_html);
		 * 	$this->_skin_field->assign('title', $title);
		 * 	$this->_skin_field->assign('name', $name);
		 * 	$this->_skin_field->assign('value', $value);
		 * 	$this->_skin_field->assign('error', $error);
		 * 	$this->_skin_field->assign('error_message', $error_message);
		 * 	return($this->_skin_field->output(true));
		 * }
		 * </code>
		 * 
		 * @param string $field_type
		 * @param callback $callback
		 */
		
		function add_field_type($field_type, $callback)
		{
			if (substr($callback, 0, 7) == '$this->')
			{
				if (!method_exists($this, substr($callback, 7)))
				{
					$this->_report_error(FORM_ERROR_INVALID_CALLBACK, '$this->'.substr($callback, 7));
				}
			}
			elseif (!function_exists($callback))
			{
				$this->_report_error(FORM_ERROR_INVALID_CALLBACK, $callback);
			}
			
			$this->_field_types[$field_type] = $callback;
		}
		
		/**
		 * This function is used to add a field to the form.
		 *
		 * The $title parameter is used as a title for the field.
		 * The $validator and $field_value parameters are optional.
		 * 
		 * Sample code:
		 * 
		 * <code>
		 * $frm_login = new form('login_form.htm', 'login.php', 'POST');
		 * $frm_login->add_validator('username_validator', 'username_check');
		 * $frm_login->add_field('Username:', 'username', 'text', 'username_validator');
		 * </code>
		 * 
		 * @param string $title
		 * @param string $field_name
		 * @param string $field_type
		 * @param string $validator
		 * @param string $field_default_value
		 */
		
		function form_add_field($title, $field_name, $field_type, $validator = '', $field_default_value = '')
		{
			if (is_array($validator))
			{
				foreach($validator as $validator_name)
				{
					if (!isset($this->_validators[$validator_name]))
					{
						$this->_report_error(FORM_ERROR_INVALID_VALIDATOR, $validator_name);
					}
				}
			}
			elseif (!isset($this->_validators[$validator]) && $validator != '')
			{
				$this->_report_error(FORM_ERROR_INVALID_VALIDATOR, $validator);
			}
			
			if (!isset($this->_field_types[$field_type]))
			{
				$this->_report_error(FORM_ERROR_INVALID_FIELD_TYPE, $field_type);
			}
			
			$this->_fields[$field_name] = array(
				'title'				=> $title,
				'name'				=> $field_name,
				'type'				=> $field_type,
				'validator' 		=> $validator,
				'default_value'		=> $field_default_value
			);
		}
		
		/**
		 * Used to validate the results of a form.
		 *
		 * Sample code:
		 * <code>
		 * $form = new form('form_skin.htm');
		 * $form->form_add_field('Email', 'emailtest', 'text', array('required', 'email'));
		 * $form->form_add_field('Field Test', 'field2', 'text', 'required');
		 * $form->form_add_field('', 'submitbutton', 'submit');
		 * 
		 * $validate_result = $form->form_validate();
		 * 
		 * if ($validate_result)
		 * {
		 * 	echo "form validated!";
		 * }
		 * else 
		 * {
		 * 	if (empty($_POST))
		 * 	{
		 * 		$form_html = $form->form_display(false);
		 * 	}
		 * 	else 
		 * 	{
		 * 		$form_html = $form->form_display();
		 * 	}
		 * 	
		 * 	$t = new template('test.htm');
		 * 	$t->assign('form', $form_html);
		 * 	$t->output();
		 * }
		 * </code>
		 * 
		 * @param string $method
		 * @return bool
		 */
		
		function form_validate($method = "POST")
		{
			if (sizeof($this->_fields) == 0)
			{
				return(true);
			}
			
			$form_success = true;
			
			foreach($this->_fields as $key => $field)
			{

				switch($method)
				{
					case 'POST':
						$value = post($field['name'], $field['default_value'], false);
						break;
						
					case 'GET':
						$value = get($field['name'], $field['default_value'], false);
						break;
				}
				
				$this->_fields[$key]['value'] = $value;
				
				if (is_array($field['validator']))
				{
					foreach($field['validator'] as $validator)
					{
						
						if (is_array($value))
						{
							$value = serialize($value);
							$validate_code = sprintf('$validate_result = %s("%s", "%s", true);', $this->_validators[$validator], addslashes($field['name']), addslashes($value));
						}
						else 
						{
							$validate_code = sprintf('$validate_result = %s("%s", "%s");', $this->_validators[$validator], addslashes($field['name']), addslashes($value));
						}
						
						eval($validate_code);
						
						if ($validate_result !== true)
						{
							break;
						}
					}
				}
				elseif ($field['validator'] != '')
				{
					
					if (is_array($value))
					{
						$value = serialize($value);
						$validate_code = sprintf('$validate_result = %s("%s", "%s", true);', $this->_validators[$field['validator']], addslashes($field['name']), addslashes($value));
					}
					else 
					{
						$validate_code = sprintf('$validate_result = %s("%s", "%s");', $this->_validators[$field['validator']], addslashes($field['name']), addslashes($value));
					}
					
					eval($validate_code);
				}
				else 
				{
					$validate_result = true;
				}
				
				if ($validate_result === true)
				{
					unset($this->_fields[$key]['error']);
					unset($this->_fields[$key]['error_message']);
				}
				else
				{
					$form_success = false;				
					$this->_fields[$key]['error'] = true;
					$this->_fields[$key]['error_message'] = $validate_result['error_message'];
				}
			}
			
			return($form_success);
		}

		/**
		 * Manually set an error message for a specific field.
		 *
		 * @param string $field
		 * @param string $error_message
		 */
		
		function form_set_error($field, $error_message)
		{
			if (isset($this->_fields[$field]))
			{
				$this->_fields[$field]['error'] = true;
				$this->_fields[$field]['error_message'] = $error_message;
			}
		}
		
		/**
		 * Used to display the generated form. This method is used when the form layout is too complex
		 * to generate using a standard skin. All replaces are assigned into the $template.
		 *
		 * $show_errors is used to determine whether or not error messages will be shown.
		 * 
		 * @param template $template
		 * @param bool $show_errors
		 * @return bool
		 */
		
		function form_manual_display(&$template, $show_errors = true)
		{
			
			if (sizeof($this->_fields) > 0)
			{
				foreach($this->_fields as $key => $field)
				{
					$error = 0;
					$error_message = '';
					$value = '';
					
					if ($show_errors)
					{
						if (isset($field['error']))
						{
							$error = $field['error'];
						}
						
						if (isset($field['error_message']))
						{
							$error_message = $field['error_message'];
						}
					}
					
					if (isset($field['value']))
					{
						$value = $field['value'];
					}

					if (is_array($value))
					{
						$value = serialize($value);
					}
					
					$value = str_replace(array("\\'", "'"),  array("'", "\'"), $value);
					
					$field_html_code = sprintf('$field_html = %s(\'%s\', \'%s\', \'%s\', \'%s\', \'%s\');', $this->_field_types[$field['type']], addslashes($field['title']), addslashes($field['name']), $value, $error, addslashes($error_message));
					eval($field_html_code);

					$template->assign('form_field_'.$field['name'], $field_html);
				}
			}
			
			$template->assign('form_method', $this->_form_method);
			$template->assign('form_action', $this->_form_action);
			$template->assign('form_name', $this->_form_name);

			return(true);
			
		}
		
		/**
		 * Used to display the generated form.
		 *
		 * $show_errors is used to determine whether or not error messages will be shown.
		 * 
		 * @param bool $show_errors
		 * @return string
		 */
		
		function form_display($show_errors = true)
		{
			
			$form_html = $this->_skin_object->get_block('form');
			
			$form_fields_html = '';
			
			if (sizeof($this->_fields) > 0)
			{
				foreach($this->_fields as $key => $field)
				{
					$error = 0;
					$error_message = '';
					$value = '';
					
					if ($show_errors)
					{
						if (isset($field['error']))
						{
							$error = $field['error'];
						}
						
						if (isset($field['error_message']))
						{
							$error_message = $field['error_message'];
						}
					}
					
					if (isset($field['value']))
					{
						$value = $field['value'];
					}

					if (is_array($value))
					{
						$value = serialize($value);
					}
					
					$field_html_code = sprintf('$field_html = %s(\'%s\', \'%s\', \'%s\', \'%s\', \'%s\');', $this->_field_types[$field['type']], addslashes($field['title']), addslashes($field['name']), $value, $error, addslashes($error_message));
					eval($field_html_code);
					
					$this->_skin_object->assign('form_field_'.$field['name'], $field_html);

					$form_fields_html .= $field_html;
				}
			}
			
			$this->_skin_object->load_raw($form_html);
			$this->_skin_object->assign('form_content', $form_fields_html);
			$this->_skin_object->assign('form_method', $this->_form_method);
			$this->_skin_object->assign('form_action', $this->_form_action);
			$this->_skin_object->assign('form_name', $this->_form_name);

			return($this->_skin_object->output(true));
			
		}
		
		/**
		 * Field Type: Hidden
		 *
		 * @ignore
		 */
		
		function _field_type_hidden($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input hidden');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', $value);
			$this->_skin_field->assign('error_message', $error_message);
			return($this->_skin_field->output(true));
		}
		
		
		/**
		 * Field Type: Input Text
		 *
		 * @ignore
		 */
		
		function _field_type_text($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input text');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', htmlentities($value));
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: Text Area
		 *
		 * @ignore
		 */
		
		function _field_type_textarea($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input textarea');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', htmlentities($value));
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: FCK Text Area
		 *
		 * @ignore
		 */
		
		function _field_type_fcktextarea($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input fcktextarea');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', htmlentities($value));
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: Input Password
		 *
		 * @ignore
		 */
		
		function _field_type_password($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input password');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', htmlentities($value));
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: Submit Button
		 *
		 * @ignore
		 */
		
		function _field_type_submit($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input submit');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: Button
		 *
		 * @ignore
		 */
		
		function _field_type_button($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input button');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: Label
		 *
		 * @ignore
		 */
		
		function _field_type_label($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input label');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('value', $value);
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: Country Select Box
		 *
		 * @ignore
		 */
		
		function _field_type_country($title, $name, $value, $error, $error_message)
		{
			global $mysql;
			global $CONFIG;
			
			$lang = $CONFIG['current_lang'];
			
			$field_html = $this->_skin_object->get_block('input country');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', $value);
			
			$query_countries = "
				SELECT countries_index.global_country_id value, name
				FROM global_countries_index countries_index, global_countries_content countries_content
				WHERE countries_content.global_country_id = countries_index.global_country_id
				AND lang = '{$lang}'
				ORDER BY name ASC;
			";
			
			$rset_countries = $mysql->query($query_countries);
			
			$this->_skin_field->loop('countries', $rset_countries);
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: State Select Box
		 *
		 * @ignore
		 */
		
		function _field_type_state($title, $name, $value, $error, $error_message)
		{
			global $mysql;
			global $CONFIG;
			
			$lang = $CONFIG['current_lang'];
			
			$field_html = $this->_skin_object->get_block('input state');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', $value);
			
			$query_states = "
				SELECT states_index.global_state_id value, name
				FROM global_states_index states_index, global_states_content states_content
				WHERE states_content.global_state_id = states_index.global_state_id
				AND lang = '{$lang}'
				ORDER BY name ASC;
			";
			
			$rset_states = $mysql->query($query_states);
			
			$this->_skin_field->loop('states', $rset_states);
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		

		/**
		 * Validator: Select Box
		 *
		 * @ignore
		 */
		
		function _selectbox_validator($name, $value)
		{
			
			$options = $this->_fields[$name]['default_value']['options'];
			
			if (sizeof($options) > 0)
			{
				foreach($options as $option)
				{
					if ($option['value'] == $value)
					{
						return(true);
					}
				}
			}
			
			return(array('error' => 'true', 'error_message' => 'Field is Empty'));
		}
		
		/**
		 * Field Type: Select Box
		 * 
		 * @ignore
		 */
		
		function _field_type_selectbox($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input selectbox');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			
			$select = @unserialize($value);
			
			if (!is_array($select))
			{
				$loop_options = $this->_fields[$name]['default_value']['options'];
			}
			else 
			{
				$loop_options = $select['options'];
				$value = $select['value'];
			}
			
			$this->_skin_field->loop('selectbox', $loop_options);
			
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', $value);
			
			if ($error_message != '' || (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
			
		}		
		
		/**
		 * Field Type: Yes/No Selection
		 * 
		 * @ignore
		 */
		
		function _field_type_yesno($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input yesno');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', $value);
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: Checkbox
		 * 
		 * @ignore
		 */
		
		function _field_type_checkbox($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input checkbox');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', $value);
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: Yes/No Selection
		 * 
		 * @ignore
		 */
		
		function _field_type_yesnolabel($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input yesnolabel');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);	
			
			if ($value)
			{
				$this->_skin_field->assign('value', TRANSLATE('yes'));
			}
			else 
			{
				$this->_skin_field->assign('value', TRANSLATE('no'));
			}
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Field Type: Male/Female Selection
		 * 
		 * @ignore
		 */
		
		function _field_type_malefemale($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input malefemale');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', $value);
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		
		/**
		 * Field Type: File
		 * 
		 * @ignore
		 */
		
		function _field_type_file($title, $name, $value, $error, $error_message)
		{
			$field_html = $this->_skin_object->get_block('input file');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			$this->_skin_field->assign('value', $value);
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}

		/**
		 * Field Type: Careers Date Selector
		 *
		 * @ignore
		 */
		
		function _field_type_date($title, $name, $value, $error, $error_message)
		{
			global $mysql;
			global $CONFIG;
			
			if (is_numeric($value) && $value != '')
			{
				$value = date('j-n-Y', $value);
			}
			
			$lang = $CONFIG['current_lang'];
			
			$field_html = $this->_skin_object->get_block('input date');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			
			if ((int)$value != '')
			{
				$this->_skin_field->assign('value', $value);
			}
			else 
			{
				$this->_skin_field->assign('value', '');
			}
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}		
		
		/**
		 * Validator: Date
		 *
		 * @ignore
		 */
		
		function _date_validator($name, $value)
		{
			$timestamp = date_to_timestamp($value);
			
			if ($timestamp > 0)
			{
				return(true);
			}
			else 
			{
				return(array('error' => 'true', 'error_message' => 'Field is Empty'));
			}
		}
		
		/**
		 * Field Type: Phone Number
		 *
		 * @ignore
		 */
		
		function _field_type_phone_number($title, $name, $value, $error, $error_message)
		{
			$value = @unserialize($value);
			
			$field_html = $this->_skin_object->get_block('input phone');
			$this->_skin_field->load_raw($field_html);
			$this->_skin_field->reset();
			$this->_skin_field->assign('title', $title);
			$this->_skin_field->assign('name', $name);
			
			if (sizeof($value) == 3)
			{
				$this->_skin_field->assign('value_1', $value[0]);
				$this->_skin_field->assign('value_2', $value[1]);
				$this->_skin_field->assign('value_3', $value[2]);
			}
			else 
			{
				$this->_skin_field->assign('value_1', '');
				$this->_skin_field->assign('value_2', '');
				$this->_skin_field->assign('value_3', '');				
			}
			
			if ($error_message != '' && (bool)$error)
			{
				$this->_skin_field->assign('error', $error);
				$this->_skin_field->assign('error_message', $error_message);
			}
			
			return($this->_skin_field->output(true));
		}
		
		/**
		 * Called by the class when an error occurs.
		 *
		 * @ignore
		 */
		
		function _report_error($number)
		{
			if (!isset($this->_errors[$number]))
			{
				return(false);
			}
			
			if (func_num_args() > 1)
			{
				$func_args = '';
				
				for($argId = 1; $argId < func_num_args(); $argId++)
				{
					$argument = func_get_arg($argId);
					$func_args .= "'".addslashes($argument)."',";
				}
				
				$func_args = substr($func_args, 0, -1);
				
				$eval_code = '$message = sprintf("'.addslashes($this->_errors[$number]).'",'.$func_args.');';
				eval($eval_code);
			}
			else 
			{
				$message = $this->_errors[$number];
			}
			
			trigger_error($message, E_USER_ERROR);
		}
		
		/**
		 * Validator: Email
		 *
		 * @ignore
		 */
		
		function _email_validator($name, $value)
		{
			if(ereg("([[:alnum:]\.\-]+)(\@[[:alnum:]\.\-]+\.+)", $value))
			{
				return(true);
			}
			else
			{
				return(array('error' => 'true', 'error_message' => 'Invalid E-mail Address'));
			}
		}
		
		/**
		 * Validator: Username Exist
		 *
		 * @ignore
		 */
		
		function _username_validator($name, $value)
		{
			global $mysql;
			
			$query_username = "
				SELECT count(user_id) amount
				FROM admin_users
				WHERE username = '{$value}';
			";

			$user = $mysql->fetch_record($mysql->query($query_username));
			
			if ($user['amount'] == '0')
			{
				return(true);
			}
			else 
			{
				return(array('error' => 'true', 'error_message' => 'Username Already in Use!'));
			}
		}
		
		/**
		 * Validator: Required Field
		 *
		 * @ignore
		 */
		
		function _required_validator($name, $value, $is_array = false)
		{
			
			if ($is_array)
			{
				$value = @unserialize($value);
			}
			
			if (!is_array($value) && $value != '')
			{
				return(true);
			}
			elseif (is_array($value) && sizeof($value) > 0)
			{
				
				foreach($value as $key => $single_value)
				{
					if ($single_value == '')
					{
						return(array('error' => 'true', 'error_message' => 'Field is Empty'));
					}
				}
				
				return(true);
			}
			else 
			{
				return(array('error' => 'true', 'error_message' => 'Field is Empty'));
			}
		}
		
		/**
		 * Set $object to the form skin object
		 *
		 * @param object $object
		 */
		
		function get_skin_object(&$object)
		{
			$object &= $this->_skin_object;
		}
		
		/**
		 * Set $object to the form skin field object
		 *
		 * @param object $object
		 */
		
		function get_skin_field_object(&$object)
		{
			$object &= $this->_skin_field;
		}
		
	}

?>