3 require('nastaveni.php');
5 $zacatek = getMicrotime();
7 function exception_handler($exception) {
8 html("Došlo k chybě: " . $exception->getMessage());
9 //header("Location: chyba_db.php");
13 set_exception_handler('exception_handler');
15 session_set_cookie_params(0, $NASTAVENI['cookie_cesta']);
19 $strankaP = split('/', $_SERVER['REQUEST_URI']);
20 $stranka = $strankaP[count($strankaP)-1];
23 if (empty($_SERVER['HTTP_ACCEPT'])) {
24 $mimeTyp = 'application/xhtml+xml';
26 $mimeTyp = (( stristr( $_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml' ) && !preg_match("/application\/xhtml\+xml;\s*q=0(\.0)?\s*(,|$)/",$_SERVER['HTTP_ACCEPT']) ) ? 'application/xhtml+xml' : 'text/html' );
28 header("Content-Type: $mimeTyp");
29 //header("Content-Type: text/html");
30 //header("Content-Type: application/xhtml+xml");
32 /** $nadpis = titulek stránky + h1 */
33 function zahlavi($nadpis, $autorizace = true) {
39 html('<?xml version="1.0" encoding="UTF-8"?>
40 <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
41 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
43 <meta http-equiv="content-language" content="cs"/>
44 <meta http-equiv="content-type" content="' . $mimeTyp . '; charset=UTF-8"/>
45 <meta name="GOOGLEBOT" content="NOINDEX, NOFOLLOW"/>
46 <meta name="ROBOTS" content="NOINDEX, NOFOLLOW"/>
47 <link href="styl.css" type="text/css" rel="StyleSheet"/>
48 <script type="text/javaScript" src="hlavni.js"></script>
49 <script type="text/javaScript" src="tridenitabulky.js"></script>
50 <title>' . $nadpis . '</title>
53 <h1>' . $nadpis . '</h1>');
55 html('<p id="prihlasenyUzivatel">Uživatel: ' . $_SESSION['login'] . '</p>');
59 /** $zobrazitNabidku = zobrazí postranní menu */
60 function zapati($zobrazitNabidku = true) {
61 if ($zobrazitNabidku) {
62 html('<h2 id="skrytyNadpisObsahu">Obsah</h2>
65 <a href="index.php">Přehled</a>
68 <a href="moje_bugy.php">Moje bugy</a>
71 <a href="nahlasit_bug.php">Nahlásit bug</a>
74 <a href="hledani.php">Hledání</a>
77 <a href="sprava.php">Správa</a>
80 <a href="odhlaseni.php">Odhlášení</a>
94 function htmlInfoKomentar() {
95 global $zacatek, $mimeTyp, $NASTAVENI;
96 if ($NASTAVENI['ladiciKomentare']) {
97 $konec = getMicrotime();
99 html('Stránka: ' . $_SERVER['REQUEST_URI']);
100 html('Klient: ' . $_SERVER['REMOTE_ADDR']);
101 html('MIME: ' . $mimeTyp);
102 html("Začátek zpracování: $zacatek");
103 html("Konec zpracování: $konec");
104 html('Doba zpracování: ' . ($konec - $zacatek) . 's');
109 function htmlOdstavec($text) {
110 html("<p>\n$text\n</p>");
113 function html($text) {
115 /** Odstraníme odkazy, které vedou na tutéž stránku */
116 $text = str_replace(' href="' . $stranka . '"', '', $text);
121 function htmlZnacka($znacka, $text) {
122 html("<$znacka>$text</$znacka>");
125 function htmlTlacitkovyOdkaz($url, $text) {
126 html('<form action="' . $url . '"><fieldset><button>' . $text . '</button></fieldset></form>');
129 function escapuj($text, $delka = 256) {
130 $text = str_replace("\n", "[br]", $text);
131 $text = substr(mysql_escape_string(htmlspecialchars($text)), 0, $delka);
132 $text = str_replace("[br]", "<br>", $text);
133 //$retezec = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $retezec);
137 function htmlIkonaKontrolyIP () {
139 if ($NASTAVENI['kontrolovatIPadresu']) {
140 html('<img src="kontrola_ip.png" alt="Kontrola IP" title="Kontroluje se IP adresa"/>');
144 /** volá se na všech strákách, které vyžadují autorizaci (všechny kromě prihlaseni.php) */
145 function overPristup() {
148 if ($_SESSION['login'] == null || !isset($_SESSION['login']) || ($NASTAVENI['kontrolovatIPadresu'] && $_SERVER['REMOTE_ADDR'] != $_SESSION['ip_adresa_klienta'])) {
149 header("Location: prihlaseni.php");
154 /** volá se v prihlaseni.php */
155 function zkontrolujUzivatele($jmeno, $heslo) {
156 global $db, $NASTAVENI;
158 if ($NASTAVENI['hashovatHesla']) {
159 $dotaz = $db->prepare("SELECT * FROM bg_uzivatel WHERE login = ? AND sha1(concat(?, heslo)) = ?");
160 $dotaz->bindParam(1, $jmeno);
161 $dotaz->bindParam(2, $_SESSION['hesloBordel']);
162 $dotaz->bindParam(3, $heslo);
164 $r = $dotaz->fetchAll();
166 $dotaz = $db->prepare("SELECT * FROM bg_uzivatel WHERE login = ? AND heslo = sha1(?)");
167 $dotaz->bindParam(1, $jmeno);
168 $dotaz->bindParam(2, $heslo);
170 $r = $dotaz->fetchAll();
174 $_SESSION['login'] = $x['login'];
175 $_SESSION['ip_adresa_klienta'] = $_SERVER['REMOTE_ADDR'];
179 $_SESSION['login'] = null;
184 function sqlZjistiHodnotu($dotaz, $parametry = null) {
187 $dotaz = $db->prepare($dotaz);
189 if ($parametry != null) {
190 for($i = 0; $i < count($parametry); $i++) {
191 $dotaz->bindParam($i+1, $parametry[$i]);
196 $r = $dotaz->fetchAll();
204 function sqlDotaz($dotaz, $parametry = null) {
207 $dotaz = $db->prepare($dotaz);
209 if ($parametry != null) {
210 for($i = 0; $i < count($parametry); $i++) {
211 $dotaz->bindParam($i+1, $parametry[$i]);
216 $r = $dotaz->fetchAll();
219 } catch (PDOException $e) {
220 logujChybu("sqlDotaz($dotaz)");
224 function getMicrotime(){
225 list($usec, $sec) = explode(" ",microtime());
226 return ((float)$usec + (float)$sec);
229 function sqlHtmlTabulka($dotaz, $hlavicky = null, $parametry = null, $htmlID = null) {
232 $dotaz = $db->prepare($dotaz);
234 if ($parametry != null) {
235 for($i = 0; $i < count($parametry); $i++) {
236 $dotaz->bindParam($i+1, $parametry[$i]);
241 $r = $dotaz->fetchAll();
243 if ($htmlID == null) {
244 $htmlID = getMicrotime();
248 html('<table class="sortable" id="tabulka' . $htmlID . '">');
249 if ($hlavicky != null) {
251 foreach ($hlavicky as $h) {
252 htmlZnacka('td', $h);
254 html('</tr></thead>');
255 $pocet = count($hlavicky);
263 if ($pocet == null) {
264 /** děleno 2 protože jsou tam číselné i řetězcové klíče */
265 $pocet = count($x) / 2;
268 for ($i = 0; $i < $pocet; $i++) {
269 htmlZnacka('td', $x[$i]);
273 html('</tbody></table>');
277 function htmlTabulkaUzivatelu() {
278 sqlHtmlTabulka('SELECT concat(concat(concat(concat(\'<a href="uzivatel.php?login=\',login),\'">\'),login),\'</a>\'), jmeno, prijmeni, email FROM bg_uzivatel', array('Login', 'Jméno', 'Příjmení', 'e-mail'));
281 function htmlTabulkaProduktu() {
282 sqlHtmlTabulka('SELECT kod, nazev, popis FROM bg_produkt', array('Kód', 'Název', 'Popis'));
286 function sqlHtmlTabulkaBugu($r) {
288 $htmlID = getMicrotime();
289 html('<table class="sortable" id="tabulka' . $htmlID . '">');
291 htmlZnacka('td', 'Číslo');
292 htmlZnacka('td', 'Název');
293 htmlZnacka('td', 'Zadavatel');
294 htmlZnacka('td', 'Řešitel');
295 //htmlZnacka('td', 'Datum');
296 html('</tr></thead><tbody>');
300 htmlZnacka('td', '<a href="bug.php?id=' . $x['id'] . '">' . $x['id'] . '</a>');
301 htmlZnacka('td', $x['nazev']);
302 htmlZnacka('td', odkazNaUzivatele($x['zadavatel']));
303 htmlZnacka('td', odkazNaUzivatele($x['resitel']));
304 //htmlZnacka('td', $x['datum']);
307 html('</tbody></table>');
309 htmlOdstavec('Nic nenalezeno.');
313 function odkazNaUzivatele($uzivatel) {
314 if ($uzivatel == '-') {
317 return '<a href="uzivatel.php?login=' . $uzivatel . '">' . $uzivatel . '</a>';
321 function logujChybu($popis, $chyba = null) {
322 htmlOdstavec($popis);