#!/bin/bash
#
# Obsluhuje vystup diskuze
# (c) Petr Baudis <pasky@ji.cz> 1999,2000,2001
#

#
# Parametry: diskuze.cgi?visible=nnn&audit=xxx&from=nnn&to=nnn&vto=xxx&type=xxx&inspre=xxx&inspast=xxx&reply=nnn
# ~~~~~~~~~~
#		nnn=cislo	xxx=retezec	Na poradi parametru nezalezi, zadny z nich neni povinny...
#
#			Nazev	| Typ | Vysvetlivky
#     		     -----------+-----+-----------------------------------------------------------
#			type	|  x  | Kombinace hodnot oddelenych znakem '+' :
#				|     |		notitle	=  Neni zobrazen titulek 'diskuze' (default=vypnuto)
#				|     |		noname=  Neni zobrazen nazev diskuze (default=zap)
#				|     |		noform	=  Neni zobrazen formular pro zadavani prizpevku (d=v)
#				|     |		nohelp	=  Neni zobrazena napoveda (d=v) (bezvyznamne v kombinaci s noform)
#				|     |		nointro	=  Neni zobrazen uvodni prizpevek (d=v)
#				|     |		nolinks	=  Neni zobrazen koncovy rozskoknik (d=v)
#				|     |		nohead=  Neni zobrazena hlavicka (<HTML><HEAD><BODY>) (d=v) (vyznam pri inspre)
#				|     |		nofoot	=  Neni zobrazena paticka (webmaster,</HTML>) (d=v) (vyznam pri inspast)
#				|     |		nostatus=  Neni zobrazen status radek (nove prizpevky) (d=v)
#				|     |		norm	=  Sada parametru pro stredne 'bohate' zobrazeni (vynechano napr. intro)
#				|     |		mini	=  Sada parametru pro minimalni zobrazeni (pouze head-form-...-links-foot)
#				|     |
#			inspre	|  x  |	Vlozi pred titulek (Diskuze.....) jiny HTML dokument
#			inspast	|  x  |	Vlozi za rozskoknik (Nejnovejsi - Nejstarsi) jiny HTML dokument
#			visible	|  n  | Pocet najednou viditelnych prizpevku (max_already_seen)
#			audit	|  x  | ID zobrazene diskuze (an)
#			from	|  n  | Cislo prizpevku, OD ktereho se zobrazuje diskuze
#			to	|  n  | Cislo prizpevku, DO ktereho se zobrazuje diskuze
#			vto	|  x  | Relativni ID urcujici parametr 'to' (hodnoty: zatim pouze 'last' - tzn. defaultni)
#			reply	|  n  | Odpoved na prizpevek n - prizpevek na vrchu + predvyplnene tema "Ad: subj".

#### Soubor prizp/global.status ##########
#
# Tento soubor obsahuje zakladni informace o diskuzi - napriklad celkovy pocet prizpevku v diskuzi, uvodni zprava
# pro zobrazeni v diskuzi, apod. Je user-friendly editovatelny pomoci HTML dokumentu ./config.html, ale neni zadny problem
# ho editovat i primo.
#
#### Format souboru
#
# je jednoduchy : <pocet_prizpevku>^<nazev diskuze>^<uvodni_zprava>^<head1>^<podtitul>^<(soubor s anketou) - zatim nefunkcni, ve stadiu planovani ;>
# To vse ale musi byt na jednom radku!!! Je snad jasne, ze zadna z polozek v sobe nesmi obsahovat znak '^'...
#

#
###### KONFIGURACNI SEKCE
#

max_already_seen=80;     # pocet najednou zobrazenych prizpevku na strance - ** originalni hodnota = 20 **

max_limit=512;           # maximalni pocet prizpevku (program nebude umet zatim vice!) - dokud nebude globalni konfiguracni
                         # soubor, musi se zeditovat i v 'add.cgi', jinak bud nebude mozne pridavat prizpevku >(max_limit v add)
			 # nebo nebudou zobrazovany prizpevky >max_limit... - ** originalni hodnota = 512 **

an="private";		 # defaultni ID diskuze, pokud nebude predano jako parametr...

#
###### KONEC KONFIGURACNI SEKCE - ZACATEK PROGRAMU
#
PATH="$PATH;/bin;/usr/bin" # fix broken apache PATH
export CZECH_INPUT_CP=ISO-8859-2;
limit=$max_limit;
no=$limit;
usr_name="";
usr_email="";
nostatus=0;
nointro=0;
nohead=0;
nofoot=0;
noform=0;
notitle=0;
noname=1;
nolinks=0;
nohelp=0;

