forked from Public/pics
Initial commit.
This is to be the new HashRU website based on the Aaronweb.net/Kabuki CMS.
This commit is contained in:
165
models/Form.php
Normal file
165
models/Form.php
Normal file
@@ -0,0 +1,165 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user