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; } }