u komentaru lze tohoto stavu docilit i setrizenim podle id - lze totiz logicky predpokladat, ze nejnizsi id patri nejdrive vlozenemu komentari, atd. $vstupnipole[X][0] - id [1] - id predka [2] - pouzito 1/0, defaulne 0 (ne) */ // inic. vstupniho pole $trizeni=0; // false if (is_array($vstupnipole)): $pocetprvku=count($vstupnipole); // pocet prvku ve vstupnim poli if ($pocetprvku>0): $trizeni=1; // true endif; endif; $polehist[0]=0; // historie prohledavani $polex=0; // akt. pozice v historii $vysledekcislo=0; // pocitadlo vyslednych radku ve vysledkovem poli // start trizeni while ($trizeni==1): $nasel=0; $aktpom=0; for ($pom=0;$pom<$pocetprvku;$pom++): if ($vstupnipole[$pom][2]==0): // kdyz nebyl akt. radek jeste pouzit if ($vstupnipole[$pom][1]==$polehist[$polex]): // kdyz nalezi hledanemu predku $aktpom=$pom; $nasel=1; break; // vyskoceni z for cyklu endif; endif; endfor; if ($nasel==1): // vysledek hledani je kladny $vysledek[$vysledekcislo][0]=$aktpom; // pridani do pole vysledku $vysledek[$vysledekcislo][1]=$polex; // od 0 vyse $vysledekcislo++; // prechod na dalsi radek ve vysledkovem poli $vstupnipole[$aktpom][2]=1; // nastaveni prepinace na pouzito $polex++; // prechod na vyssi uroven v historii $polehist[$polex]=$vstupnipole[$aktpom][0]; // nastaveni akt. hodnoty v historii else: // vysledek hledani je zaporny if ($polehist[$polex]==0): // vysledek hledani na zakladni urovni je prazdny -> neexistuje zadna dalsi vetev $trizeni=0; else: $polex--; // prechod na nizsi uroven v historii endif; endif; endwhile; /* $vysledek[X][0] - X ve vstupnim poly [1] - cislo urovne */ return $vysledek; } function VycistiKoment($txt) { $txt=str_replace("0&&$vel_konec_tag>0&&$ret!=""): $nasel=0; // inic. $poz_start_tag=strpos("n".$ret,$start_tag); if ($poz_start_tag>0): $nasel=1; // nast. true $poz_start_tag=$poz_start_tag-1; endif; while($nasel==1): $poz_konec_tag=strpos($ret,$konec_tag); if ($poz_start_tag<$poz_konec_tag): // vse OK $obsah=substr($ret,$poz_start_tag+$vel_start_tag,$poz_konec_tag-$poz_start_tag-$vel_start_tag); // retezec, odkud, delka $novy_obsah=str_replace("http://","",$obsah); $novy_obsah="".$novy_obsah.""; // novy link $ret=str_replace($start_tag.$obsah.$konec_tag,$novy_obsah,$ret); // nahrada puvodniho za novy else: // strukturalni chyba $chyba=1; break; endif; $nasel=0; // nast. false $poz_start_tag=strpos($ret,$start_tag); if ($poz_start_tag>0): $nasel=1; // nast. true endif; endwhile; if ($chyba==1): $ret=str_replace($start_tag,"",$ret); $ret=str_replace($konec_tag,"",$ret); endif; endif; return $ret; } function ZpracujMail($start_tag = "", $konec_tag = "", $ret = "") { $vel_start_tag=strlen($start_tag); $vel_konec_tag=strlen($konec_tag); $chyba=0; if ($vel_start_tag>0&&$vel_konec_tag>0&&$ret!=""): $nasel=0; // inic. $poz_start_tag=strpos("n".$ret,$start_tag); if ($poz_start_tag>0): $nasel=1; // nast. true $poz_start_tag=$poz_start_tag-1; endif; while($nasel==1): $poz_konec_tag=strpos($ret,$konec_tag); if ($poz_start_tag<$poz_konec_tag): // vse OK $obsah=substr($ret,$poz_start_tag+$vel_start_tag,$poz_konec_tag-$poz_start_tag-$vel_start_tag); // retezec, odkud, delka $novy_obsah=str_replace("mailto:","",$obsah); $novy_obsah="".$novy_obsah.""; // novy link $ret=str_replace($start_tag.$obsah.$konec_tag,$novy_obsah,$ret); // nahrada puvodniho za novy else: // strukturalni chyba $chyba=1; break; endif; $nasel=0; // nast. false $poz_start_tag=strpos($ret,$start_tag); if ($poz_start_tag>0): $nasel=1; // nast. true endif; endwhile; if ($chyba==1): $ret=str_replace($start_tag,"",$ret); $ret=str_replace($konec_tag,"",$ret); endif; endif; return $ret; } function PrelozKomZnacky($txt = "") { $txt=str_replace("[b]","",$txt); // ochrana proti vlozeni JS $txt=str_replace("[/b]","",$txt); $txt=ZpracujOdkaz("[odkaz]","[/odkaz]",$txt); $txt=ZpracujMail("[email]","[/email]",$txt); return $txt; } function KorekceVstupu($txt = "") { $hledam = array ("'&(?!#)'i", "'<'i", "'>'i", "'\"'i"); $nahrazuji = array ("&", "<", ">", """); $txt=preg_replace($hledam,$nahrazuji,$txt); return $txt; } // --[zakladni fce]----------------------------------------------------------------------------------- // zobrazeni vyberoveho prehledu vsech komentaru nalezicich k vybranemu clanku function ZobrazKom() { // bezpecnostni korekce $GLOBALS["cisloclanku"]=addslashes($GLOBALS["cisloclanku"]); $dotazkom=mysql_query("select idk,datum,od,titulek,reakce_na from ".$GLOBALS["rspredpona"]."komentare where clanek='".$GLOBALS["cisloclanku"]."' order by idk",$GLOBALS["dbspojeni"]); $pocetkom=mysql_num_rows($dotazkom); if ($pocetkom==0): echo "

