function data_href: new (optional) argument $details
[www.energie.vellum.cz.git] / common.php
index 89ead4d..59a765e 100644 (file)
@@ -10,7 +10,7 @@
        $cvs_id_split=split(" ",$cvs_id);
        if (count($cvs_id_split)==8) {
                $cvs_id_split[1]="<a href=\"$viewcvs\">".$cvs_id_split[1]."</a>";
-               $cvs_id_split[5]="<a href=\"mailto:".$cvs_id_split[5]."@".$HTTP_SERVER_VARS["HTTP_HOST"]."\">".$cvs_id_split[5]."</a>";
+               $cvs_id_split[5]="<a href=\"mailto:".$cvs_id_split[5]."@$cvs_mailhost\">".$cvs_id_split[5]."</a>";
                }
        $cvs_id_html=join(" ",$cvs_id_split);
 
        if (isset($detect_js) && !$have_js)
                $head.='<script type="text/javascript" src="have_js.js"></script>'."\n";
 
-       $user_agent=$HTTP_SERVER_VARS["HTTP_USER_AGENT"];
+       $user_agent=(!isset($HTTP_SERVER_VARS["HTTP_USER_AGENT"]) ? "" : $HTTP_SERVER_VARS["HTTP_USER_AGENT"]);
        if (ereg("[[:<:]]MSIE ([0-9]+)\\.",$user_agent,$msie_major_a))
                $msie_major=$msie_major_a[1];
        else if (ereg("[[:<:]]Mozilla/([0-9]+)\\.",$user_agent,$mozilla_major_a))
                $mozilla_major=$mozilla_major_a[1];
 
-       $have_css=!ereg("Mozilla/4\\.[5-7]",$user_agent);
+       $have_style=!isset($mozilla_major) || $mozilla_major!=4;
+       $have_css=true; // doesn't hurt anybody AFAIK
 
 function addpercents($url)
 {
@@ -42,7 +43,8 @@ function fatal($msg="UNKNOWN")
 {
        global $admin_mail;
 
-       print("\n<br /><h1 class=\"error\">Nastala chyba pøi zpracování: $msg!</h1>\n"
+       heading(false/*title*/); // it is always safe
+       print("\n<p>&nbsp;<br />&nbsp;</p><hr /><h1 class=\"error\">Nastala chyba pøi zpracování: $msg!</h1>\n"
                        ."<p>Mù¾ete tento problém nahlásit <a href=\"mailto:$admin_mail\">správci tohoto webu</a>.</p>\n");
        footer();
 }
@@ -69,7 +71,7 @@ function prepvar($name,$regex=".",$require=true)
        if (!isset($v))
                return(0);
 
-       $globals[$name]=$v;
+       $GLOBALS[$name]=$v;
        return($v);
 }
 
@@ -96,7 +98,7 @@ function db_query($query)
        return($r);
 }
 
-function db_row($query)
+function db_row($query) // pure indexes
 {
        $q=db_query($query);
        $r=mysql_fetch_row($q);
@@ -104,6 +106,14 @@ function db_row($query)
        return($r);
 }
 
