source: trunk/includes/global.php@ 538

Last change on this file since 538 was 538, checked in by chronos, 12 years ago
  • Upraveno: Chybné SQL dotazy nyní vyvolávají výjimku.
  • Přidáno: Vlastní obsluha výjimek s záznamem hlaášení podobně jako při obsluze chyb.
  • Upravno: Abecední řazení seznamu překladových skupin v pravém panelu.
  • Upraveno: Zobrazování odřádkování při výpisu chybových záznamů.
  • Opraveno: Omezení přístupu ke zobrazení záznamu pouze na správce.
File size: 24.1 KB
Line 
1<?php
2
3include_once(dirname(__FILE__).'/Database.php');
4include_once(dirname(__FILE__).'/system.php');
5include_once(dirname(__FILE__).'/Update.php');
6include_once(dirname(__FILE__).'/rss.php');
7include_once(dirname(__FILE__).'/user.php');
8include_once(dirname(__FILE__).'/Page.php');
9include_once(dirname(__FILE__).'/error.php');
10if(file_exists(dirname(__FILE__).'/config.php'))
11 include_once(dirname(__FILE__).'/config.php');
12include_once(dirname(__FILE__).'/Version.php');
13
14GlobalInit();
15
16function GlobalInit()
17{
18 global $System, $ScriptStartTime, $TranslationTree, $User, $StopAfterUpdateManager,
19 $UpdateManager, $Config, $DatabaseRevision;
20
21 $ScriptStartTime = GetMicrotime();
22
23 if(isset($_SERVER['REMOTE_ADDR'])) session_start();
24
25 if(!isset($Config)) die('Systém není nainstalován. Pokračujte v instalaci <a href="admin/install.php">zde</a>.');
26 date_default_timezone_set($Config['Web']['Timezone']);
27
28 $System = new System();
29 $System->Init();
30
31 // Check database persistence structure
32 $UpdateManager = new UpdateManager();
33 $UpdateManager->Database = $System->Database;
34 $UpdateManager->Revision = $DatabaseRevision;
35 if(!$UpdateManager->IsInstalled()) die('Systém vyžaduje instalaci databáze.');
36 if(!$UpdateManager->IsUpToDate()) die('Systém vyžaduje aktualizaci databáze.');
37
38 // SQL injection hack protection
39 foreach($_POST as $Index => $Item)
40 {
41 if(is_array($_POST[$Index]))
42 foreach($_POST[$Index] as $Index2 => $Item2) $_POST[$Index][$Index2] = addslashes($Item2);
43 else $_POST[$Index] = addslashes($_POST[$Index]);
44 }
45 foreach($_GET as $Index => $Item) $_GET[$Index] = addslashes($_GET[$Index]);
46
47 $User = new User($System);
48
49 set_error_handler('ErrorHandler');
50 set_exception_handler('ExceptionHandler');
51
52 // TODO: Global initialized variable should be removed
53 $TranslationTree = GetTranslationTree();
54
55 LogReferrer();
56}
57
58$RSSChannels = array(
59 array('Title' => 'Změny systému', 'Channel' => 'news'),
60 array('Title' => 'Poslední překlady', 'Channel' => 'translation'),
61 array('Title' => 'Kecátko', 'Channel' => 'shoutbox'),
62);
63
64function GetMicrotime()
65{
66 list($Usec, $Sec) = explode(' ', microtime());
67 return ((float)$Usec + (float)$Sec);
68}
69
70$UnitNames = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB');
71
72function HumanSize($Value)
73{
74 global $UnitNames;
75
76 $UnitIndex = 0;
77 while($Value > 1024)
78 {
79 $Value = round($Value / 1024, 3);
80 $UnitIndex++;
81 }
82 return($Value.' '.$UnitNames[$UnitIndex]);
83}
84
85function GetQueryStringArray($QueryString)
86{
87 $Result = array();
88 $Parts = explode('&', $QueryString);
89 foreach($Parts as $Part)
90 {
91 if($Part != '')
92 {
93 if(!strpos($Part, '=')) $Part .= '=';
94 $Item = explode('=', $Part);
95 $Result[$Item[0]] = $Item[1];
96 }
97 }
98 return($Result);
99}
100
101function SetQueryStringArray($QueryStringArray)
102{
103 $Parts = array();
104 foreach($QueryStringArray as $Index => $Item)
105 {
106 $Parts[] = $Index.'='.$Item;
107 }
108 return(implode('&', $Parts));
109}
110
111// Log types
112define('LOG_TYPE_TRANSLATION', 1);
113define('LOG_TYPE_DOWNLOAD', 2);
114define('LOG_TYPE_USER', 3);
115define('LOG_TYPE_MODERATOR', 4);
116define('LOG_TYPE_ERROR', 10);
117define('LOG_TYPE_IMPORT', 11);
118define('LOG_TYPE_EXPORT', 12);
119define('LOG_TYPE_CZWOW', 13);
120define('LOG_TYPE_ADMINISTRATION', 14);
121
122
123function utf2ascii($text)
124{
125 $return = Str_Replace(
126 Array("á","č","ď","é","ě","í","ľ","ň","ó","ř","š","ť","ú","ů","ý","ž","Á","Č","Ď","É","Ě","Í","Ľ","Ň","Ó","Ř","Š","Ť","Ú","Ů","Ý","Ž") ,
127 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") ,
128 $text);
129 //$return = Str_Replace(Array(" ", "_"), "-", $return); //nahradí mezery a podtržítka pomlčkami
130 //$return = Str_Replace(Array("(",")",".","!",",","\"","'"), "", $return); //odstraní ().!,"'
131 //$return = StrToLower($return); // velká písmena nahradí malými.
132 return($return);
133}
134
135function getmonthyears($Days)
136{
137 $month = floor($Days / 30);
138 $year = floor($month / 12);
139 $Days = floor($Days - $month * 30);
140 $month = $month - $year * 12;
141 return($year.'r '.$month.'m '.$Days.'d');
142}
143
144function GetPageList($TotalCount)
145{
146 global $System;
147
148 $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
149
150 $ItemPerPage = $System->Config['Web']['ItemsPerPage'];
151 $Around = round($System->Config['Web']['VisiblePagingItems'] / 2);
152 $Result = '';
153 $PageCount = floor($TotalCount / $ItemPerPage) + 1;
154
155 if(!array_key_exists('Page', $_SESSION)) $_SESSION['Page'] = 0;
156 if(array_key_exists('page', $_GET)) $_SESSION['Page'] = $_GET['page'] * 1;
157 if($_SESSION['Page'] < 0) $_SESSION['Page'] = 0;
158 if($_SESSION['Page'] >= $PageCount) $_SESSION['Page'] = $PageCount - 1;
159 $CurrentPage = $_SESSION['Page'];
160
161
162 $Result .= 'Počet položek: <strong>'.$TotalCount.'</strong> &nbsp; Stránky: ';
163
164 $Result = '';
165 if($PageCount > 1)
166 {
167 if($CurrentPage > 0)
168 {
169 $QueryItems['page'] = 0;
170 $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&lt;&lt;</a> ';
171 $QueryItems['page'] = ($CurrentPage - 1);
172 $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&lt;</a> ';
173 }
174 $PagesMax = $PageCount - 1;
175 $PagesMin = 0;
176 if($PagesMax > ($CurrentPage + $Around)) $PagesMax = $CurrentPage + $Around;
177 if($PagesMin < ($CurrentPage - $Around))
178 {
179 $Result.= ' ... ';
180 $PagesMin = $CurrentPage - $Around;
181 }
182 for($i = $PagesMin; $i <= $PagesMax; $i++)
183 {
184 if($i == $CurrentPage) $Result.= '<strong>'.($i + 1).'</strong> ';
185 else {
186 $QueryItems['page'] = $i;
187 $Result .= '<a href="?'.SetQueryStringArray($QueryItems).'">'.($i + 1).'</a> ';
188 }
189 }
190 if($PagesMax < ($PageCount - 1)) $Result .= ' ... ';
191 if($CurrentPage < ($PageCount - 1))
192 {
193 $QueryItems['page'] = ($CurrentPage + 1);
194 $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&gt;</a> ';
195 $QueryItems['page'] = ($PageCount - 1);
196 $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&gt;&gt;</a>';
197 }
198 }
199 $Result = '<div style="text-align: center">'.$Result.'</div>';
200 return(array('SQLLimit' => ' LIMIT '.$CurrentPage * $ItemPerPage.', '.$ItemPerPage,
201 'Page' => $CurrentPage,
202 'Output' => $Result,
203 ));
204}
205
206$OrderDirSQL = array('ASC', 'DESC');
207$OrderArrowImage = array('sort_asc.png', 'sort_desc.png');
208
209function GetOrderTableHeader($Columns, $DefaultColumn, $DefaultOrder = 0)
210{
211 global $OrderDirSQL, $OrderArrowImage, $Config, $System;
212
213 if(array_key_exists('OrderCol', $_GET)) $_SESSION['OrderCol'] = $_GET['OrderCol'];
214 if(array_key_exists('OrderDir', $_GET)) $_SESSION['OrderDir'] = $_GET['OrderDir'];
215 if(!array_key_exists('OrderCol', $_SESSION)) $_SESSION['OrderCol'] = $DefaultColumn;
216 if(!array_key_exists('OrderDir', $_SESSION)) $_SESSION['OrderDir'] = $DefaultOrder;
217
218 // Check OrderCol
219 $Found = false;
220 foreach($Columns as $Column)
221 {
222 if($Column['Name'] == $_SESSION['OrderCol'])
223 {
224 $Found = true;
225 break;
226 }
227 }
228 if($Found == false)
229 {
230 $_SESSION['OrderCol'] = $DefaultColumn;
231 $_SESSION['OrderDir'] = $DefaultOrder;
232 }
233 // Check OrderDir
234 if(($_SESSION['OrderDir'] != 0) and ($_SESSION['OrderDir'] != 1)) $_SESSION['OrderDir'] = 0;
235
236 $Result = '';
237 $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
238 foreach($Columns as $Index => $Column)
239 {
240 $QueryItems['OrderCol'] = $Column['Name'];
241 $QueryItems['OrderDir'] = 1 - $_SESSION['OrderDir'];
242 if($Column['Name'] == $_SESSION['OrderCol']) $ArrowImage = '<img style="vertical-align: middle; border: 0px;" src="'.$System->Link('/images/'.$OrderArrowImage[$_SESSION['OrderDir']]).'" alt="order arrow">';
243 else $ArrowImage = '';
244 if($Column['Name'] == '') $Result .= '<th>'.$Column['Title'].'</th>';
245 else $Result .= '<th><a href="?'.SetQueryStringArray($QueryItems).'">'.$Column['Title'].$ArrowImage.'</a></th>';
246 }
247 return(array(
248 'SQL' => ' ORDER BY `'.$_SESSION['OrderCol'].'` '.$OrderDirSQL[$_SESSION['OrderDir']],
249 'Output' => '<tr>'.$Result.'</tr>',
250 'Column' => $_SESSION['OrderCol'],
251 'Direction' => $_SESSION['OrderDir'],
252 ));
253}
254
255function FormatOutput($s)
256{
257 $out = '';
258 $nn = 0;
259 $n = 0;
260 while($s != '')
261 {
262 $start = strpos($s, '<');
263 $end = strpos($s, '>');
264 if($start != 0)
265 {
266 $end = $start - 1;
267 $start = 0;
268 }
269 $line = trim(substr($s, $start, $end + 1));
270 if(strlen($line) > 0)
271 if($line[0] == '<')
272 {
273 if($s[$start + 1] == '/')
274 {
275 $n = $n - 2;
276 $nn = $n;
277 } else
278 {
279 if(strpos($line, ' ')) $cmd = substr($line, 1, strpos($line, ' ') - 1);
280 else $cmd = substr($line, 1, strlen($line) - 2);
281 //echo('['.$cmd.']');
282 if(strpos($s, '</'.$cmd.'>')) $n = $n + 2;
283 }
284 }// else $line = '['.$line.']';
285 //if($line != '') echo(htmlspecialchars(str_repeat(' ',$nn).$line."\n"));
286 if($line != '') $out .= (str_repeat(' ', $nn).$line."\n");
287 $s = substr($s, $end + 1, strlen($s));
288 $nn = $n;
289 }
290 return($out);
291}
292
293function WriteLanguages($Selected)
294{
295 global $System;
296
297 $Output = '<select name="Language">';
298 $DbResult = $System->Database->select('Language', '`Id`, `Name`', '`Enabled` = 1');
299 while($Language = $DbResult->fetch_assoc())
300 {
301 $Output .= '<option value="'.$Language['Id'].'"';
302 if($Selected == $Language['Id'])
303 $Output .= ' selected="selected"';
304 $Output .= '>'.$Language['Name'].'</option>';
305 }
306 $Output .= '</select>';
307 return($Output);
308}
309
310function ClientVersionSelection($Selected)
311{
312 global $System;
313
314 $Output = '<select name="ClientVersion">';
315 $DbResult = $System->Database->select('ClientVersion', '`Id`, `Version`', '`Imported` = 1');
316 $Output .= '<option value=""';
317 if($Selected == '')
318 $Output .= ' selected="selected"';
319 $Output .= '>Žádná</option>';
320 while($ClientVersion = $DbResult->fetch_assoc())
321 {
322 $Output .= '<option value="'.$ClientVersion['Id'].'"';
323 if($Selected == $ClientVersion['Id'])
324 $Output .= ' selected="selected"';
325 $Output .= '>'.$ClientVersion['Version'].'</option>';
326 }
327 $Output .= '</select>';
328 return($Output);
329}
330
331function GetLanguageList()
332{
333 global $System;
334
335 $Result = array();
336 $DbResult = $System->Database->query('SELECT * FROM `Language` WHERE `Enabled` = 1');
337 while($DbRow = $DbResult->fetch_assoc())
338 $Result[$DbRow['Id']] = $DbRow;
339 return($Result);
340}
341
342function GetTranslationTree()
343{
344 global $System;
345
346 $Result = array();
347 $DbResult = $System->Database->query('SELECT *, UNIX_TIMESTAMP(`LastImport`) AS `LastImportTime` FROM `Group` ORDER BY `Name`');
348 while($DbRow = $DbResult->fetch_assoc())
349 {
350 $DbRow['Items'] = array();
351 $Result[$DbRow['Id']] = $DbRow;
352 }
353 $DbResult = $System->Database->query('SELECT * FROM `GroupItem` ORDER BY `Group`, `Sequence`');
354 while($DbRow = $DbResult->fetch_assoc())
355 {
356 $Result[$DbRow['Group']]['Items'][] = $DbRow;
357 }
358 return($Result);
359}
360
361$Moderators = array('Překladatel', 'Moderátor', 'Administrátor');
362
363function WriteLog($Text, $Type)
364{
365 global $System, $User;
366
367 if(!isset($_SERVER['REMOTE_ADDR'])) $IP = 'Konzole';
368 else $IP = addslashes($_SERVER['REMOTE_ADDR']);
369
370 if(!is_null($User->Id)) $UserId = $User->Id;
371 else $UserId = 'NULL';
372 $Query = 'INSERT INTO `Log` ( `User` , `Type` , `Text` , `Date` , `IP` )
373 VALUES ('.$UserId.', '.$Type.', "'.addslashes($Text).'", NOW(), "'.$IP.'")';
374 $System->Database->query($Query);
375}
376
377function HumanDate($SQLDateTime)
378{
379 $DateTimeParts = explode(' ', $SQLDateTime);
380 if($DateTimeParts[0] != '0000-00-00')
381 {
382 $DateParts = explode('-', $DateTimeParts[0]);
383 return(($DateParts[2] * 1).'.'.($DateParts[1] * 1).'.'.($DateParts[0] * 1));
384 } else return('&nbsp;');
385}
386
387function FollowingTran($TextID, $Table, $GroupId, $Prev = false)
388{
389 global $System, $Config;
390
391 if($Prev)
392 $sql = 'SELECT `ID` FROM `'.$Table.'` AS `item` WHERE '.
393 '(`Language` = '.$Config['OriginalLanguage'].') AND NOT EXISTS(SELECT `entry` '.
394 'FROM `'.$Table.'` AS `sub` WHERE (`sub`.`Language` <> '.$Config['OriginalLanguage'].') '.
395 'AND (`sub`.`entry` = `item`.`entry`)) AND (`ID` < '.$TextID.') ORDER BY `ID` DESC LIMIT 1';
396 else $sql = 'SELECT `ID` FROM `'.$Table.'` AS `item` WHERE '.
397 '(`Language` = '.$Config['OriginalLanguage'].') AND NOT EXISTS(SELECT `entry` '.
398 'FROM `'.$Table.'` AS `sub` WHERE (`sub`.`Language` <> '.$Config['OriginalLanguage'].') '.
399 'AND (`sub`.`entry` = `item`.`entry`)) AND `ID` > '.$TextID.' ORDER BY `ID` LIMIT 1';
400
401 $DbResult = $System->Database->query($sql);
402 $Next = $DbResult->fetch_assoc();
403 if($Next)
404 {
405 if($Prev) $Output = '<a href="form.php?group='.$GroupId.'&amp;ID='.$Next['ID'].'">Předcházející '.$Next['ID'].'</a> ';
406 else $Output = '<a href="form.php?group='.$GroupId.'&amp;ID='.$Next['ID'].'">Následující '.$Next['ID'].'</a> ';
407 return('form.php?group='.$GroupId.'&amp;ID='.$Next['ID']);
408 }
409}
410
411function GetBuildNumber($Version)
412{
413 global $System, $BuildNumbers;
414
415 if(isset($BuildNumbers[$Version]) == false)
416 {
417 $sql = 'SELECT `BuildNumber` FROM `ClientVersion` WHERE `Version` = "'.$Version.'"';
418 $DbResult = $System->Database->query($sql);
419 $DbRow = $DbResult->fetch_assoc();
420 $BuildNumbers[$Version] = $DbRow['BuildNumber'];
421 }
422 return($BuildNumbers[$Version]);
423}
424
425function GetVersionWOW($BuildNumber)
426{
427 global $System, $VersionsWOW;
428
429 if(isset($VersionsWOW[$BuildNumber]) == false)
430 {
431 $sql = 'SELECT `Version` FROM `ClientVersion` WHERE `BuildNumber` = "'.$BuildNumber.'"';
432 $DbResult = $System->Database->query($sql);
433 $Version = $DbResult->fetch_assoc();
434 $VersionsWOW[$BuildNumber] = $Version['Version'];
435 }
436 return($VersionsWOW[$BuildNumber]);
437}
438
439function LoadGroupIdParameter()
440{
441 global $TranslationTree;
442
443 if(array_key_exists('group', $_GET)) $GroupId = $_GET['group'] * 1;
444 else $GroupId = 1;
445
446 if(isset($TranslationTree[$GroupId]) == false) ErrorMessage('Překladová skupina dle zadaného Id neexistuje.');
447 return($GroupId);
448}
449
450function LoadCommandLineParameters()
451{
452 if(!array_key_exists('REMOTE_ADDR', $_SERVER))
453 {
454 foreach($_SERVER['argv'] as $Parameter)
455 {
456 if(strpos($Parameter, '=') !== false)
457 {
458 $Index = substr($Parameter, 0, strpos($Parameter, '='));
459 $Parameter = substr($Parameter, strpos($Parameter, '=') + 1);
460 //echo($Index.' ---- '.$Parameter);
461 $_GET[$Index] = $Parameter;
462 }
463 }
464 }
465}
466
467function ShowTabs($Tabs)
468{
469 $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
470
471 if(array_key_exists('Tab', $_GET)) $_SESSION['Tab'] = $_GET['Tab'];
472 if(!array_key_exists('Tab', $_SESSION)) $_SESSION['Tab'] = 0;
473 if(($_SESSION['Tab'] < 0) or ($_SESSION['Tab'] > (count($Tabs) - 1))) $_SESSION['Tab'] = 0;
474 $Output = '<div id="header">'.
475 '<ul>';
476 foreach($Tabs as $Index => $Tab)
477 {
478 $QueryItems['Tab'] = $Index;
479 if($Index == $_SESSION['Tab']) $Selected = ' id="selected"';
480 else $Selected = '';
481 $Output .= '<li'.$Selected.'><a href="?'.SetQueryStringArray($QueryItems).'">'.$Tab.'</a></li>';
482 }
483 $Output .= '</ul></div>';
484 return($Output);
485}
486
487function CheckBox($Name, $Checked = false, $Id = '', $Class = '', $Disabled = false)
488{
489 if($Id) $Id = ' id="'.$Id.'"'; else $Id = '';
490 if($Class) $Class = ' class="'.$Class.'"'; else $Class = '';
491 if($Checked) $Checked = ' checked="checked"'; else $Checked = '';
492 if($Disabled) $Disabled = ' disabled="disabled"'; else $Disabled = '';
493 return('<input type="checkbox" value="checked" name="'.$Name.'"'.$Checked.$Disabled.$Id.$Class.' />');
494}
495
496function RadioButton($Name, $Value, $Checked = false, $OnClick = '', $Disabled = false)
497{
498 if($Checked) $Checked = ' checked="checked"'; else $Checked = '';
499 if($OnClick != '') $OnClick = ' onclick="'.$OnClick.'"'; else $OnClick = '';
500 if($Disabled) $Disabled = ' disabled="disabled"'; else $Disabled = '';
501 return('<input type="radio" name="'.$Name.'" value="'.$Value.'"'.$Checked.$Disabled.$OnClick.'/>');
502}
503
504function SelectOption($Name, $Text, $Selected = false)
505{
506 if($Selected) $Selected = ' selected="selected"'; else $Selected = '';
507 return('<option value="'.$Name.'"'.$Selected.'>'.$Text.'</option>');
508}
509
510function DeleteDirectory($dirname)
511{
512 if(is_dir($dirname))
513 {
514 $dir_handle = opendir($dirname);
515 if(!$dir_handle) return(false);
516 while($file = readdir($dir_handle))
517 {
518 if(($file != '.') and ($file != '..'))
519 {
520 if(!is_dir($dirname.'/'.$file)) unlink($dirname.'/'.$file);
521 else DeleteDirectory($dirname.'/'.$file);
522 }
523 }
524 closedir($dir_handle);
525 rmdir($dirname);
526 }
527 return(true);
528}
529
530function ErrorMessage($Text)
531{
532 ShowPage($Text);
533 die();
534}
535
536function GetIDbyName($Table)
537{
538 global $TranslationTree;
539
540 foreach($TranslationTree as $TableID => $Value)
541 {
542 if($Value['TablePrefix'] == $Table) return $TableID;
543 }
544}
545
546function GetTranslatNames($Text,$mode,$TablesColumn)
547{
548 global $System, $Config;
549
550 /* $TablesID = array('gameobject' => 5,
551 'creature' => 6,
552 'item' => 4,
553 'transports' => 'Name',
554 'areatrigger_teleport' => 'Name',
555 'areatrigger_tavern' => 'Name',); */
556 $buff = array();
557
558 foreach($TablesColumn as $Table => $Column)
559 {
560 $sql = 'SELECT `ID`,`'.$Column.'`, (SELECT `'.$Column.'` FROM `'.$Table.'` AS `T` WHERE '.
561 '(`O`.`Entry` = `T`.`Entry`) AND (`Language` <> '.$Config['OriginalLanguage'].') LIMIT 1) AS `Tran` FROM `'.$Table.'` AS `O` WHERE ';
562 $groupby = ' GROUP BY `'.$Column.'`';
563
564 $ArrStr = explode(' ', $Text);
565 $where = '(`Language` = '.$Config['OriginalLanguage'].') ';
566 if ($mode == 1) $where .= ' AND EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE (`Sub`.`Language` <> '.$Config['OriginalLanguage'].') AND (`Sub`.`Entry` = `O`.`Entry`))';
567 if ($mode == 2) $where .= ' AND NOT EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE (`Sub`.`Language` <> '.$Config['OriginalLanguage'].') AND (`Sub`.`Entry` = `O`.`Entry`))';
568 $where .= ' AND (';
569
570 $SqlOK = false;
571 if (count($ArrStr) > 0) {
572 for($i = 0; $i < count($ArrStr); $i++)
573 {
574 if (strpos($ArrStr[$i],"'s") > 0)
575 $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-2);
576 if (strpos($ArrStr[$i],',') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
577 if (strpos($ArrStr[$i],'.') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
578 if (strpos($ArrStr[$i],'!') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
579 if (strpos($ArrStr[$i],'?') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
580
581 if (strlen($ArrStr[$i]) > 4) {
582 $where .= '(`O`.`'.$Column.'` LIKE "%'.addslashes($ArrStr[$i]).'%") OR ';
583 $SqlOK = true;
584 }
585 }
586 $where = substr($where, 0, strlen($where) - 4);
587 $where .= ')';
588 if ($SqlOK) {
589 $DbResult = $System->Database->query($sql.$where.$groupby);
590 // echo ($sql.'|'.$where.'|'.$groupby);
591 while($Line = $DbResult->fetch_assoc())
592 {
593 $buff[] = array($Line['ID'], GetIDbyName($Table), $Line[$Column], $Line['Tran']);
594 }
595 }
596 }
597 }
598 return $buff;
599}
600
601function ProgressBar($Width, $Percent, $Text = '')
602{
603 $Pixels = $Width * ($Percent / 100);
604 if($Pixels > $Width) $Pixels = $Width;
605 if($Text == '') $Text = $Percent;
606
607 return('<div class="progressbar" style="width: '.$Width.'px">'.
608 '<div class="bar" style="width: '.$Pixels.'px;"></div>'.
609 '<div class="text" style="width: '.$Width.'px">'.$Text.'</div>'.
610 '</div>');
611}
612
613function GetLevelMinMax($XP)
614{
615 $IndexLevel = 100;
616
617 if($XP > 0) $Level = floor(sqrt($XP / $IndexLevel));
618 else $Level = 0;
619 $MinXP = $Level * $Level * $IndexLevel;
620 $MaxXP = ($Level + 1) * ($Level + 1) * $IndexLevel;
621 $MaxXP = $MaxXP - $MinXP;
622 $XP = $XP - $MinXP;
623 return(array('Level' => $Level, 'XP' => $XP, 'MaxXP' => $MaxXP));
624}
625
626function GetParameter($Name, $Default = '', $Numeric = false, $Session = false)
627{
628 $Result = $Default;
629 if(array_key_exists($Name, $_GET)) $Result = $_GET[$Name];
630 else if(array_key_exists($Name, $_POST)) $Result = $_POST[$Name];
631 else if($Session and array_key_exists($Name, $_SESSION)) $Result = $_SESSION[$Name];
632 if($Numeric and !is_numeric($Result)) $Result = $Default;
633 if($Session) $_SESSION[$Name] = $Result;
634 return($Result);
635}
636
637function LogReferrer()
638{
639 global $System;
640
641 if(array_key_exists('HTTP_REFERER', $_SERVER))
642 {
643 $Referrer = addslashes($_SERVER['HTTP_REFERER']);
644 $HostName = substr($Referrer, strpos($Referrer, '/') + 2);
645 $HostName = substr($HostName, 0, strpos($HostName, '/'));
646 if($HostName != $System->Config['Web']['Host'])
647 {
648 $DbResult = $System->Database->query('SELECT `Id` FROM `Referrer` WHERE `Web` = "'.$HostName.'"');
649 if($DbResult->num_rows > 0)
650 {
651 $DbRow = $DbResult->fetch_assoc();
652 $System->Database->query('UPDATE `Referrer` SET `Hits` = `Hits` + 1, `DateLast` = NOW(), `LastURL` = "'.addslashes($Referrer).'" WHERE `Id` = '.$DbRow['Id']);
653 } else $System->Database->query('INSERT INTO `Referrer` (`Web`, `DateFirst`, `DateLast`, `LastURL`, `Hits`) VALUES ("'.$HostName.'", NOW(), NOW( ), "'.addslashes($Referrer).'", 1)');
654 }
655 }
656}
657
658function MakeActiveLinks($Content)
659{
660 $Content = htmlspecialchars($Content);
661 $Content = str_replace("\n", ' <br/>', $Content);
662 $Content = str_replace("\r", '', $Content);
663
664 $Result = '';
665 $I = 0;
666 while(strpos($Content, 'http://') !== false)
667 {
668 $I = strpos($Content, 'http://');
669 $Result .= substr($Content, 0, $I);
670 $Content = substr($Content, $I);
671 $SpacePos = strpos($Content, ' ');
672 if($SpacePos !== false) $URL = substr($Content, 0, strpos($Content, ' '));
673 else $URL = substr($Content, 0);
674
675 $Result .= '<a href="'.$URL.'">'.$URL.'</a>';
676 $Content = substr($Content, strlen($URL));
677 }
678 $Result .= $Content;
679 return($Result);
680}
681
682define('MESSAGE_WARNING', 0);
683define('MESSAGE_CRITICAL', 1);
684define('MESSAGE_INFORMATION', 2);
685
686function ShowMessage($Text, $Type = MESSAGE_INFORMATION)
687{
688 global $System;
689
690 $IconName = array(
691 MESSAGE_INFORMATION => 'information',
692 MESSAGE_WARNING => 'warning',
693 MESSAGE_CRITICAL => 'critical'
694 );
695 $BackgroundColor = array(
696 MESSAGE_INFORMATION => '#e0e0ff',
697 MESSAGE_WARNING => '#ffffe0',
698 MESSAGE_CRITICAL => '#ffe0e0'
699 );
700
701 return('<div class="message" style="background-color: '.$BackgroundColor[$Type].
702 ';"><table><tr><td class="icon"><img src="'.
703 $System->Link('/images/message/'.$IconName[$Type].'.png').'" alt="'.
704 $IconName[$Type].'"><td>'.$Text.'</td></tr></table></div>');
705}
706
707function HandleLoginForm()
708{
709 global $User, $Message, $MessageType;
710
711 if(array_key_exists('action', $_GET))
712 {
713 if($_GET['action'] == 'login')
714 {
715 if(array_key_exists('LoginUser', $_POST) and array_key_exists('LoginPass', $_POST))
716 {
717 $User->Login($_POST['LoginUser'], $_POST['LoginPass']);
718 if($User->Role == LICENCE_ANONYMOUS)
719 {
720 $Message = 'Jméno nebo heslo bylo zadáno špatně.';
721 $MessageType = MESSAGE_CRITICAL;
722 } else
723 {
724 $Message = 'Přihlášení proběhlo úspěšně. Vítej <strong>'.$User->Name.'</strong>!';
725 $MessageType = MESSAGE_INFORMATION;
726 }
727 } else
728 {
729 $Message = 'Nebylo zadáno jméno a heslo.';
730 $MessageType = MESSAGE_CRITICAL;
731 }
732 } else
733 if($_GET['action'] == 'logout')
734 {
735 if($User->Role != LICENCE_ANONYMOUS)
736 {
737 WriteLog('Odhlášení', LOG_TYPE_USER);
738 $User->Logout();
739 $Message = 'Byl jsi odhlášen.';
740 $MessageType = MESSAGE_INFORMATION;
741 }
742 }
743 }
744}
745
746?>
Note: See TracBrowser for help on using the repository browser.