".RS_KONIC."

\n"; else: // prevod do pole for ($pom=0;$pom<$pocetkom;$pom++): // pole informaci $data[$pom][0]=mysql_Result($dotazkom,$pom,"idk"); // idk $data[$pom][1]=mysql_Result($dotazkom,$pom,"titulek"); // titulek $data[$pom][2]=mysql_Result($dotazkom,$pom,"od"); // autor $data[$pom][3]=mysql_Result($dotazkom,$pom,"datum"); // datum // pom. pole k setrideni $pomporadi[$pom][0]=mysql_Result($dotazkom,$pom,"idk"); // id komentare $pomporadi[$pom][1]=mysql_Result($dotazkom,$pom,"reakce_na"); // id predka komentare $pomporadi[$pom][2]=0; // nastaveni stavu radku endfor; // setrideni $poradi=SetridKomentare($pomporadi); // zobraz echo "

\n"; echo "\n"; echo "\n"; for($pom=0;$pom<$pocetkom;$pom++): // $poradi[$pom][0] -> obsahuje hodnotu poradi v poli $data echo ""; echo ""; echo "\n"; endfor; echo "\n"; echo "
"; // generator mezery for($xx=0;$xx<$poradi[$pom][1];$xx++): echo "   "; endfor; echo $data[$poradi[$pom][0]][1]."".$data[$poradi[$pom][0]][2]."".MyDatetimeToStd($data[$poradi[$pom][0]][3])."
\n"; echo "

\n"; endif; // paticka echo "

".RS_KOZOBVSE."   ".RS_KOPRIKOM."