#echo -en "Content-type: text/plain\n\n"; # useful for debug
#echo "q= $QUERY_STRING, ...";

if test "$QUERY_STRING"; then # -- analyza parametru -- #
  n=0; np=1;
  while test 1 -eq 1;do
    np=$(($np+1));
    n=$(($n+1));
#    echo "<!-- debug info, n == $n/$np, param == $param, no == $no -->"
    param=`echo $QUERY_STRING | /usr/bin/cut -f $n -d "&"`;
    case `echo $param | /usr/bin/cut -f 1 -d "="` in
      audit) an=`echo $param | /usr/bin/cut -f 2- -d "="`;;
      visible) max_already_seen=`echo $param | /usr/bin/cut -f 2- -d "="`;;
      inspre) inspre=`echo $param | /usr/bin/cut -f 2- -d "="`;;
      inspast) inspre=`echo $param | /usr/bin/cut -f 2- -d "="`;;
      from) no=`echo $param | /usr/bin/cut -f 2- -d "="`;;
      subj) subj=`echo $param | /usr/bin/cut -f 2- -d "="`;;
      to) no=$((`echo $param | /usr/bin/cut -f 2- -d "="` + $max_already_seen));
          if test $no -gt $limit; then no=$limit; fi;;
      vto) if test "`echo $param | /usr/bin/cut -f 2- -d "="`" = "last"; then echo "">/dev/null; fi;;
                                                                             # nejni potreba implementovat pri souc. hodnote no...
      reply) q="`echo $param | /usr/bin/cut -f 2- -d "="`";
      	     j=$an; subj="Ad: "; tz="`cat dat/prizp.$an/$q.header | /usr/bin/cut -f 3- -d ^`";
	     if test "`echo $tz | /usr/bin/cut -f 1 -d ":"`" = "Re"; then subj=""; fi;
	     if test "`echo $tz | /usr/bin/cut -f 1 -d ":"`" = "Ad"; then subj=""; fi;
	     subj="$subj$tz ($q)";;
      type) val=`echo $param | /usr/bin/cut -f 2- -d "="`; ni=0; nip=1;
            while test 1 -eq 1; do
	      nip=$(($nip+1));
	      ni=$(($ni+1));
	      par=`echo $val | /usr/bin/cut -f $ni -d "+"`;
	      case $par in
	        notitle)notitle=1;;
		noname)noname=0;;
		noform)noform=1;;
		nohead)nohead=1;;
		nofoot)nofoot=1;;
		nointro)nointro=1;;
		nolinks)nolinks=1;;
		nohelp)nohelp=1;;
		nostatus)nostatus=1;;
		norm)nohelp=1; nointro=1;;
		mini)nohelp=1; nointro=1; notitle=1; nostatus=1;;
	      esac
	      if test "`echo $val | /usr/bin/cut -f $ni -d "+"`" = "`echo $val | /usr/bin/cut -f $nip -d "+"`"; then break; fi
	    done;;
    esac
    if [ "`echo $QUERY_STRING | /usr/bin/cut -f $n -d "&"`" = "`echo $QUERY_STRING | /usr/bin/cut -f $np -d "&"`" ]; then
      break;
    fi
  done
fi

#until test -e prizp/$no; do
#  no=$(($no- 1));
#done #step to a last...

#pro zjisteni nejvyssiho cisla...
no_total=`cat dat/prizp.$an/global.status | /usr/bin/cut -f 1 -d ^`;
if [ $no -gt $no_total ]; then no=$no_total; fi

#pro zjisteni nazvu diskuze...
name=`cat dat/prizp.$an/global.status | /usr/bin/cut -f 2 -d ^`;

#pro zjisteni uvodni zpravy...
title_message=`cat dat/prizp.$an/global.status | /usr/bin/cut -f 3 -d ^`;



# analyza cookies
if test "`echo $HTTP_COOKIE | /usr/bin/cut -f 1 -d "="`" = "disk_identify"; then
  # umim pouze jednu cookie!
  BESCOOKIE=`echo $HTTP_COOKIE | /usr/bin/cut -f 2 -d "="`;
  usr_name=`echo $BESCOOKIE | /usr/bin/cut -f 1 -d ^`;
  usr_email=`echo $BESCOOKIE | /usr/bin/cut -f 2 -d ^`; #done?!?
fi





#------------------------------------------- hlavicka






