source: trunk/includes/global.php@ 505

Last change on this file since 505 was 505, checked in by chronos, 12 years ago
  • Upraveno: Generování RSS kanálů odděleno z hlavní stránky do souboru rss.php.
  • Upraveno: Kontrola akcí přihlašování/odhlašování uživatelů přesunuta z hlavičky na hlavní stránku.
File size: 13.7 KB
Line 
1<?php
2
3$ScriptStartTime = GetMicrotime();
4
5if(isset($_SERVER['REMOTE_ADDR'])) session_start();
6
7// SQL injection hack protection
8foreach($_POST as $Index => $Item)
9{
10 if(is_array($_POST[$Index]))
11 foreach($_POST[$Index] as $Index2 => $Item2) $_POST[$Index][$Index2] = addslashes($Item2);
12 else $_POST[$Index] = addslashes($_POST[$Index]);
13}
14foreach($_GET as $Index => $Item) $_GET[$Index] = addslashes($_GET[$Index]);
15
16include_once(dirname(__FILE__).'/global_function.php');
17if(file_exists(dirname(__FILE__).'/config.php')) include_once(dirname(__FILE__).'/config.php');
18 else die('Nenalezen konfigurační soubor config.php ve složce includes. '.
19 'Vytvořte jej zkopírováním vzoru config.sample.php.');
20date_default_timezone_set($Config['Web']['Timezone']);
21include_once(dirname(__FILE__).'/Database.php');
22include_once(dirname(__FILE__).'/rss.php');
23include_once(dirname(__FILE__).'/system.php');
24include_once(dirname(__FILE__).'/user.php');
25
26$System = new System();
27$System->Init();
28$User = new User($System);
29
30include_once(dirname(__FILE__).'/error.php');
31
32$TranslationTree = GetTranslationTree();
33$LanguageList = GetLanguageList();
34
35LogReferrer();
36
37$RSSChannels = array(
38 array('Title' => 'Změny systému', 'Channel' => 'news'),
39 array('Title' => 'Poslední překlady', 'Channel' => 'translation'),
40 array('Title' => 'Shoutbox', 'Channel' => 'shoutbox'),
41);
42
43function GetMicrotime()
44{
45 list($Usec, $Sec) = explode(' ', microtime());
46 return ((float)$Usec + (float)$Sec);
47}
48
49function ShowShoutbox()
50{
51 global $System, $Config, $User, $System;
52
53 $Output = '<strong><a href="'.$System->Link('/action.php?action=ShoutBoxView').'">Kecátko:</a></strong>';
54 if($User->Licence(LICENCE_USER))
55 $Output .= ' <a href="'.$System->Link('/action.php?action=shoutbox').'">Vložit</a>';
56 $Output .= '<div class="box"><table>';
57 $DbResult = $System->Database->query('SELECT * FROM `ShoutBox` ORDER BY `ID` DESC LIMIT 30');
58 while($Line = $DbResult->fetch_assoc())
59 $Output .= '<tr><td><strong>'.$Line['UserName'].'</strong>: '.MakeActiveLinks($Line['Text']).'</td></tr>';
60 $Output .= '</table></div>';
61 return($Output);
62}
63
64function ShowTopBar()
65{
66 global $Config, $System, $User, $System;
67
68 $Output = '<div class="Menu">';
69 $Output .= '<span class="MenuItem"></span>';
70 if($User->Licence(LICENCE_USER))
71 {
72 //$DbResult = $System->Database->query('SELECT `Id`, `Name` FROM `Team` WHERE `Id`='.$User->Team);
73 //$Team = $DbResult->fetch_assoc();
74 //$Output .= ''<span class="MenuItem">Moje překlady: <a href="">Dokončené</a> <a href="">Rozpracované</a> <a href="">Exporty</a> Tým: <a href="">'.$Team['name'].'</a></span>';
75 $Output .= '<span class="MenuItem2">'.$User->Name.' <a href="'.$System->Link('/?action=logout').'">Odhlášení</a> <a href="'.$System->Link('/Options.php').'">Nastavení</a>'.
76 ' <a title="Vámi přeložené texty" href="'.$System->Link('/TranslationList.php?user='.$User->Id.'&amp;group=0&amp;state=2&amp;text=&amp;entry=').'">Přeložené</a>'.
77 ' <a title="Vaše rozpracované text" href="'.$System->Link('/TranslationList.php?user='.$User->Id.'&amp;group=0&amp;state=3&amp;text=&amp;entry=').'">Rozpracované</a>'.
78 ' <a title="Nikým nepřeložené texty" href="'.$System->Link('/TranslationList.php?user=0&amp;group=0&amp;state=1&amp;text=&amp;entry=').'">Nepřeložené</a>'.
79 '</span>';
80 } else
81 {
82 $Output .= '<span class="MenuItem2"><form action="'.$System->Link('/?action=login').'" method="post"> Jméno: <input type="text" name="LoginUser" size="8 " /> Heslo: <td><input type="password" name="LoginPass" size="8" /> <input type="submit" value="Přihlásit" /></form> &nbsp; <a href="'.$System->Link('/registrace.php').'">Registrace</a></span>';
83 }
84 $Output .= '</div>';
85 return($Output);
86}
87
88function ShowLoginBox()
89{
90 global $User;
91
92 $Output = '';
93 if($User->Licence(LICENCE_USER))
94 {
95 // $Output .= 'Jste přihlášen jako: <b>'.$User->Id.'</b> <a href="index.php?Logout">Odhlásit</a>';
96 } else
97 {
98 $Output .= '<strong>Přihlášení:</strong>
99 <form action="" method="post">
100 <table>
101 <tr>
102 <td><input type="text" name="LoginUser" size="13" /></td>
103 </tr>
104 <tr>
105 <td><input type="password" name="LoginPass" size="13" /></td>
106 </tr>
107 <tr>
108 <th><input type="submit" value="Přihlásit" /></th>
109 </tr>
110 </table>
111 </form>';
112 }
113 return($Output);
114}
115
116function ShowSearchBox()
117{
118 global $System;
119
120 $Output = '<strong>Hledání:</strong>'.
121 '<form action="'.$System->Link('/action.php').'" method="get"><div>'.
122 '<input type="hidden" name="action" value="search" />'.
123 '<table>'.
124 '<tr>'.
125 '<td><input type="text" name="search" size="13" /></td>'.
126 '</tr>'.
127 '<tr>'.
128 '<th><input type="submit" value="Hledat" /></th>'.
129 '</tr>'.
130 '</table></div>'.
131 '</form>';
132 return($Output);
133}
134
135function ShowMainMenu()
136{
137 global $TranslationTree, $Config, $User, $System;
138
139 $Menu = array
140 (
141 $System->Link('/') => array(LICENCE_ANONYMOUS, 'Hlavní stránka', 'Domů'),
142 $System->Link('/dictionary.php') => array(LICENCE_ANONYMOUS, 'Slovník WoW výrazů', 'Slovníček'),
143 $System->Link('/statistic.php') => array(LICENCE_ANONYMOUS, 'Stav dokončení překládů', 'Stav dokončení'),
144 $System->Link('/userlist.php?action=nofilter') => array(LICENCE_ANONYMOUS, 'Seznam registrovaných uživatelů', 'Překladatelé'),
145 $System->Link('/team.php?search=') => array(LICENCE_ANONYMOUS, 'Seznam překladatelských týmů', 'Týmy'),
146 $System->Link('/serverlist.php') => array(LICENCE_ANONYMOUS, 'Seznam serverů, kde je nasazena čeština v praxi', 'Servery'),
147 $System->Link('/export/') => array(LICENCE_ANONYMOUS, 'Zde si můžete stáhnout přeložené texty', 'Exporty'),
148 $System->Link('/download.php') => array(LICENCE_ANONYMOUS, 'Stahování různých pomocných souborů a programů', 'Soubory'),
149 $System->Link('/info.php') => array(LICENCE_ANONYMOUS, 'Informace k překladu hry', 'Informace'),
150 $System->Link('/TranslationList.php?action=grouplist') => array(LICENCE_ANONYMOUS, 'Informace o překladových skupinách', 'Zdroje dat'),
151 $System->Link('/banners.php') => array(LICENCE_ANONYMOUS, 'Informace k propagaci tohoto projektu', 'Propagace'),
152 $System->Link('/promotion.php') => array(LICENCE_ANONYMOUS, 'Prezentace a motivace překladu', 'Prezentace'),
153 $System->Link('/version.php') => array(LICENCE_ANONYMOUS, 'Seznam verzí herního klienta', 'Verze hry'),
154 $System->Link('/aowow/') => array(LICENCE_ANONYMOUS, 'Vyhledávací databáze podobná WoWHead s překlady', 'AoWoW'),
155'http://embed.mibbit.com/?server=game.zdechov.net%3A6667&amp;channel=%23wowpreklad&amp;forcePrompt=true&amp;charset=utf-8' => array(LICENCE_ANONYMOUS, 'IRC chat pro překladatele', 'Chat'),
156 $System->Link('/admin/') => array(LICENCE_ADMIN, 'Volby pro správu', 'Administrace'),
157 );
158
159 $Output = '<strong>Hlavní menu:</strong>'.
160 '<div class="verticalmenu"><ul>';
161 foreach($Menu as $MenuTarget => $MenuItem)
162 {
163 if(isset($MenuItem[3])) $OnClick = ' onclick="'.$MenuItem[3].'"';
164 else $OnClick = '';
165 if($User->Licence($MenuItem[0]))
166 $Output .= '<li><a class="verticalmenua" title="'.$MenuItem[1].'" href="'.$MenuTarget.'"'.$OnClick.'>'.$MenuItem[2].'</a></li>';
167 }
168 $Output .= '</ul></div>';
169 return($Output);
170}
171
172function ShowTranslatedMenu()
173{
174 global $TranslationTree, $User, $System;
175
176 $Output = '<strong>Překladové skupiny:</strong><br /><div id="TranslationMenu">';
177 foreach($TranslationTree as $Group)
178 {
179 $Output .= '<div id="menuitem-group'.$Group['Id'].'" onmouseover="show(\'group'.$Group['Id'].'\')" onmouseout="hide(\'group'.$Group['Id'].'\')">'.
180 '<a href="'.$System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;action=filter').'">'.$Group['Name'].'</a></div>'.
181 '<div id="group'.$Group['Id'].'" class="hidden-menu-item" onmouseover="show(\'group'.$Group['Id'].'\')" onmouseout="hide(\'group'.$Group['Id'].'\')">';
182 $Output .= '&nbsp;<a title="Zde můžete začít překládat" href="'.$System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=1&amp;user=0&amp;entry=&amp;text=').'">Nepřeložené</a><br />'.
183 '&nbsp;<a title="Přeložené texty, můžete zde hlasovat, nebo opravovat překlady" href="'.$System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=2&amp;user=0&amp;entry=&amp;text=').'">Přeložené</a><br />';
184 if($User->Licence(LICENCE_USER))
185 {
186 $Output .= '&nbsp;<a title="Nedokončené překlady" href="'.$System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=3').'">Rozepsané</a><br />
187 &nbsp;<a title="Všechny překlady, které jste přeložil" href="'.$System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=1&amp;user='.$User->Id).'&amp;entry=&amp;text=">Vlastní</a><br />';
188 }
189 $Output .= '&nbsp;<a title="Sestavit speciální filtr" href="'.$System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;action=filter').'">Filtr</a><br />';
190 $Output .= '</div>';
191 }
192 $Output .= '</div>';
193 return($Output);
194}
195
196function ShowOnlineUserList()
197{
198 global $System, $Moderators, $User;
199
200 $Output = 'Online překladatelé:<br />';
201 $DbResult = $System->Database->query('SELECT `Name`, `GM`, `ID` FROM `User` WHERE `LastLogin` >= NOW() - 300 AND ((`LastLogout` < `LastLogin`) OR (ISNULL(`LastLogout`)))');
202 while($DbUser = $DbResult->fetch_assoc())
203 {
204 if($User->Licence(LICENCE_MODERATOR))
205 $Name = '<a href="user.php?user='.$DbUser['ID'].'">'.$DbUser['Name'].'</a>';
206 else $Name = $DbUser['Name'];
207 $TextGM = '';
208 $Output .= '<strong>'.$Name.'</strong>'.$TextGM.'<br />';
209 }
210 return($Output);
211}
212
213function ShowHeader()
214{
215 global $User, $RSSChannels, $System;
216
217 $Output = '<?xml version="1.0" encoding="'.$System->Config['Web']['Charset'].'"?>
218 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
219<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cz">'.
220'<head>'.
221'<meta http-equiv="content-type" content="application/xhtml+xml; charset='.$System->Config['Web']['Charset'].'" />'.
222'<meta name="keywords" content="wow, quest, questy, questů, preklad, mangos, překlad, překládání, přeložený, přeložení, čeština, world of warcraft, open source, free, addon" />'.
223'<meta name="description" content="'.$System->Config['Web']['Title'].'" />'.
224'<meta name="robots" content="all" />'.
225'<link rel="stylesheet" href="'.$System->Link('/style/style.css').'" type="text/css" media="all" />'.
226'<script type="text/javascript" src="'.$System->Link('/style/global.js').'"></script>'.
227'<link rel="shortcut icon" href="'.$System->Link('/images/favicon.ico').'" />';
228 if(isset($RSSChannels))
229 foreach($RSSChannels as $Channel)
230 $Output .= ' <link rel="alternate" title="'.$Channel['Title'].'" href="'.
231 $System->Link('/rss.php?channel='.$Channel['Channel']).'" type="application/rss+xml" />';
232 $Output .= '<title>'.$System->Config['Web']['Title'].'</title>
233</head>
234<body>';
235
236 $Output .= ShowTopBar();
237 $Output .= '<table class="page"><tr><td class="menu">';
238 $Output .= ShowMainMenu();
239 $Output .= ShowOnlineUserList();
240 $Output .= '<br />';
241 $Output .= ShowSearchBox();
242 $Output .= '</td><td id="border-left"></td><td class="content">';
243 if(isset($Message)) $Output .= ShowMessage($Message, $MessageType);
244 return($Output);
245}
246
247function ShowFooter()
248{
249 global $System, $ScriptStartTime, $User;
250
251 $ScriptGenerateDuration = round(GetMicrotime() - $ScriptStartTime, 2);
252
253 $Output = '</td>'.
254 '<td class="menu2">';
255 $Output .= ShowTranslatedMenu();
256 $Output .= '</td>'.
257 '</tr><tr>'.
258 '<td colspan="4" class="page-bottom">Autoři: '.$System->Config['Web']['Authors'].
259 ' &nbsp; <a href="http://svn.zdechov.net/trac/wowpreklad/browser/trunk">Zdrojové soubory</a> &nbsp; '.
260 '<a href="http://svn.zdechov.net/trac/wowpreklad/log/trunk?verbose=on">Novinky</a> &nbsp; '.
261 $System->Config['Web']['WebCounter'];
262
263 $Output .= '</td></tr>';
264 if($System->Config['Web']['ShowRuntimeInfo'] == true)
265 $Output .= '<tr><td colspan="3" style="text-align: center;">Doba generování: '.$ScriptGenerateDuration.' s / '.ini_get('max_execution_time').' s &nbsp;&nbsp; Použitá paměť: '.HumanSize(memory_get_peak_usage(FALSE)).' / '.ini_get('memory_limit').'B &nbsp;&nbsp; <a href="http://validator.w3.org/check?uri='.htmlentities('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'?'.$_SERVER['QUERY_STRING']).'">HTML validator</a></td></tr>';
266 $Output .= '</table>'.
267 '</body>'.
268 '</html>';
269 $User->Store();
270 return($Output);
271}
272
273function ShowPage($Content)
274{
275 global $Config;
276
277 $Output = ShowHeader().$Content.ShowFooter();
278 //if($Config['Web']['FormatOutput']) $Output = FormatOutput($Output);
279 echo($Output);
280}
281
282$UnitNames = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB');
283
284function HumanSize($Value)
285{
286 global $UnitNames;
287
288 $UnitIndex = 0;
289 while($Value > 1024)
290 {
291 $Value = round($Value / 1024, 3);
292 $UnitIndex++;
293 }
294 return($Value.' '.$UnitNames[$UnitIndex]);
295}
296
297function GetQueryStringArray($QueryString)
298{
299 $Result = array();
300 $Parts = explode('&', $QueryString);
301 foreach($Parts as $Part)
302 {
303 if($Part != '')
304 {
305 if(!strpos($Part, '=')) $Part .= '=';
306 $Item = explode('=', $Part);
307 $Result[$Item[0]] = $Item[1];
308 }
309 }
310 return($Result);
311}
312
313function SetQueryStringArray($QueryStringArray)
314{
315 $Parts = array();
316 foreach($QueryStringArray as $Index => $Item)
317 {
318 $Parts[] = $Index.'='.$Item;
319 }
320 return(implode('&', $Parts));
321}
322
323?>
Note: See TracBrowser for help on using the repository browser.