\n"; } // zobrazeni vsech komentaru vlozenych k danemu clanku function ZobrazKoKom() { // bezpecnostni korekce $GLOBALS["cisloclanku"]=addslashes($GLOBALS["cisloclanku"]); $dotazkom=mysql_query("select idk,datum,obsah,od,od_mail,titulek,reakce_na from ".$GLOBALS["rspredpona"]."komentare where clanek='".$GLOBALS["cisloclanku"]."' order by idk",$GLOBALS["dbspojeni"]); $pocetkom=mysql_num_rows($dotazkom); if ($pocetkom==0): echo "

".RS_KONIC."

\n"; else: // pridavaci link echo "

".RS_KOPRIKOM."

\n"; // prevod do pole for ($pom=0;$pom<$pocetkom;$pom++): // pole informaci $data[$pom][0]=mysql_Result($dotazkom,$pom,"idk"); // idk $data[$pom][1]=mysql_Result($dotazkom,$pom,"titulek"); // titulek $data[$pom][2]=mysql_Result($dotazkom,$pom,"od"); // autor $data[$pom][3]=mysql_Result($dotazkom,$pom,"datum"); // datum $data[$pom][4]=mysql_Result($dotazkom,$pom,"obsah"); // obsah komentare $data[$pom][5]=mysql_Result($dotazkom,$pom,"od_mail"); // mail autora // pom. pole k setrideni $pomporadi[$pom][0]=mysql_Result($dotazkom,$pom,"idk"); // id komentare $pomporadi[$pom][1]=mysql_Result($dotazkom,$pom,"reakce_na"); // id predka komentare $pomporadi[$pom][2]=0; // nastaveni stavu radku endfor; // setrideni $poradi=SetridKomentare($pomporadi); // zjisteni maximalniho levelu $maxim_level=0; for($pom=0;$pom<$pocetkom;$pom++): if ($maxim_level<$poradi[$pom][1]): $maxim_level=$poradi[$pom][1]; endif; endfor; // preddefinovani zakladniho levelu if ($maxim_level>0): $vzhled_zakl_level=" colspan=\"".($maxim_level+1)."\""; else: $vzhled_zakl_level=""; endif; // zobrazeni komentaru echo "

\n"; for($pom=0;$pom<$pocetkom;$pom++): echo "\n"; // $poradi[$pom][0] -> obsahuje hodnotu poradi v poli $data if ($poradi[$pom][1]==0): // zakladni level echo "\n"; endfor; echo "\n"; echo "\n"; endfor; echo "
\n"; else: // sublevel for ($p1=0;$p1<$poradi[$pom][1];$p1++): echo "  \n"; endif; // hlavicka echo "
"; echo "".RS_KOKOMZED.": ".MyDatetimeToStd($data[$poradi[$pom][0]][3])."     "; echo "".RS_KOREG."
\n"; echo "".RS_KOAUT.": ".$data[$poradi[$pom][0]][2]; if ($data[$poradi[$pom][0]][5]!=""): echo " (".$data[$poradi[$pom][0]][5].")"; endif; echo "
\n"; echo "".RS_KOTIT.": ".VycistiKoment($data[$poradi[$pom][0]][1]); echo "
\n"; // telo echo "
"; echo VycistiKoment($data[$poradi[$pom][0]][4]); echo "

\n"; echo "

\n"; endif; // paticka echo "

".RS_KOPRIKOM."

\n"; echo "

\n"; } // zobrazeni jen pozadovanych komentaru function ZobrazVyKom() { // bezpecnostni korekce $GLOBALS["cisloclanku"]=addslashes($GLOBALS["cisloclanku"]); // zjisteni poctu vybranych komentaru if (isset($GLOBALS["kclanek"])): $pocetvybr=count($GLOBALS["kclanek"]); else: $pocetvybr=0; endif; // sestaveni omezeni for ($pom=0;$pom<$pocetvybr;$pom++): $pole_pov_id_kom[addslashes($GLOBALS["kclanek"][$pom])]=1; endfor; //echo "select idk,datum,obsah,od,od_mail,titulek,reakce_na from ".$GLOBALS["rspredpona"]."komentare where clanek='".$GLOBALS["cisloclanku"]."'".$promezeni." order by idk"; $dotazkom=mysql_query("select idk,datum,obsah,od,od_mail,titulek,reakce_na from ".$GLOBALS["rspredpona"]."komentare where clanek='".$GLOBALS["cisloclanku"]."' order by idk",$GLOBALS["dbspojeni"]); $pocetkom=mysql_num_rows($dotazkom); if ($pocetkom>0): // pridavaci link echo "