echo -en "Pragma: No-cache\n"
if test $nohead -ne 1; then
  ./mkheader "Diskuze";
  echo -e "<BODY BGCOLOR=#FFFFFF TEXT=#000000  onLoad=\" document.formular.help.value='Nápověda';\">\n\
                <SCRIPT LANGUAGE=\"JavaScript\">\n\
<!--\n\
function preview() {\
        window.open(\"help.html\",\"Napoveda\",\"scrollbars=yes,resizeable=yes,toolbar=no,directories=no,menubar=no,width=600,height=300\");\
}\n\
//--></SCRIPT>\n";
else
  echo -e "Content-type: text/html\n\n";
fi

# echo "<!-- debug tag -1 - no == $no, $title_message, $name, $no_total -->";

# echo "<!-- ***** $no -->";




#-------------------------------------------------- dopocitani prispevku


echo "<!-- debug tag 1 - no == $no -->";

no_puv=$no;

if test -e "dat/prizp.$an/$no"; then
  while test -e dat/prizp.$an/$no; do
    no=$(($no+1));
    # echo "<!-- debug info - no == $no, no_puv == $no_puv -->";
    # echo "<!-- debug info - rozdil == $rozdil -->";
    if test $no -gt $max_already_seen; then break; fi
  done;
  no=$(($no- 1));
else
  echo -e "<p><tt><font size=+1>--- Chyba ($an; $no - not exist? (rozdil=$rozdil; max_already_seen: $max_aleready_seen;\
no_puv: $no_puv; no_total: $no_total) pri vypisu databaze prizpevku!!! Prosim oznamte tuto chybu (spolu s kopii teto hlasky) na\
adresu foo@bar.baz. Dekujeme a pokusime se o urychlenou napravu. ---</font></tt></p></body></html>";
  exit 1;
fi

echo "<!-- debug tag 1 - no == $no -->";

no_last=$no;
noq=$no_total;










#---------------------------------------------------- nadpisy, formular



#echo $PATH
#id
echo "<div align=right><i><font color=\"#aaaaaa\" size=\"-1\">${noq}</font></i></div><br>"

echo -e "\n<!-- omlouvam se vsem, co by chteli lustit tento kod, za jeho neprehlednost. -->\n<H1 align=center>";
if test $notitle -ne 1; then echo "Nejaka diskuze"; fi
if test $noname -ne 1; then echo "$name"; fi
echo "</H1>";
#echo "<!-- subj==$subj tz=$tz q=$q j=$j -->";
echo -e "<center><p><i>(Internetová stránka otevirajici prostor pro komunikaci)</i></p>\n";
# echo -e "<br><tt>- -stránka se testuje- -</tt>";
echo -e "<br></br><br></br>";
if test $noform -ne 1; then
echo -e "<p>\
<FORM ACTION=\"add.cgi\" METHOD=POST NAME=\"formular\"><TABLE ALIGN=CENTER BGCOLOR=\"#f0f0d0\"><TR><TD>\
Jméno: </TD><TD><INPUT TYPE=text name=\"name\" value=\"$usr_name\" SIZE=20></INPUT>\
<INPUT TYPE=hidden name=\"id\" value=\"$an\"></INPUT><!--&nbsp;&nbsp;--></TD><TD>\
E-mail: <INPUT TYPE=text name=\"email\" value=\"$usr_email\" SIZE=30></INPUT></TD></TR>\
<TR><TD>Téma: </TD><TD COLSPAN=2><INPUT TYPE=text name=\"subject\" value=\"$subj\" SIZE=40></INPUT></TD></TR>\
<TR><TD valign=top>Příspěvek: </TD><TD COLSPAN=2>\
<TEXTAREA COLS=\"60\" ROWS=\"12\" NAME=\"message\" WRAP=\"virtual\"></TEXTAREA></TD></TR>\
<TR><TD><INPUT TYPE=submit name=\"Odeslat\" value=\"Odeslat\"></INPUT></TD>\
<TD><INPUT TYPE=reset name=\"Vymazat\" value=\"Vymazat\"></INPUT></TD>\
<TD ALIGN=\"right\"><INPUT TYPE=\"button\" VALUE=\"Nápověda dole\" NAME=\"help\" ONCLICK=\"preview();\"></INPUT></TD>\
</TR></TABLE></FORM></p>"; fi
if test $nohelp -ne 1; then
echo -e "<br></br><br></br>\n"; fi
echo -e "</center>\n";







# -------------------------------------------------------- clanky



