source: trunk/Modules/Export/ExportOutput.php

Last change on this file was 900, checked in by chronos, 8 months ago
  • Fixed: More form input fields validation.
  • Modified: Code cleanup.
File size: 15.5 KB
Line 
1<?php
2
3include_once(dirname(__FILE__).'/../../includes/zip.lib.php');
4include_once(dirname(__FILE__).'/../../includes/dbc.php');
5include_once(dirname(__FILE__).'/CreateAddon.php');
6
7//ini_set('memory_limit', '100M');
8
9function CreateZipFromDir(&$Zip, $Path, $ZipPath)
10{
11 $FileList = scandir($Path);
12 foreach ($FileList as $FileName)
13 {
14 if (file_exists($Path.$FileName) and ($FileName != '.') and ($FileName != '..'))
15 {
16 if (is_dir($Path.$FileName)) CreateZipFromDir($Zip, $Path.$FileName.'/', $ZipPath.$FileName.'/');
17 else $Zip->addFile(file_get_contents($Path.$FileName), $ZipPath.$FileName);
18 }
19 }
20}
21
22function OutputAoWoWToFile($ExportId)
23{
24 global $System;
25
26 $Output = '';
27 $Export = new Export($System);
28 $Export->Id = $ExportId;
29 $Export->Init();
30 if (function_exists('gzcompress'))
31 {
32 $SaveFilename = $Export->TempDir.'CzAoWoW_SQL.zip';
33 $SQLFilename = 'CzAoWoW_SQL.sql';
34 $BufferZip = $Export->ExportToAoWoWSQL();
35 $ZipFile = new zipfile();
36 $ZipFile->addFile($BufferZip, $SQLFilename);
37 $Buffer = $ZipFile->file();
38 file_put_contents($SaveFilename, $Buffer);
39 } else $Output .= ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
40 //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
41 // 'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
42 // '</script>';
43
44 $Output .= 'Pokud nezačalo stahování, soubor by mělo jít stáhnout pomocí tohoto odkazu: '.
45 '<a href="'.$System->Link('/'.$Export->TempDirRelative.'CzAoWoW_SQL.zip').'">'.$SQLFilename.'</a><br />'.
46 'Pokud se vám zdá, že filtr na export nefunguje, vymažte si vyrovnávací paměť prohlížeče a zkuste stáhnout soubor znovu.';
47 return $Output;
48}
49
50function OutputAoWoWToHTML($ExportId)
51{
52 global $System;
53
54 $Export = new Export($System);
55 $Export->Id = $ExportId;
56
57 $Output = 'Vygenerovaný SQL kód: <br /><pre class="SQLCode">'.
58 htmlspecialchars($Export->ExportToAoWoWSQL()).
59 '</pre>';
60 return $Output ;
61}
62
63function OutputMangosSQLToFile($ExportId)
64{
65 global $System;
66
67 $Output = '';
68 $Export = new Export($System);
69 $Export->Id = $ExportId;
70 $Export->Init();
71 if (function_exists('gzcompress'))
72 {
73 $SaveFilename = $Export->TempDir.'CzWoW_SQL.zip';
74 $SQLFilename = 'CzWoW_SQL.sql';
75 $BufferZip = $Export->ExportToMangosSQL();
76 $ZipFile = new zipfile();
77 $ZipFile->addFile($BufferZip, $SQLFilename);
78 $Buffer = $ZipFile->file();
79 file_put_contents($SaveFilename, $Buffer);
80 } else $Output .= ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
81 //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
82 // 'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
83 // '</script>';
84
85 $Output .= 'Pokud nezačalo stahování, soubor by mělo jít stáhnout pomocí tohoto odkazu: '.
86 '<a href="'.$System->Link('/'.$Export->TempDirRelative.'CzWoW_SQL.zip').'">'.$SQLFilename.'</a><br />'.
87 'Pokud se vám zdá, že filtr na export nefunguje, vymažte si vyrovnávací paměť prohlížeče a zkuste stáhnout soubor znovu.';
88 return $Output;
89}
90
91function OutputMangosSQLToHTML($ExportId)
92{
93 global $System;
94
95 $Export = new Export($System);
96 $Export->Id = $ExportId;
97 $Export->Init();
98 $Output = 'Vygenerovaný SQL kód: <br /><pre class="SQLCode">'.
99 htmlspecialchars($Export->ExportToMangosSQL()).
100 '</pre>';
101 return $Output;
102}
103
104function OutputAddon($ExportId)
105{
106 global $System;
107
108 if (function_exists('gzcompress'))
109 {
110 $Addon = new ExportAddon($System);
111 $Addon->Id = $ExportId;
112 $Addon->Init();
113 $Output = $Addon->MakeAddon();
114
115 $Output .= 'Generování addonu...<br />';
116 $SaveFilename = $Addon->TempDir.'CzWoW_Addon-'.$Addon->ClientVersion['Version'].'.zip';
117 $Zip = new zipfile();
118 CreateZipFromDir($Zip, $Addon->TempDir.'CzWoW/', 'CzWoW/');
119 $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/OptionsFrame.xml'), 'CzWoW/OptionsFrame.xml');
120 $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/CzWoW.xml'), 'CzWoW/CzWoW.xml');
121 $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/CzWoW.toc'), 'CzWoW/CzWoW.toc');
122 $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/CzWoW.lua'), 'CzWoW/CzWoW.lua');
123 $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/GameMenuFrame.xml'), 'CzWoW/GameMenuFrame.xml');
124 $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/Localization.lua'), 'CzWoW/Localization.lua');
125 $Buffer = $Zip->file();
126 file_put_contents($SaveFilename, $Buffer);
127 $Output .= 'Hotovo<br /><br />';
128 } else $Output = ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
129 //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
130 // 'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
131 // '</script>';
132
133 $Output .= 'Soubor ke stažení: '.
134 '<a href="'.$System->Link('/'.$Addon->TempDirRelative.'CzWoW_Addon-'.$Addon->ClientVersion['Version'].'.zip').'">CzWoW_Addon-'.$Addon->ClientVersion['Version'].'.zip</a><br />'.
135 'Pokud se vám zdá, že filtr na export nefunguje, vymažte si vyrovnávací paměť prohlížeče a zkuste stáhnout soubor znovu.';
136 $Output .= '<br /><strong>Použití ve hře</strong><br />Menu addonu ve hře vyvoláte povelem /czwow.';
137 return $Output;
138}
139
140function OutputXMLToFile($ExportId)
141{
142 global $System;
143
144 $Output = '';
145 $Export = new Export($System);
146 $Export->Id = $ExportId;
147 $Export->Init();
148 if (function_exists('gzcompress'))
149 {
150 $SaveFilename = $Export->TempDir.'CzWoW_XML.zip';
151 $SQLFilename = 'CzWoW_XML.sql';
152 $BufferZip = $Export->ExportToXML();
153 $ZipFile = new zipfile();
154 $ZipFile->addFile($BufferZip, $SQLFilename);
155 $Buffer = $ZipFile->file();
156 file_put_contents($SaveFilename, $Buffer);
157 } else $Output .= ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
158 //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
159 // 'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
160 // '</script>';
161
162 $Output .= 'Pokud nezačalo stahování, soubor by mělo jít stáhnout pomocí tohoto odkazu: '.
163 '<a href="'.$System->Link('/'.$Export->TempDirRelative.'CzWoW_XML.zip').'">CzWoW_SQL.zip</a><br />'.
164 'Pokud se vám zdá, že filtr na export nefunguje, vymažte si vyrovnávací paměť prohlížeče a zkuste stáhnout soubor znovu.';
165 return $Output;
166}
167
168function OutputXMLToHTML($ExportId)
169{
170 global $System;
171
172 $Export = new Export($System);
173 $Export->Id = $ExportId;
174 $Export->Init();
175 $Output = 'Vygenerované XML: <br /><pre class="SQLCode">'.
176 htmlspecialchars($Export->ExportToXML()).
177 '</pre>';
178 return $Output;
179}
180
181function OutputDBCToFile($ExportId)
182{
183 global $System;
184
185 $Export = new Export($System);
186 $Export->Id = $ExportId;
187 $Export->Init();
188
189 $Output = '';
190 $DbResult = $System->Database->query('SELECT `Id` FROM `ExportTask` WHERE (`Export` = '.$ExportId.
191 ') AND ((`TimeFinish` < `TimeStart`) OR (`TimeFinish` IS NULL))');
192 if ($DbResult->num_rows == 0)
193 {
194 if (array_key_exists('Regenerate', $_POST))
195 {
196 $System->Database->query('UPDATE `ExportTask` SET `TimeQueued` = NOW(), `Progress`=0 , `TimeStart` = NULL, `TimeFinish` = NULL WHERE `Export` = '.$ExportId);
197 $Output .= ShowMessage('Soubor zařazen znovu ke zpracování do fronty.');
198 $System->ModuleManager->Modules['Log']->WriteLog('Zadání úlohy pro vygenerování dbc souboru', LOG_TYPE_DOWNLOAD);
199 } else {
200 $Output .= '<form action="?Action=View&amp;Tab=7&amp;ExportId='.$ExportId.'" method="post">'.
201 '<input type="submit" name="Regenerate" value="'.T('Regenerate').'"/></form><br />';
202 }
203 }
204
205 $Output .= 'U DBC souborů export textů funguje jinak, protože generování je náročné, '.
206 'jsou požadavky zařazovány do fronty a postupně zpracovávány.<br />'.
207 'DBC soubory je nutné zabalit do souboru patch-enGB-5.MPQ uvnitř složky "DBFilesClient" a '.
208 'hru spouštět přes upravený spouštěcí soubor. Zabalit je můžete pomocí programu '.
209 '<a href="../download/mpqediten32.zip">Ladik\'s MPQ Editor</a>. Stav vygenerování '.
210 'můžete sledovat na této stránce.<br /><br />';
211
212 $DbResult = $System->Database->query('SELECT * FROM `ExportTask` WHERE `Export` = '.$ExportId);
213 if ($DbResult->num_rows == 0)
214 {
215 $System->Database->query('INSERT INTO `ExportTask` (`Export` ,`TimeQueued`, `Progress` ) VALUES ('.$ExportId.', NOW(), 0)');
216 $System->ModuleManager->Modules['Log']->WriteLog('Zadání úlohy pro vygenerování DBC souboru', LOG_TYPE_DOWNLOAD);
217 $System->Database->query('UPDATE `ExportTask` SET `Progress`=0 WHERE `Export`='.$Export->Id);
218 }
219
220 $DbResult = $System->Database->query('SELECT `TimeFinish` FROM `ExportTask` WHERE `Export` = '.$ExportId);
221 $ExportTask = $DbResult->fetch_assoc();
222 if ($ExportTask['TimeFinish'] <> '')
223 {
224 $Output .= '<strong>Souhrný balík: <a href="'.$System->Link('/'.$Export->TempDirRelative.'CzWoW_DBC.zip').'">CzWoW_DBC.zip</a></strong><br/>';
225 $DbResult = $System->Database->query('SELECT `Group`.* FROM `ExportGroup` JOIN `Group` ON `Group`.`Id` = `ExportGroup`.`Group` WHERE `ExportGroup`.`Export`='.$Export->Id.' AND `Group`.`DBCFileName` != ""');
226 while ($Group = $DbResult->fetch_assoc())
227 {
228 if (file_exists($Export->TempDir.'dbc/'.$Group['DBCFileName'].'.dbc'))
229 $Output .= '<a href="'.$System->Link('/'.$Export->TempDirRelative.'dbc/'.$Group['DBCFileName'].'.dbc').'">'.$Group['DBCFileName'].'.dbc</a><br/>';
230 }
231 } else {
232 $Output .= ShowProgress($Export);
233
234 }
235 return $Output;
236}
237
238function ShowProgress($Export)
239{
240 global $System;
241
242 $Output = '';
243 $Output .= 'Fronta zpracování exportů. Zobrazuje procenta dokončení: <br /><br />';
244
245 $Output .= '<script src="'.$System->Link('/style/jquery.js').'"></script>'.
246 '<script>'.
247 '$(document).ready(function() {'.
248 'var refreshId = setInterval(function() {'.
249 '$("#progress").load("'.$System->Link('/export/progress?i='.$_GET['ExportId']).'"); '.
250 '}, 1000);'.
251 '});'.
252 '</script>';
253
254 $Output .= ' <div id="progress">'.$System->ModuleManager->Modules['Export']->GetTaskProgress($_GET['ExportId'] * 1).
255 '</div><br />';
256
257 // Check if process task is running
258 $Timeout = 60 * 60 * 2; // two hours
259 $DbResult = $System->Database->query('SELECT * FROM `ExportTask` '.
260 'LEFT JOIN `Export` ON `Export`.`Id` = `ExportTask`.`Export` '.
261 'WHERE ((`Export`.`OutputType` = 9) OR (`Export`.`OutputType` = 10)) AND '.
262 '(`TimeFinish` IS NULL) AND (`TimeQueued` < (NOW() - '.$Timeout.'))');
263 if ($DbResult->num_rows > 0)
264 {
265 $System->ModuleManager->Modules['Log']->WriteLog('ProcesTask nepracuje přes 2 hodiny, pravděpodobně nepracuje!', LOG_TYPE_ERROR);
266 }
267 return $Output;
268}
269
270function OutputEXEToFile($ExportId)
271{
272 global $System;
273
274 $Export = new Export($System);
275 $Export->Id = $ExportId;
276 $Export->Init();
277 $Export->LoadFilters();
278
279 $Output = '';
280 // Allow to regenerate output if it was previously finished
281 $DbResult = $System->Database->query('SELECT `Id` FROM `ExportTask` WHERE (`Export` = '.$ExportId.
282 ') AND ((`TimeFinish` < `TimeStart`) OR (`TimeFinish` IS NULL))');
283 if ($DbResult->num_rows == 0)
284 {
285 if (array_key_exists('Regenerate', $_POST))
286 {
287 $System->Database->query('UPDATE `ExportTask` SET `TimeQueued` = NOW(), `Progress`=0, `TimeStart` = NULL, `TimeFinish` = NULL WHERE `Export` = '.$ExportId);
288 $Output .= ShowMessage('Soubor zařazen znovu ke zpracování do fronty.');
289 $System->ModuleManager->Modules['Log']->WriteLog('Zadání úlohy pro vygenerování exe souboru', LOG_TYPE_DOWNLOAD);
290 } else {
291 $Output .= '<form action="?Action=View&amp;Tab=7&amp;ExportId='.$ExportId.'" method="post">'.
292 '<input type="submit" name="Regenerate" value="'.T('Regenerate').'"/></form><br />';
293 }
294 }
295
296 $Output .= 'U souhrné instalace češtiny funguje export textů jinak, protože generování je náročné, jsou požadavky zařazovány do fronty a postupně zpracovávány.<br /><br />';
297
298 // Start task for the first time if export task was not yet started
299 $DbResult = $System->Database->query('SELECT * FROM `ExportTask` WHERE `Export` = '.$ExportId);
300 if ($DbResult->num_rows == 0)
301 {
302 $System->Database->query('INSERT INTO `ExportTask` (`Export`, `TimeStart` ) VALUES ('.$ExportId.', NOW())');
303 $System->ModuleManager->Modules['Log']->WriteLog('Zadání úlohy pro vygenerování DBC souboru', LOG_TYPE_DOWNLOAD);
304 }
305
306 $DbResult = $System->Database->query('SELECT `TimeFinish` FROM `ExportTask` WHERE `Export` = '.$ExportId);
307 $ExportTask = $DbResult->fetch_assoc();
308 if ($ExportTask['TimeFinish'] <> '')
309 {
310 $FileName = 'Instalace_CzechWoW_'.$Export->ClientVersion['Version'].'.exe';
311 $Output .= '<strong>Souhrný EXE balík: <a href="'.$System->Link('/'.$Export->TempDirRelative.$FileName).'">'.$FileName.'</a></strong><br/>';
312 } else {
313 $Output .= ShowProgress($Export);
314 }
315 return $Output;
316}
317
318function OutputLua($ExportId)
319{
320 global $System;
321
322 $Export = new Export($System);
323 $Export->Id = $ExportId;
324 $Export->Init();
325
326 if (function_exists('gzcompress'))
327 {
328 $Output = 'Generování lua souborů...<br />';
329 $Export->ExportToLua();
330 $SaveFilename = $Export->TempDir.'CzWoW_Lua.zip';
331 $ZipFile = new zipfile();
332 CreateZipFromDir($ZipFile, $Export->TempDir.'lua/', '');
333 $Buffer = $ZipFile->file();
334 file_put_contents($SaveFilename, $Buffer);
335 $Output .= 'Hotovo<br /><br />';
336 } else $Output = ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
337 //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
338 // 'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
339 // '</script>';
340
341 $Output .= '<strong>Soubory:</strong><br/>'.
342 'Souhrný archív <a href="'.$System->Link('/'.$Export->TempDirRelative.'CzWoW_Lua.zip').'">CzWoW_Lua.zip</a><br />';
343 $DbResult = $System->Database->query('SELECT `Group`.* FROM `ExportGroup` JOIN `Group` ON `Group`.`Id` = `ExportGroup`.`Group` WHERE `ExportGroup`.`Export`='.$Export->Id.' AND `Group`.`LuaFileName` != ""');
344 while ($Group = $DbResult->fetch_assoc())
345 {
346 $Output .= '<a href="'.$System->Link('/'.$Export->TempDirRelative.'lua/'.$Group['LuaFileName'].'.lua').'">'.$Group['LuaFileName'].'.lua</a><br/>';
347 }
348 $Output .= '<br /><br /><strong>Použití ve hře</strong><br />Ze souborů vytvořte MPQ archív a nahrajte ho do hry do podsložky jako Data/enUS/patch-enUS-5.MPQ nebo Data/enUS/patch-enGB-5.MPQ. Pro starší verze hry než 3.2.0 je nutné spouštět hru pomocí programu WoWMe.exe (WoW Model Editor Fix).';
349 return $Output;
350}
351
352function ExportOutput($ExportId, $Type)
353{
354 if ($Type == 1) $Output = OutputMangosSQLToHTML($ExportId);
355 else if ($Type == 2) $Output = OutputMangosSQLToFile($ExportId);
356 else if ($Type == 3) $Output = OutputAoWoWToHTML($ExportId);
357 else if ($Type == 4) $Output = OutputAoWoWToFile($ExportId);
358 else if ($Type == 5) $Output = OutputXMLToHTML($ExportId);
359 else if ($Type == 6) $Output = OutputXMLToFile($ExportId);
360 else if ($Type == 7) $Output = OutputAddon($ExportId);
361 else if ($Type == 8) $Output = OutputLua($ExportId);
362 else if ($Type == 9) $Output = OutputDBCToFile($ExportId);
363 else if ($Type == 10) $Output = OutputEXEToFile($ExportId);
364 else $Output = ShowMessage('Nebyl vybrán žádný formát výstupu.', MESSAGE_CRITICAL);
365 return $Output;
366}
Note: See TracBrowser for help on using the repository browser.