1 | <?php
|
---|
2 |
|
---|
3 | include_once('form_classes.php');
|
---|
4 | include_once('database.php');
|
---|
5 |
|
---|
6 | class Form
|
---|
7 | {
|
---|
8 | var $Definition = array();
|
---|
9 | var $Values = array();
|
---|
10 | var $OnSubmit = '';
|
---|
11 |
|
---|
12 | function Form($ClassName)
|
---|
13 | {
|
---|
14 | global $FormClasses;
|
---|
15 |
|
---|
16 | $this->Definition = &$FormClasses[$ClassName];
|
---|
17 | }
|
---|
18 |
|
---|
19 | function ShowEditForm()
|
---|
20 | {
|
---|
21 | if(!array_key_exists('SubmitText', $this->Definition)) $this->Definition['SubmitText'] = 'Uložit';
|
---|
22 | $Output = '<form class="Form" action="'.$this->OnSubmit.'" method="post">'.$this->ShowEditBlock().'<div><input type="submit" value="'.$this->Definition['SubmitText'].'" /></div></form>';
|
---|
23 | return($Output);
|
---|
24 | }
|
---|
25 |
|
---|
26 | function ShowEditBlock($Context = '')
|
---|
27 | {
|
---|
28 | global $Database, $FormTypes;
|
---|
29 |
|
---|
30 | $Table = array(
|
---|
31 | //'Header' => array('Položka', 'Hodnota'),
|
---|
32 | 'Rows' => array(),
|
---|
33 | );
|
---|
34 | if($Context != '') $Context = $Context.'-';
|
---|
35 | foreach($this->Definition['Items'] as $Index => $Item)
|
---|
36 | {
|
---|
37 | if(!array_key_exists($Index, $this->Values) and isset($Item['Default'])) $this->Values[$Index] = $Item['Default'];
|
---|
38 | switch($Item['Type'])
|
---|
39 | {
|
---|
40 | case 'Boolean':
|
---|
41 | if($this->Values[$Index] == 0) $Checked = ''; else $Checked = ' CHECKED';
|
---|
42 | $Edit = '<input type="checkbox" name="'.$Context.$Index.'"'.$Checked.' />';
|
---|
43 | break;
|
---|
44 | case 'String':
|
---|
45 | $Edit = '<input style="width: 98%;" type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
|
---|
46 | break;
|
---|
47 | case 'Text':
|
---|
48 | $Edit = '<textarea style="width: 98%; height: 200px;" name="'.$Context.$Index.'">'.$this->Values[$Index].'</textarea>';
|
---|
49 | break;
|
---|
50 | case 'Password':
|
---|
51 | $Edit = '<input style="width: 98%;" type="password" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
|
---|
52 | break;
|
---|
53 | case 'Integer':
|
---|
54 | $Edit = '<input style="width: 98%;" type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
|
---|
55 | break;
|
---|
56 | case 'Float':
|
---|
57 | $Edit = '<input style="width: 98%;" type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
|
---|
58 | break;
|
---|
59 | case 'Time':
|
---|
60 | if($this->Values[$Index] == 'Now') $this->Values[$Index] = date('j.n.Y');
|
---|
61 | $Edit = '<input style="width: 98%;" type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
|
---|
62 | break;
|
---|
63 | case 'Array':
|
---|
64 | $Form = new Form($Item['ItemClass']);
|
---|
65 | $Edit = '<script type="text/javascript" id="syndication">'.
|
---|
66 | "var Count = 0;".
|
---|
67 | "function AddItem() {".
|
---|
68 | "Count = Count + 1;".
|
---|
69 | "var newcontent = document.createElement('div');".
|
---|
70 | "newcontent.id = '".$Context.$Item['ItemClass']."-' + Count;".
|
---|
71 | "newcontent.innerHTML = '<input type=\"hidden\" name=\"".$Context.$Item['ItemClass']."-' + Count + '\">".$Form->ShowEditBlock($Context.$Item['ItemClass']."-' + Count + '")."';".
|
---|
72 | "var scr = document.getElementById('syndication');".
|
---|
73 | "scr.parentNode.insertBefore(newcontent, scr); }".
|
---|
74 | '</script>';
|
---|
75 | $Edit .= '<form><input type="button" onclick="AddItem();" value="Přidat položku" /></form>';
|
---|
76 | break;
|
---|
77 | default:
|
---|
78 | if(array_key_exists($Item['Type'], $FormTypes))
|
---|
79 | {
|
---|
80 | // Custom types
|
---|
81 | switch($FormTypes[$Item['Type']]['Type'])
|
---|
82 | {
|
---|
83 | case 'Enumeration':
|
---|
84 | $Edit = '<select style="width: 100%;" name="'.$Context.$Index.'">';
|
---|
85 | foreach($FormTypes[$Item['Type']]['States'] as $StateIndex => $StateName)
|
---|
86 | {
|
---|
87 | if($this->Values[$Index] == $StateIndex) $Selected = 'selected="selected"';
|
---|
88 | else $Selected = '';
|
---|
89 | $Edit .= '<option value="'.$StateIndex.'"'.$Selected.'>'.$StateName.'</option>';
|
---|
90 | }
|
---|
91 | $Edit .= '</select>';
|
---|
92 | break;
|
---|
93 | case 'Reference':
|
---|
94 | $Edit = '<select style="width: 100%;" name="'.$Context.$Index.'">';
|
---|
95 | $DbResult = $Database->select($FormTypes[$Item['Type']]['Table'], $FormTypes[$Item['Type']]['Id'].' as Id, '.$FormTypes[$Item['Type']]['Name'].' as Name', $FormTypes[$Item['Type']]['Filter'].' ORDER BY Name');
|
---|
96 | while($Row = $DbResult->fetch_assoc())
|
---|
97 | {
|
---|
98 | if($Row['Id'] == $this->Values[$Index]) $Selected = ' selected="selected"';
|
---|
99 | else $Selected = '';
|
---|
100 | $Edit .= '<option value="'.$Row['Id'].'"'.$Selected.'>'.$Row['Id'].': '.$Row['Name'].'</option>';
|
---|
101 | }
|
---|
102 | $Edit .= '</select>';
|
---|
103 | break;
|
---|
104 | default:
|
---|
105 | $Edit = 'Neznámý typ';
|
---|
106 | }
|
---|
107 | } else $Edit = 'Neznámý typ';
|
---|
108 | }
|
---|
109 | array_push($Table['Rows'], array($Item['Caption'].':', $Edit));
|
---|
110 | }
|
---|
111 | $Output = '<fieldset><legend>'.$this->Definition['Title'].'</legend>'.Table($Table).
|
---|
112 | '</fieldset>';
|
---|
113 | return($Output);
|
---|
114 | }
|
---|
115 |
|
---|
116 | function LoadValuesFromDatabase($Id)
|
---|
117 | {
|
---|
118 | global $Database;
|
---|
119 |
|
---|
120 | $DbResult = $Database->query('SELECT T.* FROM '.$this->Definition['Table'].' AS T WHERE T.Id='.$Id);
|
---|
121 | $DbRow = $DbResult->fetch_array();
|
---|
122 | foreach($this->Definition['Items'] as $Index => $Item)
|
---|
123 | {
|
---|
124 | $this->Values[$Index] = $DbRow[$Index];
|
---|
125 | switch($Item['Type'])
|
---|
126 | {
|
---|
127 | case 'Password':
|
---|
128 | if($Item['Type'] == 'Password') $this->Values[$Index] = ''; // Dont show password
|
---|
129 | break;
|
---|
130 | case 'Time':
|
---|
131 | $this->Values[$Index] == MysqlDateTimeToTime($this->Values[$Index]);
|
---|
132 | break;
|
---|
133 | }
|
---|
134 | }
|
---|
135 | }
|
---|
136 |
|
---|
137 | function SaveValuesToDatabase($Id)
|
---|
138 | {
|
---|
139 | global $Database;
|
---|
140 |
|
---|
141 | foreach($this->Definition['Items'] as $Index => $Item)
|
---|
142 | {
|
---|
143 | switch($Item['Type'])
|
---|
144 | {
|
---|
145 | case 'Password':
|
---|
146 | if($this->Values[$Index] == '') unset($this->Values[$Index]); // Do not modify empty passwords
|
---|
147 | else $this->Values[$Index] = sha1($this->Values[$Index]);
|
---|
148 | break;
|
---|
149 | case 'Time':
|
---|
150 | $this->Values[$Index] = TimeToMysqlDateTime($this->Values[$Index]);
|
---|
151 | break;
|
---|
152 | }
|
---|
153 | }
|
---|
154 | if($Id == 0)
|
---|
155 | {
|
---|
156 | $this->Values['Id'] = $Id;
|
---|
157 | $DbResult = $Database->replace($this->Definition['Table'], $this->Values);
|
---|
158 | } else
|
---|
159 | $DbResult = $Database->update($this->Definition['Table'], 'Id='.$Id, $this->Values);
|
---|
160 | //echo($Database->LastQuery);
|
---|
161 | }
|
---|
162 |
|
---|
163 | function LoadValuesFromForm()
|
---|
164 | {
|
---|
165 | $this->Values = $this->LoadValuesFromFormBlock();
|
---|
166 | }
|
---|
167 |
|
---|
168 | function LoadValuesFromFormBlock($Context = '')
|
---|
169 | {
|
---|
170 | global $FormTypes;
|
---|
171 |
|
---|
172 | if($Context != '') $Context = $Context.'-';
|
---|
173 | $Values = array();
|
---|
174 | foreach($this->Definition['Items'] as $Index => $Item)
|
---|
175 | {
|
---|
176 | if(array_key_exists($Context.$Index, $_POST))
|
---|
177 | switch($Item['Type'])
|
---|
178 | {
|
---|
179 | case 'Boolean':
|
---|
180 | if(array_key_exists($Context.$Index, $_POST)) $Values[$Index] = 1;
|
---|
181 | else $Values[$Index] = 0;
|
---|
182 | break;
|
---|
183 | case 'String':
|
---|
184 | $Values[$Index] = $_POST[$Context.$Index];
|
---|
185 | break;
|
---|
186 | case 'Text':
|
---|
187 | $Values[$Index] = $_POST[$Context.$Index];
|
---|
188 | break;
|
---|
189 | case 'Password':
|
---|
190 | $Values[$Index] = $_POST[$Context.$Index];
|
---|
191 | break;
|
---|
192 | case 'Integer':
|
---|
193 | $Values[$Index] = $_POST[$Context.$Index];
|
---|
194 | break;
|
---|
195 | case 'Float':
|
---|
196 | $Values[$Index] = $_POST[$Context.$Index];
|
---|
197 | break;
|
---|
198 | case 'Time':
|
---|
199 | $Values[$Index] = explode('.', $_POST[$Context.$Index]);
|
---|
200 | $Values[$Index] = mktime(0, 0, 0, $Values[$Index][1], $Values[$Index][0], $Values[$Index][2]);
|
---|
201 | break;
|
---|
202 | case 'Array':
|
---|
203 | $I = 1;
|
---|
204 | //echo('Expect: '.$Context.$Item['ItemClass'].'-'.$I.'<br />');
|
---|
205 | while(isset($_POST[$Context.$Item['ItemClass'].'-'.$I]))
|
---|
206 | {
|
---|
207 | $Form = new Form($Item['ItemClass']);
|
---|
208 | $Values[$Index][] = $Form->LoadValuesFromFormBlock($Context.$Item['ItemClass'].'-'.$I);
|
---|
209 | $I++;
|
---|
210 | }
|
---|
211 | break;
|
---|
212 | default:
|
---|
213 | if(array_key_exists($Item['Type'], $FormTypes))
|
---|
214 | {
|
---|
215 | // Custom types
|
---|
216 | switch($FormTypes[$Item['Type']]['Type'])
|
---|
217 | {
|
---|
218 | case 'Enumeration':
|
---|
219 | $Values[$Index] = $_POST[$Context.$Index];
|
---|
220 | break;
|
---|
221 | case 'Reference':
|
---|
222 | $Values[$Index] = $_POST[$Context.$Index];
|
---|
223 | break;
|
---|
224 | default:
|
---|
225 | }
|
---|
226 | }
|
---|
227 | }
|
---|
228 | }
|
---|
229 | return($Values);
|
---|
230 | }
|
---|
231 | }
|
---|
232 |
|
---|
233 | function MakeLink($Target, $Title)
|
---|
234 | {
|
---|
235 | return('<a href="'.$Target.'">'.$Title.'</a>');
|
---|
236 | }
|
---|
237 |
|
---|
238 | function Table($Table)
|
---|
239 | {
|
---|
240 | $Result = '<table class="BasicTable">';
|
---|
241 | if(array_key_exists('Header', $Table))
|
---|
242 | {
|
---|
243 | $Result .= '<tr>';
|
---|
244 | foreach($Table['Header'] as $Item)
|
---|
245 | $Result .= '<th>'.$Item.'</th>';
|
---|
246 | $Result .= '</tr>';
|
---|
247 | }
|
---|
248 | foreach($Table['Rows'] as $Row)
|
---|
249 | {
|
---|
250 | $Result .= '<tr>';
|
---|
251 | foreach($Row as $Index => $Item)
|
---|
252 | {
|
---|
253 | if($Index == 0) $Class = ' class="Header"'; else $Class = '';
|
---|
254 | $Result .= '<td'.$Class.' style="width: '.(floor(100 / count($Row))).'%">'.$Item.'</td>';
|
---|
255 | }
|
---|
256 | $Result .= '</tr>';
|
---|
257 | }
|
---|
258 | $Result .= '</table>';
|
---|
259 | return($Result);
|
---|
260 | }
|
---|
261 |
|
---|
262 | function ShowEditTable($ClassName, $Values)
|
---|
263 | {
|
---|
264 | }
|
---|
265 |
|
---|
266 | ?>
|
---|