if test $nointro -ne 1; then
echo -e "<!--<table border=1><tr><td>-->\n\
<p>\n\
<table cellpadding=5><tr><td valign=top bgcolor=\"#f0f0d0\" width=\"15%\">\
<small><b>Delší příspěvky</b> zasílejte k uveřejnění jako články na tuto adresu: \
<a href=\"mailto:foo@bar.baz?subject=Clanek do diskuze\">foo@bar.baz</a>. \
Zašlete-li článek v souboru ve formátu HTML, zařadíme je beze změn. Články zaslané v jiném formátu \
<i>mohou</i> být připraveny o své formátování (veškerý text bude obyčejným písmem; tj. může se stát, že se ztratí \
zvýraznění tučným písmem, kurzívou apod.)</small>\n\
</td><td>&nbsp;</td><td valign=top><ul><b><font color=red>Články a delší příspěvky:</font></b><br></br>\n\
<li><a href=\"clanky/abcd.htm\">blablablabla</a></li>\




</td></tr></table><!--</td></tr></table>--></p>";
fi

if test $nointro -ne 1; then
if test "$title_message"; then # -- vypsani uvodni zpravy -- #
  echo -e "\n<p><center><TABLE WIDTH=100% BORDER=1 CELLPADDING=5><TR><TD><br>\n$title_message\n<br></TD></TR></TABLE>\
<img src=\"http://counter.bar.baz/count.cgi?...\"></img>\n\
</center></p>\n<p><center><font color=red><b>Příspěvky do diskuze:</b></font><br><font size=-1>(nejnovější jsou hned zde nahoře)</font></center></p><br></br>\n<hr></hr>\n";
fi fi

echo "<!-- debug tag 0 -->";

while test $(($no_last-$no)) -lt $max_already_seen; do
  if test $no -le 0; then break; fi
  echo -e "\n\n<TABLE WIDTH=\"100%\"><TR><TD VALIGN=\"TOP\" WIDTH=\"90%\" ALIGN=\"left\"><DL><DD><FONT COLOR=\"#b01000\"><B> ";
  cat dat/prizp.$an/$no.header | /usr/bin/cut -f 1 -d ^;
  email=`cat dat/prizp.$an/$no.header | /usr/bin/cut -f 2 -d ^`;
  subject=`cat dat/prizp.$an/$no.header | /usr/bin/cut -f 3- -d ^`;
  if test -n "$email"; then
    echo -e "</B><I>(<A HREF=\"mailto:$email?subject=Re: $subject\">$email</A>)</I>";
  else
    echo -e "</B><I>(e-mail neuveden)</I>";
  fi
  echo -e "<BR><I>$subject</I></FONT>\n<DT><P>";
#  encsubj=`echo $subject | encode`;
  cat dat/prizp.$an/$no;
  echo -e "</P></DL></TD><TD ALIGN=\"RIGHT\" BGCOLOR=\"#f0f0d0\" VALIGN=\"TOP\" WIDTH=\"10%\">\n\
                <small><i><a href=\"diskuze.cgi?from=$no&reply=$no\">Odpovědět<BR>do diskuze<BR>na příspěvek<BR>číslo $no</a></i></small>\n";
  echo -e "</TD></TR></TABLE><HR WIDTH=\"50%\" ALIGN=\"left\"></HR>\n\n";
  no=$(($no-1));
done;

no=$(($no-$max_already_seen)); if test $no -lt 1; then no=1; fi

if test $nostatus -ne 1; then
echo -e "<p><hr></hr></p><p><font color=#555555 size=-1>Celkem $noq příspěvků. (zobrazeno $max_already_seen)\
	 <!-- <a href=\"seznam\">Seznam diskuzí</a>\
	 <a href=\"seznam?auto=prev\">Předchozí diskuze</a>\
	 <a href=\"seznam?auto=next\">Další diskuze</a> --></FONT></p><p><hr></hr></p>"; fi

if test $nolinks -ne 1; then
echo -e "<P><FONT COLOR=green><A HREF=\"diskuze.cgi?vto=last\">Nejnovější</A>";
echo -e "- <A HREF=\"diskuze.cgi?to=$no_last\">Novější</A>";
echo -e "- <A HREF=\"diskuze.cgi?from=$no\">Starší</A>";
echo -e "- <A HREF=\"diskuze.cgi?from=1\">Nejstarší</A></FONT></p>";
echo -e "<p><br></br><br></br><center><a href="help.html" target="_blank">Klikněte sem pro nápovědu</a></center></p>\n\
<p><center><a href=\"http://bar.baz/\">Foo site (www.bar.baz)</a></center></p><br></br><br></br>";
fi

if test $nofoot -ne 1; then ./mkfooter; fi
