source: branches/CombinedTextTables/includes/global_function.php@ 425

Last change on this file since 425 was 425, checked in by george, 15 years ago
  • Upraveno: Doplněny upravené soubory do vývojové větve CombinedTextTables.
  • Nastavení ignorování obsahu složek s ikonami u AoWoW.
File size: 17.9 KB
Line 
1<?php
2
3// Log types
4define('LOG_TYPE_TRANSLATION', 1);
5define('LOG_TYPE_DOWNLOAD', 2);
6define('LOG_TYPE_USER', 3);
7define('LOG_TYPE_MODERATOR', 4);
8define('LOG_TYPE_ERROR', 10);
9define('LOG_TYPE_IMPORT', 11);
10define('LOG_TYPE_EXPORT', 12);
11define('LOG_TYPE_CZWOW', 13);
12define('LOG_TYPE_ADMINISTRATION', 14);
13
14
15function utf2ascii($text)
16{
17 $return = Str_Replace(
18 Array("á","č","ď","é","ě","í","ľ","ň","ó","ř","š","ť","ú","ů","ý","ž","Á","Č","Ď","É","Ě","Í","Ľ","Ň","Ó","Ř","Š","Ť","Ú","Ů","Ý","Ž") ,
19 Array("a","c","d","e","e","i","l","n","o","r","s","t","u","u","y","z","A","C","D","E","E","I","L","N","O","R","S","T","U","U","Y","Z") ,
20 $text);
21 //$return = Str_Replace(Array(" ", "_"), "-", $return); //nahradí mezery a podtržítka pomlčkami
22 //$return = Str_Replace(Array("(",")",".","!",",","\"","'"), "", $return); //odstraní ().!,"'
23 //$return = StrToLower($return); // velká písmena nahradí malými.
24 return($return);
25}
26
27function getmonthyears($Days)
28{
29 $month = floor($Days / 30);
30 $year = floor($month / 12);
31 $Days = floor($Days - $month * 30);
32 $month = $month - $year * 12;
33 return($year.'r '.$month.'m '.$Days.'d');
34}
35
36function GetPageList($TotalCount)
37{
38 global $Database, $Config;
39
40 $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
41
42 $ItemPerPage = $Config['Web']['ItemsPerPage'];
43 $Around = round($Config['Web']['VisiblePagingItems'] / 2);
44 $Result = '';
45 $PageCount = floor($TotalCount / $ItemPerPage) + 1;
46
47 if(!array_key_exists('Page', $_SESSION)) $_SESSION['Page'] = 0;
48 if(array_key_exists('page', $_GET)) $_SESSION['Page'] = $_GET['page'] * 1;
49 if($_SESSION['Page'] < 0) $_SESSION['Page'] = 0;
50 if($_SESSION['Page'] >= $PageCount) $_SESSION['Page'] = $PageCount - 1;
51 $CurrentPage = $_SESSION['Page'];
52
53
54 $Result .= 'Počet položek: <strong>'.$TotalCount.'</strong> &nbsp; Stránky: ';
55
56 $Result = '';
57 if($PageCount > 1)
58 {
59 if($CurrentPage > 0)
60 {
61 $QueryItems['page'] = 0;
62 $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&lt;&lt;</a> ';
63 $QueryItems['page'] = ($CurrentPage - 1);
64 $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&lt;</a> ';
65 }
66 $PagesMax = $PageCount - 1;
67 $PagesMin = 0;
68 if($PagesMax > ($CurrentPage + $Around)) $PagesMax = $CurrentPage + $Around;
69 if($PagesMin < ($CurrentPage - $Around))
70 {
71 $Result.= ' ... ';
72 $PagesMin = $CurrentPage - $Around;
73 }
74 for($i = $PagesMin; $i <= $PagesMax; $i++)
75 {
76 if($i == $CurrentPage) $Result.= '<strong>'.($i + 1).'</strong> ';
77 else {
78 $QueryItems['page'] = $i;
79 $Result .= '<a href="?'.SetQueryStringArray($QueryItems).'">'.($i + 1).'</a> ';
80 }
81 }
82 if($PagesMax < ($PageCount - 1)) $Result .= ' ... ';
83 if($CurrentPage < ($PageCount - 1))
84 {
85 $QueryItems['page'] = ($CurrentPage + 1);
86 $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&gt;</a> ';
87 $QueryItems['page'] = ($PageCount - 1);
88 $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&gt;&gt;</a>';
89 }
90 }
91 $Result = '<div style="text-align: center">'.$Result.'</div>';
92 return(array('SQLLimit' => ' LIMIT '.$CurrentPage * $ItemPerPage.', '.$ItemPerPage,
93 'Page' => $CurrentPage,
94 'Output' => $Result,
95 ));
96}
97
98$OrderDirSQL = array('ASC', 'DESC');
99$OrderArrowImage = array('sort_asc.png', 'sort_desc.png');
100
101function GetOrderTableHeader($Columns, $DefaultColumn, $DefaultOrder = 0)
102{
103 global $OrderDirSQL, $OrderArrowImage, $Config, $System;
104
105 if(array_key_exists('OrderCol', $_GET)) $_SESSION['OrderCol'] = $_GET['OrderCol'];
106 if(array_key_exists('OrderDir', $_GET)) $_SESSION['OrderDir'] = $_GET['OrderDir'];
107 if(!array_key_exists('OrderCol', $_SESSION)) $_SESSION['OrderCol'] = $DefaultColumn;
108 if(!array_key_exists('OrderDir', $_SESSION)) $_SESSION['OrderDir'] = $DefaultOrder;
109
110 // Check OrderCol
111 $Found = false;
112 foreach($Columns as $Column)
113 {
114 if($Column['Name'] == $_SESSION['OrderCol'])
115 {
116 $Found = true;
117 break;
118 }
119 }
120 if($Found == false)
121 {
122 $_SESSION['OrderCol'] = $DefaultColumn;
123 $_SESSION['OrderDir'] = $DefaultOrder;
124 }
125 // Check OrderDir
126 if(($_SESSION['OrderDir'] != 0) and ($_SESSION['OrderDir'] != 1)) $_SESSION['OrderDir'] = 0;
127
128 $Result = '';
129 $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
130 foreach($Columns as $Index => $Column)
131 {
132 $QueryItems['OrderCol'] = $Column['Name'];
133 $QueryItems['OrderDir'] = 1 - $_SESSION['OrderDir'];
134 if($Column['Name'] == $_SESSION['OrderCol']) $ArrowImage = '<img style="vertical-align: middle; border: 0px;" src="'.$System->Link('/images/'.$OrderArrowImage[$_SESSION['OrderDir']]).'" alt="order arrow">';
135 else $ArrowImage = '';
136 if($Column['Name'] == '') $Result .= '<th>'.$Column['Title'].'</th>';
137 else $Result .= '<th><a href="?'.SetQueryStringArray($QueryItems).'">'.$Column['Title'].$ArrowImage.'</a></th>';
138 }
139 return(array(
140 'SQL' => ' ORDER BY `'.$_SESSION['OrderCol'].'` '.$OrderDirSQL[$_SESSION['OrderDir']],
141 'Output' => '<tr>'.$Result.'</tr>',
142 'Column' => $_SESSION['OrderCol'],
143 'Direction' => $_SESSION['OrderDir'],
144 ));
145}
146
147function FormatOutput($s)
148{
149 $out = '';
150 $nn = 0;
151 $n = 0;
152 while($s!='')
153 {
154 $start = strpos($s,'<');
155 $end = strpos($s,'>');
156 if($start != 0)
157 {
158 $end = $start-1;
159 $start = 0;
160 }
161 $line = trim(substr($s,$start,$end+1));
162 if(strlen($line)>0)
163 if($line[0] == '<')
164 {
165 if($s[$start+1] == '/')
166 {
167 $n = $n - 2;
168 $nn = $n;
169 } else
170 {
171 if(strpos($line,' ')) $cmd = substr($line,1,strpos($line,' ')-1);
172 else $cmd = substr($line,1,strlen($line)-2);
173 //echo('['.$cmd.']');
174 if(strpos($s,'</'.$cmd.'>')) $n = $n + 2;
175 }
176 }// else $line = '['.$line.']';
177 //if($line != '') echo(htmlspecialchars(str_repeat(' ',$nn).$line."\n"));
178 if($line != '') $out .= (str_repeat(' ',$nn).$line."\n");
179 $s = substr($s,$end+1,strlen($s));
180 $nn = $n;
181 }
182 return($out);
183}
184
185function WriteLanguages($Selected)
186{
187 global $LanguageList;
188
189 echo('<select name="Language">');
190 foreach($LanguageList as $Language)
191 if($Language['Enabled'] == 1)
192 {
193 echo('<option value="'.$Language['Id'].'"');
194 if($Selected == $Language['Id']) echo(' selected="selected"'); echo('>'.$Language['Name'].'</option>');
195 }
196 echo('</select>');
197}
198
199function WriteLanguagesWithoutSel($Selected)
200{
201 global $LanguageList;
202
203 foreach($LanguageList as $Language)
204 {
205 if($Selected == $Language['Id']) echo($Language['Name']);
206 }
207}
208
209function MysqlDateTimeToTime($Time)
210{
211 $Parts = explode(' ', $Time);
212 $DateParts = explode('-', $Parts[0]);
213 $TimeParts = explode(':', $Parts[1]);
214 $Result = mktime($TimeParts[0], $TimeParts[1], $TimeParts[2], $DateParts[1], $DateParts[2], $DateParts[0]);
215 return($Result);
216}
217
218function GetLanguageList()
219{
220 global $Database;
221
222 $Result = array();
223 $DbResult = $Database->SQLCommand('SELECT * FROM `Language` WHERE `Enabled` = 1');
224 while($DbRow = mysql_fetch_assoc($DbResult))
225 $Result[$DbRow['Id']] = $DbRow;
226 return($Result);
227}
228
229function GetTranslationTree()
230{
231 global $Database;
232
233 $Result = array();
234 $DbResult = $Database->SQLCommand('SELECT *, UNIX_TIMESTAMP(`LastImport`) AS `LastImportTime` FROM `Group` ORDER BY `Name`');
235 while($DbRow = mysql_fetch_assoc($DbResult))
236 {
237 $DbRow['Items'] = array();
238 $Result[$DbRow['Id']] = $DbRow;
239 }
240 $DbResult = $Database->SQLCommand('SELECT * FROM `GroupItem` ORDER BY `Sequence`');
241 while($DbRow = mysql_fetch_assoc($DbResult))
242 {
243 $Result[$DbRow['Group']]['Items'][$DbRow['Sequence']] = $DbRow;
244 }
245 return($Result);
246}
247
248$Moderators = array('Překladatel', 'Moderátor', 'Administrátor');
249
250function WriteLog($Text, $Type)
251{
252 global $Database, $Config, $User;
253
254 if(!isset($_SERVER['REMOTE_ADDR'])) $IP = 'Konzole';
255 else $IP = addslashes($_SERVER['REMOTE_ADDR']);
256
257 $Database->SelectDatabase($Config['Database']['Database']);
258 $Query = 'INSERT INTO `Log` ( `User` , `Type` , `Text` , `Date` , `IP` )
259 VALUES ('.$User->Id.', '.$Type.', "'.addslashes($Text).'", NOW(), "'.$IP.'")';
260 $Database->SQLCommand($Query);
261}
262
263function HumanDate($SQLDateTime)
264{
265 $DateTimeParts = explode(' ', $SQLDateTime);
266 if($DateTimeParts[0] != '0000-00-00')
267 {
268 $DateParts = explode('-', $DateTimeParts[0]);
269 return(($DateParts[2] * 1).'.'.($DateParts[1] * 1).'.'.($DateParts[0] * 1));
270 } else return('&nbsp;');
271}
272
273function FollowingTran($TextID, $Table, $GroupId, $Prev = false)
274{
275 global $Database;
276
277 if($Prev)
278 {
279 $sql = 'SELECT ID FROM '.$Table.' as item WHERE Language = 0 AND NOT EXISTS(SELECT entry FROM '.$Table.' AS sub WHERE sub.Language <> 0 AND sub.entry = item.entry) AND ID < '.$TextID.' ORDER BY ID DESC LIMIT 1';
280 } else
281 {
282 $sql = 'SELECT ID FROM '.$Table.' as item WHERE Language = 0 AND NOT EXISTS(SELECT entry FROM '.$Table.' AS sub WHERE sub.Language <> 0 AND sub.entry = item.entry) AND ID > '.$TextID.' ORDER BY ID LIMIT 1';
283 }
284
285 $Next = mysql_fetch_assoc($Database->SQLCommand($sql));
286 if($Next)
287 {
288 if($Prev) echo('<a href="form.php?group='.$GroupId.'&amp;ID='.$Next['ID'].'">Předcházející '.$Next['ID'].'</a> ');
289 else echo('<a href="form.php?group='.$GroupId.'&amp;ID='.$Next['ID'].'">Následující '.$Next['ID'].'</a> ');
290 return 'form.php?group='.$GroupId.'&amp;ID='.$Next['ID'];
291 }
292}
293
294function GetBuildNumber($Version)
295{
296 global $Database, $BuildNumbers;
297
298 if(isset($BuildNumbers[$Version]) == false)
299 {
300 $sql = 'SELECT `BuildNumber` FROM `ClientVersion` WHERE `Version` = "'.$Version.'"';
301 $DbRow = mysql_fetch_assoc($Database->SQLCommand($sql));
302 $BuildNumbers[$Version] = $DbRow['BuildNumber'];
303 }
304 return($BuildNumbers[$Version]);
305}
306
307function GetVersionWOW($BuildNumber)
308{
309 global $Database, $VersionsWOW;
310
311 if(isset($VersionsWOW[$BuildNumber]) == false)
312 {
313 $sql = 'SELECT `Version` FROM `ClientVersion` WHERE `BuildNumber` = "'.$BuildNumber.'"';
314 $Version = mysql_fetch_assoc($Database->SQLCommand($sql));
315 $VersionsWOW[$BuildNumber] = $Version['Version'];
316 }
317 return($VersionsWOW[$BuildNumber]);
318}
319
320function GetDBCColumns($Version, $DBCFileName)
321{
322 global $Database, $DBCColumns;
323
324 if(isset($DBCColumns[$Version][$DBCFileName]) == false)
325 {
326 $sql = 'SELECT `DBCColumns_'.$DBCFileName.'` AS `DBCColumns` FROM `ClientVersion` WHERE `Version` = "'.$Version.'"';
327 $DbRow = mysql_fetch_assoc($Database->SQLCommand($sql));
328 $DBCColumns[$Version][$DBCFileName] = $DbRow['DBCColumns'];
329 }
330 return($DBCColumns[$Version][$DBCFileName]);
331}
332
333function GetDBCColumnIndex($Version, $DBCFileName, $Column)
334{
335 global $Database, $DBCColumnIndex;
336
337 if(isset($DBCColumnIndex[$Version][$DBCFileName][$Column]) == false)
338 {
339 $sql = 'SELECT `'.$DBCFileName.'_'.$Column.'` AS `DBCColumns` FROM `ClientVersion` WHERE `Version` = "'.$Version.'"';
340 $DbRow = mysql_fetch_assoc($Database->SQLCommand($sql));
341 $DBCColumnIndex[$Version][$DBCFileName][$Column] = $DbRow['DBCColumns'];
342 }
343 return($DBCColumnIndex[$Version][$DBCFileName][$Column]);
344}
345
346function LoadGroupIdParameter()
347{
348 global $TranslationTree;
349
350 if(array_key_exists('group', $_GET)) $GroupId = $_GET['group'] * 1;
351 else $GroupId = 1;
352
353 if(isset($TranslationTree[$GroupId]) == false)
354 {
355 echo('Překladová skupina dle zadaného Id neexistuje.');
356 ShowFooter();
357 die();
358 }
359 return($GroupId);
360}
361
362function LoadLanguageIdParameter()
363{
364 global $LanguageList;
365
366 if(array_key_exists('language', $_GET)) $LanguageId = $_GET['language'] * 1;
367 else $LanguageId = 1;
368
369 if(isset($LanguageList[$LanguageId]) == false)
370 {
371 echo('Jazyk dle zadaného Id neexistuje.');
372 ShowFooter();
373 die();
374 }
375 return($LanguageId);
376}
377
378function LoadCommandLineParameters()
379{
380 if(!array_key_exists('REMOTE_ADDR', $_SERVER))
381 {
382 foreach($_SERVER['argv'] as $Parameter)
383 {
384 if(strpos($Parameter, '=') !== false)
385 {
386 $Index = substr($Parameter, 0, strpos($Parameter, '='));
387 $Parameter = substr($Parameter, strpos($Parameter, '=') + 1);
388 //echo($Index.' ---- '.$Parameter);
389 $_GET[$Index] = $Parameter;
390 }
391 }
392 }
393}
394
395function ShowTabs($Tabs)
396{
397 $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
398
399 if(array_key_exists('Tab', $_GET)) $_SESSION['Tab'] = $_GET['Tab'];
400 if(!array_key_exists('Tab', $_SESSION)) $_SESSION['Tab'] = 0;
401 if(($_SESSION['Tab'] < 0) or ($_SESSION['Tab'] > (count($Tabs) - 1))) $_SESSION['Tab'] = 0;
402 echo('<div id="header">');
403 echo('<ul>');
404 foreach($Tabs as $Index => $Tab)
405 {
406 $QueryItems['Tab'] = $Index;
407 if($Index == $_SESSION['Tab']) $Selected = ' id="selected"';
408 else $Selected = '';
409 echo('<li'.$Selected.'><a href="?'.SetQueryStringArray($QueryItems).'">'.$Tab.'</a></li>');
410 }
411 echo('</ul></div>');
412}
413
414function CheckBox($Name, $Checked = false, $Id = '', $Class = '', $Disabled = false)
415{
416 if($Id) $Id = ' id="'.$Id.'"'; else $Id = '';
417 if($Class) $Class = ' class="'.$Class.'"'; else $Class = '';
418 if($Checked) $Checked = ' checked="checked"'; else $Checked = '';
419 if($Disabled) $Disabled = ' disabled="disabled"'; else $Disabled = '';
420 return('<input type="checkbox" value="checked" name="'.$Name.'"'.$Checked.$Disabled.$Id.$Class.' />');
421}
422
423function RadioButton($Name, $Value, $Checked = false, $OnClick = '', $Disabled = false)
424{
425 if($Checked) $Checked = ' checked="checked"'; else $Checked = '';
426 if($OnClick != '') $OnClick = ' onclick="'.$OnClick.'"'; else $OnClick = '';
427 if($Disabled) $Disabled = ' disabled="disabled"'; else $Disabled = '';
428 return('<input type="radio" name="'.$Name.'" value="'.$Value.'"'.$Checked.$Disabled.$OnClick.'/>');
429}
430
431function SelectOption($Name, $Text, $Selected = false)
432{
433 if($Selected) $Selected = ' selected="selected"'; else $Selected = '';
434 return('<option value="'.$Name.'"'.$Selected.'>'.$Text.'</option>');
435}
436
437function DeleteDirectory($dirname)
438{
439 if(is_dir($dirname))
440 {
441 $dir_handle = opendir($dirname);
442 if(!$dir_handle) return(false);
443 while($file = readdir($dir_handle))
444 {
445 if(($file != '.') and ($file != '..'))
446 {
447 if(!is_dir($dirname.'/'.$file)) unlink($dirname.'/'.$file);
448 else DeleteDirectory($dirname.'/'.$file);
449 }
450 }
451 closedir($dir_handle);
452 rmdir($dirname);
453 }
454 return(true);
455}
456
457function ErrorMessage($Text)
458{
459 echo($Text);
460 ShowFooter();
461 die();
462}
463
464function GetIDbyName($Table)
465{
466 global $TranslationTree;
467
468 foreach($TranslationTree as $TableID => $Value)
469 {
470 //echo $Value['TablePrefix'].'='.$Table.'<br>';
471 if($Value['TablePrefix'] == $Table) return($TableID);
472 }
473}
474
475
476function GetTranslatNames($Text,$mode,$TablesColumn)
477{
478 global $Database;
479
480 /* $TablesID = array('gameobject' => 5,
481 'creature' => 6,
482 'item' => 4,
483 'transports' => 'Name',
484 'areatrigger_teleport' => 'Name',
485 'areatrigger_tavern' => 'Name',); */
486 $buff = array();
487
488 foreach($TablesColumn as $Table => $Column)
489 {
490 $sql = 'SELECT `ID`,`'.$Column.'`, (SELECT `'.$Column.'` FROM `'.$Table.'` AS `T` WHERE `O`.`Entry` = `T`.`Entry` AND `Language` <> 0 LIMIT 1) AS `Tran` FROM `'.$Table.'` AS `O` WHERE ';
491 $groupby = ' GROUP BY `'.$Column.'`';
492
493 $ArrStr = explode(' ', $Text);
494 $where = '`Language` = 0 ';
495 if ($mode == 1) $where .= ' AND EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE (`Sub`.`Language` <> 0) AND (`Sub`.`Entry` = `O`.`Entry`))';
496 if ($mode == 2) $where .= ' AND NOT EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE (`Sub`.`Language` <> 0) AND (`Sub`.`Entry` = `O`.`Entry`))';
497 $where .= ' AND (';
498
499 $SqlOK = false;
500 if (count($ArrStr) > 0) {
501 for($i = 0; $i < count($ArrStr); $i++)
502 {
503 if (strpos($ArrStr[$i],"'s") > 0)
504 $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-2);
505 if (strpos($ArrStr[$i],',') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
506 if (strpos($ArrStr[$i],'.') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
507 if (strpos($ArrStr[$i],'!') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
508 if (strpos($ArrStr[$i],'?') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
509
510 if (strlen($ArrStr[$i]) > 4) {
511 $where .= '(`O`.`'.$Column.'` LIKE "%'.addslashes($ArrStr[$i]).'%") OR ';
512 $SqlOK = true;
513 }
514 }
515 $where = substr($where,0,strlen($where)-4);
516 $where .= ')';
517 if ($SqlOK) {
518 $ID = $Database->SQLCommand($sql.$where.$groupby);
519 // echo ($sql.'|'.$where.'|'.$groupby);
520 while($Line = mysql_fetch_assoc($ID)) {
521 $buff[] = array($Line['ID'],GetIDbyName($Table),$Line[$Column],$Line['Tran']);
522 }
523 }
524 }
525 }
526 return $buff;
527}
528
529function ProgressBar($Width, $Percent, $Text = '')
530{
531 $Pixels = $Width * ($Percent / 100);
532 if($Pixels > $Width) $Pixels = $Width;
533 if($Text == '') $Text = $Percent;
534
535 return('<div class="progressbar" style="width: '.$Width.'px">'.
536 '<div class="bar" style="width: '.$Pixels.'px;"></div>'.
537 '<div class="text" style="width: '.$Width.'px">'.$Text.'</div>'.
538 '</div>');
539}
540
541function GetLevelMinMax($XP)
542{
543 $IndexLevel = 100;
544
545 if($XP > 0) $Level = floor(sqrt($XP / $IndexLevel));
546 else $Level = 0;
547 $MinXP = $Level * $Level * $IndexLevel;
548 $MaxXP = ($Level + 1) * ($Level + 1) * $IndexLevel;
549 $MaxXP = $MaxXP - $MinXP;
550 $XP = $XP - $MinXP;
551 return(array('Level' => $Level, 'XP' => $XP, 'MaxXP' => $MaxXP));
552}
553
554?>
Note: See TracBrowser for help on using the repository browser.