".RS_KOPRIKOM."

\n"; // prevod do pole for ($pom=0;$pom<$pocetkom;$pom++): // pole informaci $data[$pom][0]=mysql_Result($dotazkom,$pom,"idk"); // idk $data[$pom][1]=mysql_Result($dotazkom,$pom,"titulek"); // titulek $data[$pom][2]=mysql_Result($dotazkom,$pom,"od"); // autor $data[$pom][3]=mysql_Result($dotazkom,$pom,"datum"); // datum $data[$pom][4]=mysql_Result($dotazkom,$pom,"obsah"); // obsah komentare $data[$pom][5]=mysql_Result($dotazkom,$pom,"od_mail"); // mail autora $data[$pom][6]=0; // zobrazit komentar (default ne) if (isset($pole_pov_id_kom[mysql_Result($dotazkom,$pom,"idk")])): $data[$pom][6]=1; endif; // test na povoleni zobrazeni // pom. pole k setrideni $pomporadi[$pom][0]=mysql_Result($dotazkom,$pom,"idk"); // id komentare $pomporadi[$pom][1]=mysql_Result($dotazkom,$pom,"reakce_na"); // id predka komentare $pomporadi[$pom][2]=0; // nastaveni stavu radku // overovaci pole - vyuzito k overeni zobrazni komentare $overeni[mysql_Result($dotazkom,$pom,"idk")]=0; // 0 = ne endfor; // setrideni $poradi=SetridKomentare($pomporadi); // zjisteni maximalniho levelu $maxim_level=0; for($pom=0;$pom<$pocetkom;$pom++): if ($maxim_level<$poradi[$pom][1]): $maxim_level=$poradi[$pom][1]; endif; endfor; // preddefinovani zakladniho levelu if ($maxim_level>0): $vzhled_zakl_level=" colspan=\"".($maxim_level+1)."\""; else: $vzhled_zakl_level=""; endif; // zobrazeni komentaru echo "

\n"; for($pom=0;$pom<$pocetkom;$pom++): if ($data[$poradi[$pom][0]][6]==1): echo "\n"; // $poradi[$pom][0] -> obsahuje hodnotu poradi v poli $data if ($poradi[$pom][1]==0): // zakladni level echo "\n"; endfor; echo "\n"; echo "\n"; endif; endfor; echo "
\n"; else: // sublevel for ($p1=0;$p1<$poradi[$pom][1];$p1++): echo "  \n"; endif; // hlavicka echo "
"; echo "".RS_KOKOMZED.": ".MyDatetimeToStd($data[$poradi[$pom][0]][3])."     "; echo "".RS_KOREG."
\n"; echo "".RS_KOAUT.": ".$data[$poradi[$pom][0]][2]; if ($data[$poradi[$pom][0]][5]!=""): echo " (".$data[$poradi[$pom][0]][5].")"; endif; echo "
\n"; echo "".RS_KOTIT.": ".VycistiKoment($data[$poradi[$pom][0]][1]); echo "
\n"; // telo echo "
"; echo VycistiKoment($data[$poradi[$pom][0]][4]); echo "

\n"; echo "

\n"; endif; // paticka echo "

".RS_KOZOBVSE."   ".RS_KOPRIKOM."