+function db_array($query) // field-names associative
+{
+       $q=db_query($query);
+       $r=mysql_fetch_array($q);
+       mysql_free_result($q);
+       return($r);
+}
+
 function db_item($query)
 {
        $row=db_row($query);
@@ -149,7 +159,10 @@ function month_a($year,$month,$month_last=0,$sequential=0)
 
 function img_size($width,$height)
 {
-       return("style=\"border:0;width:${width}px;height:${height}px\" width=\"$width\" height=\"$height\"");
+       global $have_style;
+
+       return(($have_style ? "style=\"border:0;width:${width}px;height:${height}px\"" : "border=\"0\"")
+                       ." width=\"$width\" height=\"$height\"");
 }
 
 function img($file,$alt,$attrs="")
@@ -206,11 +219,22 @@ function title_month($year,$month)
 
 function title_icons_table_month($year,$month,$month_last,$sequential)
 {
+       global $tb_clanek;
+
        $month_a=month_a($year,$month,$month_last,$sequential);
-       print("<a href=\"title.php?year=$year&amp;month=$month\">"
-                               .img($month_a["icon"],"titulní stránka ".$month_a["name_full"])."</a><br />"
-                       ."<a href=\"obsah.php?year=$year&amp;month=$month\">obsah ".$month_a["name"]."</a>"
-                       );
+       print("<table border=\"0\">"
+                       ."<tr><th align=\"center\">".$month_a["name"]."</th></tr>\n"
+                       ."<tr><td align=\"center\" valign=\"top\">"
+                               .img($month_a["icon"],"titulní stránka ".$month_a["name_full"])."</td></tr>\n"
+                       ."<tr><td align=\"left\" valign=\"top\" class=\"nowrap\">\n"
+                               ."&bull;&nbsp;<a href=\"title.php?year=$year&amp;month=$month\">titulní strana</a><br />\n"
+                               ."&bull;&nbsp;<a href=\"obsah.php?year=$year&amp;month=$month\">obsah</a><br />\n");
+       $result=db_query("select name,id from $tb_clanek where year=$year and month=$month order by id");
+       while ($row=mysql_fetch_array($result))
+               print("&bull;&nbsp;<a href=\"clanek.php?year=$year&amp;month=$month&amp;id=".$row["id"]."\">"
+                               .htmlspecialchars($row["name"])."</a><br />\n");
+       mysql_free_result($result);
+       print("</td></tr></table>");
 }
 
 function title_icons($year,$month)
@@ -218,7 +242,7 @@ function title_icons($year,$month)
        global $tb_obsah;
 
        print("<h2>"
-               .(isset($year) ? "<a name=\"year_$year\">" : "")
+               .(isset($year) ? "<a id=\"year_$year\">" : "")
                .title_name(&$year,&$month)
                .(isset($year) ? "</a>" : "")
                ."</h2>\n");
@@ -229,7 +253,7 @@ function title_icons($year,$month)
                        .(isset($year) && isset($month) ? " and" : "")
                        .(isset($month) ?   " month=$month" : "")
                        ." order by year,month");
-       $split=6;
+       $split=4;
 
        // $year variable changes its meaning here!!!
        if (isset($year))
@@ -247,7 +271,7 @@ function title_icons($year,$month)
 
                        $year=$row["year"];
                        print(""
-                                       .(!isset($wanted_year) ? "<p><a name=\"year_$year\">&nbsp;</a></p>" : "")
+                                       .(!isset($wanted_year) ? "<p><a id=\"year_$year\">&nbsp;</a></p>" : "")
                                        ."<table border=\"0\" width=\"100%\"><tr><td align=\"center\"><table border=\"1\" cellpadding=\"5\">\n"
                                        ."<tr><th colspan=\"$split\">Roèník $year (<a href=\"obsah.php?year=$year\">obsahy èísel</a>)</th></tr>\n"
                                        );
@@ -266,7 +290,7 @@ function title_icons($year,$month)
                        print("<td></td>");
                        $month++;
                        }
-               print("<td align=\"center\""
+               print("<td align=\"center\" valign=\"top\""
                                .($row["month_last"]!=$row["month"] ? " colspan=\"".($row["month_last"]+1-$row["month"])."\"" : "")
                                .">");
                title_icons_table_month($year,$row["month"]+1,$row["month_last"]+1,$row["sequential"]);
@@ -300,7 +324,46 @@ function image_supported($mime)
        return(false);
 }
 
