<?php

require('nastaveni.php');

$zacatek = getMicrotime();

function exception_handler($exception) {
  html("Došlo k chybě: " . $exception->getMessage());
  //header("Location: chyba_db.php");
  exit();
}

set_exception_handler('exception_handler');

session_set_cookie_params(0, $NASTAVENI['cookie_cesta']);
session_start();


$strankaP = split('/', $_SERVER['REQUEST_URI']);
$stranka = $strankaP[count($strankaP)-1];


if (empty($_SERVER['HTTP_ACCEPT'])) {
	$mimeTyp = 'application/xhtml+xml';
} else {
	$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' );
}
header("Content-Type: $mimeTyp");
//header("Content-Type: text/html");
//header("Content-Type: application/xhtml+xml");

/** $nadpis = titulek stránky + h1 */
function zahlavi($nadpis, $autorizace = true) {
	global $mimeTyp;
	if ($autorizace) {
		overPristup();
	}
	
	html('<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
  <head>
    <meta http-equiv="content-language" content="cs"/>
    <meta http-equiv="content-type" content="' . $mimeTyp . '; charset=UTF-8"/>
    <meta name="GOOGLEBOT" content="NOINDEX, NOFOLLOW"/>
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW"/>
    <link href="styl.css" type="text/css" rel="StyleSheet"/>
    <script type="text/javaScript" src="hlavni.js"></script>
    <script type="text/javaScript" src="tridenitabulky.js"></script>
    <title>' . $nadpis . '</title>
  </head>
  <body>  
<h1>' . $nadpis . '</h1>');
if ($autorizace) {
html('<p id="prihlasenyUzivatel">Uživatel: ' . $_SESSION['login']  . '</p>');
}
}

/** $zobrazitNabidku = zobrazí postranní menu */
function zapati($zobrazitNabidku = true) {
	if ($zobrazitNabidku) {
		html('<h2 id="skrytyNadpisObsahu">Obsah</h2>
<ul id="obsah">
<li>
<a href="index.php">Přehled</a>
</li>
<li>
<a href="moje_bugy.php">Moje bugy</a>
</li>
<li>
<a href="nahlasit_bug.php">Nahlásit bug</a>
</li>
<li>
<a href="hledani.php">Hledání</a>
</li>
<li>
<a href="sprava.php">Správa</a>
</li>
<li>
<a href="odhlaseni.php">Odhlášení</a>
</li>	
</ul>
</body>');
htmlInfoKomentar();
html('</html>');
	} else {
		html('</body>');
		htmlInfoKomentar();
		html('</html>');
	}

}

function htmlInfoKomentar() {	
	global $zacatek, $mimeTyp, $NASTAVENI;
	if ($NASTAVENI['ladiciKomentare']) {
		$konec = getMicrotime();
		html('<!--');
		html('Stránka: ' . $_SERVER['REQUEST_URI']);
		html('Klient:  ' . $_SERVER['REMOTE_ADDR']);
		html('MIME:    ' . $mimeTyp);
		html("Začátek zpracování: $zacatek");
		html("Konec zpracování:   $konec");
		html('Doba zpracování:    ' . ($konec - $zacatek) . 's');	
		html('-->');
	}
}

function htmlOdstavec($text) {
	html("<p>\n$text\n</p>");
}

function html($text) {	
	global $stranka;	
	/** Odstraníme odkazy, které vedou na tutéž stránku */
	$text = str_replace(' href="' . $stranka . '"', '', $text);
	
	echo("$text\n");
}

function htmlZnacka($znacka, $text) {
	html("<$znacka>$text</$znacka>");
}

function htmlTlacitkovyOdkaz($url, $text) {
	html('<form action="' . $url . '"><fieldset><button>' . $text . '</button></fieldset></form>');
}

function escapuj($text, $delka = 256) {
	$text = str_replace("\n", "[br]", $text);
	$text = substr(mysql_escape_string(htmlspecialchars($text)), 0, $delka);
	$text = str_replace("[br]", "<br>", $text);
	//$retezec = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $retezec);
	return $text;
}

function htmlIkonaKontrolyIP () {
	global $NASTAVENI;
	if ($NASTAVENI['kontrolovatIPadresu']) {
		html('<img src="kontrola_ip.png" alt="Kontrola IP" title="Kontroluje se IP adresa"/>');
	}
}

/** volá se na všech strákách, které vyžadují autorizaci (všechny kromě  prihlaseni.php) */
function overPristup() {
	global $NASTAVENI;
	
	if ($_SESSION['login'] == null || !isset($_SESSION['login']) || ($NASTAVENI['kontrolovatIPadresu'] && $_SERVER['REMOTE_ADDR'] != $_SESSION['ip_adresa_klienta'])) {
		header("Location: prihlaseni.php");
		exit();
	}
}

/** volá se v prihlaseni.php */
function zkontrolujUzivatele($jmeno, $heslo) {
	global $db, $NASTAVENI;
	
	if ($NASTAVENI['hashovatHesla']) {
		$dotaz = $db->prepare("SELECT * FROM bg_uzivatel WHERE login = ? AND sha1(concat(?, heslo)) = ?");
		$dotaz->bindParam(1, $jmeno);
		$dotaz->bindParam(2, $_SESSION['hesloBordel']);
		$dotaz->bindParam(3, $heslo);
		$dotaz->execute();	
		$r = $dotaz->fetchAll();
	} else {
		$dotaz = $db->prepare("SELECT * FROM bg_uzivatel WHERE login = ? AND heslo = sha1(?)");
		$dotaz->bindParam(1, $jmeno);		
		$dotaz->bindParam(2, $heslo);
		$dotaz->execute();	
		$r = $dotaz->fetchAll();		
	}
	
	foreach ($r as $x) {
		$_SESSION['login'] = $x['login'];
		$_SESSION['ip_adresa_klienta'] = $_SERVER['REMOTE_ADDR'];
		return true;
	}
	
	$_SESSION['login'] = null;
	return false;
}


function sqlZjistiHodnotu($dotaz, $parametry = null) {
	global $db;
	
	$dotaz = $db->prepare($dotaz);
	
	if ($parametry != null) {
		for($i = 0; $i < count($parametry); $i++) {
			$dotaz->bindParam($i+1, $parametry[$i]);
		}
	}
	
	$dotaz->execute();
	$r = $dotaz->fetchAll();
	
	foreach ($r as $x) {
		return $x[0];		
	}
	return null;
}

function sqlDotaz($dotaz, $parametry = null) {
	global $db;
	try {
		$dotaz = $db->prepare($dotaz);
	
		if ($parametry != null) {
			for($i = 0; $i < count($parametry); $i++) {
				$dotaz->bindParam($i+1, $parametry[$i]);
			}
		}
	
		$dotaz->execute();
		$r = $dotaz->fetchAll();
	
		return $r;
	} catch (PDOException $e) {
		logujChybu("sqlDotaz($dotaz)");		
	}
}

function getMicrotime(){
   list($usec, $sec) = explode(" ",microtime());
   return ((float)$usec + (float)$sec);
} 

function sqlHtmlTabulka($dotaz, $hlavicky = null, $parametry = null, $htmlID = null) {
	global $db;
	
	$dotaz = $db->prepare($dotaz);
	
	if ($parametry != null) {
		for($i = 0; $i < count($parametry); $i++) {
			$dotaz->bindParam($i+1, $parametry[$i]);
		}
	}
	
	$dotaz->execute();
	$r = $dotaz->fetchAll();
	
	if ($htmlID == null) {
		$htmlID = getMicrotime();
	}
	
	
	html('<table class="sortable" id="tabulka' . $htmlID . '">');	
	if ($hlavicky != null) {
		html('<thead><tr>');
		foreach ($hlavicky as $h) {
			htmlZnacka('td', $h);
		}
		html('</tr></thead>');
		$pocet = count($hlavicky);
	} else {
		$pocet = null;
	}
	html('<tbody>');	
		
	foreach ($r as $x) {
		html('<tr>');
		if ($pocet == null) {
			/** děleno 2 protože jsou tam číselné i řetězcové klíče */
			$pocet = count($x) / 2;
		}
		
		for ($i = 0; $i < $pocet; $i++) {			
			htmlZnacka('td', $x[$i]);
		}
		html('</tr>');
	}	
	html('</tbody></table>');
}


function htmlTabulkaUzivatelu() {
	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'));
}

function htmlTabulkaProduktu() {
	sqlHtmlTabulka('SELECT kod, nazev, popis FROM bg_produkt', array('Kód', 'Název', 'Popis'));
}


function sqlHtmlTabulkaBugu($r) {		
	if (count($r) > 0) {
		$htmlID = getMicrotime();
		html('<table class="sortable" id="tabulka' . $htmlID . '">');	
		html('<thead><tr>');
		htmlZnacka('td', 'Číslo');
		htmlZnacka('td', 'Název');
		htmlZnacka('td', 'Zadavatel');
		htmlZnacka('td', 'Řešitel');
		//htmlZnacka('td', 'Datum');
		html('</tr></thead><tbody>');	
		
		foreach ($r as $x) {
			html('<tr>');		
			htmlZnacka('td', '<a href="bug.php?id=' . $x['id'] . '">' . $x['id'] . '</a>');
			htmlZnacka('td', $x['nazev']);
			htmlZnacka('td', odkazNaUzivatele($x['zadavatel']));
			htmlZnacka('td', odkazNaUzivatele($x['resitel']));
			//htmlZnacka('td', $x['datum']);
			html('</tr>');
		}	
		html('</tbody></table>');
	} else {
		htmlOdstavec('Nic nenalezeno.');
	}
}

function odkazNaUzivatele($uzivatel) {
	if ($uzivatel == '-') {
		return '-';
	} else {
		return '<a href="uzivatel.php?login=' . $uzivatel . '">' . $uzivatel . '</a>';
	}
}

function logujChybu($popis, $chyba = null) {
	htmlOdstavec($popis);
}

?>
