source: base.php@ 26

Last change on this file since 26 was 26, checked in by george, 17 years ago
  • Opraveno: Logování správných id položek.
  • Upraveno: Částečně zprovozněno vícestupňové zobrazení odkazů.
File size: 23.7 KB
Line 
1<?php
2
3function ShowList($List, $Column = '', $ColumnValue = 0, $Title = '')
4{
5 global $Database, $Config;
6
7 if(!CheckPermission('Read', $List['ItemId']))
8 {
9 if($Column != '') return('');
10 else return(SystemMessage('Řízení přístupu', 'Nemáte dostatečná oprávnění'));
11 }
12
13 if($Title == '') $Output = '<div>'.$List['Title'].'</div>';
14 else $Output = '<div>'.$Title.'</div>';
15 $Output .= '<table class="WideTable"><tr>';
16 foreach($List['Items'] as $Item)
17 {
18 if($Item['VisibleInList'] == 1)
19 $Output .= '<th><a href="?OrderColumn='.$Item['Name'].'">'.$Item['TextBefore'].'</a></th>';
20 }
21 $Output .= '<th>Akce</th></tr>';
22
23 $Where = ' AND (t1.DeletionTime IS NULL)';
24
25 if(($Column != '') and ($ColumnValue != 0))
26 {
27 $Where .= ' AND (t1.'.$Column.'='.$ColumnValue.')';
28 $ColumnSelection = '&amp;Column='.$Column.'&amp;ColumnValue='.$ColumnValue;
29 $FullListLink = '<a href="?Action=ViewList&amp;Table='.$List['ItemId'].'">Celkový seznam</a>';
30 } else
31 {
32 $ColumnSelection = '';
33 $FullListLink = '';
34 }
35
36 // Handle ordering
37 if(array_key_exists('OrderColumn', $_GET))
38 {
39 if($_SESSION['OrderColumn'] == $_GET['OrderColumn']) // Same column => reverse order
40 $_SESSION['OrderDirection'] = ($_SESSION['OrderDirection'] + 1) % 2;
41 if($_SESSION['OrderTable'] != $List['ItemId']) // Different table => set ascending order
42 $_SESSION['OrderDirection'] = 0;
43 $_SESSION['OrderColumn'] = $_GET['OrderColumn'];
44 $_SESSION['OrderTable'] = $List['ItemId'];
45 }
46 if(array_key_exists('OrderColumn', $_SESSION) and ($_SESSION['OrderTable'] == $List['ItemId']))
47 {
48 $OrderDirection = array('ASC', 'DESC');
49 $Order = 'ORDER BY t1.`'.$_SESSION['OrderColumn'].'` '.$OrderDirection[$_SESSION['OrderDirection']];
50 } else $Order = '';
51
52 if(array_key_exists('Page', $_GET)) $Page = $_GET['Page']; else $Page = 0;
53 //$Where .= ' AND (ValidFromTime <= NOW()) AND ((ValidToTime >= NOW()) OR (ValidToTime IS NULL))';
54 $Where .= ' '.$Order;
55 $DbResult = $Database->query('SELECT COUNT(t2.Id) AS Count FROM (SELECT DISTINCT(ItemId) as Id FROM `'.$List['TableName'].'` as t1 WHERE 1'.$Where.') as t2');
56 $DbRow = $DbResult->fetch_row();
57 $TotalItemCount = $DbRow[0];
58
59 $DbResult = $Database->query('SELECT t1.* FROM `'.$List['TableName'].'` AS t1 LEFT JOIN `'.$List['TableName'].'` AS t2 ON t1.ItemId=t2.ItemId AND t1.Id < t2.Id WHERE (t2.ItemId IS NULL)'.$Where.' LIMIT '.($Page * $Config['Web']['ItemsPerPage']).', '.$Config['Web']['ItemsPerPage']);
60 //echo($Database->LastQuery);
61 while($DbRow = $DbResult->fetch_assoc())
62 {
63 $Output .= '<tr>';
64 foreach($List['Items'] as $Index => $Item)
65 {
66 if($Item['VisibleInList'] == 1)
67 {
68 $ItemDefinition = array('Name' => $Index, 'Value' => $DbRow[$Index], 'SourceTable' => $List['ItemId'], 'SourceItemId' => $DbRow['Id'], 'Type' => $Item['Type']);
69 $Output .= '<td>'.ExecuteTypeEvent($Item['Type'], 'OnView', $ItemDefinition).'</td>';
70 }
71 }
72 $Output .= '<td>';
73 if(CheckPermission('Read', $List['ItemId'])) $Output .= '<a href="?Action=ViewItem&amp;Table='.$List['ItemId'].'&amp;Item='.$DbRow['ItemId'].'"><img border="0" src="images/view.png" alt="Zobrazit" title="Zobrazit"></a>';
74 if(CheckPermission('Write', $List['ItemId'])) $Output .= ' <a href="?Action=EditItem&amp;Table='.$List['ItemId'].'&amp;Item='.$DbRow['ItemId'].'"><img border="0" src="images/edit.png" alt="Editovat" title="Editovat"></a>';
75 if(CheckPermission('Write', $List['ItemId'])) $Output .= ' <a href="?Action=DeleteItem&amp;Table='.$List['ItemId'].'&amp;Item='.$DbRow['ItemId'].'"><img border="0" src="images/delete.png" alt="Smazat" title="Smazat" onclick="return confirmAction(\'Opravdu smazat položku?\');"></a>';
76 $Output .= '</td></tr>';
77 }
78 $Output .= '</table>';
79 $PageList = PagesList($Page, $TotalItemCount);
80 if(strlen($PageList) != 0) $Output .= $PageList.'<br />';
81 if(CheckPermission('Write', $List['ItemId'])) $Output .= ' <a href="?Action=AddItem&amp;Table='.$List['ItemId'].$ColumnSelection.'">Přidat</a> '.$FullListLink;
82 return($Output);
83}
84
85function ShowHistory($List, $Id, $Title = '')
86{
87 global $Database, $Config;
88
89 if($Title == '') $Output = '<div>'.$List['Title'].'</div>';
90 else $Output = '<div>'.$Title.'</div>';
91 $Output .= '<table class="WideTable"><tr>';
92 foreach($List['Items'] as $Item)
93 {
94 if($Item['VisibleInList'] == 1)
95 $Output .= '<th><a href="?OrderColumn='.$Item['Name'].'">'.$Item['TextBefore'].'</a></th>';
96 }
97 $Output .= '<th><a href="?OrderColumn=Author">Autor</a></th><th><a href="?OrderColumn=CreationTime">Čas vytvoření</a></th><th><a href="?OrderColumn=CreationTime">Čas odstranění</a></th><th>Akce</th></tr>';
98
99 $Where = ' AND (ItemId='.$Id.')';
100
101 // Handle ordering
102 if(array_key_exists('OrderColumn', $_GET))
103 {
104 if($_SESSION['OrderColumn'] == $_GET['OrderColumn']) // Same column => reverse orded
105 $_SESSION['OrderDirection'] = ($_SESSION['OrderDirection'] + 1) % 2;
106 if($_SESSION['OrderTable'] != $List['ItemId']) // Different table => set ascending order
107 $_SESSION['OrderDirection'] = 0;
108 $_SESSION['OrderColumn'] = $_GET['OrderColumn'];
109 $_SESSION['OrderTable'] = $List['ItemId'];
110 }
111 if(array_key_exists('OrderColumn', $_SESSION) and ($_SESSION['OrderTable'] == $List['ItemId']))
112 {
113 $OrderDirection = array('ASC', 'DESC');
114 $Order = 'ORDER BY t1.`'.$_SESSION['OrderColumn'].'` '.$OrderDirection[$_SESSION['OrderDirection']];
115 } else $Order = '';
116
117 if(array_key_exists('Page', $_GET)) $Page = $_GET['Page']; else $Page = 0;
118 //$Where .= ' AND (ValidFromTime <= NOW()) AND ((ValidToTime >= NOW()) OR (ValidToTime IS NULL))';
119 $Where .= ' '.$Order;
120 $DbResult = $Database->query('SELECT COUNT(t2.Id) AS Count FROM (SELECT DISTINCT(ItemId) as Id FROM `'.$List['TableName'].'` as t1 WHERE 1'.$Where.') as t2');
121 //echo($Database->LastQuery.'<br>');
122 $DbRow = $DbResult->fetch_row();
123 $TotalItemCount = $DbRow[0];
124
125 $DbResult = $Database->query('SELECT * FROM `'.$List['TableName'].'` AS t1 WHERE 1'.$Where.' LIMIT '.($Page * $Config['Web']['ItemsPerPage']).', '.$Config['Web']['ItemsPerPage']);
126 //echo($Database->LastQuery.'<br>');
127 while($DbRow = $DbResult->fetch_assoc())
128 {
129 $Output .= '<tr>';
130 foreach($List['Items'] as $Item)
131 {
132 if($Item['VisibleInList'] == 1)
133 {
134 $ItemDefinition = array('Name' => $Item['Name'], 'Value' => $DbRow[$Item['Name']], 'SourceTable' => $List['ItemId'], 'SourceItemId' => $DbRow['Id'], 'Type' => $Item['Type']);
135 $Output .= '<td>'.ExecuteTypeEvent($Item['Type'], 'OnView', $ItemDefinition).'</td>';
136 }
137 }
138 $Item = array('Name' => 'Author', 'Type' => TypePointerToUserId);
139 $ItemDefinition = array('Name' => $Item['Name'], 'Value' => $DbRow[$Item['Name']], 'SourceTable' => $List['ItemId'], 'SourceItemId' => $DbRow['Id'], 'Type' => $Item['Type']);
140 $Output .= '<td>'.ExecuteTypeEvent($Item['Type'], 'OnView', $ItemDefinition).'</td>';
141
142 $Output .= '<td>'.$DbRow['CreationTime'].'</td><td>'.$DbRow['DeletionTime'].'</td>';
143 $Output .= '<td><a href="?Action=ViewItem&amp;Table='.$List['ItemId'].'&amp;Item='.$DbRow['Id'].'"><img border="0" src="images/view.png" alt="Zobrazit" title="Zobrazit"></a></td></tr>';
144 }
145 $Output .= '</table>';
146 $Output .= PagesList($Page, $TotalItemCount);
147 $Output .= ' <a href="?Action=ShowList&amp;Table='.$List['ItemId'].'">Celkový seznam</a>';
148 return($Output);
149}
150
151function ShowEditItem($List, $Id)
152{
153 global $Database;
154
155 if(!CheckPermission('Write', $List['ItemId'])) return(SystemMessage('Řízení přístupu', 'Nemáte dostatečná oprávnění'));
156 $DbResult = $Database->select($List['TableName'], '*', 'ItemId='.$Id.' ORDER BY Id DESC LIMIT 1');
157 while($DbRow = $DbResult->fetch_assoc())
158 {
159 $DefinitionItems = array();
160 foreach($List['Items'] as $Index => $Item)
161 {
162 $Type = GetTypeDefinition($Item['Type']);
163 if($Type['BaseType'] != 'PointerOneToMany')
164 {
165 if($Item['Editable'] == 1)
166 {
167 $DefinitionItems[] = array('Name' => $Index, 'Caption' => $Item['TextBefore'].$Required, 'Value' => $DbRow[$Index], 'SourceTable' => $List['ItemId'], 'SourceItemId' => $DbRow['Id'], 'Type' => $Item['Type']);
168 } else $DefinitionItems[] = array('Name' => $Index, 'Type' => TypeHiddenId, 'Caption' => '', 'Value' => $DbRow[$Index]);
169 }
170 }
171 }
172 $Form = new Form();
173 $Form->Definition = array
174 (
175 'Title' => '',
176 'SubmitBuffonText' => 'Uložit',
177 'Items' => $DefinitionItems,
178 );
179 $Form->OnSubmit = '?Action=EditItemFinish&amp;Item='.$Id;
180 $Output .= $Form->ShowEditForm();
181 if(($Column != '') and ($ColumnValue != 0))
182 {
183 $Output .= '<a href="?Action=ShowList&amp;Table='.$List['ItemId'].'&amp;Column='.$Column.'&amp;ColumnValue='.$ColumnValue.'">Celkový seznam</a>';
184 } else
185 {
186 $Output .= '<a href="?Action=ShowList&amp;Table='.$List['ItemId'].'">Celkový seznam</a>';
187 }
188 return($Output);
189}
190
191function ShowEditItemFinish($List, $Id)
192{
193 global $Database, $System, $LogActionType;
194
195 if(!CheckPermission('Write', $List['ItemId'])) return(SystemMessage('Řízení přístupu', 'Nemáte dostatečná oprávnění'));
196 $DbResult = $Database->select($List['TableName'], '*', 'ItemId='.$Id.' ORDER BY Id DESC LIMIT 1');
197 while($DbRow = $DbResult->fetch_assoc())
198 {
199 $DefinitionItems = array();
200 foreach($List['Items'] as $Index => $Item)
201 {
202 $Type = GetTypeDefinition($Item['Type']);
203 if($Type['BaseType'] != 'PointerOneToMany')
204 {
205 $DefinitionItems[] = array('Name' => $Index, 'Caption' => $Item['TextBefore'].$Required, 'Value' => $DbRow[$Index], 'SourceTable' => $List['ItemId'], 'SourceItemId' => $DbRow['Id'], 'Type' => $Item['Type']);
206 }
207 }
208 }
209 $Form = new Form();
210 $Form->Definition = array
211 (
212 'Title' => '',
213 'SubmitBuffonText' => 'Uložit',
214 'Items' => $DefinitionItems,
215 );
216 $Form->LoadValuesFromForm();
217 $System->Modules['DatabaseList']->EditItem($List['ItemId'], $Form->Values, $Id);
218 $NewId = $Database->insert_id;
219 $System->Modules['Log']->Add($List['ItemId'], $NewId, $LogActionType['Edit']);
220 $Output = 'Změny uloženy.';
221 $Output .= ShowViewItem($List, $Id);
222 $Form->Values['Column'] = $_POST['Column'];
223 $Form->Values['ItemId'] = $Id;
224 $Form->Values['ListTableName'] = $List['TableName'];
225 ExecuteListEvent($List['ItemId'], 'OnEdit', $Form->Values);
226 return($Output);
227}
228
229function ShowAddItem($List, $Column = '', $ColumnValue = 0)
230{
231 global $Database;
232
233 if(!CheckPermission('Write', $List['ItemId'])) return(SystemMessage('Řízení přístupu', 'Nemáte dostatečná oprávnění'));
234 $DefinitionItems = array();
235 $AfterTableOutput = '';
236 foreach($List['Items'] as $Item)
237 {
238 //echo($Item['Name'].',');
239 $Type = GetTypeDefinition($Item['Type']);
240 if(($Type['BaseType'] != 'PointerOneToMany') and ($Item['Name'] != $Column))
241 {
242 if($Item['Required'] == 1) $Required = '*'; else $Required = '';
243 if($Item['Editable'] == 1)
244 $DefinitionItems[] = array('Name' => $Item['Name'], 'Type' => $Item['Type'], 'Caption' => $Item['TextBefore'].$Required, 'Value' => '', 'SourceTable' => $List['ItemId'], 'SourceItemId' => 0);
245 } else
246 if($Item['Name'] == $Column)
247 {
248 $DefinitionItems[] = array('Name' => $Column, 'Type' => TypeHiddenId, 'Caption' => '', 'Value' => $ColumnValue);
249 }
250 }
251 $DefinitionItems[] = array('Name' => 'Column', 'Type' => TypeHiddenId, 'Caption' => '', 'Value' => $Column);
252
253 $Form = new Form();
254 $Form->Definition = array
255 (
256 'Title' => '',
257 'SubmitBuffonText' => 'Přidat',
258 'Items' => $DefinitionItems,
259 );
260 $Form->OnSubmit = '?Action=AddItemFinish';
261 $Output .= $Form->ShowEditForm().$AfterTableOutput;
262 if(($Column != '') and ($ColumnValue != 0))
263 {
264 $Output .= '<a href="?Action=ShowList&amp;Table='.$List['ItemId'].'&amp;Column='.$Column.'&amp;ColumnValue='.$ColumnValue.'">Celkový seznam</a>';
265 } else
266 {
267 $Output .= '<a href="?Action=ShowList&amp;Table='.$List['ItemId'].'">Celkový seznam</a>';
268 }
269 return($Output);
270}
271
272function ShowAddItemFinish($List)
273{
274 global $Database, $System, $LogActionType;
275
276 if(!CheckPermission('Write', $List['ItemId'])) return(SystemMessage('Řízení přístupu', 'Nemáte dostatečná oprávnění'));
277 $DefinitionItems = array();
278 $AfterTableOutput = '';
279 foreach($List['Items'] as $Item)
280 {
281 //echo($Item['Name'].',');
282 $Type = GetTypeDefinition($Item['Type']);
283 if(($Type['BaseType'] != 'PointerOneToMany') and ($Item['Name'] != $Column))
284 {
285 if($Item['Required'] == 1) $Required = '*'; else $Required = '';
286 $DefinitionItems[] = array('Name' => $Item['Name'], 'Type' => $Item['Type'], 'Caption' => $Item['TextBefore'].$Required, 'Value' => '', 'SourceTable' => $List['ItemId'], 'SourceItemId' => 0);
287 } else
288 if($Item['Name'] == $Column)
289 {
290 $DefinitionItems[] = array('Name' => $Column, 'Type' => TypeHiddenId, 'Caption' => '', 'Value' => $ColumnValue);
291 }
292 }
293
294 $Form = new Form();
295 $Form->Definition = array
296 (
297 'Title' => '',
298 'SubmitBuffonText' => 'Přidat',
299 'Items' => $DefinitionItems,
300 );
301 $Form->LoadValuesFromForm();
302 $NewItemId = $System->Modules['DatabaseList']->AddItem($List['ItemId'], $Form->Values);
303 $NewId = $Database->insert_id;
304 $System->Modules['Log']->Add($List['ItemId'], $NewId, $LogActionType['Add']);
305 $Output = 'Položka přidána';
306 $Output .= ShowViewItem($List, $NewItemId);
307 $Form->Values['Column'] = $_POST['Column'];
308 ExecuteListEvent($List['ItemId'], 'OnAdd', $Form->Values);
309 return($Output);
310}
311
312function ShowViewItem($List, $Id, $Column = '', $ColumnValue = 0)
313{
314 global $Database;
315
316 if(!CheckPermission('Read', $List['ItemId'])) return(SystemMessage('Řízení přístupu', 'Nemáte dostatečná oprávnění'));
317 $Output = '';
318 $DbResult = $Database->select($List['TableName'], '*', 'ItemId='.$Id.' ORDER BY Id DESC LIMIT 1');
319 while($DbRow = $DbResult->fetch_assoc())
320 {
321 $DefinitionItems = array();
322 $Required = '';
323 foreach($List['Items'] as $Index => $Item)
324 {
325 $Type = GetTypeDefinition($Item['Type']);
326 if($Type['BaseType'] != 'PointerOneToMany')
327 {
328 $DefinitionItems[] = array('Name' => $Index, 'Type' => $Item['Type'], 'Caption' => $Item['TextBefore'].$Required, 'Value' => $DbRow[$Index], 'SourceTable' => $List['ItemId'], 'SourceItemId' => 0);
329 }
330 }
331 $Form = new Form();
332 $Form->Definition = array
333 (
334 'Title' => '',
335 'Items' => $DefinitionItems,
336 );
337 $Output .= $Form->ShowReadOnlyForm();
338 if(CheckPermission('Write', $List['ItemId'])) $Output .= '<a href="?Action=EditItem&amp;Table='.$List['ItemId'].'&amp;Item='.$DbRow['ItemId'].'">Editovat</a> ';
339
340 if(($Column != '') and ($ColumnValue != 0))
341 {
342 $Output .= '<a href="?Action=ShowList&amp;Table='.$List['ItemId'].'&amp;Column='.$Column.'&amp;ColumnValue='.$ColumnValue.'">Celkový seznam</a>';
343 } else
344 {
345 $Output .= '<a href="?Action=ShowList&amp;Table='.$List['ItemId'].'">Celkový seznam</a>';
346 }
347 $Output .= ' <a href="?Action=ShowHistory&amp;Table='.$List['ItemId'].'&amp;Item='.$DbRow['ItemId'].'">Historie</a>';
348 $Output .= ' <a href="?Action=DeleteItem&amp;Table='.$List['ItemId'].'&amp;Item='.$DbRow['ItemId'].'" onclick="return confirmAction(\'Opravdu smazat položku?\');">Smazat</a>';
349 $Output .= '<div class="line"></div>';
350 foreach($List['Items'] as $Index => $Item)
351 {
352 $Type = GetTypeDefinition($Item['Type']);
353 if($Type['BaseType'] == 'PointerOneToMany')
354 {
355 $SubList = GetListDefinition($Type['Parameters'][0]);
356 $Output .= ShowList($SubList, $Type['Parameters'][1], $DbRow['ItemId'], $Item['TextBefore']).'<br /><br />';
357 }
358 }
359 }
360 return($Output);
361}
362
363function ShowDeleteItem($List, $Id)
364{
365 global $Database, $System, $LogActionType;
366
367 if(!CheckPermission('Write', $List['ItemId'])) return(SystemMessage('Řízení přístupu', 'Nemáte dostatečná oprávnění'));
368 $System->Modules['Log']->Add($List['ItemId'], $Id, $LogActionType['Delete']);
369 $System->Modules['DatabaseList']->DeleteItem($List['ItemId'], $Id);
370 $Output = 'Položka smazána.';
371 $Output .= ShowList($List, $_SESSION['Column'], $_SESSION['ColumnValue']).'<br /><br />';
372 ExecuteListEvent($List['ItemId'], 'OnDelete', $Id);
373 return($Output);
374}
375
376function ShowMenu()
377{
378 global $Database;
379
380 $Output = '';
381 $DbResult = $Database->query('SELECT t1.* FROM `SystemMenu` AS t1 LEFT JOIN `SystemMenu` AS t2 ON t1.ItemId=t2.ItemId AND t1.Id < t2.Id WHERE (t2.ItemId IS NULL) AND (t1.DeletionTime IS NULL)');
382 while($DbRow = $DbResult->fetch_assoc())
383 {
384 $Group = '';
385 $DbResult2 = $Database->query('SELECT t1.* FROM `SystemList` AS t1 LEFT JOIN `SystemList` AS t2 ON t1.ItemId=t2.ItemId AND t1.Id < t2.Id WHERE (t2.ItemId IS NULL) AND (t1.DeletionTime IS NULL) AND (t1.`Menu` = '.$DbRow['ItemId'].')');
386 while($DbRow2 = $DbResult2->fetch_assoc())
387 {
388 if(CheckPermission('Read', $DbRow2['ItemId']))
389 $Group .= '<a href="?Action=ShowList&amp;Table='.$DbRow2['ItemId'].'">'.$DbRow2['Title'].'</a><br />';
390 }
391 if($Group != '')
392 $Output .= '<strong>'.$DbRow['Name'].'</strong><br />'.$Group.'<br />';
393 }
394 $Output .= '<br />';
395 return($Output);
396}
397
398function Output()
399{
400 $PermanentVar = array('Table', 'Item', 'Column', 'ColumnValue', 'Action');
401 if($_GET['Table'] != $_SESSION['Table'])
402 {
403 $_SESSION['Column'] = '';
404 $_SESSION['ColumnValue'] = '';
405 }
406 foreach($PermanentVar as $Var)
407 {
408 if(array_key_exists($Var, $_GET)) $_SESSION[$Var] = $_GET[$Var];
409 }
410 $Output = '';
411 if(array_key_exists('Table', $_SESSION))
412 {
413 $List = GetListDefinition($_SESSION['Table']);
414 if($List == NULL) SystemMessage('Zobrazení stránky', 'Seznam id '.$_SESSION['Table'].' nenalezen!');
415 //echo($_SESSION['Table']);
416 //print_r($List);
417 if(array_key_exists('Action', $_SESSION))
418 {
419 switch($_SESSION['Action'])
420 {
421 case 'EditItem':
422 $Output = ShowEditItem($List, $_SESSION['Item']);
423 break;
424 case 'EditItemFinish':
425 $Output = ShowEditItemFinish($List, $_SESSION['Item']);
426 break;
427 case 'DeleteItem':
428 $Output = ShowDeleteItem($List, $_SESSION['Item']);
429 break;
430 case 'ViewItem':
431 $Output = ShowViewItem($List, $_SESSION['Item'], $_SESSION['Column'], $_SESSION['ColumnValue']);
432 break;
433 case 'AddItem':
434 $Output = ShowAddItem($List, $_SESSION['Column'], $_SESSION['ColumnValue']);
435 break;
436 case 'AddItemFinish':
437 $Output = ShowAddItemFinish($List);
438 break;
439 case 'ShowHistory':
440 $Output = ShowHistory($List, $_SESSION['Item']);
441 break;
442 case 'ShowList':
443 default:
444 $Output = ShowList($List, $_SESSION['Column'], $_SESSION['ColumnValue']);
445 }
446 } else $Output = ShowList($List, $_SESSION['Column'], $_SESSION['ColumnValue']);
447 }
448 return($Output);
449}
450
451function GetListDefinition($Id)
452{
453 global $Database, $Lists;
454
455 if(!array_key_exists($Id, $Lists))
456 {
457 $DbResult = $Database->query('SELECT t1.* FROM `SystemList` AS t1 LEFT JOIN `SystemList` AS t2 ON t1.ItemId=t2.ItemId AND t1.Id < t2.Id WHERE (t2.ItemId IS NULL) AND (t1.DeletionTime IS NULL) AND t1.ItemId="'.$Id.'"');
458 if($DbResult->num_rows > 0)
459 {
460 $DbRow = $DbResult->fetch_assoc();
461 $Items = array();
462 $DbResult2 = $Database->query('SELECT t1.* FROM `SystemListItem` AS t1 LEFT JOIN `SystemListItem` AS t2 ON t1.ItemId=t2.ItemId AND t1.Id < t2.Id WHERE (t2.ItemId IS NULL) AND (t1.DeletionTime IS NULL) AND (t1.List='.$DbRow['ItemId'].')');
463 while($DbRow2 = $DbResult2->fetch_assoc())
464 {
465 $Items[$DbRow2['Name']] = $DbRow2;
466 }
467 $List = array(
468 'Id' => $DbRow['Id'],
469 'ItemId' => $DbRow['ItemId'],
470 'TableName' => $DbRow['TableName'],
471 'Title' => $DbRow['Title'],
472 'Items' => $Items,
473 );
474 //if(!array_key_exists($List['ItemId'], $TypeDefinitionList))
475 {
476 $ClassName = 'List'.$DbRow['TableName'];
477 if(class_exists($ClassName)) $List['Class'] = new $ClassName;
478 }
479 $Lists[$List['ItemId']] = $List;
480 } else $Lists[$List['ItemId']] = NULL;
481 }
482 return($Lists[$Id]);
483 //print_r($Lists);
484}
485
486function GetTypeDefinition($Id)
487{
488 global $Database, $Types, $TypeDefinitionList;
489
490 if(!array_key_exists($Id, $Types))
491 {
492 $DbResult = $Database->query('SELECT t1.* FROM `SystemType` AS t1 LEFT JOIN `SystemType` AS t2 ON t1.ItemId=t2.ItemId AND t1.Id < t2.Id WHERE (t2.ItemId IS NULL) AND (t1.DeletionTime IS NULL) AND t1.ItemId='.$Id);
493 if($DbResult->num_rows > 0)
494 {
495 $DbRow = $DbResult->fetch_assoc();
496 $DbRow['Parameters'] = explode('|', $DbRow['Parameters']);
497 if(($DbRow['ParentType'] == TypePointerOneToOneId) or ($DbRow['ParentType'] == TypePointerOneToManyId))
498 {
499 $DbResult2 = $Database->query('SELECT t1.* FROM `SystemList` AS t1 LEFT JOIN `SystemType` AS t2 ON t1.ItemId=t2.ItemId AND t1.Id < t2.Id WHERE (t2.ItemId IS NULL) AND (t1.DeletionTime IS NULL) AND t1.TableName="'.$DbRow['Parameters'][0].'"');
500 $DbRow2 = $DbResult2->fetch_assoc();
501 //echo($DbRow['ParentType'].'-'.$DbRow['Parameters'][0].'='.$DbRow2['ItemId'].'<br>');
502 $DbRow['Parameters'][0] = $DbRow2['ItemId'];
503 }
504 $DbRow['BaseType'] = $DbRow['Name'];
505
506 // Merge parent type definition
507 if($DbRow['ParentType'] != 0)
508 {
509 $ParentType = GetTypeDefinition($DbRow['ParentType']);
510 foreach($DbRow as $Index => $Item)
511 if($Item == '')
512 {
513 $DbRow[$Index] = $ParentType[$Index];
514 }
515 $DbRow['BaseType'] = $ParentType['Name'];
516 }
517 if(!array_key_exists($DbRow['BaseType'], $TypeDefinitionList))
518 {
519 $ClassName = 'Type'.$DbRow['BaseType'];
520 $TypeDefinitionList[$DbRow['BaseType']] = new $ClassName;
521 }
522 $DbRow['Class'] = &$TypeDefinitionList[$DbRow['BaseType']];
523 $Types[$DbRow['ItemId']] = $DbRow;
524 } else $Types[$DbRow['ItemId']] = NULL;
525 }
526 //print_r($Types);
527 return($Types[$Id]);
528}
529
530function ExecuteListEvent($Table, $Event, $Parameters)
531{
532 $ListDefinition = GetListDefinition($Table);
533 if(array_key_exists('Class', $ListDefinition))
534 {
535 $ListObject = $ListDefinition['Class'];
536 if(is_callable(array($ListObject, $Event))) return($ListObject->$Event($Parameters));
537 else return($ListDefinition['TableName'].'->'.$Event.'('.$List.')');
538 } else return($ListDefinition['TableName'].'->'.$Event.'('.$List.')');
539}
540
541function ExecuteTypeEvent($Type, $Event, $Parameters)
542{
543 $TypeDefinition = GetTypeDefinition($Type);
544 $TypeObject = $TypeDefinition['Class'];
545 if(is_callable(array($TypeObject, $Event))) return($TypeObject->$Event($Parameters));
546 else return($TypeDefinition['BaseType'].'->'.$Event.'('.$Type.')');
547}
548
549function ModifyAllTables($Query)
550{
551 global $Database;
552
553 $DbResult = $Database->select('SystemList', '*');
554 while($DbRow = $DbResult->fetch_assoc())
555 {
556 $Database->query($Query);
557 }
558}
559
560function CheckPermission($Right, $ListId, $ItemId = 0)
561{
562 global $Database, $System;
563
564 $Result = FALSE;
565 //return(TRUE);
566 $DbResult = $Database->query('SELECT t1.* FROM `Permission` AS t1 LEFT JOIN `Permission` AS t2 ON t1.ItemId=t2.ItemId AND t1.Id < t2.Id WHERE (t2.ItemId IS NULL) AND t1.PermissionGroup = (SELECT PermissionGroup.Id FROM PermissionGroup WHERE PermissionGroup.Id=(SELECT User.PermissionGroup FROM User WHERE User.ItemId='.$System->Modules['User']->User['ItemId'].' ORDER BY User.Id DESC LIMIT 1) ORDER BY PermissionGroup.Id DESC LIMIT 1) AND t1.DeletionTime IS NULL AND t1.List='.$ListId);
567 if($DbResult->num_rows > 0)
568 {
569 $DbRow = $DbResult->fetch_assoc();
570 switch($DbRow['Right'])
571 {
572 case 0: $Privileges = array('Read' => FALSE, 'Write' => FALSE); break;
573 case 1: $Privileges = array('Read' => TRUE, 'Write' => FALSE); break;
574 case 2: $Privileges = array('Read' => TRUE, 'Write' => TRUE); break;
575 }
576 $Result = $Privileges[$Right];
577 }
578 //print_r($Privileges);
579 //echo($DbRow['Right'].' '.$Result.'<br>');
580 return($Result);
581}
582
583?>
Note: See TracBrowser for help on using the repository browser.