-function footer()
+// PHP dirname() is broken: ("/1/2/3"=>"/1/2", "/1"->"/")
+function dirnameslashed($filename)
+{
+       $r=dirname($filename);
+       if (substr($r,-1)!="/")
+               $r.="/";
+       return($r);
+}
+
+function usersize($size)
+{
+       $suffix_a=array("","k","M","G","T");
+       while ($size>=1000 && sizeof($suffix_a)>=2) {
+               $size/=1000;
+               array_shift($suffix_a);
+               }
+       return(round($size)." ".$suffix_a[0]."B");
+}
+
+function data_href($filename,$text,$details="")
+{
+       return("<a href=\"$filename\">$text (".usersize(filesize($filename))."$details)</a>");
+}
+
+function img_href($filename,$text)
+{
+       list($width,$height)=getimagesize($filename);
+       return(data_href($filename,$text,", ${width}x${height} bodù"));
+}
+
+function footer_img($url,$text,$size)
+{
+       global $footer_LOCAL;
+       if (!isset($footer_LOCAL))
+               return("<img src=\"$url\" $size alt=\"$text\" />");
+       else
+               return($text);
+}
+
+function footer($delimit=true)
 {
        // deadlock prevention:
        global $footer_passed;
@@ -309,20 +372,23 @@ function footer()
        $footer_passed=true;
 
        global $cvs_id_html,$viewcvs,$viewcvs,$HTTP_SERVER_VARS;
+       if ($delimit)
+               print("<p>&nbsp;</p>\n");
+       $uri="uri=".addpercents("http://".$HTTP_SERVER_VARS["HTTP_HOST"].$HTTP_SERVER_VARS["REQUEST_URI"]);
        ?>
-<p>&nbsp;</p>
 <hr />
 <table border="0" width="100%">
 <tr><td align="left"><span class="cvs-id"><?php print($cvs_id_html); ?></span></td><td align="right"><a
-       href="http://validator.w3.org/check/referer"><img src="http://www.w3.org/Icons/valid-xhtml10"
-               <?php print(img_size(88,31)); ?> alt="Valid XHTML 1.0!" /></a><a
-       href="http://jigsaw.w3.org/css-validator/validator?warning=2&amp;profile=css2&amp;uri=<?php
-               print(addpercents("http://".$HTTP_SERVER_VARS["HTTP_HOST"].$HTTP_SERVER_VARS["REQUEST_URI"]));
-               ?>"><img src="http://jigsaw.w3.org/css-validator/images/vcss"
-               <?php print(img_size(88,31)); ?> alt="Valid CSS!" /></a></td></tr>
+       href="http://validator.w3.org/check?<?php
+               print($uri); ?>"><?php
+                               print footer_img("http://www.w3.org/Icons/valid-xhtml11","Valid XHTML 1.1!",img_size(88,31));
+                               ?></a><a href="http://jigsaw.w3.org/css-validator/validator?warning=2&amp;profile=css2&amp;<?php
+               print($uri); ?>"><?php
+                               print footer_img("http://jigsaw.w3.org/css-validator/images/vcss","Valid CSS!",img_size(88,31));
+                               ?></a></td></tr>
 </table>
 </body></html>
-       <?php
+<?php
        exit();
 }
 
@@ -335,25 +401,39 @@ function no_cache()
        header("Pragma: no-cache");                                // HTTP/1.0
 }
 
-function heading()
+function heading($title=false)
 {
-       global $msie_major,$mozilla_major,$title_tail,$head_css,$have_css,$head;
+       global $HTTP_SERVER_VARS,$msie_major,$mozilla_major,$title_tail,$head_css,$have_css,$head,$heading_done,$title_prefix,$force_charset;
 
-       header("Content-type: text/html; charset=iso-8859-2");
-       if (!isset($msie_major) || $msie_major>=4)
-               print('<?xml version="1.0" encoding="iso-8859-2"?>'."\n");
+       if (isset($heading_done))
+               return;
+       $heading_done=1;
+
+       if (isset($force_charset))
+               $client_charset=$force_charset;
+       else
+               $client_charset=(!isset($HTTP_SERVER_VARS["CLIENT_CHARSET"]) ? "iso-8859-2" : $HTTP_SERVER_VARS["CLIENT_CHARSET"]);
+       // When "CLIENT_CHARSET" is set we MUST NOT explicitely specify our "charset"
+       header("Content-type: text/html".(isset($HTTP_SERVER_VARS["CLIENT_CHARSET"]) ? "" : "; charset=$client_charset"));
+       header("Content-Style-Type: text/css");
+       if (!isset($msie_major) || $msie_major>=4) {
+               print('<?xml version="1.0" encoding="'.$client_charset.'"?>'."\n");
+               }
 ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
-<head><title>Energie &amp; peníze<?php
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs">
+<head><?php
+       print("<title>$title_prefix");
        if (isset($title_tail))
-               print(": $title_tail");
+               print(": ".htmlspecialchars($title_tail));
        print("</title>\n");
        if ($have_css) {
 ?><style type="text/css"><!--
-.cvs-id  { font-family: monospace; }
-.error   { color: red;    background-color: transparent; }
-.quote   { font-family: monospace; }
+.cvs-id   { font-family: monospace; }
+.error    { color: red;   background-color: transparent; }
+.quote    { font-family: monospace; }
+.nowrap   { white-space: nowrap; }
+.centered { text-align: center; }
 body {
                background-color: black;
                color: white;
@@ -370,7 +450,11 @@ h1,h2    { color: yellow; background-color: transparent; }
                print($head);
        print("</head><body");
        if (isset($mozilla_major) && $mozilla_major==4)
-               print(" bgcolor=\"black\" text=\"white\" link=\"cyan\" vlink=\"teal\"");
+               print(" bgcolor=\"black\" text=\"white\" link=\"aqua\" vlink=\"teal\"");
        print(">\n");
+       if ($title)
+               print("<h1 class=\"centered\">"
+                               .img("img/eap-title.".(image_supported("image/png") ? "png" : "gif"),"Energie & Peníze")
+                               ."</h1>\n");
 }
 ?>