source: trunk/TranslationList.php@ 499

Last change on this file since 499 was 498, checked in by chronos, 12 years ago
  • Upraveno: Optimalizace výpisu překladových položek v seznamu.
  • Přidáno: Nastavení časové zóny z PHP.
  • Upraveno: Tabulky převedeny z myisam na innodb. Doplněny indexy a cizí klíče. Provedeny některé optimalizace načítání.
File size: 15.2 KB
Line 
1<?php
2
3include('includes/global.php');
4
5function ShowFilter($GroupId = 0)
6{
7 global $System, $TranslationTree;
8
9 $Filter = array('SQL' => '');
10
11 $Output = '<form action="?" method="post">'.
12 '<table class="BaseTable"><tr>'.
13 '<th>Zpracování</th>'.
14 '<th>Skupina</th>'.
15 '<th>Verze</th>'.
16 '<th>Jazyk</th>'.
17 '<th>Překladatel</th>'.
18 '<th>Slova</th>'.
19 '<th>Položka</th>'.
20 '<th></th></tr><tr>';
21
22 // State
23 $Filter['State'] = GetParameter('state', 0, true, true);
24 $Output .= '<td><select name="state">';
25 if($Filter['State'] == 0) $Selected = ' selected="selected"';
26 else $Selected = '';
27 $Output .= '<option value="0"'.$Selected.'>Všechny</option>';
28 if($Filter['State'] == 1) $Selected = ' selected="selected"';
29 else $Selected = '';
30 $Output .= '<option value="1"'.$Selected.'>Nepřeložené</option>';
31 if($Filter['State'] == 2) $Selected = ' selected="selected"';
32 else $Selected = '';
33 $Output .= '<option value="2"'.$Selected.'>Přeložené</option>';
34 if($Filter['State'] == 3) $Selected = ' selected="selected"';
35 else $Selected = '';
36 $Output .= '<option value="3"'.$Selected.'>Rozpracované</option>';
37 if($Filter['State'] == 4) $Selected = ' selected="selected"';
38 else $Selected = '';
39 $Output .= '<option value="4"'.$Selected.'>Anglické</option>';
40 $Output .= '</select></td>';
41
42 // Translation group
43 if($GroupId == 0)
44 {
45 $Filter['Group'] = GetParameter('group', 0, true, true);
46 if($Filter['Group'] != 0)
47 {
48 if(isset($TranslationTree[$Filter['Group']]) == false) ErrorMessage('Překladová skupina dle zadaného Id neexistuje.');
49 $Table = $TranslationTree[$Filter['Group']]['TablePrefix'];
50 }
51 } else
52 {
53 $Filter['Group'] = $GroupId;
54 $Table = $TranslationTree[$Filter['Group']]['TablePrefix'];
55 }
56
57 $Output .= '<td><select name="group" style="width: 80px">';
58 if($Filter['Group'] == 0) $Selected = ' selected="selected"';
59 else $Selected = '';
60 $Output .= '<option value="0"'.$Selected.'>Všechny</option>';
61 $DbResult = $System->Database->query('SELECT `Id`,`Name` FROM `Group` ORDER BY `Name`');
62 while($Group = $DbResult->fetch_assoc())
63 {
64 if($Group['Id'] == $Filter['Group']) $Selected = ' selected="selected"';
65 else $Selected = '';
66 $Output .= '<option value="'.$Group['Id'].'"'.$Selected.'>'.$Group['Name'].'</option>';
67 }
68 $Output .= '</select></td>';
69
70 // Version
71 $Filter['Version'] = GetParameter('version', 0, true, true);
72 if($Filter['Version'] != 0)
73 {
74 $DbResult = $System->Database->query('SELECT `Id`, `BuildNumber`,`Version` FROM `ClientVersion` WHERE (`Imported` = 1) AND (`Id` ='.$Filter['Version'].')');
75 if($DbResult->num_rows > 0)
76 {
77 $DbRow = $DbResult->fetch_assoc();
78 $Filter['BuildNumber'] = $DbRow['BuildNumber'];
79 } else ErrorMessage('Zadaná verze klienta nenalezena');
80 }
81 $Output .= '<td><select name="version">';
82 if($Filter['Version'] == 0) $Selected = ' selected="selected"';
83 else $Selected = '';
84 $Output .= '<option value="0"'.$Selected.'>Všechny</option>';
85 $DbResult = $System->Database->query('SELECT `Id`, `BuildNumber`,`Version` FROM `ClientVersion` WHERE `Imported` = 1 ORDER BY `BuildNumber` DESC');
86 while($Version = $DbResult->fetch_assoc())
87 {
88 if($Version['Id'] == $Filter['Version']) $Selected = ' selected="selected"';
89 else $Selected = '';
90 $Output .= '<option value="'.$Version['Id'].'"'.$Selected.'>'.$Version['Version'].'</option>';
91 }
92 $Output .= '</select></td>';
93 if($Filter['Version'] != 0) $VersionFilter = ' AND (`VersionStart` <= '.$Filter['BuildNumber'].') AND (`VersionEnd` >= '.$Filter['BuildNumber'].')';
94 else $VersionFilter = '';
95 //else $Filter['SQL'] .= ' AND '; DISTINCT(Entry)
96
97 // Language
98 $Filter['Language'] = GetParameter('lang', 0, true, true);
99 $Output .= '<td><select name="lang">';
100 if($Filter['Language'] == 0) $Selected = ' selected="selected"';
101 else $Selected = '';
102 $Output .= '<option value="0"'.$Selected.'>Všechny</option>';
103 $DbResult = $System->Database->query('SELECT `Id`, `Name` FROM `Language` WHERE `Enabled` = 1 ORDER BY `Name`');
104 while($Language = $DbResult->fetch_assoc())
105 {
106 if($Language['Id'] == $Filter['Language']) $Selected = ' selected="selected"';
107 else $Selected = '';
108 $Output .= '<option value="'.$Language['Id'].'"'.$Selected.'>'.$Language['Name'].'</option>';
109 }
110 $Output .= '</select></td>';
111 if($Filter['Language'] != 0) $LanguageFilter = ' AND (`Language` = '.$Filter['Language'].')';
112 else $LanguageFilter = '';
113
114 // User
115 $Filter['User'] = GetParameter('user', 0, true, true);
116 $Output .= '<td><select name="user" style="width: 80px">';
117 if($Filter['User'] == 0) $Selected = ' selected="selected"';
118 else $Selected = '';
119 $Output .= '<option value="0"'.$Selected.'>Všichni</option>';
120 $DbResult = $System->Database->query('SELECT `Id`, `Name` FROM `User` ORDER BY `Name`');
121 while($User = $DbResult->fetch_assoc())
122 {
123 if($User['Id'] == $Filter['User']) $Selected = ' selected="selected"';
124 else $Selected = '';
125 $Output .= '<option value="'.$User['Id'].'"'.$Selected.'>'.$User['Name'].'</option>';
126 }
127 $Output .= '</select></td>';
128 if($Filter['User'] != 0) $UserFilter = ' AND (`User` = '.$Filter['User'].')';
129 else $UserFilter = '';
130
131 // Words
132 $Filter['Text'] = GetParameter('text', '', false, true);
133 $Output .= '<td><input name="text" type="text" style="width: 60px;" value="'.$Filter['Text'].'"></td>';
134 if($Filter['Text'] != '')
135 {
136 $Items = array('(`ID` LIKE "%'.$Filter['Text'].'%")', '(`Entry` LIKE "%'.$Filter['Text'].'%")');
137 if($Filter['Group'] != 0)
138 foreach($TranslationTree[$Filter['Group']]['Items'] as $GroupItem)
139 if($GroupItem['Visible'] == 1)
140 $Items[] = '(`'.$GroupItem['Column'].'` LIKE "%'.$Filter['Text'].'%")';
141 $Filter['SQL'] .= ' AND ('.implode(' OR ', $Items).')';
142 }
143
144 // Entry
145 $Filter['Entry'] = GetParameter('entry', '', false, true);
146 $Output .= '<td><input name="entry" type="text" style="width: 60px;" value="'.$Filter['Entry'].'"></td>';
147 if($Filter['Entry'] != '')
148 {
149 $Filter['SQL'] .= ' AND (`Entry` = "'.$Filter['Entry'].'")';
150 }
151
152 if($Filter['Group'] != 0)
153 {
154 if($Filter['State'] == 0) $Filter['SQL'] .= $UserFilter.$VersionFilter.'';
155 else if($Filter['State'] == 1) $Filter['SQL'] .= $VersionFilter.' AND (`Language` = 0) AND NOT EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE (`Sub`.`Language` <> 0)'.$LanguageFilter.$UserFilter.' AND (`Sub`.`Entry` = `T`.`Entry`) AND (`Sub`.`Complete` = 1) AND (`Sub`.`VersionStart` = `T`.`VersionStart`) AND (`Sub`.`VersionEnd` = `T`.`VersionEnd`))';
156 else if($Filter['State'] == 2) $Filter['SQL'] .= $UserFilter.$LanguageFilter.$VersionFilter.' AND (`Complete` = 1)';
157 else if($Filter['State'] == 3) $Filter['SQL'] .= $UserFilter.$LanguageFilter.$VersionFilter.' AND (`Language` != 0) AND (`Complete` = 0)';
158 else if($Filter['State'] == 4) $Filter['SQL'] .= $VersionFilter.' AND (`Language` = 0)';
159 }
160
161 /*
162 // Ownership
163 if(array_key_exists('owner', $_GET) and is_numeric($_GET['owner'])) $Filter['Owner'] = $_GET['owner'];
164 else $Filter['Owner'] = 0;
165 echo(' <td><select name="owner">');
166 if($Filter['Owner'] == 0) $Selected = ' selected="selected"';
167 else $Selected = '';
168 echo('<option value="0"'.$Selected.'>Všech</option>');
169 if($Filter['Owner'] == 1) $Selected = ' selected="selected"';
170 else $Selected = '';
171 echo('<option value="1"'.$Selected.'>Překladatelův tým</option>');
172 if($Filter['Owner'] == 2) $Selected = ' selected="selected"';
173 else $Selected = '';
174 echo('<option value="2"'.$Selected.'>Překladatele</option>');
175 echo('</select></td>');
176 if(($Filter['Owner'] == 2) AND ($Filter['User'] != 0)) $Filter['SQL'] .= ' AND (`User` = '.$Filter['User'].')';
177 */
178
179 $Output .= '<td><input type="submit" value="Filtrovat"/></td>';
180 $Output .= '</tr></table>';
181 $Output .= '</form><br/>';
182 $Filter['Output'] = $Output;
183 return($Filter);
184}
185
186function ShowTranslationList($Filter)
187{
188 global $System, $TranslationTree;
189
190 echo($Filter['Output']);
191 $Table = $TranslationTree[$Filter['Group']]['TablePrefix'];
192
193 $Query = 'SELECT `T`.`ID`, `T`.`Entry`, `T`.`VersionStart`, `T`.`VersionEnd`, '.
194 '`T`.`Name`, (SELECT `User`.`Name` FROM `User` WHERE `User`.`ID` = `T`.`User`)'.
195 'AS `UserName` FROM `'.$Table.'` AS `T` WHERE 1 '.$Filter['SQL'];
196 //echo($Query);
197
198 // Get total item count
199 $DbResult = $System->Database->query('SELECT COUNT(*) FROM ('.$Query.') AS `TT`');
200 $DbRow = $DbResult->fetch_row();
201 $PageList = GetPageList($DbRow[0]);
202
203 echo($PageList['Output']);
204 $TableColumns = array(
205 array('Name' => 'ID', 'Title' => 'Číslo'),
206 array('Name' => 'Entry', 'Title' => 'Položka'),
207 array('Name' => $TranslationTree[$Filter['Group']]['Items'][0]['Column'], 'Title' => 'Název'),
208 array('Name' => 'VersionStart', 'Title' => 'Verze'),
209 array('Name' => 'UserName', 'Title' => 'Překladatel'),
210 );
211
212 $Order = GetOrderTableHeader($TableColumns, 'VersionStart', 1);
213 echo('<table class="BaseTable">');
214 echo($Order['Output']);
215
216 $DbResult = $System->Database->query($Query.' '.$Order['SQL'].' '.$PageList['SQLLimit']);
217 while($Line = $DbResult->fetch_assoc())
218 {
219 echo('<tr><td><a href="form.php?group='.$Filter['Group'].'&amp;ID='.$Line['ID'].'">'.$Line['ID'].'</a></td><td>'.$Line['Entry'].'</td>'.
220 '<td>'.htmlspecialchars($Line[$TranslationTree[$Filter['Group']]['Items'][0]['Column']]).'</td>'.
221 '<td>'.GetVersionWOW($Line['VersionStart']).'-'.GetVersionWOW($Line['VersionEnd']).'</td>'.
222 '<td>'.$Line['UserName'].'</td>');
223 echo('</tr>');
224 }
225 echo('</table>');
226
227 echo($PageList['Output']);
228}
229
230function ShowGroupList($Filter)
231{
232 global $System, $TranslationTree;
233
234 echo($Filter['Output']);
235
236 echo('<table class="BaseTable"><tr><th>Skupina</th><th>Počet</th></tr>');
237 $Total = 0;
238 foreach($TranslationTree as $Group)
239 if($Group['TablePrefix'] != '')
240 {
241 $Filter = ShowFilter($Group['Id']);
242 $ID = $System->Database->query('SELECT COUNT(*) FROM `'.$Group['TablePrefix'].'` AS `T` WHERE 1 '.$Filter['SQL']);
243 $Line = $ID->fetch_row();
244 echo('<tr><td><a href="?group='.$Group['Id'].'">'.$Group['Name'].'</td><td>'.$Line[0].'</a></tr>');
245 $Total += $Line[0];
246 }
247 echo('<tr><td><strong>Celkem</strong></td><td><strong>'.$Total.'</strong></td></tr>');
248 echo('</table>');
249}
250
251function ShowGroupTypeList()
252{
253 global $System, $User;
254
255 $DbResult = $System->Database->query('SELECT COUNT(*) FROM `Group`');
256 $DbRow = $DbResult->fetch_row();
257 $PageList = GetPageList($DbRow[0]);
258 echo('<h3>Seznam překladových skupin</h3>');
259 echo($PageList['Output']);
260
261 echo('<table class="BaseTable">');
262 $TableColumns = array(
263 array('Name' => 'Name', 'Title' => 'Jméno'),
264 array('Name' => 'SourceType', 'Title' => 'Typ zdroje'),
265 array('Name' => '', 'Title' => 'Zdroje'),
266 array('Name' => 'LastImport', 'Title' => 'Datum posledního importu'),
267 array('Name' => 'LastVersion', 'Title' => 'Verze posledního importu'),
268 );
269
270 $Order = GetOrderTableHeader($TableColumns, 'Name', 0);
271 echo($Order['Output']);
272
273 $DbResult = $System->Database->query('SELECT * FROM `Group`'.$Order['SQL'].$PageList['SQLLimit']);
274 while($Group = $DbResult->fetch_assoc())
275 {
276 echo('<tr><td><a href="?group='.$Group['Id'].'&amp;action=filter">'.$Group['Name'].'</a></td><td>'.$Group['SourceType'].'</td><td>');
277 if($Group['MangosTable'] != '') echo($Group['MangosTable'].'.sql ');
278 if($Group['DBCFileName'] != '') echo($Group['DBCFileName'].'.dbc ');
279 if($Group['LuaFileName'] != '') echo($Group['LuaFileName'].'.lua ');
280 echo('</td><td><a title="Změny po posledním importu u vybrané překladové skupiny" href="log.php?group='.$Group['Id'].'&amp;type=11">'.HumanDate($Group['LastImport']).'</a></td><td>'.GetVersionWOW($Group['LastVersion']).'</td></tr>');
281 }
282 echo('</table>');
283 echo('<br /><a title="Záznam změn po importu" href="log.php?type=11">Záznam změn v textech při importu</a><br/>');
284 //if($User->Licence(LICENCE_ADMIN)) echo('<a href="?action=groupadd">Přidat překladovou skupinu</a>');
285}
286
287function ShowMenu()
288{
289 global $User, $TranslationTree;
290
291 $GroupId = GetParameter('group', 0, true);
292 if($GroupId == 0) ErrorMessage('Skupina nenalezena');
293 $Table = $TranslationTree[$GroupId]['TablePrefix'];
294
295 echo('<h3>Základní filtrování textů</h3><br/>'.
296 '<table class="BaseTable"><tr><th>Odkaz</th><th>Popis</th></tr>'.
297 '<tr><td><a title="Všechny dostupné texty ve skupině" href="?group='.$GroupId.'&amp;state=4">Všechny</a></td>'.
298 '<td>Zobrazit všechny dostupné anglické texty ve skupině.</td></tr>'.
299 '<tr><td><a title="Přeložené texty, můžete zde hlasovat, nebo text opravovat" href="?group='.$GroupId.'&amp;state=2">Přeložené</a></td>'.
300 '<td>Zobrazit pouze již přeložené texty.</td></tr>'.
301 '<tr><td><a title="Nepřeložené texty" href="?group='.$GroupId.'&amp;state=1">Nepřeložené</a></td>'.
302 '<td>Dosud nepřeložené texty, které je potřeba přeložit.</td></tr>'.
303 '<tr><td><a title="Nedokončené texty" href="?group='.$GroupId.'&amp;state=3">Nedokončené</a></td>'.
304 '<td>Texty označené jako rozpracované.</td></tr>');
305
306 if($User->Licence(LICENCE_USER))
307 {
308 echo('<tr><td><a title="Nedokončené texty" href="?group='.$GroupId.'&amp;state=3&amp;user='.$User->Id.'">Moje nedokončené</a></td>
309 <td>Nedokončené texty přihlášeného uživatele</td></tr>
310 <tr><td><a title="Přeložené texty přihlášeného uživatele" href="?group='.$GroupId.'&amp;state=2&amp;user='.$User->Id.'">Moje přeložené</a></td>
311 <td>Přeložené texty přihlášeného uživatele</td></tr>');
312 }
313
314 echo('<tr><td><form action="?group='.$GroupId.'&amp;entry=" method="post"><div>'.
315 '<input type="text" name="text" size="8" />'.
316 '<input type="submit" value="Hledat" />'.
317 '</div></form>'.
318 '</td><td>Vyhledat pomocí textu</td></tr>');
319
320 echo('<tr><td><form action="?group='.$GroupId.'&amp;text=" method="post"><div>'.
321 '<input type="text" name="entry" size="8" />'.
322 '<input type="submit" value="Hledat" />'.
323 '</div></form>'.
324 '</td><td>Zobrazit podle ID textu v databázi MaNGOSu</td></tr>');
325
326 echo('</table>');
327}
328
329function ShowGroupAdd()
330{
331 global $User;
332
333 if($User->Licence(LICENCE_ADMIN))
334 {
335 echo('<h3>Vložení nové skupiny</h3>');
336 echo('<form action="?action=groupadd" method="post">'.
337 'Jméno: <input type="text" name="Name"/><br/>'.
338 'Název tabulky: <input type="text" name="TablePrefix"/><br/>'.
339 '</form>');
340 } else ShowMessage('Nemáte oprávnění.', MESSAGE_CRITICAL);
341}
342
343ShowPage();
344
345$Action = GetParameter('action', '');
346if($Action == 'filter') ShowMenu();
347else if($Action == 'grouplist') ShowGroupTypeList();
348else if($Action == 'groupadd') ShowGroupAdd();
349else
350{
351 $Filter = ShowFilter();
352 //print_r($Filter);
353 if($Filter['Group'] > 0) ShowTranslationList($Filter);
354 else ShowGroupList($Filter);
355}
356
357ShowFooter();
358
359?>
360
Note: See TracBrowser for help on using the repository browser.