This is to be the new HashRU website based on the Aaronweb.net/Kabuki CMS.
		
			
				
	
	
		
			166 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /*****************************************************************************
 | |
|  * Form.php
 | |
|  * Contains key class Form.
 | |
|  *
 | |
|  * Kabuki CMS (C) 2013-2015, Aaron van Geffen
 | |
|  *****************************************************************************/
 | |
| 
 | |
| class Form
 | |
| {
 | |
| 	public $request_method;
 | |
| 	public $request_url;
 | |
| 	public $content_above;
 | |
| 	public $content_below;
 | |
| 	private $fields;
 | |
| 	private $data;
 | |
| 	private $missing;
 | |
| 
 | |
| 	// NOTE: this class does not verify the completeness of form options.
 | |
| 	public function __construct($options)
 | |
| 	{
 | |
| 		$this->request_method = !empty($options['request_method']) ? $options['request_method'] : 'POST';
 | |
| 		$this->request_url = !empty($options['request_url']) ? $options['request_url'] : BASEURL;
 | |
| 		$this->fields = !empty($options['fields']) ? $options['fields'] : [];
 | |
| 		$this->content_below = !empty($options['content_below']) ? $options['content_below'] : null;
 | |
| 		$this->content_above = !empty($options['content_above']) ? $options['content_above'] : null;
 | |
| 	}
 | |
| 
 | |
| 	public function verify($post)
 | |
| 	{
 | |
| 		$this->data = [];
 | |
| 		$this->missing = [];
 | |
| 
 | |
| 		foreach ($this->fields as $field_id => $field)
 | |
| 		{
 | |
| 			// Field disabled?
 | |
| 			if (!empty($field['disabled']))
 | |
| 			{
 | |
| 				$this->data[$field_id] = '';
 | |
| 				continue;
 | |
| 			}
 | |
| 
 | |
| 			// No data present at all for this field?
 | |
| 			if ((!isset($post[$field_id]) || $post[$field_id] == '') && empty($field['is_optional']))
 | |
| 			{
 | |
| 				$this->missing[] = $field_id;
 | |
| 				$this->data[$field_id] = '';
 | |
| 				continue;
 | |
| 			}
 | |
| 
 | |
| 			// Verify data for all fields
 | |
| 			switch ($field['type'])
 | |
| 			{
 | |
| 				case 'select':
 | |
| 				case 'radio':
 | |
| 					// Skip validation? Dangerous territory!
 | |
| 					if (isset($field['verify_options']) && $field['verify_options'] === false)
 | |
| 						$this->data[$field_id] = $post[$field_id];
 | |
| 					// Check whether selected option is valid.
 | |
| 					elseif (isset($post[$field_id]) && !isset($field['options'][$post[$field_id]]))
 | |
| 					{
 | |
| 						$this->missing[] = $field_id;
 | |
| 						$this->data[$field_id] = '';
 | |
| 						continue;
 | |
| 					}
 | |
| 					else
 | |
| 						$this->data[$field_id] = $post[$field_id];
 | |
| 					break;
 | |
| 
 | |
| 				case 'checkbox':
 | |
| 					// Just give us a 'boolean' int for this one
 | |
| 					$this->data[$field_id] = empty($post[$field_id]) ? 0 : 1;
 | |
| 					break;
 | |
| 
 | |
| 				case 'color':
 | |
| 					// Colors are stored as a string of length 3 or 6 (hex)
 | |
| 					if (!isset($post[$field_id]) || (strlen($post[$field_id]) != 3 && strlen($post[$field_id]) != 6))
 | |
| 					{
 | |
| 						$this->missing[] = $field_id;
 | |
| 						$this->data[$field_id] = '';
 | |
| 						continue;
 | |
| 					}
 | |
| 					else
 | |
| 						$this->data[$field_id] = $post[$field_id];
 | |
| 					break;
 | |
| 
 | |
| 				case 'file':
 | |
| 					// Needs to be verified elsewhere!
 | |
| 					break;
 | |
| 
 | |
| 				case 'numeric':
 | |
| 					$data = isset($post[$field_id]) ? $post[$field_id] : '';
 | |
| 					// Do we need to check bounds?
 | |
| 					if (isset($field['min_value']) && is_numeric($data))
 | |
| 					{
 | |
| 						if (is_float($field['min_value']) && (float) $data < $field['min_value'])
 | |
| 						{
 | |
| 							$this->missing[] = $field_id;
 | |
| 							$this->data[$field_id] = 0.0;
 | |
| 						}
 | |
| 						elseif (is_int($field['min_value']) && (int) $data < $field['min_value'])
 | |
| 						{
 | |
| 							$this->missing[] = $field_id;
 | |
| 							$this->data[$field_id] = 0;
 | |
| 						}
 | |
| 						else
 | |
| 							$this->data[$field_id] = $data;
 | |
| 					}
 | |
| 					elseif (isset($field['max_value']) && is_numeric($data))
 | |
| 					{
 | |
| 						if (is_float($field['max_value']) && (float) $data > $field['max_value'])
 | |
| 						{
 | |
| 							$this->missing[] = $field_id;
 | |
| 							$this->data[$field_id] = 0.0;
 | |
| 						}
 | |
| 						elseif (is_int($field['max_value']) && (int) $data > $field['max_value'])
 | |
| 						{
 | |
| 							$this->missing[] = $field_id;
 | |
| 							$this->data[$field_id] = 0;
 | |
| 						}
 | |
| 						else
 | |
| 							$this->data[$field_id] = $data;
 | |
| 					}
 | |
| 					// Does it look numeric?
 | |
| 					elseif (is_numeric($data))
 | |
| 					{
 | |
| 						$this->data[$field_id] = $data;
 | |
| 					}
 | |
| 					// Let's consider it missing, then.
 | |
| 					else
 | |
| 					{
 | |
| 						$this->missing[] = $field_id;
 | |
| 						$this->data[$field_id] = 0;
 | |
| 					}
 | |
| 					break;
 | |
| 
 | |
| 				case 'text':
 | |
| 				case 'textarea':
 | |
| 				default:
 | |
| 					$this->data[$field_id] = isset($post[$field_id]) ? $post[$field_id] : '';
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public function setData($data)
 | |
| 	{
 | |
| 		$this->verify($data);
 | |
| 		$this->missing = [];
 | |
| 	}
 | |
| 
 | |
| 	public function getFields()
 | |
| 	{
 | |
| 		return $this->fields;
 | |
| 	}
 | |
| 
 | |
| 	public function getData()
 | |
| 	{
 | |
| 		return $this->data;
 | |
| 	}
 | |
| 
 | |
| 	public function getMissing()
 | |
| 	{
 | |
| 		return $this->missing;
 | |
| 	}
 | |
| }
 |