1 | <?php
|
---|
2 |
|
---|
3 | class PageEatingPlace extends Page
|
---|
4 | {
|
---|
5 | public array $DayNames = array('Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota');
|
---|
6 | public array $DayNamesShort = array('NE', 'PO', 'ÚT', 'ST', 'ČT', 'PÁ', 'SO');
|
---|
7 | public array $Status = array('Nezveřejněno', 'Otevřeno', 'Zavřeno - svátek', 'Zavřeno - dovolená');
|
---|
8 | public int $DayCount = 20; // počet dopředu zobrazených dnů
|
---|
9 |
|
---|
10 | function __construct(System $System)
|
---|
11 | {
|
---|
12 | parent::__construct($System);
|
---|
13 | $this->Title = 'Jídelníček';
|
---|
14 | $this->Description = 'Jídleníček jídelny Na kopečku';
|
---|
15 | $this->ParentClass = 'PagePortal';
|
---|
16 | }
|
---|
17 |
|
---|
18 | function Show(): string
|
---|
19 | {
|
---|
20 | if (count($this->System->PathItems) > 1)
|
---|
21 | {
|
---|
22 | if ($this->System->PathItems[1] == 'tisk') return $this->ShowPrint();
|
---|
23 | else if ($this->System->PathItems[1] == 'menuedit.php') return $this->ShowEdit();
|
---|
24 | else return PAGE_NOT_FOUND;
|
---|
25 | } else return $this->ShowMenu();
|
---|
26 | }
|
---|
27 |
|
---|
28 | function ShowMenu(): string
|
---|
29 | {
|
---|
30 | $Output = '<table align="center" class="WideTable"><tr><th>Den</th><th>Datum</th><th>Polévka</th><th>Hlavní jídlo</th></tr>';
|
---|
31 | $DbResult = $this->Database->select('Meals', '*, UNIX_TIMESTAMP(Date)','Date >= NOW() ORDER BY Date');
|
---|
32 | while ($Row = $DbResult->fetch_array())
|
---|
33 | {
|
---|
34 | if ($Row['Status'] == 1) $Output .= '<tr><td>'.$this->DayNames[date('w', $Row['UNIX_TIMESTAMP(Date)'])].'</td><td align="right">'.HumanDate($Row['Date']).'</td><td>'.$Row['Soup'].'</td><td>'.$Row['Meal'].'</td></tr>';
|
---|
35 | else if (($Row['Status' ] == 2) or ($Row['Status'] == 3))
|
---|
36 | {
|
---|
37 | $Output .= '<tr><td>'.$this->DayNames[date('w', $Row['UNIX_TIMESTAMP(Date)'])].'</td><td align="right">'.HumanDate($Row['Date']).'</td><td colspan="2" align="center">'.$this->Status[$Row['Status']].'</td></tr>';
|
---|
38 | }
|
---|
39 | }
|
---|
40 | $Output .= '</table><br />';
|
---|
41 |
|
---|
42 | $DbResult = $this->Database->select('MealsInfo', '*');
|
---|
43 | $Row = $DbResult->fetch_array();
|
---|
44 | $Output .= 'Cena jednoho menu: '.$Row['Price'].' Kč<br />';
|
---|
45 | $Output .= $Row['Info'];
|
---|
46 | return $Output;
|
---|
47 | }
|
---|
48 |
|
---|
49 | function ShowPrint(): string
|
---|
50 | {
|
---|
51 | $this->RawPage = true;
|
---|
52 |
|
---|
53 | $Output = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
---|
54 | <html>
|
---|
55 | <head>
|
---|
56 | <meta http-equiv="Content-Type" content="text/html; charset='.$this->System->Config['Web']['Charset'].'">
|
---|
57 | <meta http-equiv="Content-language" content="cs">
|
---|
58 | <title>Tisk jídelníčku</title>
|
---|
59 | </head><body style="margin: 0px 0px 0px 0px;">'; // onload="print()">');
|
---|
60 |
|
---|
61 | $Output .= '<table height="99%" width="100%" align="center" border="0" cellspacing="0" cellpadding="3">';
|
---|
62 | $Date = explode('-', $_GET['date']);
|
---|
63 | $Output .= '<tr><td style="border-bottom-style: solid; border-bottom-color: black; border-bottom-width: 2;" colspan="2">
|
---|
64 | <table cellspacing="0" cellpadding="0" width="100%"><tr><td width="50%"><strong>DATUM:</strong> '.HumanDate($_GET['date']).' - '.HumanDate(date('Y-m-d',mktime(0, 0, 0, $Date[1], $Date[2], $Date[0]) + 4 * 86400)).'</td>
|
---|
65 | <td align="right">CENY SMLUVNÍ</td></tr></table>
|
---|
66 | <div align="center" style="font-size: xx-large;">„JÍDELNA NA KOPEČKU”</div>
|
---|
67 | <div align="center" style="font-size: x-large;">JÍDELNÍČEK</div>
|
---|
68 | </td></tr>';
|
---|
69 | $Date = explode('-', $_GET['date']);
|
---|
70 | $Time2 = mktime(0, 0, 0, $Date[1], $Date[2], $Date[0]);
|
---|
71 | for ($I = 0; $I < 5; $I++)
|
---|
72 | {
|
---|
73 | $Time = $Time2 + $I * 86400;
|
---|
74 | $Date = date('Y-m-d', $Time);
|
---|
75 | $DayOfWeek = date('w', $Time);
|
---|
76 | $DbResult = $this->Database->select('Meals', '*', 'Date="'.$Date.'"');
|
---|
77 | $Row = $DbResult->fetch_array();
|
---|
78 | $Output .= '<tr><td style="border-style: solid; border-color: black; border-width: 2; font-size: xx-large;" width="10%">'.$this->DayNamesShort[$DayOfWeek].'</td><td style="font-size: x-large; border-style: solid; border-color: black; border-width: 2;" width="90%">';
|
---|
79 | if ($Row['Status'] == 0) $Output .= ' <br><br> ';
|
---|
80 | if ($Row['Status'] == 1) $Output .= 'Polévka: '.$Row['Soup'].'<br><br>'.$Row['Meal'];
|
---|
81 | else if (($Row['Status'] == 2) or ($Row['Status'] == 3))
|
---|
82 | {
|
---|
83 | $Output .= '<br>'.$this->Status[$Row['Status']].'<br> ';
|
---|
84 | }
|
---|
85 | $Output .= '</td></tr>';
|
---|
86 | }
|
---|
87 | $DbResult = $this->Database->select('MealsInfo','*');
|
---|
88 | $Row = $DbResult->fetch_array();
|
---|
89 | $Output .= '<tr><td style="border-top-style: solid; border-top-color: black; border-top-width: 2;" colspan="2"><table cellspacing="0" cellpadding="0" width="100%"><tr><td width="50%"><strong>JÍDLA PŘIPRAVILA: Matochová</strong></td>
|
---|
90 | <td align="right"><strong>PROVOZOVATEL:</strong></td></tr></table>
|
---|
91 | <br>
|
---|
92 | <strong>CENA JEDNOHO MENU JE '.$Row['Price'].' Kč</strong></td></tr>';
|
---|
93 | $Output .= '</table>';
|
---|
94 |
|
---|
95 | $Output .= '</body></html>';
|
---|
96 | return $Output;
|
---|
97 | }
|
---|
98 |
|
---|
99 | function PrintTableRow(array $Row): string
|
---|
100 | {
|
---|
101 | global $LastWeekOfYear;
|
---|
102 |
|
---|
103 | $Selected = array('', '', '', '');
|
---|
104 | $Selected[$Row['Status']] = 'selected ';
|
---|
105 | $Date = explode('-', $Row['Date']);
|
---|
106 | $Week = date('w', mktime(0, 0, 0, $Date[1], $Date[2], $Date[0]));
|
---|
107 | $WeekOfYear = date('W', mktime(0, 0, 0, $Date[1], $Date[2], $Date[0]));
|
---|
108 | if ($WeekOfYear != $LastWeekOfYear)
|
---|
109 | $WeekRowSpan = '<td align="center" rowspan="'.(7 - (($Week + 7 - 1) % 7)).'">'.
|
---|
110 | $WeekOfYear.'<br /><a href="tisk/?date='.
|
---|
111 | date('Y-m-d', mktime(0, 0, 0, $Date[1], $Date[2], $Date[0]) - ($Week - 1) * 86400).
|
---|
112 | '">Tisk</a></td>';
|
---|
113 | else $WeekRowSpan = '';
|
---|
114 | if ($Week == 0) $Color = ' style="color: #ff0000;" '; else $Color = '';
|
---|
115 | $Output = '<tr><td'.$Color.'>'.$this->DayNames[$Week].'</td><td>'.HumanDate($Row['Date']).'</td>'.$WeekRowSpan.'
|
---|
116 | <td><input name="soup_'.$Row['Date'].'" size="30" value="'.$Row['Soup'].'"></td>
|
---|
117 | <td><input name="meal_'.$Row['Date'].'" size="30" value="'.$Row['Meal'].'"></td>
|
---|
118 | <td><select name="status_'.$Row['Date'].'">';
|
---|
119 | for ($I = 0; $I < 4; $I++) $Output .= ' <option '.$Selected[$I].'value="'.$I.'">'.$this->Status[$I].'</option>';
|
---|
120 | $Output .= '</select></td></tr>';
|
---|
121 | $LastWeekOfYear = $WeekOfYear;
|
---|
122 | return $Output;
|
---|
123 | }
|
---|
124 |
|
---|
125 | function ShowEdit(): string
|
---|
126 | {
|
---|
127 | Header('Cache-Control: no-cache');
|
---|
128 |
|
---|
129 | $Output = '';
|
---|
130 | if (array_key_exists('action', $_GET))
|
---|
131 | {
|
---|
132 | if ($_GET['action'] == 'savemenu')
|
---|
133 | {
|
---|
134 | for ($I = 0; $I < $this->DayCount; $I++)
|
---|
135 | {
|
---|
136 | $Time = time() + $I * 86400;
|
---|
137 | $Date = date('Y-m-d', $Time);
|
---|
138 | $this->Database->replace('Meals', array('Date' => $Date, 'Meal' => $_POST['meal_'.$Date], 'Soup' => $_POST['soup_'.$Date], 'Status' => $_POST['status_'.$Date]));
|
---|
139 | }
|
---|
140 | $Output .= '<div style="color: red; font-size: larger;">Menu uloženo!</div>';
|
---|
141 | ModuleLog::Cast($this->System->GetModule('Log'))->NewRecord('EatingPlace', 'MenuSave');
|
---|
142 | }
|
---|
143 | if ($_GET['action'] == 'saveinfo')
|
---|
144 | {
|
---|
145 | $this->Database->delete('MealsInfo', '1');
|
---|
146 | $this->Database->insert('MealsInfo', array('Info' => $_POST['info'], 'Price' => $_POST['price']));
|
---|
147 | $Output .= '<div style="color: red; font-size: larger;">Informační údaje uloženy!</div>';
|
---|
148 | ModuleLog::Cast($this->System->GetModule('Log'))->NewRecord('EatingPlace', 'InfoSave');
|
---|
149 | }
|
---|
150 | }
|
---|
151 | $Output = '<form action="?action=savemenu" method="post">
|
---|
152 | <fieldset><legend>Jídlo pro jednotlivé dny</legend>
|
---|
153 | <table align="center" class="WideTable"><tr><th>Den</th><th>Datum</th><th>Týden</th><th>Polévka</th><th>Hlavní jídlo</th><th>Stav</th></tr>';
|
---|
154 | for ($I = 0; $I < $this->DayCount; $I++)
|
---|
155 | {
|
---|
156 | $Time = time() + $I * 86400;
|
---|
157 | $DbResult = $this->Database->select('Meals', '*', 'Date = "'.date('Y-m-d', $Time).'"');
|
---|
158 | if ($Row = $DbResult->fetch_array())
|
---|
159 | $Output .= $this->PrintTableRow($Row);
|
---|
160 | else
|
---|
161 | {
|
---|
162 | $Row = array('Status' => 0, 'Meal' => '', 'Soup' => '', 'Date' => date('Y-m-d', $Time));
|
---|
163 | $Output .= $this->PrintTableRow($Row);
|
---|
164 | }
|
---|
165 | }
|
---|
166 | $Output .= '</table><br />
|
---|
167 | <div align="center"><input type="submit" value="Uložit menu"></div>
|
---|
168 | </fieldset></form>';
|
---|
169 | $Output .= '<form action="?action=saveinfo" method="post">
|
---|
170 | <fieldset><legend>Informační údaje</legend>';
|
---|
171 |
|
---|
172 | $DbResult = $this->Database->select('MealsInfo', '*');
|
---|
173 | $Row = $DbResult->fetch_array();
|
---|
174 | $Output .= '<textarea name="info" rows="20" cols="80" >'.$Row['Info'].'</textarea><br />'.
|
---|
175 | 'Cena: <input type="text" name="price" size="5" value="'.$Row['Price'].'"> Kč<br />'.
|
---|
176 | '<div align="center"><input type="submit" value="Uložit údaje"></div>
|
---|
177 | </fieldset></form>';
|
---|
178 | return $Output;
|
---|
179 | }
|
---|
180 | }
|
---|
181 |
|
---|
182 | class ModuleMeals extends Module
|
---|
183 | {
|
---|
184 | function __construct(System $System)
|
---|
185 | {
|
---|
186 | parent::__construct($System);
|
---|
187 | $this->Name = 'Meals';
|
---|
188 | $this->Version = '1.0';
|
---|
189 | $this->Creator = 'Chronos';
|
---|
190 | $this->License = 'GNU/GPLv3';
|
---|
191 | $this->Description = 'Module for management meals. Can print week menu.';
|
---|
192 | $this->Dependencies = array(ModuleLog::GetName());
|
---|
193 | $this->Models = array(Meals::GetClassName(), MealsInfo::GetClassName());
|
---|
194 | }
|
---|
195 |
|
---|
196 | function DoStart(): void
|
---|
197 | {
|
---|
198 | $this->System->RegisterPage(['jidelna'], 'PageEatingPlace');
|
---|
199 | }
|
---|
200 | }
|
---|
201 |
|
---|
202 | class Meals extends Model
|
---|
203 | {
|
---|
204 | static function GetModelDesc(): ModelDesc
|
---|
205 | {
|
---|
206 | $Desc = new ModelDesc(self::GetClassName());
|
---|
207 | $Desc->AddDate('Date');
|
---|
208 | $Desc->AddString('Soup');
|
---|
209 | $Desc->AddString('Meal');
|
---|
210 | $Desc->AddInteger('Status');
|
---|
211 | return $Desc;
|
---|
212 | }
|
---|
213 | }
|
---|
214 |
|
---|
215 | class MealsInfo extends Model
|
---|
216 | {
|
---|
217 | static function GetModelDesc(): ModelDesc
|
---|
218 | {
|
---|
219 | $Desc = new ModelDesc(self::GetClassName());
|
---|
220 | $Desc->AddText('Info');
|
---|
221 | $Desc->AddInteger('Price');
|
---|
222 | return $Desc;
|
---|
223 | }
|
---|
224 | }
|
---|