"; } function NovyFormKom() { // bezpecnostni korekce $GLOBALS["cisloclanku"]=addslashes($GLOBALS["cisloclanku"]); // test na existenci reg. ctenare if ($GLOBALS["prmyctenar"]->ctenarstav==1): $prkdo=$GLOBALS["prmyctenar"]->Ukaz("jmeno"); $prokdomail=$GLOBALS["prmyctenar"]->Ukaz("email"); else: $prkdo=""; $prokdomail="@"; endif; // formular pro pridani noveho komentare echo "

".RS_KOJME.":  
".RS_KOEMAIL.":  
".RS_KONADKOM.":  

    

".RS_KOINFO."

".RS_KOZOBKOM."

\n"; } function NovyReFormKom() { // bezpecnostni korekce $GLOBALS["cisloclanku"]=addslashes($GLOBALS["cisloclanku"]); $GLOBALS["ck"]=addslashes($GLOBALS["ck"]); // nacteni puvodniho komentare $dotazkom=mysql_query("select datum,obsah,od,od_mail,titulek from ".$GLOBALS["rspredpona"]."komentare where idk='".$GLOBALS["ck"]."'",$GLOBALS["dbspojeni"]); list($prdatum,$probsah,$prod,$prodmail,$prtitulek)=mysql_fetch_row($dotazkom); // zobrazeni puvodni komentare echo "

\n"; echo "
"; echo "".RS_KOKOMZED.": ".MyDatetimeToStd($prdatum)."
\n"; echo "".RS_KOAUT.": ".$prod; if ($prodmail!=""): echo " (".$prodmail.")"; endif; echo "
\n"; echo "".RS_KOTIT.": ".$prtitulek; echo "
\n"; echo "
\n"; echo $probsah; echo "
\n"; echo "

\n"; // test na existenci reg. ctenare if ($GLOBALS["prmyctenar"]->ctenarstav==1): $prkdo=$GLOBALS["prmyctenar"]->Ukaz("jmeno"); $prokdomail=$GLOBALS["prmyctenar"]->Ukaz("email"); else: $prkdo=""; $prokdomail="@"; endif; // formular na vlozeni odpovedi na predesly komentar echo "

".RS_KOREANAK."
\"".$prtitulek."\"

".RS_KOJME.":  
".RS_KOEMAIL.":  
".RS_KONADKOM.":  

    

".RS_KOINFO."

".RS_KOZOBKOM."

\n"; } function NovyPridejKom() { // uprava vstupu $GLOBALS["cisloclanku"]=KorekceVstupu($GLOBALS["cisloclanku"]); $GLOBALS["cislokom"]=KorekceVstupu($GLOBALS["cislokom"]); $GLOBALS["kobsah"]=KorekceVstupu($GLOBALS["kobsah"]); $GLOBALS["kobsah"]=PrelozKomZnacky($GLOBALS["kobsah"]); $GLOBALS["kobsah"]=nl2br($GLOBALS["kobsah"]); $GLOBALS["ktitulek"]=KorekceVstupu($GLOBALS["ktitulek"]); $GLOBALS["kod"]=KorekceVstupu($GLOBALS["kod"]); $GLOBALS["kodmail"]=KorekceVstupu($GLOBALS["kodmail"]); // bezpecnostni korekce $GLOBALS["cisloclanku"]=addslashes($GLOBALS["cisloclanku"]); $GLOBALS["cislokom"]=addslashes($GLOBALS["cislokom"]); $GLOBALS["kobsah"]=addslashes($GLOBALS["kobsah"]); $GLOBALS["ktitulek"]=addslashes($GLOBALS["ktitulek"]); $GLOBALS["kod"]=addslashes($GLOBALS["kod"]); $GLOBALS["kodmail"]=addslashes($GLOBALS["kodmail"]); $ip_adresa=$_SERVER["REMOTE_ADDR"]; // ip adresa ctenare $aktdatum=Date("Y-m-d H:i:s"); if ($GLOBALS["kobsah"]!=""): // pridani komentare @$error=mysql_query("insert into ".$GLOBALS["rspredpona"]."komentare values (null,'".$aktdatum."','".$GLOBALS["kobsah"]."','".$GLOBALS["cisloclanku"]."','".$GLOBALS["kod"]."','".$GLOBALS["kodmail"]."','".$ip_adresa."','".$GLOBALS["ktitulek"]."','".$GLOBALS["cislokom"]."')",$GLOBALS["dbspojeni"]); if (!$error): // chyba echo "

