1 | <?php
|
---|
2 |
|
---|
3 | include_once(dirname(__FILE__).'/../../includes/dbc.php');
|
---|
4 | include_once(dirname(__FILE__).'/Manage.php');
|
---|
5 |
|
---|
6 | class ModuleImport extends Module
|
---|
7 | {
|
---|
8 | function __construct(System $System)
|
---|
9 | {
|
---|
10 | parent::__construct($System);
|
---|
11 | $this->Name = 'Import';
|
---|
12 | $this->Version = '1.0';
|
---|
13 | $this->Creator = 'Chronos';
|
---|
14 | $this->License = 'GNU/GPL';
|
---|
15 | $this->Description = 'Support for import of data.';
|
---|
16 | $this->Dependencies = array('Translation');
|
---|
17 | }
|
---|
18 |
|
---|
19 | function DoStart(): void
|
---|
20 | {
|
---|
21 | $this->System->RegisterPage(['import'], 'PageImport');
|
---|
22 | }
|
---|
23 | }
|
---|
24 |
|
---|
25 | class Import
|
---|
26 | {
|
---|
27 | var $Version;
|
---|
28 | var $Group;
|
---|
29 | var $NewItemCount;
|
---|
30 | var $System;
|
---|
31 |
|
---|
32 | function __construct(System $System)
|
---|
33 | {
|
---|
34 | $this->System = &$System;
|
---|
35 | }
|
---|
36 |
|
---|
37 | function SetVersion($Version)
|
---|
38 | {
|
---|
39 | $DbResult = $this->System->Database->query('SELECT * FROM `ClientVersion` WHERE `Version` = "'.$Version.'"');
|
---|
40 | $this->Version = $DbResult->fetch_assoc();
|
---|
41 | }
|
---|
42 |
|
---|
43 | function InsertItem($Value)
|
---|
44 | {
|
---|
45 | $insert = true;
|
---|
46 | $Columns = '';
|
---|
47 | //$Values = '';
|
---|
48 | foreach ($this->Group['Items'] as $GroupItem)
|
---|
49 | {
|
---|
50 | $Columns .= ', `'.$GroupItem['Column'].'` ';
|
---|
51 | // $Values .= ', "'.$Value[$GroupItem['Column']].'"';
|
---|
52 | }
|
---|
53 | $Columns = substr($Columns, 1);
|
---|
54 | $Where = ' (`'.$this->Group['PrimaryKeyItem'].'` = "'.$Value[$this->Group['PrimaryKeyItem']].'") AND (`Language`=0) ' ;
|
---|
55 |
|
---|
56 | $DbResultMiddle = $this->System->Database->query('SELECT `VersionEnd`,`VersionStart`, `ID`, `Entry`, '.$Columns.' FROM `'.$this->Group['TablePrefix'].'` WHERE '.$Where.' AND `VersionStart` <= '.$this->Version['BuildNumber'].' AND `VersionEnd` >= '.$this->Version['BuildNumber'].' ORDER BY `VersionEnd` DESC LIMIT 1');
|
---|
57 | $DbResultBefore = $this->System->Database->query('SELECT `VersionEnd`,`VersionStart`, `ID`, `Entry`, '.$Columns.' FROM `'.$this->Group['TablePrefix'].'` WHERE '.$Where.' AND `VersionEnd` <= '.$this->Version['BuildNumber'].' ORDER BY `VersionEnd` DESC LIMIT 1');
|
---|
58 | $DbResultAfter = $this->System->Database->query('SELECT `VersionEnd`,`VersionStart`, `ID`, `Entry`, '.$Columns.' FROM `'.$this->Group['TablePrefix'].'` WHERE '.$Where.' AND `VersionStart` >= '.$this->Version['BuildNumber'].' ORDER BY `VersionStart` LIMIT 1');
|
---|
59 |
|
---|
60 | if (($DbResultMiddle->num_rows > 0) or ($DbResultBefore->num_rows > 0) or ($DbResultAfter->num_rows > 0))
|
---|
61 | {
|
---|
62 | // Update existed text
|
---|
63 | $DbRowMiddle = $DbResultMiddle->fetch_assoc();
|
---|
64 | $DbRowAfter = $DbResultAfter->fetch_assoc();
|
---|
65 | $DbRowBefore = $DbResultBefore->fetch_assoc();
|
---|
66 |
|
---|
67 | if ($this->HaveSameText($this->Group, $DbRowBefore, $Value) and ($DbResultBefore->num_rows > 0))
|
---|
68 | {
|
---|
69 | $insert = false;
|
---|
70 | if ($this->Group['Id'] == 1)
|
---|
71 | {
|
---|
72 | $set = ' , EndText = "'.$Value['EndText'].'" , ObjectiveText1 = "'.$Value['ObjectiveText1'].'"'.' , ObjectiveText2 = "'.$Value['ObjectiveText2'].'"'.' , ObjectiveText3 = "'.$Value['ObjectiveText3'].'"'.' , ObjectiveText4 = "'.$Value['ObjectiveText4'].'"';
|
---|
73 | } else $set = '';
|
---|
74 | $this->System->Database->query('UPDATE `'.$this->Group['TablePrefix'].'` SET `VersionEnd` = "'.$this->Version['BuildNumber'].'" '.$set.' WHERE `ID`='.$DbRowBefore['ID']);
|
---|
75 | echo('b ');
|
---|
76 |
|
---|
77 | } else
|
---|
78 | if ($this->HaveSameText($this->Group, $DbRowAfter, $Value) and ($DbResultAfter->num_rows > 0))
|
---|
79 | {
|
---|
80 | $insert = false;
|
---|
81 | if ($this->Group['Id'] == 1)
|
---|
82 | {
|
---|
83 | $set = ' , EndText = "'.$Value['EndText'].'" , ObjectiveText1 = "'.$Value['ObjectiveText1'].'"'.' , ObjectiveText2 = "'.$Value['ObjectiveText2'].'"'.' , ObjectiveText3 = "'.$Value['ObjectiveText3'].'"'.' , ObjectiveText4 = "'.$Value['ObjectiveText4'].'"';
|
---|
84 | } else $set = '';
|
---|
85 | $this->System->Database->query('UPDATE `'.$this->Group['TablePrefix'].'` SET `VersionStart` = "'.$this->Version['BuildNumber'].'" '.$set.' WHERE `ID`='.$DbRowAfter['ID']);
|
---|
86 | echo('a ');
|
---|
87 | } else
|
---|
88 | {
|
---|
89 | if (isset($DbRowAfter['VersionStart']))
|
---|
90 | {
|
---|
91 | if ($DbRowAfter['VersionStart'] <= $this->Version['BuildNumber'])
|
---|
92 | {
|
---|
93 | echo('Allready imported '.$DbRowBefore['Entry'].' ');
|
---|
94 | $insert = false;
|
---|
95 | }
|
---|
96 | }
|
---|
97 | if (isset($DbRowBefore['VersionEnd']))
|
---|
98 | {
|
---|
99 | if ($DbRowBefore['VersionEnd'] >= $this->Version['BuildNumber'])
|
---|
100 | {
|
---|
101 | echo('Allready imported '.$DbRowBefore['Entry'].' ');
|
---|
102 | $inserted = false;
|
---|
103 | }
|
---|
104 | }
|
---|
105 |
|
---|
106 | // if [DEPRECATED] do not import
|
---|
107 | foreach ($this->Group['Items'] as $GroupItem)
|
---|
108 | {
|
---|
109 | if (false !== strpos($Value[$GroupItem['Column']],'[DEPRECATED'))
|
---|
110 | {
|
---|
111 | echo('d '.$DbRowBefore['Entry'].' ');
|
---|
112 | $insert = false;
|
---|
113 | }
|
---|
114 | }
|
---|
115 |
|
---|
116 | if ($insert)
|
---|
117 | {
|
---|
118 | $insert = false;
|
---|
119 | foreach ($this->Group['Items'] as $GroupItem)
|
---|
120 | {
|
---|
121 | if ($Value[$GroupItem['Column']] <> '') $insert = true;
|
---|
122 | }
|
---|
123 | }
|
---|
124 |
|
---|
125 | if (isset($DbRowMiddle['Entry'])) $insert = false;
|
---|
126 | if (isset($DbRowAfter['Entry'])) $Value['Entry'] = $DbRowAfter['Entry'];
|
---|
127 | if (isset($DbRowBefore['Entry'])) $Value['Entry'] = $DbRowBefore['Entry'];
|
---|
128 |
|
---|
129 | if ($insert)
|
---|
130 | {
|
---|
131 | $Columns = '`Entry`, `Language`, `VersionStart`, `VersionEnd`';
|
---|
132 | $Values = $Value['Entry'].', 0, '.$this->Version['BuildNumber'].', '.$this->Version['BuildNumber'];
|
---|
133 | foreach ($this->Group['Items'] as $GroupItem)
|
---|
134 | {
|
---|
135 | $Columns .= ', `'.$GroupItem['Column'].'`';
|
---|
136 | $Values .= ', "'.$Value[$GroupItem['Column']].'"';
|
---|
137 | }
|
---|
138 | $this->System->Database->query('INSERT `'.$this->Group['TablePrefix'].'` ('.$Columns.') VALUES ('.$Values.')');
|
---|
139 |
|
---|
140 | echo('
|
---|
141 | '.$Value['Entry'].' = '.$DbRowBefore['VersionStart'].'.'.$DbRowBefore['VersionEnd'].'< '.$this->Version['BuildNumber'].' <'.$DbRowAfter['VersionStart'].'.'.$DbRowAfter['VersionEnd'].'... '.$DbRowMiddle['VersionStart'].' '.$DbRowMiddle['VersionEnd'].'
|
---|
142 | ');
|
---|
143 |
|
---|
144 | if (false !== strpos($Values,'[DEPRECATED'))
|
---|
145 | echo($Values);
|
---|
146 |
|
---|
147 | echo('# ');
|
---|
148 | $InsertId = $this->System->Database->insert_id;
|
---|
149 | $this->System->ModuleManager->Modules['Log']->WriteLog('Text <a href="form.php?group='.$this->Group['Id'].'&ID='.$InsertId.'">'.$InsertId.'</a> ('.$Value['Entry'].') ze skupiny '.$this->Group['Name'].' byl v nové verzi '.$this->Version['Version'].' změněn.', LOG_TYPE_IMPORT);
|
---|
150 | }
|
---|
151 | }
|
---|
152 | } else
|
---|
153 | {
|
---|
154 | // Insert new text
|
---|
155 | if (is_numeric($Value[$this->Group['PrimaryKeyItem']])) $Value['Entry'] = $Value[$this->Group['PrimaryKeyItem']];
|
---|
156 | else
|
---|
157 | {
|
---|
158 | // Get new unused Entry for tables without numeric id
|
---|
159 | $Value['Entry'] = 1;
|
---|
160 | $DbResult = $this->System->Database->query('SELECT MAX(`Entry`) FROM `'.$this->Group['TablePrefix'].'`');
|
---|
161 | if ($DbResult->num_rows > 0)
|
---|
162 | {
|
---|
163 | $DbRow = $DbResult->fetch_row();
|
---|
164 | $Value['Entry'] += $DbRow[0];
|
---|
165 | }
|
---|
166 | }
|
---|
167 | $Columns = '`Entry`, `Language`, `VersionStart`, `VersionEnd`';
|
---|
168 | $Values = $Value['Entry'].', 0, '.$this->Version['BuildNumber'].', '.$this->Version['BuildNumber'];
|
---|
169 | $insert = false;
|
---|
170 | foreach ($this->Group['Items'] as $GroupItem)
|
---|
171 | {
|
---|
172 | $Columns .= ', `'.$GroupItem['Column'].'`';
|
---|
173 | $Values .= ', "'.$Value[$GroupItem['Column']].'"';
|
---|
174 | if ($Value[$GroupItem['Column']] <> '') $insert = true;
|
---|
175 | }
|
---|
176 | if ($insert)
|
---|
177 | {
|
---|
178 | $this->System->Database->query('INSERT `'.$this->Group['TablePrefix'].'` ('.$Columns.') VALUES ('.$Values.')');
|
---|
179 | $InsertId = $this->System->Database->insert_id;
|
---|
180 | echo('+ ');
|
---|
181 | $this->NewItemCount++;
|
---|
182 | $this->System->ModuleManager->Modules['Log']->WriteLog('Text <a href="form.php?group='.$this->Group['Id'].'&ID='.$InsertId.'">'.$InsertId.'</a> ('.$Value['Entry'].') ze skupiny '.$this->Group['Name'].' byl v nové verzi '.$this->Version['Version'].' přidán.', LOG_TYPE_IMPORT);
|
---|
183 | }
|
---|
184 | }
|
---|
185 | }
|
---|
186 |
|
---|
187 | function ImportLUA()
|
---|
188 | {
|
---|
189 | $Output = 'Načítání textů z LUA souboru...';
|
---|
190 |
|
---|
191 | if (($this->Group['LuaFileName'] != '') and ($this->Group['TablePrefix'] != ''))
|
---|
192 | {
|
---|
193 | $Output .= '<br />'.$this->Group['Name'].'<br />';
|
---|
194 | // if ($this->Group['LastVersion'] < $this->Version['BuildNumber'] + 1)
|
---|
195 | {
|
---|
196 | $File = new FileStream();
|
---|
197 |
|
---|
198 | $File->OpenFile(dirname(__FILE__).'/../../source/'.$this->Version['Version'].'/lua/'.$this->Group['LuaFileName'].'.lua');
|
---|
199 | $this->NewItemCount = 0;
|
---|
200 | $Count = 0;
|
---|
201 | while (!$File->EOF())
|
---|
202 | {
|
---|
203 | $Line = $File->ReadLine();
|
---|
204 | if (strpos($Line, '=') !== false)
|
---|
205 | {
|
---|
206 | $LineParts = explode('=', $Line, 2);
|
---|
207 | $Value['ShortCut'] = trim($LineParts[0]);
|
---|
208 | $Line = trim($LineParts[1]);
|
---|
209 | if ($Line[0] == '"')
|
---|
210 | {
|
---|
211 | // Quoted string value
|
---|
212 | $Line = substr($Line, 1); // Skip start qoute
|
---|
213 | $TempLine = str_replace('\"', ' ', $Line); // Temporary remove slashed quotes
|
---|
214 | $Value['Text'] = substr($Line, 0, strpos($TempLine, '"'));
|
---|
215 | $Value['Text'] = str_replace('\n', "\n", $Value['Text']);
|
---|
216 | $Value['Text'] = addslashes(stripslashes($Value['Text']));
|
---|
217 | $Line = trim(substr($Line, strpos($TempLine, '"') + 1)); // Skip closing quote and semicolon
|
---|
218 | } else
|
---|
219 | {
|
---|
220 | // Nonstring value
|
---|
221 | $Value['Text'] = substr($Line, 0, strpos($Line, ';'));
|
---|
222 | }
|
---|
223 | $Line = substr($Line, strpos($Line, ';') + 1);
|
---|
224 | $Value['Comment'] = addslashes(stripslashes(substr($Line, 3))); // Skip " --"
|
---|
225 |
|
---|
226 | $this->InsertItem($Value);
|
---|
227 | };
|
---|
228 | $Count++;
|
---|
229 | }
|
---|
230 | $Output .= '<br />Celkem: '.$Count.' Nových: '.$this->NewItemCount.'<br />';
|
---|
231 | $this->UpdateLastVersion();
|
---|
232 | }
|
---|
233 | // else $Output .= ShowMessage('Již importován pro verzi '.$this->Version['Version'], MESSAGE_CRITICAL);
|
---|
234 | } else $Output .= ShowMessage('Není definováno jméno zdrojového souboru', MESSAGE_CRITICAL);
|
---|
235 | $Output .= ShowMessage('Dokončeno.');
|
---|
236 | return $Output;
|
---|
237 | }
|
---|
238 |
|
---|
239 | function UpdateTranslated()
|
---|
240 | {
|
---|
241 | $TranslationTree = $this->System->ModuleManager->Modules['Translation']->GetTranslationTree();
|
---|
242 | $Output = '<br /><br />Začínám se synchronizací VersionEnd u přeložených textů<br />';
|
---|
243 | foreach ($TranslationTree as $Group)
|
---|
244 | {
|
---|
245 | $Output .= '<br />'.$Group['Name'].' ';
|
---|
246 | $do = true;
|
---|
247 | while ($do)
|
---|
248 | {
|
---|
249 | $DbResult = $this->System->Database->query('SELECT `gs_tran`.`ID`, '.
|
---|
250 | '`gs_tran`.`VersionEnd` AS `VersionEnd_tran`, '.
|
---|
251 | '`gs_tran`.`VersionStart` AS `VersionStart_tran`, '.
|
---|
252 | '`gs_orig`.`VersionEnd` AS `VersionEnd_orig`, '.
|
---|
253 | '`gs_orig`.`VersionStart` AS `VersionStart_orig` FROM `'.
|
---|
254 | $Group['TablePrefix'].'` AS `gs_tran` JOIN `'.$Group['TablePrefix'].
|
---|
255 | '` AS `gs_orig` ON `gs_orig`.`ID` = `gs_tran`.`Take` WHERE '.
|
---|
256 | '`gs_tran`.`VersionEnd` <> `gs_orig`.`VersionEnd` OR `gs_tran`.`VersionStart` <> `gs_orig`.`VersionStart`');
|
---|
257 | $do = ($DbResult->num_rows > 0);
|
---|
258 | while ($DbRow = $DbResult->fetch_assoc())
|
---|
259 | {
|
---|
260 | echo('`');
|
---|
261 | $this->System->Database->query('UPDATE `'.$Group['TablePrefix'].'` SET `VersionEnd` = '.$DbRow['VersionEnd_orig'].', `VersionStart` = '.$DbRow['VersionStart_orig'].' WHERE `ID` = '.$DbRow['ID']);
|
---|
262 | $Output .= '. ';
|
---|
263 | }
|
---|
264 | }
|
---|
265 | $Output .= '<strong>Dokončeno.</strong>';
|
---|
266 | }
|
---|
267 | return $Output;
|
---|
268 | }
|
---|
269 |
|
---|
270 | function HaveSameText($Group, $DbRow2, $Value)
|
---|
271 | {
|
---|
272 | $result = true;
|
---|
273 | foreach ($Group['Items'] as $GroupItem)
|
---|
274 | {
|
---|
275 | $old = $DbRow2[$GroupItem['Column']];
|
---|
276 | $old = str_replace(chr(10), '', $old);
|
---|
277 | $old = str_replace(chr(13), '', $old);
|
---|
278 | $old = str_replace('\n', '', $old);
|
---|
279 | $old = str_replace('\r', '', $old);
|
---|
280 | $old = str_replace('\"', '"', $old);
|
---|
281 | $old = str_replace('\\\\', '\\', $old);
|
---|
282 | $old = str_replace('\32', '32', $old);
|
---|
283 | $old = str_replace('\124', '124', $old);
|
---|
284 | $old = str_replace("\'", "'", $old);
|
---|
285 | $old = str_replace("Â", "", $old);
|
---|
286 | $old = str_replace("�", "", $old);
|
---|
287 | $old = str_replace('-', '', $old);
|
---|
288 | $old = str_replace(' ', '', $old);
|
---|
289 | $old = strtolower($old);
|
---|
290 | $old = str_replace('$b', '', $old);
|
---|
291 |
|
---|
292 | if ($this->Group['Id'] == 1)
|
---|
293 | {
|
---|
294 | while ($part = substr($old, strpos($old, '<'), strpos($old, '>')-strpos($old, '<')))
|
---|
295 | {
|
---|
296 | if ($part <> '')
|
---|
297 | {
|
---|
298 | $old = str_replace($part.'>', '', $old);
|
---|
299 | }
|
---|
300 | }
|
---|
301 | }
|
---|
302 |
|
---|
303 | if (($GroupItem['MangosColumn'] <> '') and ($Group['MangosDatabase'] == 'mangos'))
|
---|
304 | $new = $Value[$GroupItem['MangosColumn']];
|
---|
305 | else $new = $Value[$GroupItem['Column']];
|
---|
306 |
|
---|
307 | $new = str_replace(chr(10), '', $new);
|
---|
308 | $new = str_replace(chr(13), '', $new);
|
---|
309 | $new = str_replace('\n', '', $new);
|
---|
310 | $new = str_replace('\r', '', $new);
|
---|
311 | $new = str_replace('\"', '"', $new);
|
---|
312 | $new = str_replace('\\\\', '\\', $new);
|
---|
313 | $new = str_replace('\32', '32', $new);
|
---|
314 | $new = str_replace('\124', '124', $new);
|
---|
315 | $new = str_replace("\'", "'", $new);
|
---|
316 | $new = str_replace("Â", "", $new);
|
---|
317 | $new = str_replace("�", "", $new);
|
---|
318 | $new = str_replace('-', '', $new);
|
---|
319 | $new = str_replace(' ', '', $new);
|
---|
320 | $new = strtolower($new);
|
---|
321 | $new = str_replace('$b', '', $new);
|
---|
322 |
|
---|
323 | if ($this->Group['Id'] == 1)
|
---|
324 | {
|
---|
325 | while ($part = substr($new, strpos($new, '<'), strpos($new, '>')-strpos($new, '<')))
|
---|
326 | {
|
---|
327 | if ($part <> '')
|
---|
328 | {
|
---|
329 | $new = str_replace($part.'>', '', $new);
|
---|
330 | }
|
---|
331 | }
|
---|
332 | }
|
---|
333 |
|
---|
334 | if (($old == 'null') or ($old == 'NULL')) $old = '';
|
---|
335 | if (($new == 'null') or ($new == 'NULL')) $new = '';
|
---|
336 |
|
---|
337 | if (($new <> '') and ($old <> $new) and ($GroupItem['Column'] <> 'Comment'))
|
---|
338 | {
|
---|
339 | // echo $old.'X'.$new;
|
---|
340 | if ( ($GroupItem['Column'] <> 'EndText')
|
---|
341 | and ($GroupItem['Column'] <> 'ObjectiveText1')
|
---|
342 | and ($GroupItem['Column'] <> 'ObjectiveText2')
|
---|
343 | and ($GroupItem['Column'] <> 'ObjectiveText3')
|
---|
344 | and ($GroupItem['Column'] <> 'ObjectiveText4') )
|
---|
345 | $result = false;
|
---|
346 | }
|
---|
347 | }
|
---|
348 |
|
---|
349 | return $result;
|
---|
350 | }
|
---|
351 |
|
---|
352 | function ImportDBC()
|
---|
353 | {
|
---|
354 | global $System;
|
---|
355 |
|
---|
356 | $Output = 'Načítání textů z DBC souboru...';
|
---|
357 | if (($this->Group['DBCFileName'] != '') and ($this->Group['TablePrefix'] != ''))
|
---|
358 | {
|
---|
359 | $Output .= '<br />'.$this->Group['Name'].'<br />';
|
---|
360 |
|
---|
361 | // Load string column index list
|
---|
362 | $DbResult = $System->Database->query('SELECT * FROM `GroupItem` JOIN `GroupItemDBC` ON `GroupItem`.`Id` = `GroupItemDBC`.`GroupItem` AND `GroupItemDBC`.`ClientVersion` = '.$this->Version['Id'].' WHERE `GroupItem`.`Group` = '.$this->Group['Id']);
|
---|
363 |
|
---|
364 | $ColumnIndexes = array();
|
---|
365 | $ColumnFormat = array();
|
---|
366 | while ($DbRow = $DbResult->fetch_assoc())
|
---|
367 | {
|
---|
368 | $ColumnFormat[$DbRow['ColumnIndex']] = FORMAT_STRING;
|
---|
369 | $ColumnIndexes[$DbRow['GroupItem']] = $DbRow['ColumnIndex'];
|
---|
370 | }
|
---|
371 |
|
---|
372 | $DBCFile = new DBCFile();
|
---|
373 | $DBCFile->OpenFile(dirname(__FILE__).'/../../source/'.$this->Version['Version'].'/dbc/'.$this->Group['DBCFileName'].'.dbc', $ColumnFormat);
|
---|
374 | $ItemCount = $DBCFile->GetRecordCount();
|
---|
375 | $this->NewItemCount = 0;
|
---|
376 | $Count = 0;
|
---|
377 |
|
---|
378 | for ($I = 0; $I < $ItemCount; $I++)
|
---|
379 | {
|
---|
380 | foreach ($this->Group['Items'] as $GroupItem)
|
---|
381 | if (array_key_exists($GroupItem['Id'], $ColumnIndexes))
|
---|
382 | {
|
---|
383 | $Value[$GroupItem['Column']] = addslashes($DBCFile->GetString($I, $ColumnIndexes[$GroupItem['Id']]));
|
---|
384 | }
|
---|
385 |
|
---|
386 | // Get multicolumn value
|
---|
387 | $Columns = explode(',', $this->Group['DBCIndex']);
|
---|
388 | $ColumnValue = '';
|
---|
389 | foreach ($Columns as $Column)
|
---|
390 | {
|
---|
391 | $ColumnValue .= '_'.$DBCFile->GetUint($I, $Column);
|
---|
392 | }
|
---|
393 | $ColumnValue = substr($ColumnValue, 1);
|
---|
394 | $Value[$this->Group['PrimaryKeyItem']] = $ColumnValue;
|
---|
395 | $this->InsertItem($Value);
|
---|
396 | $Count++;
|
---|
397 | }
|
---|
398 | $Output .= '<br />Celkem: '.$Count.' Nových: '.$this->NewItemCount.'<br />';
|
---|
399 | $this->UpdateLastVersion();
|
---|
400 | }
|
---|
401 | $Output .= '<strong>Dokončeno.</strong>';
|
---|
402 | return $Output;
|
---|
403 | }
|
---|
404 |
|
---|
405 | function ImportGroup($GroupId)
|
---|
406 | {
|
---|
407 | $TranslationTree = $this->System->ModuleManager->Modules['Translation']->GetTranslationTree();
|
---|
408 |
|
---|
409 | $this->Group = $TranslationTree[$GroupId];
|
---|
410 |
|
---|
411 | if ($this->Group['SourceType'] == 'dbc') $Output = $this->ImportDBC();
|
---|
412 | else if ($this->Group['SourceType'] == 'sql') $Output = $this->ImportSQL();
|
---|
413 | else if ($this->Group['SourceType'] == 'lua') $Output = $this->ImportLUA();
|
---|
414 | else $Output = ShowMessage('Neznámý typ zdroje pro import', MESSAGE_CRITICAL);
|
---|
415 | $Output .= $this->UpdateTranslated();
|
---|
416 | return $Output;
|
---|
417 | }
|
---|
418 |
|
---|
419 | function ImportSQL()
|
---|
420 | {
|
---|
421 | $Output = '';
|
---|
422 | $File = new FileStream();
|
---|
423 | $File->OpenFile(dirname(__FILE__).'/../../source/'.$this->Version['Version'].'/sql/'.$this->Group['MangosTable'].'.sql');
|
---|
424 | $this->NewItemCount = 0;
|
---|
425 | $Count = 0;
|
---|
426 | $FollowStructure = false;
|
---|
427 | $i = 0;
|
---|
428 | while ((!$File->EOF()))
|
---|
429 | {
|
---|
430 | $Line = $File->ReadLine();
|
---|
431 | // Struktura
|
---|
432 | if (strpos($Line, 'CREATE TABLE `'.$this->Group['MangosTable'].'`') !== false)
|
---|
433 | {
|
---|
434 | $Line = '';
|
---|
435 | $FollowStructure = true;
|
---|
436 | $i = 0;
|
---|
437 | }
|
---|
438 | if ((strpos($Line, ';') !== false) and ($FollowStructure == true))
|
---|
439 | {
|
---|
440 | $FollowStructure = false;
|
---|
441 | }
|
---|
442 | if (($FollowStructure == true) and ($Line != ''))
|
---|
443 | {
|
---|
444 | $str = substr($Line, 0, strpos($Line, '`'));
|
---|
445 | $Line = substr($Line, strpos($Line, '`') + 1);
|
---|
446 | $Line = substr($Line, 0, strpos($Line, '`'));
|
---|
447 | if (strlen($str) < 3) $structure[$i] = $Line;
|
---|
448 | $i++;
|
---|
449 | }
|
---|
450 |
|
---|
451 | // data
|
---|
452 | if ((strpos($Line, 'INSERT INTO `'.$this->Group['MangosTable'].'`') !== false) and (isset($structure)))
|
---|
453 | {
|
---|
454 | while ((strpos($Line, ');') === false) or ($File->EOF()))
|
---|
455 | $Line = $Line.$File->ReadLine();
|
---|
456 | $Line = str_replace("),\n(", '),(', $Line);
|
---|
457 |
|
---|
458 | $Line = substr($Line, strpos($Line, '(') + 1);
|
---|
459 | $Line = substr($Line, 0, strpos($Line, ');'));
|
---|
460 | $LineParts = explode('),(', $Line);
|
---|
461 |
|
---|
462 | unset($Line);
|
---|
463 |
|
---|
464 | $value_buff = '';
|
---|
465 | $Value = '';
|
---|
466 | foreach ($LineParts as $LinePart)
|
---|
467 | {
|
---|
468 |
|
---|
469 | unset($Value, $value_buff);
|
---|
470 | foreach ($structure as $i => $column)
|
---|
471 | {
|
---|
472 | if (substr($LinePart, 0, 1) != "'")
|
---|
473 | {
|
---|
474 | $value_buff = substr($LinePart, 0, strpos($LinePart, ','));
|
---|
475 | $LinePart = substr($LinePart, strlen($value_buff) + 1);
|
---|
476 | } else
|
---|
477 | {
|
---|
478 | $LinePart = substr($LinePart, 1);
|
---|
479 | $value_buff = substr($LinePart, 0, strpos($LinePart, "'"));
|
---|
480 | while (substr($value_buff, strlen($value_buff) - 1, 1) == "\\")
|
---|
481 | {
|
---|
482 | $str = substr($LinePart, strlen($value_buff));
|
---|
483 | $str2 = substr($str, 0, strpos($str, "'", 1));
|
---|
484 | $value_buff = $value_buff.$str2;
|
---|
485 | $str = substr($str, strlen($str2));
|
---|
486 | }
|
---|
487 | $LinePart = substr($LinePart, strlen($value_buff) + 2);
|
---|
488 | }
|
---|
489 | if (($value_buff != 'null') and ($value_buff != 'NULL'))
|
---|
490 | {
|
---|
491 | $str = '';
|
---|
492 | while (substr($value_buff, strlen($value_buff) - 1,1) == " ")
|
---|
493 | {
|
---|
494 | $value_buff = substr($value_buff, 0, strlen($value_buff) - 1);
|
---|
495 | $str .= ' ';
|
---|
496 | }
|
---|
497 | $str2 = '';
|
---|
498 | while (substr($value_buff, 0, 1) == ' ')
|
---|
499 | {
|
---|
500 | $value_buff = substr($value_buff, 1, strlen($value_buff) - 1);
|
---|
501 | $str2 .= ' ';
|
---|
502 | }
|
---|
503 | $Value[$column] = $str2.trim($value_buff).$str;
|
---|
504 | } else
|
---|
505 | {
|
---|
506 | $Value[$column] = '';
|
---|
507 | }
|
---|
508 | }
|
---|
509 | foreach ($this->Group['Items'] as $GroupItem)
|
---|
510 | {
|
---|
511 | if ($GroupItem['MangosColumn'] != '')
|
---|
512 | {
|
---|
513 | if (isset($Value[$GroupItem['MangosColumn']]))
|
---|
514 | {
|
---|
515 | $Value[$GroupItem['Column']] = $Value[$GroupItem['MangosColumn']];
|
---|
516 | }
|
---|
517 | else
|
---|
518 | {
|
---|
519 | $Value[$GroupItem['Column']] = '';
|
---|
520 | $Value[$GroupItem['MangosColumn']] ='';
|
---|
521 | }
|
---|
522 | }
|
---|
523 | }
|
---|
524 |
|
---|
525 | // Get multicolumn value
|
---|
526 | $Columns = explode(',', $this->Group['MangosTableIndex']);
|
---|
527 | $ColumnValue = '';
|
---|
528 | foreach ($Columns as $Column)
|
---|
529 | {
|
---|
530 | $ColumnValue .= '_'.$Value[$Column];
|
---|
531 | }
|
---|
532 | $ColumnValue = substr($ColumnValue, 1);
|
---|
533 | $Value[$this->Group['PrimaryKeyItem']] = $ColumnValue;
|
---|
534 | $this->InsertItem($Value);
|
---|
535 | $Count++;
|
---|
536 | }
|
---|
537 | }
|
---|
538 | }
|
---|
539 | $Output = '<br />Celkem: '.$Count.' Nových: '.$this->NewItemCount.'<br />';
|
---|
540 | $this->UpdateLastVersion();
|
---|
541 | return $Output;
|
---|
542 | }
|
---|
543 |
|
---|
544 | function UpdateLastVersion()
|
---|
545 | {
|
---|
546 | $DbResult = $this->System->Database->query('SELECT * FROM `Group` WHERE `Id`='.$this->Group['Id']);
|
---|
547 | $Version = $DbResult->fetch_assoc();
|
---|
548 | if ($Version['LastVersion'] < $this->Version['BuildNumber'])
|
---|
549 | $this->System->Database->query('UPDATE `Group` SET `LastVersion` = "'.$this->Version['BuildNumber'].'", `LastImport` = NOW() WHERE `Id`='.$this->Group['Id']);
|
---|
550 | }
|
---|
551 | }
|
---|