source: trunk/Modules/Meet/MeetPage.php

Last change on this file was 71, checked in by chronos, 9 months ago
  • Fixed: Warnings in meet imports.
File size: 11.4 KB
Line 
1<?php
2
3class ModuleMeet extends Module
4{
5 function __construct($System)
6 {
7 parent::__construct($System);
8 $this->Name = 'Meet';
9 $this->Version = '1.0';
10 $this->Creator = 'Chronos';
11 $this->License = 'GNU/GPL';
12 $this->Description = 'List of dance meet items';
13 $this->Dependencies = array();
14 $this->RSSChannels = array();
15 }
16
17 function Start(): void
18 {
19 $this->System->RegisterPage(['seznamka'], 'PageMeetList');
20 $this->System->RegisterPage(['seznamka', 'inzerat'], 'PageMeetItem');
21 $this->System->RegisterPage(['seznamka', 'aktualizace'], 'PageMeetUpdate');
22 $this->System->RegisterPage(['seznamka', 'rss'], 'PageMeetRss');
23 Core::Cast($this->System)->RegisterMenuItem('/seznamka', 'Seznamka');
24 }
25}
26
27class PageMeetList extends Page
28{
29 function __construct($System)
30 {
31 parent::__construct($System);
32 $this->Title = 'Seznamka';
33 $this->Description = 'Taneční seznamka';
34 }
35
36 function Show(): string
37 {
38 global $Config;
39
40 $Filter = new Filter();
41 $Filter->Items = array(
42 array('Name' => 'pohlavi', 'Type' => 'Enumeration', 'DbName' => 'Gender', 'Title' => 'Pohlaví',
43 'States' => array(0 => 'Obě', 1 => 'Muži', 2 => 'Ženy')),
44 array('Name' => 'name', 'Type' => 'String', 'DbName' => 'Name', 'Title' => 'Jméno'),
45 array('Name' => 'vek', 'Type' => 'Integer', 'DbName' => 'Age', 'Title' => 'Věk', 'Units' => 'let'),
46 array('Name' => 'vyska', 'Type' => 'Integer', 'DbName' => 'Height', 'Title' => 'Výška', 'Units' => 'cm'),
47 array('Name' => 'vaha', 'Type' => 'Integer', 'DbName' => 'Weight', 'Title' => 'Váha', 'Units' => 'Kg'),
48 array('Name' => 'message', 'Type' => 'String', 'DbName' => 'Message', 'Title' => 'Zpráva'),
49 array('Name' => 'location', 'Type' => 'String', 'DbName' => 'Location', 'Title' => 'Umístění'),
50 array('Name' => 'source', 'Type' => 'String', 'DbName' => 'SourceName', 'Title' => 'Zdroj'),
51 );
52
53 $Output = '';
54 if (array_key_exists('lvm', $_GET) and ($_GET['lvm'] == 'seznam'))
55 {
56 $this->RawPage = true;
57 } else {
58 $Output .= '<div class="title">Inzeráty</div>';
59 }
60
61 $Output .= $Filter->GetOutput($this->System->Link('/seznamka/'));
62 $Where = $Filter->GetWhere($this->Database);
63
64 $DbResult = $this->Database->query('SELECT COUNT(*) FROM (SELECT *, '.
65 '(SELECT MeetSource.Name FROM MeetSource WHERE MeetSource.Id = MeetItem.Source) AS SourceName FROM `MeetItem`) AS T '.
66 'WHERE '.GetDefaultMeetFilter('T').' AND '.$Where);
67 $DbRow = $DbResult->fetch_row();
68 $PageList = GetPageList($DbRow[0]);
69
70 $Gender = array('', 'Muž', 'Žena');
71 $Output .= '<div id="list_content">';
72 $Output .= $PageList['Output'];
73 $TableColumns = array(
74 array('Name' => 'Time', 'Title' => 'Čas'),
75 array('Name' => 'Name', 'Title' => 'Jméno'),
76 array('Name' => 'Height', 'Title' => 'Výška'),
77 array('Name' => 'Age', 'Title' => 'Věk'),
78 array('Name' => 'Weight', 'Title' => 'Váha'),
79 array('Name' => 'Location', 'Title' => 'Umístění'),
80 array('Name' => 'Gender', 'Title' => 'Pohlaví'),
81 array('Name' => 'Message', 'Title' => 'Zpráva'),
82 array('Name' => 'Source', 'Title' => 'Zdroj'),
83 array('Name' => '', 'Title' => 'Detail'),
84 );
85 $Order = GetOrderTableHeader($TableColumns, 'Time', 1);
86 $Output .= '<table class="WideTable">';
87 $Output .= $Order['Output'];
88 $DbResult = $this->Database->query('SELECT * FROM (SELECT *, (SELECT MeetSource.Name FROM MeetSource WHERE MeetSource.Id = MeetItem.Source) AS SourceName, '.
89 '(SELECT MeetSource.URL FROM MeetSource WHERE MeetSource.Id = MeetItem.Source) AS SourceURL FROM MeetItem) AS T WHERE '.GetDefaultMeetFilter('T').' AND '.
90 $Where.$Order['SQL'].$PageList['SQLLimit']);
91 while ($MeetItem = $DbResult->fetch_assoc())
92 {
93 $Output .= '<tr>'.
94 '<td>'.HumanDate(MysqlDateToTime($MeetItem['Time'])).'</td>'.
95 '<td>'.$MeetItem['Name'].'</td>'.
96 '<td>'.$MeetItem['Height'].'</td>'.
97 '<td>'.$MeetItem['Age'].'</td>'.
98 '<td>'.$MeetItem['Weight'].'</td>'.
99 '<td>'.$MeetItem['Location'].'</td>'.
100 '<td>'.$Gender[$MeetItem['Gender']].'</td>'.
101 '<td>'.$MeetItem['Message'].'</td>'.
102 '<td><a href="'.$MeetItem['SourceURL'].'">'.$MeetItem['SourceName'].'</a></td>'.
103 '<td><a href="'.$this->System->Link('/seznamka/inzerat/'.$MeetItem['Id']).'">Ukázat</a></td>';
104 $Output .= '</tr>';
105 }
106 $Output .= '</table>';
107 $Output .= $PageList['Output'];
108 $Output .= '</div>';
109 if (array_key_exists('lvm', $_GET) and ($_GET['lvm'] == 'seznam'))
110 {
111 }
112 else
113 {
114 $Output .= '<div><a href="'.$this->System->Link('/seznamka/rss/').'"><img src="'.$this->System->Link('/images/rss20.png').'" alt="rss20"/></a></div>';
115
116 $Output .= '<div style="text-align: center;">Vložit nový inzerát: ';
117 $Output .= '<form style="display:inline;"><select name="insert" id="insert" onchange="">';
118 $DbResult = $this->Database->select('MeetSource', 'InsertURL, Name, Id', 'InsertURL != ""');
119 while ($DbRow = $DbResult->fetch_assoc())
120 {
121 $Output .= '<option value="'.$DbRow['Id'].'" onclick="window.open(\''.
122 $DbRow['InsertURL'].'\',\'_blank\',\'\')" onselect="window.open(\''.
123 $DbRow['InsertURL'].'\',\'_blank\',\'\')">'.$DbRow['Name'].'</option>';
124 }
125 $Output .= '</select></form></div>';
126 }
127 return $Output;
128 }
129}
130
131class PageMeetUpdate extends Page
132{
133 function __construct($System)
134 {
135 parent::__construct($System);
136 $this->Title = 'Aktualizace seznamky';
137 $this->Description = 'Aktualizace taneční seznamky';
138 }
139
140 function Show(): string
141 {
142 $MeetSources = new MeetSources();
143 $MeetSources->Database = $this->Database;
144 if (array_key_exists('i', $_GET)) $Output = $MeetSources->Parse($_GET['i']);
145 else $Output = $MeetSources->Parse();
146 return $Output;
147 }
148}
149
150class PageMeetItem extends Page
151{
152 function __construct($System)
153 {
154 parent::__construct($System);
155 $this->Title = 'Inzerát';
156 $this->Description = 'Inzerát taneční seznamky';
157 }
158
159 function Show(): string
160 {
161 $Output = '';
162 if (count($this->System->PathItems) > 2)
163 {
164 $id = $this->System->PathItems[2] * 1;
165 } else return 'Položka nenalezena';
166 if (Core::Cast($this->System)->IsAdmin())
167 {
168 if (array_key_exists('hide', $_GET)) $this->Database->update('MeetItem', 'Id='.$id, array('Hidden' => 1));
169 if (array_key_exists('unhide', $_GET)) $this->Database->update('MeetItem', 'Id='.$id, array('Hidden' => 0));
170 }
171
172 $Output .= '<div class="title">Inzerát</div>';
173 $Gender = array('', 'Muž', 'Žena');
174 $DbResult = $this->Database->select('MeetItem', '*, (SELECT MeetSource.Name FROM MeetSource WHERE MeetSource.Id = MeetItem.Source) AS SourceName, '.
175 '(SELECT MeetSource.URL FROM MeetSource WHERE MeetSource.Id = MeetItem.Source) AS SourceURL, '.GetDefaultMeetFilter().' AS Filter', 'Id='.$id);
176 if ($DbResult->num_rows > 0)
177 {
178 $MeetItem = $DbResult->fetch_assoc();
179 if (($MeetItem['Filter'] == '0') and !Core::Cast($this->System)->IsAdmin())
180 return 'Položka nenalezena';
181 if ($MeetItem['Link'] != '') $Link = '<a href="'.$MeetItem['Link'].'">Odkaz</a>';
182 else $Link = '';
183 $Output .= '<table class="ItemTable">'.
184 '<tr><th>Čas</th><td>'.HumanDate(MysqlDateToTime($MeetItem['Time'])).'</td></tr>'.
185 '<tr><th>Pohlaví</th><td>'.$Gender[$MeetItem['Gender']].'</td></tr>'.
186 '<tr><th>Jméno</th><td>'.$MeetItem['Name'].'</td></tr>'.
187 '<tr><th>Výška</th><td>'.$MeetItem['Height'].'</td></tr>'.
188 '<tr><th>Věk</th><td>'.$MeetItem['Age'].'</td></tr>'.
189 '<tr><th>Váha</th><td>'.$MeetItem['Weight'].'</td></tr>'.
190 '<tr><th>Umístění</th><td>'.$MeetItem['Location'].'</td></tr>'.
191 '<tr><th>Email</th><td>'.$MeetItem['Email'].'</td></tr>'.
192 '<tr><th>Telefón</th><td>'.$MeetItem['Phone'].'</td></tr>'.
193 '<tr><th>Zpráva</th><td>'.$MeetItem['Message'].'</td></tr>'.
194 '<tr><th>Původní stránka</th><td>'.$Link.'</td></tr>'.
195 '<tr><th>Zdroj</th><td><a href="'.$MeetItem['SourceURL'].'">'.$MeetItem['SourceName'].'</a></td></tr>';
196 $Output .= '</table>';
197
198 $Output .= '<div style="margin-top: 10pt; text-align: center;">Vložit nový inzerát: ';
199 $Output .= '<form style="display:inline;"><select name="insert" id="insert" onchange="">';
200 $DbResult = $this->Database->select('MeetSource', 'InsertURL, Name, Id', 'InsertURL != ""');
201 while ($DbRow = $DbResult->fetch_assoc())
202 {
203 $Output .= '<option value="'.$DbRow['Id'].'" onclick="window.open(\''.
204 $DbRow['InsertURL'].'\',\'_blank\',\'\')">'.$DbRow['Name'].'</option>';
205 }
206 $Output .= '</select></form></div>';
207
208 if (Core::Cast($this->System)->IsAdmin())
209 {
210 if ($MeetItem['Hidden'] == '1')
211 $Output .= '<div>Skrytá položka <a href="?unhide">Zviditelnit</a></div>';
212 else $Output .= '<div>Viditelná položka <a href="?hide">Skrýt</a></div>';
213 }
214 } else $Output .= 'Položka nenalezena';
215 return $Output;
216 }
217}
218
219class PageMeetRss extends Page
220{
221 function __construct($System)
222 {
223 parent::__construct($System);
224 $this->Title = 'RSS inzeráty seznamky';
225 $this->Description = 'RSS kanál taneční seznamky';
226 }
227
228 function Show(): string
229 {
230 global $Config;
231
232 $this->RawPage = true;
233 $RSS = new RSS();
234 $RSS->Title = 'Taneční seznamka';
235 $RSS->Description = '';
236 $RSS->Link = $this->System->AbsoluteLink('/seznamka/');
237
238 $DbResult = $this->Database->query('SELECT *, (SELECT MeetSource.Name FROM MeetSource WHERE MeetSource.Id = MeetItem.Source) AS SourceName, '.
239 '(SELECT MeetSource.URL FROM MeetSource WHERE MeetSource.Id = MeetItem.Source) AS SourceURL FROM MeetItem WHERE '.
240 GetDefaultMeetFilter().' ORDER BY `Time` DESC LIMIT 30');
241 while ($MeetItem = $DbResult->fetch_assoc())
242 {
243 $Title = $MeetItem['Name'];
244 if ($MeetItem['Age'] != '') $Title .= ', '.$MeetItem['Age'].' let';
245 if ($MeetItem['Weight'] != '') $Title .= ', '.$MeetItem['Height'].' cm';
246 if ($MeetItem['Location'] != '') $Title .= ', '.$MeetItem['Location'];
247 $Description = $MeetItem['Message']."<br/>\n";
248 if ($MeetItem['Email'] != '') $Description .= '<br/>Email: '.$MeetItem['Email'];
249 if ($MeetItem['Phone'] != '') $Description .= '<br/>Telefon: '.$MeetItem['Phone'];
250 if ($MeetItem['Age'] != '') $Description .= '<br/>Věk: '.$MeetItem['Age'].' let';
251 if ($MeetItem['Height'] != '') $Description .= '<br/>Výška: '.$MeetItem['Height'].' cm';
252 if ($MeetItem['Weight'] != '') $Description .= '<br/>Váha: '.$MeetItem['Weight'].' kg';
253 $Description .= '<br/>Zdroj: <a href="'.$MeetItem['SourceURL'].'">'.$MeetItem['SourceName'].'</a>';
254 $Time = MysqlDateTimeToTime($MeetItem['Time']);
255 $TimeImport = MysqlDateTimeToTime($MeetItem['TimeImport']);
256 // Append time part of TimeImport time to item time so new items will appear in correct time order even if item doesn't have time part specified
257 if (TimeToMysqlTime($Time) == '00:00:00')
258 {
259 $Time = MysqlDateTimeToTime(TimeToMysqlDate($Time).' '.TimeToMysqlTime($TimeImport));
260 }
261 $RSS->Items[] = array(
262 'Title' => $Title,
263 'Description' => $Description,
264 'Time' => $Time,
265 'Link' => $this->System->AbsoluteLink('/seznamka/inzerat/'.$MeetItem['Id'].'/'),
266 );
267 }
268
269 return $RSS->Generate();
270 }
271}
Note: See TracBrowser for help on using the repository browser.