".RS_KOERR1."

\n"; else: // vse je OK; pripocitani 1 komentare k celkovemu poctu mysql_query("update ".$GLOBALS["rspredpona"]."clanky set kom=(kom+1) where link='".$GLOBALS["cisloclanku"]."'",$GLOBALS["dbspojeni"]); echo "

".RS_KOVLOZOK."

\n"; endif; else: // chyba: prazdny komentar echo "

".RS_KOERR2."

\n"; endif; // paticka echo "

".RS_KOZOBKOM."

\n"; echo "

\n"; } function Chyba($idchyba = 0) { switch ($idchyba): case 0: echo "

Pozor chyba! V průběhu vykonávání PHP skriptu se vyskytla neočekávaná chyba.

\n"; break; // defaultni chyba case 1: echo "

".RS_KOERR3."

\n"; break; // chybi cislo (link) clanku case 2: echo "

".RS_KOERR4."

\n"; break; // chybi clanek (vstupni link neukazuje na zadny clanek) endswitch; } // overeni existence potrebnych promennych if (!isset($GLOBALS["cisloclanku"])): $GLOBALS["akce"]="chyba1"; endif; if (!isset($GLOBALS["akce"])): $GLOBALS["akce"]="view"; endif; // kontrola existence clanku $dotazclanek=mysql_query("select titulek,datum,autor from ".$GLOBALS["rspredpona"]."clanky where link='".$GLOBALS["cisloclanku"]."'",$GLOBALS["dbspojeni"]); if (mysql_num_rows($dotazclanek)==0): // clanek neexistuje $GLOBALS["akce"]="chyba2"; else: // ziskani dat o clanku list($clatitulek,$cladatum,$claautor)=mysql_fetch_row($dotazclanek); $cladatum=MyDatetimeToDate($cladatum); // vysledek dd.mm.rrrr // ziskani informaci o autorovi clanku $dotazautori=mysql_query("select idu,jmeno,email from ".$GLOBALS["rspredpona"]."user where idu=".$claautor,$GLOBALS["dbspojeni"]); if (mysql_num_rows($dotazautori)==1): $claautor_jm=mysql_Result($dotazautori,0,"jmeno"); $claautor_mail="mailto:".mysql_Result($dotazautori,0,"email"); else: $claautor_jm=""; $claautor_mail=""; endif; endif; // Tvorba stranky $vzhledwebu->Generuj(); ObrTabulka(); // Vlozeni layout prvku if ($akce!="chyba1"||$akce!="chyba2"): // zobraz jen, kdyz je vse OK echo "

\n"; echo "".RS_KONADP."
".RS_KOKECL.": ".$clatitulek."
"; echo "(".RS_KOZEDNE." ".$cladatum.", ".RS_KOAUTCL.": ".$claautor_jm.")"; echo "

\n"; endif; // rozhodnuti o obsahu stranky switch($akce): case "view": ZobrazKom(); break; case "fullview": ZobrazKoKom(); break; case "selectview": ZobrazVyKom(); break; case "new": NovyFormKom(); break; case "re": NovyReFormKom(); break; case "insert": NovyPridejKom(); break; case "chyba1": Chyba(1); break; case "chyba2": Chyba(2); break; endswitch; if ($GLOBALS["akce"]!="chyba1"||$GLOBALS["akce"]!="chyba2"): // zobraz jen, kdyz je vse OK echo "

".RS_KOZOBCL." ".$clatitulek."

\n"; endif; // Dokonceni tvorby stranky KonecObrTabulka(); // Vlozeni layout prvku $vzhledwebu->Generuj(); ?>