/
Form.php
117 lines (116 loc) · 3.78 KB
/
Form.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
class FormField {
private $mandatory;
protected $valid = TRUE;
private $value;
private $messageEmpty;
private $messageInvalid;
private $validator;
private $arguments;
private $errorMessage;
protected function __construct($value, $mandatory,
$messageInvalid, $messageEmpty, $validator, $arguments) {
$this->mandatory = $mandatory;
$this->value = $value;
$this->messageEmpty = $messageEmpty;
$this->messageInvalid = $messageInvalid;
$this->validator = $validator;
$this->arguments = $arguments;
}
public function setValid($flag) {
$this->valid = $flag;
}
public function &__get($name) {
return $this->$name;
}
public function __set($name, $value) {
$this->$name = $value;
}
}
class Form extends FormField {
protected $formFields = array();
protected $valid = TRUE;
public $settings;
final public function __set($name, $value) {
error_log("Cannot set property called '$name' " .
"due to its access modifier!");
}
public function __construct($validationSettings, $data = NULL) {
foreach($validationSettings as $setting) {
$this->formFields[] = new FormField((isset($data)) ?
$data[$setting["name"]] : pget($setting["name"]),
$setting["mandatory"], $setting["messageInvalid"],
$setting["messageEmpty"], $setting["validator"],
$setting["arguments"]);
}
}
public function validate() {
foreach($this->formFields as $formField) {
if($formField->mandatory && $formField->value == "") {
$formField->valid = FALSE;
$formField->errorMessage = $formField->messageEmpty;
$this->valid = FALSE;
}
elseif($formField->value != "") {
if($formField->validator != NULL) {
$formField->arguments[] = $formField->value;
$formField->arguments[] = $formField;
$formField->valid = call_user_func_array(array($this,
$formField->validator), $formField->arguments);
}
else {
$formField->valid = TRUE;
}
if(!$formField->valid) {
$formField->errorMessage = $formField->messageInvalid;
$this->valid = FALSE;
}
}
}
}
public function setValid($flag) {
$this->valid = $flag;
}
public function emptyFieldValues() {
foreach($this->formFields as $formField) {
$formField->value = "";
}
}
protected function uniqueLDAPEntry($ldap, $filter, $validator,
$arguments, $notUnique, $count, $value, $field) {
if($validator != NULL) {
$arguments[] = $value;
$arguments[] = $field;
$result = call_user_func_array(array($this, $validator), $arguments);
if(!$result) {
return FALSE;
}
}
$values = array();
for($i = 0; $i < $count; $i++) {
$values[] = $value;
}
$filter = vsprintf($filter, $values);
$count = $ldap->countFilterResults($filter);
if($count > 0 && $notUnique != NULL) {
$field->messageInvalid = $notUnique;
return FALSE;
}
else {
return TRUE;
}
}
protected function regexValidator($expression, $value, $formField) {
$result = preg_match($expression, $value);
if($result === 0) {
return FALSE;
}
elseif($result === 1) {
return TRUE;
}
else {
return 2;
}
}
}
?>