$HTTP_SERVER_VARS["HTTP_ACCEPT"] can be unset, cope with it
[www.energie.vellum.cz.git] / common.php
1 <?php // $Id$
2
3         error_reporting(E_ALL);
4
5         include("config.php");
6
7         // $viewcvs prepared by "config.php"
8         if ($viewcvs==$HTTP_SERVER_VARS["SCRIPT_NAME"])
9                 unset($viewcvs);
10         $cvs_id_split=split(" ",$cvs_id);
11         if (count($cvs_id_split)==8) {
12                 $cvs_id_split[1]="<a href=\"$viewcvs\">".$cvs_id_split[1]."</a>";
13                 $cvs_id_split[5]="<a href=\"mailto:".$cvs_id_split[5]."@".$HTTP_SERVER_VARS["HTTP_HOST"]."\">".$cvs_id_split[5]."</a>";
14                 }
15         $cvs_id_html=join(" ",$cvs_id_split);
16
17         $have_js=(isset($HTTP_GET_VARS["have_js"]) || isset($HTTP_POST_VARS["have_js"])
18                         ? "?have_js=1" : "");
19         if (isset($detect_js) && !$have_js)
20                 $head.='<script type="text/javascript" src="have_js.js"></script>'."\n";
21
22         $user_agent=$HTTP_SERVER_VARS["HTTP_USER_AGENT"];
23         if (ereg("[[:<:]]MSIE ([0-9]+)\\.",$user_agent,$msie_major_a))
24                 $msie_major=$msie_major_a[1];
25         else if (ereg("[[:<:]]Mozilla/([0-9]+)\\.",$user_agent,$mozilla_major_a))
26                 $mozilla_major=$mozilla_major_a[1];
27
28 function addpercents($url)
29 {
30         $r=$c="";
31         foreach(preg_split('//', $url, -1, PREG_SPLIT_NO_EMPTY) as $c)
32                 if (ereg("[a-zA-Z0-9]",$c))
33                         $r.=$c;
34                 else
35                         $r.=sprintf("%%%02X",ord($c));
36         return($r);
37 }
38
39 function fatal($msg="UNKNOWN")
40 {
41         global $admin_mail;
42
43         print("\n<br /><h1 class=\"error\">Nastala chyba pøi zpracování: $msg!</h1>\n"
44                         ."<p>Mù¾ete tento problém nahlásit <a href=\"mailto:$admin_mail\">správci tohoto webu</a>.</p>\n");
45         footer();
46 }
47
48 function prepvar($name,$regex=".",$require=true)
49 {
50         global $HTTP_GET_VARS,$HTTP_POST_VARS;
51
52              if (isset($HTTP_GET_VARS[$name]))
53                 $v=$HTTP_GET_VARS[$name];
54         else if (isset($HTTP_POST_VARS[$name]))
55                 $v=$HTTP_POST_VARS[$name];
56         else
57                 unset($v);
58
59         $name_html="Parametr <span class=\"quote\">".htmlspecialchars($name)."</span>";
60
61         $regex="^$regex\$";
62         if (isset($v) && !ereg($regex,$v))
63                 fatal("$name_html nevyhovuje po¾adovanému regexu <span class=\"quote\">".htmlspecialchars($regex)."</span>");
64         if (!isset($v) && $require)
65                 fatal("$name_html je vy¾adován");
66
67         if (!isset($v))
68                 return(0);
69
70         $globals[$name]=$v;
71         return($v);
72 }
73
74 function db_connect()
75 {
76         global $db_host,$db_user,$db_pwd,$db_name;
77         global $db_link;
78
79         if (isset($db_link))
80                 return;
81         if (!($db_link=mysql_connect($db_host,$db_user,$db_pwd)))
82                 fatal("MySQL connect: ".mysql_error());
83         if (!mysql_select_db($db_name,$db_link))
84                 fatal("MySQL database select: ".mysql_error());
85 }
86
87 function db_query($query)
88 {
89         global $db_link;
90
91         db_connect();
92         if (!($r=mysql_query($query,$db_link)))
93                 fatal("MySQL query \"$query\": ".mysql_error());
94         return($r);
95 }
96
97 function db_row($query)
98 {
99         $q=db_query($query);
100         $r=mysql_fetch_row($q);
101         mysql_free_result($q);
102         return($r);
103 }
104
105 function db_item($query)
106 {
107         $row=db_row($query);
108         return($row[0]);
109 }
110
111 function month_a($year,$month,$month_last=0)
112 {
113         global $tb_obsah;
114
115         if (!$month_last)
116                 $month_last=db_item("select month_last from $tb_obsah where year='$year' and month='$month'");
117         $month_full=sprintf("%02d".($month==$month_last ? "" : "-%02d"),$month,$month_last);
118
119         $r=array("year"=>$year,"month"=>$month,"month_last"=>$month_last,"month_full"=>$month_full,
120                         "name"=>"$month".($month==$month_last ? "" : "-$month_last")."/$year",
121                         "img" =>"img/eap-$year-${month_full}.jpeg",
122                         "icon"=>"img/eap-$year-${month_full}s.jpeg",
123                         );
124         return($r);
125 }
126
127 function img_size($width,$height)
128 {
129         return("style=\"border:0;width:${width}px;height:${height}px\" width=\"$width\" height=\"$height\"");
130 }
131
132 function img($file,$alt,$attrs="")
133 {
134         list($width,$height)=getimagesize($file);
135         return("<img src=\"$file\" alt=\"".htmlspecialchars($alt)."\" ".img_size($width,$height)
136                         .($attrs=="" ? "" : " ".$attrs)." />");
137 }
138
139 function gsm_banking()
140 {
141         return(img("img/sluzby_bankovni_pggsm.gif","Paegas GSM banking","class=\"img-align\""));
142 }
143
144 function price_a()
145 {
146         if (!($f=fopen("objednavka.js","r")))
147                 fatal("Nepodaøilo se naèíst seznam dostupného zbo¾í");
148         $r=array();
149         while (($s=fgets($f,0x1000))) {
150                 if (!($s=trim($s)))
151                         break;
152                 if (!(ereg("^want_price\\[ *'([^']*)'\\]=([0-9]*);$",$s,$matched)))
153                         continue;
154                 $r[$matched[1]]=$matched[2];
155                 }
156         fclose($f);
157         return($r);
158 }
159
160 function title_name($year,$month)
161 {
162              if (isset($year) && isset($month)) {
163                 $month_a=month_a($year,$month);
164                 return("Èíslo ".$month_a["name"]);
165                 }
166         else if (isset($year))
167                 return("Roèník $year");
168         else
169                 return("V¹echny roèníky");
170 }
171
172 function title_month($year,$month)
173 {
174   $month_a=month_a($year,$month);
175         return(""
176                         ."<table border=\"0\" width=\"100%\">\n"
177                         ."<tr><td align=\"center\"><table border=\"1\" cellpadding=\"10\">\n"
178                         ."<tr><td align=\"center\">".img($month_a["img"],"titulní stránka ".$month_a["name"])."</td></tr>\n"
179                         ."</table></td></tr>\n"
180                         ."</table>\n"
181                         );
182 }
183
184 function title_icons_table_month($year,$month,$month_last)
185 {
186         $month_a=month_a($year,$month,$month_last);
187         print("<a href=\"title.php?year=$year&amp;month=$month\">"
188                                 .img($month_a["icon"],"titulní stránka ".$month_a["name"])."</a><br />"
189                         ."<a href=\"obsah.php?year=$year&amp;month=$month\">obsah ".$month_a["name"]."</a>"
190                         );
191 }
192
193 function title_icons($year,$month)
194 {
195         global $tb_obsah;
196
197         print("<h2>"
198                 .(isset($year) ? "<a name=\"year_$year\">" : "")
199                 .title_name(&$year,&$month)
200                 .(isset($year) ? "</a>" : "")
201                 ."</h2>\n");
202
203         $result=db_query("select year,month,month_last from $tb_obsah"
204                         .(isset($year) || isset($month) ? " where" : "")
205                         .(isset($year ) ? " year=$year"   : "")
206                         .(isset($year) && isset($month) ? " and" : "")
207                         .(isset($month) ?   " month=$month" : "")
208                         ." order by year,month");
209         $split=6;
210
211         // $year variable changes its meaning here!!!
212         if (isset($year))
213                 $wanted_year=$year;
214         $year=0;
215
216         $fin_split="";
217         $fin_year="";
218         while ($row=mysql_fetch_array($result)) {
219                 $row["month"     ]--;
220                 $row["month_last"]--;
221
222                 if ($row["year"]!=$year) {
223                         print($fin_split.$fin_year);
224
225                         $year=$row["year"];
226                         print(""
227                                         .(!isset($wanted_year) ? "<p><a name=\"year_$year\">&nbsp;</a></p>" : "")
228                                         ."<table border=\"0\" width=\"100%\"><tr><td align=\"center\"><table border=\"1\" cellpadding=\"5\">\n"
229                                         ."<tr><th colspan=\"$split\">Roèník $year (<a href=\"obsah.php?year=$year\">obsahy èísel</a>)</th></tr>\n"
230                                         );
231                         $fin_year="</table></td></tr></table>\n";
232                         $fin_split="";
233                         $month=-1;
234                         $floor=-1;
235                         }
236                 while ($floor<floor($row["month"]/$split)) {
237                         print($fin_split."<tr>");
238                         $fin_split="</tr>\n";
239                         $floor++;
240                         $month=$floor*$split-1;
241                         }
242                 while ($month+1<$row["month"]) {
243                         print("<td></td>");
244                         $month++;
245                         }
246                 print("<td align=\"center\""
247                                 .($row["month_last"]!=$row["month"] ? " colspan=\"".($row["month_last"]+1-$row["month"])."\"" : "")
248                                 .">");
249                 title_icons_table_month($year,$row["month"]+1,$row["month_last"]+1);
250                 print("</td>\n");
251                 $month=$row["month_last"];
252                 }
253         mysql_free_result($result);
254         print($fin_split.$fin_year);
255 }
256
257 function title($year,$month)
258 {
259         if (isset($year) && isset($month))
260                 return(title_month( $year, $month));
261         else
262                 return(title_icons(&$year,&$month));
263 }
264
265 function image_supported($mime)
266 {
267         global $HTTP_SERVER_VARS;
268
269         if (!isset($HTTP_SERVER_VARS["HTTP_ACCEPT"]))
270                 return(false);
271         $exp=explode(",",$HTTP_SERVER_VARS["HTTP_ACCEPT"]);
272         while (($s=array_shift($exp))) {
273                 $s=trim(ereg_replace(";.*","",$s));
274                 if ($s==$mime)
275                         return(true);
276                 }
277         return(false);
278 }
279
280 function footer()
281 {
282         // deadlock prevention:
283         global $footer_passed;
284         if (isset($footer_passed))
285                 exit();
286         $footer_passed=true;
287
288         global $cvs_id_html,$viewcvs,$viewcvs,$HTTP_SERVER_VARS;
289         ?>
290 <p>&nbsp;</p>
291 <hr />
292 <table border="0" width="100%">
293 <tr><td align="left"><span class="cvs-id"><?php print($cvs_id_html); ?></span></td><td align="right"><a
294         href="http://validator.w3.org/check/referer"><img src="http://www.w3.org/Icons/valid-xhtml10"
295                 <?php print(img_size(88,31)); ?> alt="Valid XHTML 1.0!" /></a><a
296         href="http://jigsaw.w3.org/css-validator/validator?warning=2&amp;profile=css2&amp;uri=<?php
297                 print(addpercents("http://".$HTTP_SERVER_VARS["HTTP_HOST"].$HTTP_SERVER_VARS["REQUEST_URI"]));
298                 ?>"><img src="http://jigsaw.w3.org/css-validator/images/vcss"
299                 <?php print(img_size(88,31)); ?> alt="Valid CSS!" /></a></td></tr>
300 </table>
301 </body></html>
302         <?php
303         exit();
304 }
305
306 // Stolen from: php-manual.html#function.header
307 function no_cache()
308 {
309         header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");          // Date in the past
310         header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); // always modified
311         header("Cache-Control: no-cache, must-revalidate");        // HTTP/1.1
312         header("Pragma: no-cache");                                // HTTP/1.0
313 }
314
315 function heading()
316 {
317         global $msie_major,$mozilla_major,$title_tail,$head_css,$head;
318
319         header("Content-type: text/html; charset=iso-8859-2");
320         if (!isset($msie_major) || $msie_major>=4)
321                 print('<?xml version="1.0" encoding="iso-8859-2"?>'."\n");
322 ?>
323 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
324 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
325 <head><title>Energie &amp; peníze<?php
326         if (isset($title_tail))
327                 print(": $title_tail");
328 ?></title>
329 <style type="text/css"><!--
330 .cvs-id  { font-family: monospace; }
331 .error   { color: red;    background-color: transparent; }
332 .quote   { font-family: monospace; }
333 body {
334                 background-color: black;
335                 color: white;
336                 }
337 :link    { color: aqua;   background-color: transparent; }
338 :visited { color: teal;   background-color: transparent; }
339 h1,h2    { color: yellow; background-color: transparent; }
340 <?php
341         if (isset($head_css))
342                 print(trim($head_css)."\n");
343         print("--></style>\n");
344         if (isset($head))
345                 print($head);
346         print("</head><body");
347         if (isset($mozilla_major) && $mozilla_major==4)
348                 print(" bgcolor=\"black\" text=\"white\" link=\"cyan\" vlink=\"teal\"");
349         print(">\n");
350 }
351 ?>