source: trunk/Modules/Export/Page.php@ 682

Last change on this file since 682 was 682, checked in by maron, 11 years ago
  • fixed: import
File size: 36.4 KB
Line 
1<?php
2
3include_once('ExportOutput.php');
4
5define('TAB_GENERAL', 0);
6define('TAB_TRANSLATORS', 1);
7define('TAB_GROUPS', 2);
8define('TAB_LANGUAGES', 3);
9define('TAB_OUTPUT_FORMAT', 4);
10define('TAB_VERSION', 5);
11define('TAB_STAT', 6);
12define('TAB_OUTPUT', 7);
13
14class PageExport extends Page
15{
16 function ExportList()
17 {
18 $Output = '<a href="?Action=ViewList">Všechny</a>';
19 if($this->System->User->Licence(LICENCE_USER))
20 {
21 $Output .= ' <a href="?Action=ViewList&amp;Filter=Others">Ostatních</a>'.
22 ' <a href="?Action=ViewList&amp;Filter=My">Moje</a>';
23 }
24
25 if($this->System->User->Licence(LICENCE_USER))
26 $Output .= '<br/><div style="text-align: center;"><a href="?Action=Create">Vytvořit nový export</a></div><br/>';
27
28 $Filter = '';
29 if(array_key_exists('Filter', $_GET))
30 {
31 if($_GET['Filter'] == 'My') $Filter = ' WHERE `Export`.`User` = '.$this->System->User->Id;
32 if($_GET['Filter'] == 'Others') $Filter = ' WHERE `Export`.`User` != '.$this->System->User->Id;
33 }
34
35 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM `Export` '.$Filter);
36 $DbRow = $DbResult->fetch_row();
37 $PageList = GetPageList($DbRow[0]);
38
39 $Output .= '<h3>Seznam exportů</h3>'.
40 $PageList['Output'];
41
42 $TableColumns = array(
43 array('Name' => 'TimeCreate', 'Title' => 'Čas vytvoření'),
44 array('Name' => 'UserName', 'Title' => 'Překladatel'),
45 array('Name' => 'Title', 'Title' => 'Označení'),
46 // array('Name' => 'UserCount', 'Title' => 'Vybraných překladatelů'),
47 // array('Name' => 'GroupCount', 'Title' => 'Překladových skupin'),
48 array('Name' => 'OutputType', 'Title' => 'Typ výstupu'),
49 array('Name' => 'ClientVersion', 'Title' => 'Verze klienta'),
50 array('Name' => 'UsedCount', 'Title' => 'Prohlédnutí výstupu'),
51 array('Name' => '', 'Title' => 'Akce'),
52 );
53 $Order = GetOrderTableHeader($TableColumns, 'TimeCreate', 1);
54 $Output .= '<table class="BaseTable">'.
55 $Order['Output'];
56
57 $DbResult = $this->System->Database->query('SELECT `User`.`Name` AS `UserName`, `Export`.`Id`, `Export`.`TimeCreate`, `Export`.`Title`, `Export`.`User`, `Export`.`UsedCount`, (SELECT Version FROM `ClientVersion` WHERE `ClientVersion`.`Id`=`Export`.`ClientVersion`) AS `ClientVersion`,(SELECT Name FROM `ExportOutputType` WHERE `ExportOutputType`.`Id`=`Export`.`OutputType`) AS `OutputType`, (SELECT COUNT(*) FROM `ExportGroup` WHERE `ExportGroup`.`Export`=`Export`.`Id`) AS `GroupCount`, (SELECT COUNT(*) FROM `ExportUser` WHERE `ExportUser`.`Export`=`Export`.`Id`) AS `UserCount` FROM `Export` LEFT JOIN `User` ON `User`.`ID`=`Export`.`User` '.$Filter.$Order['SQL'].$PageList['SQLLimit']);
58 while($Export = $DbResult->fetch_assoc())
59 {
60 $Action = '<a href="?Action=View&amp;ExportId='.$Export['Id'].'&amp;Tab=0">Zobrazit</a> '.
61 '<a href="?Action=View&amp;ExportId='.$Export['Id'].'&amp;Tab=7">Exportovat</a>';
62 if($Export['User'] == $this->System->User->Id) $Action .= ' <a href="?Action=Delete&amp;ExportId='.$Export['Id'].'" onclick="return confirmAction(\'Opravdu smazat položku?\');">Smazat</a>';
63 if($this->System->User->Id != null) $Action .= ' <a href="?Action=Clone&amp;ExportId='.$Export['Id'].'" onclick="return confirmAction(\'Opravdu klonovat položku?\');">Klonovat</a>';
64 $Output .= '<tr><td>'.HumanDate($Export['TimeCreate']).'</td>'.
65 '<td><a href="'.$this->System->Link('/user.php?user='.$Export['User']).'">'.$Export['UserName'].'</a></td>'.
66 '<td>'.$Export['Title'].'</td>'.
67 '<td>'.$Export['OutputType'].'</td>'.
68 '<td>'.$Export['ClientVersion'].'</td>'.
69 '<td>'.$Export['UsedCount'].'</td>'.
70 '<td>'.$Action.'</td></tr>';
71 }
72 $Output .= '</table>'.
73 $PageList['Output'];
74
75 return($Output);
76 }
77
78 function ExportCreate()
79 {
80 if($this->System->User->Licence(LICENCE_USER))
81 {
82 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM `Export` WHERE `User`='.$this->System->User->Id);
83 $DbRow = $DbResult->fetch_row();
84 if($DbRow[0] < $this->System->Config['MaxExportPerUser'])
85 {
86 $Output = '<form action="?Action=CreateFinish" method="post">'.
87 '<fieldset><legend>Vytvoření nového exportu</legend>'.
88 '<table><tr><td>Označení:</td><td><input type="text" name="Title" /></td></tr>'.
89 '<tr><td>Popis:</td><td><textarea name="Description" cols="54" rows="10"></textarea></td></tr>'.
90 '<tr><td colspan="2"><input type="submit" value="Vytvořit" /></td></tr>'.
91 '</table></fieldset></form>';
92 } else $Output = ShowMessage('Nemůžete vytvářet další export. Max. počet na uživatele je '.$this->System->Config['MaxExportPerUser'].'.', MESSAGE_CRITICAL);
93 } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
94 return($Output);
95 }
96
97 function ExportCreateFinish()
98 {
99 if($this->System->User->Licence(LICENCE_USER))
100 {
101 if(array_key_exists('Title', $_POST) and array_key_exists('Description', $_POST))
102 {
103 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM `Export` WHERE `User`='.$this->System->User->Id);
104 $DbRow = $DbResult->fetch_row();
105 if($DbRow[0] < $this->System->Config['MaxExportPerUser'])
106 {
107 $this->System->Database->query('INSERT INTO `Export` (`Title`, `User`, `TimeCreate`, `WithDiacritic`, `Description`) VALUES ("'.$_POST['Title'].'", '.$this->System->User->Id.', NOW(), 1, "'.$_POST['Description'].'")');
108 $ExportId = $this->System->Database->insert_id;
109 $Output = ShowMessage('Nový export vytvořen.<br/>Přímý odkaz na tento export: <a href="?Action=View&amp;ExportId='.$ExportId.'">zde</a>');
110 $this->System->ModuleManager->Modules['Log']->WriteLog('Vytvořen nový export <a href="'.$this->System->Link('/export/?Action=View&amp;ExportId='.$ExportId).'">'.$ExportId.'</a>.', LOG_TYPE_EXPORT);
111 $_GET['Filter'] = 'my';
112 $this->ExportList();
113 } else $Output = ShowMessage('Nemůžete vytvářet další export. Max. počet na uživatele je '.$this->System->Config['MaxExportPerUser'].'.', MESSAGE_CRITICAL);
114 } else $Output = ShowMessage('Chybí údaje formuláře.', MESSAGE_CRITICAL);
115 } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
116 return($Output);
117 }
118
119 function ExportDelete()
120 {
121 if($this->System->User->Licence(LICENCE_USER))
122 {
123 $DbResult = $this->System->Database->query('SELECT * FROM `Export` WHERE (`Id`='.($_GET['ExportId'] * 1).') AND (`User`='.$this->System->User->Id.')');
124 if($DbResult->num_rows > 0)
125 {
126 $this->System->Database->query('DELETE FROM `ExportGroup` WHERE `Export`='.$_GET['ExportId']);
127 $this->System->Database->query('DELETE FROM `ExportLanguage` WHERE `Export`='.$_GET['ExportId']);
128 $this->System->Database->query('DELETE FROM `ExportTask` WHERE `Export`='.$_GET['ExportId']);
129 $this->System->Database->query('DELETE FROM `ExportUser` WHERE `Export`='.$_GET['ExportId']);
130 $this->System->Database->query('DELETE FROM `Export` WHERE `Id`='.$_GET['ExportId']);
131 DeleteDirectory('../tmp/Export/'.$_GET['ExportId'].'/');
132 $Output = ShowMessage('Export smazán.');
133 $_GET['Filter'] = 'my';
134 $this->System->ModuleManager->Modules['Log']->WriteLog('Smazán export '.$_GET['ExportId'], LOG_TYPE_EXPORT);
135 $Output .= $this->ExportList();
136 } else $Output = ShowMessage('Export nenalezen.', MESSAGE_CRITICAL);
137 } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
138 return($Output);
139 }
140
141 function SaveAllUsers()
142 {
143 global $System;
144 $Export = new Export($System);
145 $Export->Id = $_GET['ExportId'];
146 $Export->SaveAllUsers();
147
148 }
149
150 function ExportViewTranslators()
151 {
152 global $TranslationTree;
153
154 $Output = '';
155 $DisabledInput = array(false => ' disabled="disabled"', true => '');
156 $DbResult = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
157 $Export = $DbResult->fetch_assoc();
158 if($this->System->User->Licence(LICENCE_USER) and ($this->System->User->Id == $Export['User'])) $Editable = true;
159 else $Editable = false;
160
161 if(array_key_exists('Operation', $_POST))
162 {
163 if($_POST['Operation'] == 'Save')
164 {
165 //print_r($_POST);
166 // Update user selection page
167 foreach($_POST as $Index => $Value)
168 {
169 if(substr($Index, 0, 3) == 'seq')
170 {
171 $UserId = substr($Index, 3) * 1;
172 if(array_key_exists('sel'.$UserId, $_POST)) $Selected = true;
173 else $Selected = false;
174 $Condition = ' WHERE `Export`='.$_GET['ExportId'].' AND `User`='.$UserId;
175 $DbResult = $this->System->Database->query('SELECT * FROM `ExportUser` '.$Condition);
176 if($DbResult->num_rows > 0)
177 {
178 if(!$Selected) $this->System->Database->query('DELETE FROM `ExportUser` '.$Condition);
179 else $this->System->Database->query('UPDATE `ExportUser` SET `Sequence`='.$Value.$Condition);
180 } else
181 {
182 if($Selected) $this->System->Database->query('INSERT INTO `ExportUser` (`Export`, `User`, `Sequence`) VALUES ('.$_GET['ExportId'].', '.$UserId.', '.$Value.')');
183 }
184 }
185 }
186
187 if (array_key_exists('AllUsers', $_POST)) {
188 //add allusers to export
189 $this->System->Database->query('UPDATE `Export` SET `AllUsers`=1 WHERE `Id`='.$_GET['ExportId']);
190
191 //update export stat
192 $Export['AllUsers'] = 1;
193 $this->SaveAllUsers();
194 } else {
195 //update export stat
196 $Export['AllUsers'] = 0;
197 $this->System->Database->query('UPDATE `Export` SET `AllUsers`=0 WHERE `Id`='.$_GET['ExportId']);
198 }
199
200 // Recalculate sequence number
201 $this->System->Database->query('SET @I = 0');
202 $this->System->Database->query('UPDATE `ExportUser` SET `Sequence` = (@I := @I + 1) WHERE `Export`='.$_GET['ExportId'].' ORDER BY `Sequence`;');
203 $Output .= ShowMessage('Výběr uložen.');
204 }
205 }
206
207 $TableColumns = array(
208 array('Name' => 'Name', 'Title' => 'Jméno'),
209 array('Name' => 'TranslatedCount', 'Title' => 'Překladů'),
210 array('Name' => 'XP', 'Title' => 'Úroveň'),
211 array('Name' => 'XP', 'Title' => 'Zkušenost'),
212 array('Name' => '', 'Title' => 'Výběr'),
213 array('Name' => 'Sequence2', 'Title' => 'Pořadí'),
214 );
215 $Order = GetOrderTableHeader($TableColumns, 'TranslatedCount', 1);
216 if($Order['Column'] != 'Sequence2') $InitialOrder = ', '.substr($Order['SQL'], 10);
217 else $InitialOrder = '';
218
219 $Query = 'SELECT (@I := @I + 1) AS `Sequence2`, `TT`.* FROM (SELECT `ExportUser`.`Sequence`, `T`.`ID`, `T`.`TranslatedCount`, `T`.`Name`, `T`.`XP` FROM (SELECT `User`.`ID`, `User`.`Name`, `User`.`XP`, `TranslatedCount` FROM `User`) AS T';
220 $Query .=' LEFT JOIN `ExportUser` ON `ExportUser`.`Export` = '.$_GET['ExportId'].' AND `ExportUser`.`User`=`T`.`ID`';
221 $Query .=' WHERE `T`.`TranslatedCount` > 0 ORDER BY COALESCE(`ExportUser`.`Sequence`, 100000000)'.$InitialOrder.') AS `TT`';
222
223 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM ('.$Query.') AS `X`');
224 $DbRow = $DbResult->fetch_row();
225 $PageList = GetPageList($DbRow[0]);
226
227 $Output .= '<form name="Translators" action="?Action=View&amp;ExportId='.$_GET['ExportId'].'" method="post">'.
228 '<h3>Překladatelé</h3>';
229 if($Editable)
230 {
231 $Output .= '<input type="submit" value="Uložit" '.$DisabledInput[$Editable].'/>'.
232 '<input type="hidden" name="Operation" value="Save"/><br />'.
233 ' <span onclick="CheckAllCheckbox();">'.CheckBox('CheckAll', False, 'CheckAll').' Zatrhnout vše na stránce</span> <br />'.
234 ' <span>'.CheckBox('AllUsers', $Export['AllUsers']).' '.T('Export allways from all users').'</span> '.
235 '<br />'.
236 'Zvolte ze seznamu uživatele, od kterých chcete načítat překlady a upravte jejich pořadí.<br />'.
237 'Pořadí řádků je dáno číselnou hodnotou, kterou lze změnit na požadované pořadí. Řádky se stejným pořadovým číslem budou přečíslovány vzestupně.';
238 }
239
240 $Output .= $PageList['Output'].
241 '<table class="BaseTable">'.
242 $Order['Output'];
243
244 $Query = 'SELECT * FROM ('.$Query.') AS `TX` '.$Order['SQL'].$PageList['SQLLimit'];
245 $this->System->Database->query('SET @I = 0');
246 $DbResult = $this->System->Database->query($Query);
247 while($UserLine = $DbResult->fetch_assoc())
248 {
249 $XP = GetLevelMinMax($UserLine['XP']);
250 $Checked = $UserLine['Sequence'] != '';
251 $Selection = CheckBox('sel'.$UserLine['ID'], $Checked, '', 'CheckBox', ((!$Editable) or ($Export['AllUsers'])));
252 $Sequence = '<input type="text" name="seq'.$UserLine['ID'].'" style="text-align: center; width: 40px;" value="'.$UserLine['Sequence2'].'"'.$DisabledInput[$Editable].'/>';
253 $Output .= '<tr>'.
254 '<td><a href="'.$this->System->Link('/TranslationList.php?user='.$UserLine['ID'].'&amp;state=2&amp;group=0').'" title="Zobrazit všechny jeho přeložené texty">'.$UserLine['Name'].'</a></td>'.
255 '<td>'.$UserLine['TranslatedCount'].'</td>'.
256 '<td>'.$XP['Level'].'</td>'.
257 '<td>'.ProgressBar(150, round($XP['XP'] / $XP['MaxXP'] * 100, 2), $XP['XP'].' / '.$XP['MaxXP']).'</td>'.
258 '<td>'.$Selection.'</td><td>'.$Sequence.'</td></tr>';
259 }
260 $Output .= '</table>'.
261 '</form>'.
262 $PageList['Output'];
263 return($Output);
264 }
265
266 function ExportViewGeneral()
267 {
268 $DisabledInput = array(false => ' disabled="disabled"', true => '');
269 $DisabledTextArea = array(false => ' readonly="yes"', true => '');
270 $Output = '<h3>Obecná nastavení</h3>';
271 $DbRows = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
272 $Export = $DbRows->fetch_assoc();
273 if($this->System->User->Licence(LICENCE_USER) and ($this->System->User->Id == $Export['User'])) $Editable = true;
274 else $Editable = false;
275
276 if(array_key_exists('Operation', $_POST))
277 if($_POST['Operation'] == 'Save') if($Editable and array_key_exists('Title', $_POST) and array_key_exists('Description', $_POST))
278 {
279 if(array_key_exists('WithDiacritic', $_POST)) $WithDiacritic = 1;
280 else $WithDiacritic = 0;
281 $this->System->Database->query('UPDATE `Export` SET `Title`="'.$_POST['Title'].'", `Description`="'.$_POST['Description'].'", `WithDiacritic`='.$WithDiacritic.' WHERE Id='.$Export['Id']);
282 $Export['Title'] = $_POST['Title'];
283 $Export['Description'] = $_POST['Description'];
284 $Export['WithDiacritic'] = $WithDiacritic;
285 $Output .= ShowMessage('Nastavení uloženo.');
286 }
287
288 if($Export['WithDiacritic'] == 1) $WithDiacritic = ' checked="checked"';
289 else $WithDiacritic = '';
290 $Output .= '<form action="?Action=View&amp;Tab=0&amp;ExportId='.$Export['Id'].'" method="post">'.
291 '<table>';
292 if($Editable)
293 {
294 $Output .= '<input type="hidden" name="Operation" value="Save"/>'.
295 '<tr><td colspan="2"><input type="submit" value="Uložit" '.$DisabledInput[$Editable].'/></td></tr>';
296 }
297 $Output .= '<tr><td>Označení:</td><td><input type="text" style="width: 400px" name="Title" value="'.$Export['Title'].'"'.$DisabledInput[$Editable].'/></td></tr>'.
298 '<tr><td>Popis:</td><td><textarea name="Description" cols="54" rows="10"'.$DisabledTextArea[$Editable].'>'.$Export['Description'].'</textarea></td></tr>'.
299 '<tr><td>Včetně háčků a čárek</td><td><input type="checkbox" name="WithDiacritic" '.$WithDiacritic.''.$DisabledInput[$Editable].'/></td></tr>'.
300 '</table></form>';
301 return($Output);
302 }
303
304 function ExportViewLanguages()
305 {
306 global $TranslationTree;
307
308 $Output = '';
309 $DisabledInput = array(false => ' disabled="disabled"', true => '');
310 $DbRows = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
311 $Export = $DbRows->fetch_assoc();
312 if($this->System->User->Licence(LICENCE_USER) and ($this->System->User->Id == $Export['User'])) $Editable = true;
313 else $Editable = false;
314
315 if(array_key_exists('Operation', $_POST))
316 {
317 if($_POST['Operation'] == 'Save')
318 {
319 //print_r($_POST);
320 // Update user selection page
321 foreach($_POST as $Index => $Value)
322 {
323 if(substr($Index, 0, 3) == 'seq')
324 {
325 $LanguageId = substr($Index, 3) * 1;
326 if(array_key_exists('sel'.$LanguageId, $_POST)) $Selected = true;
327 else $Selected = false;
328 $Condition = ' WHERE Export='.$_GET['ExportId'].' AND `Language`='.$LanguageId;
329 $DbResult = $this->System->Database->query('SELECT * FROM `ExportLanguage` '.$Condition);
330 if($DbResult->num_rows > 0)
331 {
332 if(!$Selected) $this->System->Database->query('DELETE FROM `ExportLanguage` '.$Condition);
333 else $this->System->Database->query('UPDATE `ExportLanguage` SET `Sequence`='.$Value.$Condition);
334 } else
335 {
336 if($Selected) $this->System->Database->query('INSERT INTO `ExportLanguage` (`Export`, `Language`, `Sequence`) VALUES ('.$_GET['ExportId'].', '.$LanguageId.', '.$Value.')');
337 }
338 }
339 }
340
341 // Recalculate sequence number
342 $this->System->Database->query('SET @I = 0');
343 $this->System->Database->query('UPDATE `ExportLanguage` SET `Sequence` = (@I := @I + 1) WHERE `Export`='.$_GET['ExportId'].' ORDER BY `Sequence`;');
344 $Output .= ShowMessage('Výběr uložen.');
345 }
346 }
347
348 $Query = 'SELECT (@I := @I + 1) AS `Sequence2`, `Sequence`, `Language`.`Id`, `Name` FROM `Language`';
349 $Query .=' LEFT JOIN `ExportLanguage` ON `ExportLanguage`.`Export` = '.$_GET['ExportId'].' AND `ExportLanguage`.`Language`=`Language`.`Id`';
350 $Query .=' WHERE `Language`.`Enabled` = 1 ORDER BY COALESCE(`Sequence`, 100)';
351
352 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM ('.$Query.') AS X');
353 $DbRow = $DbResult->fetch_row();
354 $PageList = GetPageList($DbRow[0]);
355
356 $TableColumns = array(
357 array('Name' => 'Name', 'Title' => 'Název'),
358 array('Name' => '', 'Title' => 'Výběr'),
359 array('Name' => 'Sequence2', 'Title' => 'Pořadí'),
360 );
361 $Order = GetOrderTableHeader($TableColumns, 'Sequence2');
362 $Output .= '<form action="?Action=View&amp;ExportId='.$_GET['ExportId'].'" method="post">'.
363 '<h3>Jazyky</h3>';
364 if($Editable)
365 {
366 $Output .= '<input type="submit" value="Uložit" '.$DisabledInput[$Editable].'/>'.
367 '<input type="hidden" name="Operation" value="Save"/>'.
368 '<br />'.
369 'Zvolte ze seznamu dostupných jazyků, ze kterých chcete sestavit překlady a upravte jejich pořadí.<br />'.
370 'Pořadí řádků je dáno číselnou hodnotou, kterou lze změnit na požadované pořadí. Řádky se stejným pořadovým číslem budou přečíslovány vzestupně.';
371 }
372
373 $Output .= $PageList['Output'].
374 '<table class="BaseTable">'.
375 $Order['Output'];
376
377 $Query = 'SELECT * FROM ('.$Query.') AS TX '.$Order['SQL'].$PageList['SQLLimit'];
378 $this->System->Database->query('SET @I = 0');
379 $DbResult = $this->System->Database->query($Query);
380 while($Langugage = $DbResult->fetch_assoc())
381 {
382 $Checked = $Langugage['Sequence'] != '';
383 $Selection = CheckBox('sel'.$Langugage['Id'], $Checked, '', 'CheckBox', !$Editable);
384 $Sequence = '<input type="text" name="seq'.$Langugage['Id'].'" style="text-align: center; width: 40px;" value="'.$Langugage['Sequence2'].'"'.$DisabledInput[$Editable].'/>';
385 $Output .= '<tr>
386 <td>'.$Langugage['Name'].'</a></td>
387 <td>'.$Selection.'</td><td>'.$Sequence.'</td></tr>';
388 }
389 $Output .= '</table>'.
390 '</form>'.
391 $PageList['Output'];
392 return($Output);
393 }
394
395 function ExportViewGroups()
396 {
397 global $TranslationTree;
398
399 $Output = '';
400 $DisabledInput = array(false => ' disabled="disabled"', true => '');
401 $DbRows = $this->System->Database->query('SELECT * FROM Export WHERE Id='.$_GET['ExportId']);
402 $Export = $DbRows->fetch_assoc();
403 if($this->System->User->Licence(LICENCE_USER) and ($this->System->User->Id == $Export['User'])) $Editable = true;
404 else $Editable = false;
405
406 if(array_key_exists('Operation', $_POST))
407 {
408 if($_POST['Operation'] == 'Save')
409 {
410 //print_r($_POST);
411 // Update user selection page
412 foreach($_POST as $Index => $Value)
413 {
414 if(substr($Index, 0, 3) == 'seq')
415 {
416 $GroupId = substr($Index, 3) * 1;
417 if(array_key_exists('sel'.$GroupId, $_POST)) $Selected = true;
418 else $Selected = false;
419 $Condition = ' WHERE `Export`='.$_GET['ExportId'].' AND `Group`='.$GroupId;
420 $DbResult = $this->System->Database->query('SELECT * FROM `ExportGroup` '.$Condition);
421 if($DbResult->num_rows > 0)
422 {
423 if(!$Selected) $this->System->Database->query('DELETE FROM `ExportGroup` '.$Condition);
424 } else
425 {
426 if($Selected) $this->System->Database->query('INSERT INTO `ExportGroup` (`Export`, `Group`) VALUES ('.$_GET['ExportId'].', '.$GroupId.')');
427 }
428 }
429 }
430 $Output .= ShowMessage('Výběr uložen.');
431 }
432 }
433
434 $Query = 'SELECT `Group`.*, `ExportGroup`.`Id` AS `ExportGroupId` FROM `Group` LEFT JOIN `ExportGroup` ON `ExportGroup`.`Export`='.$_GET['ExportId'].' AND `Group`=`Group`.`Id`';
435
436 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM ('.$Query.') AS X');
437 $DbRow = $DbResult->fetch_row();
438 $PageList = GetPageList($DbRow[0]);
439
440 $TableColumns = array(
441 array('Name' => 'Name', 'Title' => 'Jméno'),
442 array('Name' => 'MangosTable', 'Title' => 'Tabulka MaNGOSu'),
443 array('Name' => 'DBCFileName', 'Title' => 'DBC soubor'),
444 array('Name' => 'LuaFileName', 'Title' => 'Lua soubor'),
445 array('Name' => '', 'Title' => 'Výběr'),
446 );
447 $Order = GetOrderTableHeader($TableColumns, 'Name');
448 $Output .= '<form action="?Action=View&amp;ExportId='.$_GET['ExportId'].'" method="post">'.
449 '<h3>Překladové skupiny</h3>';
450 if($Editable)
451 {
452 $Output .= '<input type="submit" value="Uložit" '.$DisabledInput[$Editable].'/>'.
453 '<input type="hidden" name="Operation" value="Save"/>'.
454 ' <span onclick="CheckAllCheckbox();">'.CheckBox('CheckAll', False, 'CheckAll').' Zatrhnout vše</span> '.
455 '<br />'.
456 'Zvolte ze překladových skupin, ze kterých chcete načítat překlady.<br />';
457 }
458
459 $Output .= $PageList['Output'].
460 '<table class="BaseTable">'.
461 $Order['Output'];
462
463 $Query = 'SELECT * FROM ('.$Query.') AS TX '.$Order['SQL'].$PageList['SQLLimit'];
464 $DbResult = $this->System->Database->query($Query);
465 while($Group = $DbResult->fetch_assoc())
466 {
467 $Checked = $Group['ExportGroupId'] != '';
468 $Selection = CheckBox('sel'.$Group['Id'], $Checked, '', 'CheckBox', !$Editable);
469 $Output .= '<tr>'.
470 '<td>'.$Group['Name'].'</td>'.
471 '<td>'.$Group['MangosTable'].'</td>'.
472 '<td>'.$Group['DBCFileName'].'</td>'.
473 '<td>'.$Group['LuaFileName'].'</td>'.
474 '<td>'.$Selection.'<input type="hidden" name="seq'.$Group['Id'].'"/></td></tr>';
475 }
476 $Output .= '</table>'.
477 '</form>'.
478 $PageList['Output'];
479 return($Output);
480 }
481
482 function ExportViewOutputFormat()
483 {
484 $Output = '';
485 $DisabledInput = array(false => ' disabled="disabled"', true => '');
486 if(array_key_exists('ExportId', $_GET))
487 {
488 $DbRows = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
489 if($DbRows->num_rows > 0)
490 {
491 $Export = $DbRows->fetch_assoc();
492 if($this->System->User->Licence(LICENCE_USER) and ($this->System->User->Id == $Export['User'])) $Editable = true;
493 else $Editable = false;
494
495 if(array_key_exists('Operation', $_POST))
496 if($_POST['Operation'] == 'Save')
497 {
498 if(array_key_exists('OutputType', $_POST) and ($_POST['OutputType'] * 1 > 0))
499 {
500 $this->System->Database->query('UPDATE Export SET OutputType='.$_POST['OutputType'].' WHERE Id='.$_GET['ExportId']);
501 $Output .= ShowMessage('Výběr uložen.');
502 } else $Output .= ShowMessage('Nevybrán žádný formát', MESSAGE_CRITICAL);
503 }
504
505 $DbResult = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
506 $Export = $DbResult->fetch_assoc();
507
508 $Output .= '<h3>Formát generovaného výstupu</h3>'.
509 '<form action="?Action=View&amp;ExportId='.$_GET['ExportId'].'" method="post">';
510 if($Editable)
511 {
512 $Output .= '<input type="submit" value="Uložit" '.$DisabledInput[$Editable].'/>'.
513 '<input type="hidden" name="Operation" value="Save"/>'.
514 '<br />';
515 }
516 $DbResult = $this->System->Database->query('SELECT * FROM `ExportOutputType` ORDER BY `Name`');
517 while($ExportFormat = $DbResult->fetch_assoc())
518 {
519 $Output .= RadioButton('OutputType', $ExportFormat['Id'], $Export['OutputType'] == $ExportFormat['Id'], '', !$Editable).' '.$ExportFormat['Name'].'<br/>';
520 }
521 $Output .= '</form>';
522 } else $Output .= ShowMessage('Položka nenalezena.', MESSAGE_CRITICAL);
523 } else $Output .= ShowMessage('Nebylo zadáno Id.', MESSAGE_CRITICAL);
524 return($Output);
525 }
526
527 function ExportViewVersion()
528 {
529 $Output = '';
530 $DisabledInput = array(false => ' disabled="disabled"', true => '');
531 $DbRows = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
532 $Export = $DbRows->fetch_assoc();
533 if($this->System->User->Licence(LICENCE_USER) and ($this->System->User->Id == $Export['User'])) $Editable = true;
534 else $Editable = false;
535
536 if(array_key_exists('Operation', $_POST))
537 if(($_POST['Operation'] == 'Save') and (array_key_exists('ClientVersion', $_POST)))
538 {
539 $this->System->Database->query('UPDATE `Export` SET `ClientVersion`='.$_POST['ClientVersion'].' WHERE `Id`='.$_GET['ExportId']);
540 $Output .= ShowMessage('Výběr uložen.');
541 }
542
543 $DbResult = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
544 $Export = $DbResult->fetch_assoc();
545
546 if($Export['OutputType'] == '') $Output .= ShowMessage('Nevybrán typ exportu', MESSAGE_CRITICAL);
547 else {
548 $Query = 'SELECT `ClientVersion`.* FROM `ExportVersion` LEFT JOIN `ClientVersion` ON `ClientVersion`.`Id`=`ExportVersion`.`ClientVersion` WHERE `ExportType`='.$Export['OutputType'];
549
550 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM ('.$Query.') AS `X`');
551 $DbRow = $DbResult->fetch_row();
552 $PageList = GetPageList($DbRow[0]);
553
554 $TableColumns = array(
555 array('Name' => 'Version', 'Title' => 'Verze'),
556 array('Name' => 'BuildNumber', 'Title' => 'Sestavení'),
557 array('Name' => 'ReleaseDate', 'Title' => 'Datum uvolnění'),
558 array('Name' => 'Title', 'Title' => 'Titutek'),
559 array('Name' => '', 'Title' => 'Výběr'),
560 );
561 $Order = GetOrderTableHeader($TableColumns, 'BuildNumber', 1);
562 $Output .= '<form action="?Action=View&amp;ExportId='.$_GET['ExportId'].'" method="post">'.
563 '<h3>Verze klienta</h3>';
564
565 if($Editable)
566 {
567 $Output .= '<input type="submit" value="Uložit" '.$DisabledInput[$Editable].'/>'.
568 '<input type="hidden" name="Operation" value="Save"/>'.
569 '<br />'.
570 'Vyberte pro jakou verzi herního klienta se budou texty exportovat.<br />';
571 }
572 $Output .= $PageList['Output'].
573 '<table class="BaseTable">'.
574 $Order['Output'];
575
576 $Query = 'SELECT * FROM ('.$Query.') AS `TX` '.$Order['SQL'].$PageList['SQLLimit'];
577 $DbResult = $this->System->Database->query($Query);
578 while($Version = $DbResult->fetch_assoc())
579 {
580 $Output .= '<tr><td><a href="http://www.wowwiki.com/Patch_'.$Version['Version'].'">'.
581 $Version['Version'].'</a></td><td>'.$Version['BuildNumber'].'</td><td>'.
582 HumanDate($Version['ReleaseDate']).'</td><td>'.$Version['Title'].'</td><td>'.
583 RadioButton('ClientVersion', $Version['Id'], $Export['ClientVersion'] == $Version['Id'], '', !$Editable
584 ).'</td></tr>';
585
586 }
587 $Output .= '</table>'.
588 '</form>'.
589 $PageList['Output'];
590 }
591 return($Output);
592 }
593
594 function ExportViewOutput()
595 {
596 $Output = '';
597 $DbResult = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
598 $Export = $DbResult->fetch_assoc();
599 if($Export['OutputType'] == '') $Output .= ShowMessage('Nevybrán typ exportu', MESSAGE_CRITICAL);
600 else if($Export['ClientVersion'] == '') $Output .= ShowMessage('Export nemá vybránu verzi klienta', MESSAGE_CRITICAL);
601 else {
602 $DbResult = $this->System->Database->query('SELECT * FROM `ExportOutputType` WHERE `Id`='.$Export['OutputType']);
603 if($DbResult->num_rows > 0)
604 {
605 $DbResult = $this->System->Database->query('SELECT * FROM `ExportVersion` WHERE (`ExportType`='.$Export['OutputType'].') AND (`ClientVersion`='.$Export['ClientVersion'].')');
606 if($DbResult->num_rows > 0)
607 {
608 //TODO: don't count on dbc or exe
609 $this->System->Database->query('UPDATE `Export` SET `UsedCount` = `UsedCount` + 1 WHERE `Id`='.$Export['Id']);
610 $Output = ExportOutput($Export['Id'], $Export['OutputType']);
611 } else $Output = ShowMessage('Nebyla vybrána požadovaná verze klienta.', MESSAGE_CRITICAL);
612 } else $Output = ShowMessage('Nebyl vybrán formát výstupu.', MESSAGE_CRITICAL);
613 }
614 return($Output);
615 }
616
617 function ExportViewStat($Where = '')
618 {
619 $Export = new Export($this->System);
620 $Export->Id = $_GET['ExportId'];
621 $Export->Init();
622 $Export->LoadFilters();
623
624 if(($Export->Export['ClientVersion'] == '') or ($Export->ClientVersion['BuildNumber'] == ''))
625 $Output = ShowMessage('Nebyla vybrána verze klienta', MESSAGE_CRITICAL);
626 else {
627 $GroupListQuery = 'SELECT `Group`.* FROM `Group` '.
628 ' JOIN `ExportGroup` ON (`ExportGroup`.`Export`='.$Export->Id.') AND (`ExportGroup`.`Group`=`Group`.`Id`)';
629 $Query = '';
630 $UnionItems = array();
631 $DbResult = $this->System->Database->query($GroupListQuery.$Where);
632 while($DbRow = $DbResult->fetch_assoc())
633 {
634 $UnionItems[] = 'SELECT (SELECT COUNT(DISTINCT(`Entry`)) FROM ('.
635 ' SELECT `T`.* FROM `'.$DbRow['TablePrefix'].'` AS `T`'.
636 ' JOIN `ExportUser` ON (`ExportUser`.`User`=`T`.`User`) AND (`ExportUser`.`Export`='.$Export->Id.') '.
637 ' JOIN `ExportLanguage` ON (`ExportLanguage`.`Export`='.$Export->Id.')'.
638 ' WHERE (`Complete` = 1) AND (`VersionStart` <= '.$Export->ClientVersion['BuildNumber'].') AND (`VersionEnd` >= '.$Export->ClientVersion['BuildNumber'].')'.
639 ') AS `C1`) AS `Translated`, '.
640 '(SELECT COUNT(DISTINCT(`Entry`)) FROM ('.
641 ' SELECT `T`.* FROM `'.$DbRow['TablePrefix'].'` AS `T`'.
642 ' WHERE (`Language` = '.$this->System->Config['OriginalLanguage'].') AND (`VersionStart` <= '.$Export->ClientVersion['BuildNumber'].') AND (`VersionEnd` >= '.$Export->ClientVersion['BuildNumber'].')'.
643 ') AS `C2`) AS `Total`, "'.$DbRow['Name'].'" AS `Name`';
644 }
645 $Query = substr($Query, 0, - 6);
646
647 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM ('.$GroupListQuery.') AS `T`');
648 $DbRow = $DbResult->fetch_row();
649 $PageList = GetPageList($DbRow[0]);
650 $Output = '<h3>Statistika dokončení vybraných skupin</h3>'.
651 $PageList['Output'];
652
653 $Output .= '<table class="BaseTable">';
654 $TableColumns = array(
655 array('Name' => 'Name', 'Title' => 'Jméno'),
656 array('Name' => 'Translated', 'Title' => 'Přeložených'),
657 array('Name' => 'Total', 'Title' => 'Anglických'),
658 array('Name' => 'Percent', 'Title' => 'Procenta'),
659 );
660
661 $Order = GetOrderTableHeader($TableColumns, 'Name', 0);
662 $Output .= $Order['Output'];
663
664 $Translated = 0;
665 $Total = 0;
666 if(count($UnionItems) > 0)
667 {
668 $ID = $this->System->Database->query('SELECT *, ROUND(`Translated` / `Total` * 100, 2) AS `Percent` FROM ('.implode(' UNION ALL ', $UnionItems).') AS `C3` '.$Order['SQL'].$PageList['SQLLimit']);
669 while($Group = $ID->fetch_assoc())
670 {
671 $Output .= '<tr><td>'.$Group['Name'].'</td><td>'.$Group['Translated'].'</td><td>'.$Group['Total'].'</td><td>'.ProgressBar(150, $Group['Percent']).'</td></tr>';
672 $Translated += $Group['Translated'];
673 $Total += $Group['Total'];
674 }
675 }
676 if($Total > 0) $Percent = $Translated / $Total * 100;
677 else $Percent = 100;
678
679 $Output .= '<tr><td><strong>Celkem</strong></td><td><strong>'.$Translated.'</strong></td><td><strong>'.$Total.'</strong></td><td><strong>'.ProgressBar(150, round($Percent, 2)).'</strong></td></tr>';
680 $Output .= '</table>';
681 }
682 return($Output);
683 }
684
685 function ExportView()
686 {
687 $Output = '';
688 if(array_key_exists('ExportId', $_GET) and is_numeric($_GET['ExportId']))
689 {
690 $DbResult = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
691 if($DbResult->num_rows > 0)
692 {
693 $Export = $DbResult->fetch_assoc();
694
695 $DbResult = $this->System->Database->query('SELECT * FROM `User` WHERE `ID`='.$Export['User']);
696 $UserLine = $DbResult->fetch_assoc();
697 $Output .= 'Export <strong><a href="?Action=View&amp;Tab=6&amp;ExportId='.$Export['Id'].'">'.$_GET['ExportId'].'</a></strong> překladatele <strong>'.$UserLine['Name'].'</strong> s označením <strong>'.$Export['Title'].'</strong>';
698 $Output .= ShowTabs(array('Obecné', 'Překladatelé', 'Překlady', 'Jazyky', 'Formát', 'Verze', 'Statistika', 'Výstup'));
699 $Output .= '<div id="content">';
700 if($_SESSION['Tab'] == TAB_GENERAL) $Output .= $this->ExportViewGeneral();
701 else if($_SESSION['Tab'] == TAB_TRANSLATORS) $Output .= $this->ExportViewTranslators();
702 else if($_SESSION['Tab'] == TAB_GROUPS) $Output .= $this->ExportViewGroups();
703 else if($_SESSION['Tab'] == TAB_LANGUAGES) $Output .= $this->ExportViewLanguages();
704 else if($_SESSION['Tab'] == TAB_OUTPUT_FORMAT) $Output .= $this->ExportViewOutputFormat();
705 else if($_SESSION['Tab'] == TAB_VERSION) $Output .= $this->ExportViewVersion();
706 else if($_SESSION['Tab'] == TAB_STAT) $Output .= $this->ExportViewStat();
707 else if($_SESSION['Tab'] == TAB_OUTPUT) $Output .= $this->ExportViewOutput();
708 else $Output .= $this->ExportViewGeneral();
709
710 $Output .= '</div>';
711 } else $Output .= ShowMessage('Export nenalezen.', MESSAGE_CRITICAL);
712 } else $Output .= ShowMessage('Nebylo zadáno Id.', MESSAGE_CRITICAL);
713 return($Output);
714 }
715
716 function ExportClone()
717 {
718 if($this->System->User->Licence(LICENCE_USER))
719 {
720 if(array_key_exists('ExportId', $_GET) and is_numeric($_GET['ExportId']))
721 {
722 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM `Export` WHERE `User`='.$this->System->User->Id);
723 $DbRow = $DbResult->fetch_row();
724 if($DbRow[0] < $this->System->Config['MaxExportPerUser'])
725 {
726 $DbResult = $this->System->Database->query('SELECT * FROM `Export` WHERE `Id`='.$_GET['ExportId']);
727 if($DbResult->num_rows > 0)
728 {
729 $DbRow = $DbResult->fetch_assoc();
730 unset($DbRow['Id']);
731 $DbRow['UsedCount'] = '0';
732 $DbRow['User'] = $this->System->User->Id;
733 $DbRow['TimeCreate'] = 'NOW()';
734 $DbRow['Title'] .= ' - kopie';
735 $this->System->Database->insert('Export', $DbRow);
736 $ExportId = $this->System->Database->insert_id;
737 $this->System->Database->query('INSERT INTO `ExportGroup` (SELECT NULL AS `Id`, '.$ExportId.' AS `Export`, `Group` FROM `ExportGroup` WHERE `Export`='.$_GET['ExportId'].')');
738 $this->System->Database->query('INSERT INTO `ExportLanguage` (SELECT NULL AS `Id`, '.$ExportId.' AS `Export`, `Language`, `Sequence` FROM `ExportLanguage` WHERE `Export`='.$_GET['ExportId'].')');
739 $this->System->Database->query('INSERT INTO `ExportUser` (SELECT NULL AS `Id`, '.$ExportId.' AS `Export`, `User`, `Sequence` FROM `ExportUser` WHERE `Export`='.$_GET['ExportId'].')');
740 $Output = ShowMessage('Kopie exportu vytvořena.<br/>Přímý odkaz na tento export: <a href="?Action=View&amp;ExportId='.$ExportId.'">zde</a>');
741 $this->System->ModuleManager->Modules['Log']->WriteLog('Vytvořena kopie exportu <a href="'.$this->System->Link('/export/?Action=View&amp;ExportId='.$ExportId).'">'.$ExportId.'</a>.', LOG_TYPE_EXPORT);
742 $_GET['Filter'] = 'my';
743 $this->ExportList();
744 } else $Output = ShowMessage('Zdrojový export nenalezen', MESSAGE_CRITICAL);
745 } else $Output = ShowMessage('Nemůžete vytvářet další export. Max. počet na uživatele je '.
746 $this->System->Config['MaxExportPerUser'].'.', MESSAGE_CRITICAL);
747 } else $Output = ShowMessage('Export nenalezen.', MESSAGE_CRITICAL);
748 } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
749 return($Output);
750 }
751
752 function Show()
753 {
754 $this->Title = T('Export');
755 if(array_key_exists('Action', $_GET))
756 {
757 if($_GET['Action'] == 'Create') $Output = $this->ExportCreate();
758 else if($_GET['Action'] == 'CreateFinish') $Output = $this->ExportCreateFinish();
759 else if($_GET['Action'] == 'View') $Output = $this->ExportView();
760 else if($_GET['Action'] == 'Delete') $Output = $this->ExportDelete();
761 else if($_GET['Action'] == 'Clone') $Output = $this->ExportClone();
762 else $Output = $this->ExportList();
763 } else $Output = $this->ExportList();
764 return($Output);
765 }
766}
Note: See TracBrowser for help on using the repository browser.