php/heslo/lib/funkce.inc.php
author František Kučera <franta-hg@frantovo.cz>
Tue, 05 May 2009 17:08:09 +0200
changeset 3 74a6a363ff9e
child 4 e6abafe31efb
permissions -rwxr-xr-x
Převzatá struktura z BG
http://sorry.vse.cz/~xkucf03/skola.php
     1 <?php
     2 
     3 require('nastaveni.php');
     4 
     5 $zacatek = getMicrotime();
     6 
     7 function exception_handler($exception) {
     8   html("Došlo k chybě: " . $exception->getMessage());
     9   //header("Location: chyba_db.php");
    10   exit();
    11 }
    12 
    13 set_exception_handler('exception_handler');
    14 
    15 session_set_cookie_params(0, $NASTAVENI['cookie_cesta']);
    16 session_start();
    17 
    18 
    19 $strankaP = split('/', $_SERVER['REQUEST_URI']);
    20 $stranka = $strankaP[count($strankaP)-1];
    21 
    22 
    23 if (empty($_SERVER['HTTP_ACCEPT'])) {
    24 	$mimeTyp = 'application/xhtml+xml';
    25 } else {
    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' );
    27 }
    28 header("Content-Type: $mimeTyp");
    29 //header("Content-Type: text/html");
    30 //header("Content-Type: application/xhtml+xml");
    31 
    32 /** $nadpis = titulek stránky + h1 */
    33 function zahlavi($nadpis, $autorizace = true) {
    34 	global $mimeTyp;
    35 	if ($autorizace) {
    36 		overPristup();
    37 	}
    38 	
    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">
    42   <head>
    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>
    51   </head>
    52   <body>  
    53 <h1>' . $nadpis . '</h1>');
    54 if ($autorizace) {
    55 html('<p id="prihlasenyUzivatel">Uživatel: ' . $_SESSION['login']  . '</p>');
    56 }
    57 }
    58 
    59 /** $zobrazitNabidku = zobrazí postranní menu */
    60 function zapati($zobrazitNabidku = true) {
    61 	if ($zobrazitNabidku) {
    62 		html('<h2 id="skrytyNadpisObsahu">Obsah</h2>
    63 <ul id="obsah">
    64 <li>
    65 <a href="index.php">Přehled</a>
    66 </li>
    67 <li>
    68 <a href="moje_bugy.php">Moje bugy</a>
    69 </li>
    70 <li>
    71 <a href="nahlasit_bug.php">Nahlásit bug</a>
    72 </li>
    73 <li>
    74 <a href="hledani.php">Hledání</a>
    75 </li>
    76 <li>
    77 <a href="sprava.php">Správa</a>
    78 </li>
    79 <li>
    80 <a href="odhlaseni.php">Odhlášení</a>
    81 </li>	
    82 </ul>
    83 </body>');
    84 htmlInfoKomentar();
    85 html('</html>');
    86 	} else {
    87 		html('</body>');
    88 		htmlInfoKomentar();
    89 		html('</html>');
    90 	}
    91 
    92 }
    93 
    94 function htmlInfoKomentar() {	
    95 	global $zacatek, $mimeTyp, $NASTAVENI;
    96 	if ($NASTAVENI['ladiciKomentare']) {
    97 		$konec = getMicrotime();
    98 		html('<!--');
    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');	
   105 		html('-->');
   106 	}
   107 }
   108 
   109 function htmlOdstavec($text) {
   110 	html("<p>\n$text\n</p>");
   111 }
   112 
   113 function html($text) {	
   114 	global $stranka;	
   115 	/** Odstraníme odkazy, které vedou na tutéž stránku */
   116 	$text = str_replace(' href="' . $stranka . '"', '', $text);
   117 	
   118 	echo("$text\n");
   119 }
   120 
   121 function htmlZnacka($znacka, $text) {
   122 	html("<$znacka>$text</$znacka>");
   123 }
   124 
   125 function htmlTlacitkovyOdkaz($url, $text) {
   126 	html('<form action="' . $url . '"><fieldset><button>' . $text . '</button></fieldset></form>');
   127 }
   128 
   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);
   134 	return $text;
   135 }
   136 
   137 function htmlIkonaKontrolyIP () {
   138 	global $NASTAVENI;
   139 	if ($NASTAVENI['kontrolovatIPadresu']) {
   140 		html('<img src="kontrola_ip.png" alt="Kontrola IP" title="Kontroluje se IP adresa"/>');
   141 	}
   142 }
   143 
   144 /** volá se na všech strákách, které vyžadují autorizaci (všechny kromě  prihlaseni.php) */
   145 function overPristup() {
   146 	global $NASTAVENI;
   147 	
   148 	if ($_SESSION['login'] == null || !isset($_SESSION['login']) || ($NASTAVENI['kontrolovatIPadresu'] && $_SERVER['REMOTE_ADDR'] != $_SESSION['ip_adresa_klienta'])) {
   149 		header("Location: prihlaseni.php");
   150 		exit();
   151 	}
   152 }
   153 
   154 /** volá se v prihlaseni.php */
   155 function zkontrolujUzivatele($jmeno, $heslo) {
   156 	global $db, $NASTAVENI;
   157 	
   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);
   163 		$dotaz->execute();	
   164 		$r = $dotaz->fetchAll();
   165 	} else {
   166 		$dotaz = $db->prepare("SELECT * FROM bg_uzivatel WHERE login = ? AND heslo = sha1(?)");
   167 		$dotaz->bindParam(1, $jmeno);		
   168 		$dotaz->bindParam(2, $heslo);
   169 		$dotaz->execute();	
   170 		$r = $dotaz->fetchAll();		
   171 	}
   172 	
   173 	foreach ($r as $x) {
   174 		$_SESSION['login'] = $x['login'];
   175 		$_SESSION['ip_adresa_klienta'] = $_SERVER['REMOTE_ADDR'];
   176 		return true;
   177 	}
   178 	
   179 	$_SESSION['login'] = null;
   180 	return false;
   181 }
   182 
   183 
   184 function sqlZjistiHodnotu($dotaz, $parametry = null) {
   185 	global $db;
   186 	
   187 	$dotaz = $db->prepare($dotaz);
   188 	
   189 	if ($parametry != null) {
   190 		for($i = 0; $i < count($parametry); $i++) {
   191 			$dotaz->bindParam($i+1, $parametry[$i]);
   192 		}
   193 	}
   194 	
   195 	$dotaz->execute();
   196 	$r = $dotaz->fetchAll();
   197 	
   198 	foreach ($r as $x) {
   199 		return $x[0];		
   200 	}
   201 	return null;
   202 }
   203 
   204 function sqlDotaz($dotaz, $parametry = null) {
   205 	global $db;
   206 	try {
   207 		$dotaz = $db->prepare($dotaz);
   208 	
   209 		if ($parametry != null) {
   210 			for($i = 0; $i < count($parametry); $i++) {
   211 				$dotaz->bindParam($i+1, $parametry[$i]);
   212 			}
   213 		}
   214 	
   215 		$dotaz->execute();
   216 		$r = $dotaz->fetchAll();
   217 	
   218 		return $r;
   219 	} catch (PDOException $e) {
   220 		logujChybu("sqlDotaz($dotaz)");		
   221 	}
   222 }
   223 
   224 function getMicrotime(){
   225    list($usec, $sec) = explode(" ",microtime());
   226    return ((float)$usec + (float)$sec);
   227 } 
   228 
   229 function sqlHtmlTabulka($dotaz, $hlavicky = null, $parametry = null, $htmlID = null) {
   230 	global $db;
   231 	
   232 	$dotaz = $db->prepare($dotaz);
   233 	
   234 	if ($parametry != null) {
   235 		for($i = 0; $i < count($parametry); $i++) {
   236 			$dotaz->bindParam($i+1, $parametry[$i]);
   237 		}
   238 	}
   239 	
   240 	$dotaz->execute();
   241 	$r = $dotaz->fetchAll();
   242 	
   243 	if ($htmlID == null) {
   244 		$htmlID = getMicrotime();
   245 	}
   246 	
   247 	
   248 	html('<table class="sortable" id="tabulka' . $htmlID . '">');	
   249 	if ($hlavicky != null) {
   250 		html('<thead><tr>');
   251 		foreach ($hlavicky as $h) {
   252 			htmlZnacka('td', $h);
   253 		}
   254 		html('</tr></thead>');
   255 		$pocet = count($hlavicky);
   256 	} else {
   257 		$pocet = null;
   258 	}
   259 	html('<tbody>');	
   260 		
   261 	foreach ($r as $x) {
   262 		html('<tr>');
   263 		if ($pocet == null) {
   264 			/** děleno 2 protože jsou tam číselné i řetězcové klíče */
   265 			$pocet = count($x) / 2;
   266 		}
   267 		
   268 		for ($i = 0; $i < $pocet; $i++) {			
   269 			htmlZnacka('td', $x[$i]);
   270 		}
   271 		html('</tr>');
   272 	}	
   273 	html('</tbody></table>');
   274 }
   275 
   276 
   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'));
   279 }
   280 
   281 function htmlTabulkaProduktu() {
   282 	sqlHtmlTabulka('SELECT kod, nazev, popis FROM bg_produkt', array('Kód', 'Název', 'Popis'));
   283 }
   284 
   285 
   286 function sqlHtmlTabulkaBugu($r) {		
   287 	if (count($r) > 0) {
   288 		$htmlID = getMicrotime();
   289 		html('<table class="sortable" id="tabulka' . $htmlID . '">');	
   290 		html('<thead><tr>');
   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>');	
   297 		
   298 		foreach ($r as $x) {
   299 			html('<tr>');		
   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']);
   305 			html('</tr>');
   306 		}	
   307 		html('</tbody></table>');
   308 	} else {
   309 		htmlOdstavec('Nic nenalezeno.');
   310 	}
   311 }
   312 
   313 function odkazNaUzivatele($uzivatel) {
   314 	if ($uzivatel == '-') {
   315 		return '-';
   316 	} else {
   317 		return '<a href="uzivatel.php?login=' . $uzivatel . '">' . $uzivatel . '</a>';
   318 	}
   319 }
   320 
   321 function logujChybu($popis, $chyba = null) {
   322 	htmlOdstavec($popis);
   323 }
   324 
   325 ?>