###################################################################### # phpRS Search 1.6.2 ###################################################################### // Copyright (c) 2001-2005 by Jiri Lukas (jirilukas@supersvet.cz) // http://www.supersvet.cz/phprs/ // This program is free software. - Toto je bezplatny a svobodny software. // vyuzivane tabulky: rs_user, rs_topic, rs_clanky /* mozne vstupni promenne: $rstext ... prenasi hledany text, povinny vstup, retezec: "all-phpRS-all" umozni kompletni vypis $rstema ... omezuje vypis pouze na zadanou rubriku/tema -> vstupem je cislo tematu, default hodnota = nic $rsautor ... omezuje vypis pouze na zvoleneho autora -> vstupem je cislo autora, default hodnota = nic $rsod + $rsdo ... umoznuje casove omezeni, $rsdo neni povinny, jelikoz search.php jej umi doplnit $rskde (titulek,uvod,text,t_slova) ... specifikuje, kde se dany $rstext vyhledava, default nastaveni ukazuje na "text" - platne hodnoty: tit, uvd, txt, tsl, vse $rskolik + $rskolikata ... umoznuje definovat rozsah vypisu: $rskolik (mnozstvi polozek) a $rskolikata prenasi informaci o pozici $rsvztah ... umoznuje definovat vztah mezi vetsim poctem zadanych slov k vyhledavani, default hodnota = OR - platne hodnoty: AND, OR $rsvelikost ... definuje zpusob vypisu: bud jednoradkovy vypis nebo vypis doplneni o uvodni texty u jednotlivych nalezenych polozek - platne hodnoty: jr, uvod */ /* Header("Pragma: no-cache"); Header("Cache-Control: no-cache"); Header("Expires: ".GMDate("D, d M Y H:i:s",Date("U")+3600)." GMT"); */ define('IN_CODE',true); // inic. ochranne konstanty include_once("config.php"); include_once("specfce.php"); include_once("myweb.php"); include_once("sl.php"); include_once("trlayout.php"); include_once($adrlayoutu); function Prohledej($jak='+', $co='', $naco='') { if ($jak=='-'): $jaktxt='NOT LIKE'; else: $jaktxt='LIKE'; endif; $naco=mysql_escape_string($naco); // bezpecnostni korekce switch ($co): case 'tit': $str="titulek LIKE ('%".$naco."%')"; break; case 'uvd': $str="uvod LIKE ('%".$naco."%')"; break; case 'txt': $str="text LIKE ('%".$naco."%')"; break; case 'tsl': $str="t_slova LIKE ('%".$naco."%')"; break; case 'vse': $str="(titulek LIKE ('%".$naco."%') OR uvod LIKE ('%".$naco."%') OR text LIKE ('%".$naco."%'))"; break; default: $str=''; endswitch; return $str; // vraceni prikazu } function ZpracujHleStr($vstup='') { if (empty($vstup)): // vraceni prazdneho vystupu return $vysledek[0]=''; else: // dekompilace vyhledavaneho retezce - vysledkem je pole hledanych slov a retezcu $slova[] $slova=array(); $p_txt=str_replace("'","\'",$vstup); // zpracovani apostrofu $p_txt=str_replace('"',' " ',$p_txt); // dekompilace textu na fraze a slova $p_pompole=explode(' ',$p_txt); $p_pocet_pompole=count($p_pompole); // pocet prvku v pompole $p_uvozovka=0; // 0 = false stav, 1 = true stav $p_str_uvozovka=''; // zpracovani vyhled. retezce for ($pom=0;$pom<$p_pocet_pompole;$pom++): if (($p_uvozovka==0)&&($p_pompole[$pom]!='"')&&($p_pompole[$pom]!='')): // zapis do pole hled. slov $slova[]=$p_pompole[$pom]; else: if (($p_uvozovka==1)&&($p_pompole[$pom]!='"')): // zapis v ramci uvozovek $p_str_uvozovka.=' '.$p_pompole[$pom]; endif; if ($p_pompole[$pom]=='"'): // inicializace uvozovek if ($p_uvozovka==0): // prepinani mezi uvozovkami $p_uvozovka=1; // start vnoreneho retezce else: if ($p_str_uvozovka!=''): // test na vyprazdneni pom. retezce do pole hled. slov $slova[]=trim($p_str_uvozovka); $p_str_uvozovka=''; // vynulovani pomoc. promenne endif; $p_uvozovka=0; // konec vnoreneho retezce endif; endif; endif; endfor; // test na zbytkovy retezec v $p_str_uvozovka if (trim($p_str_uvozovka)!=''): // pom. prom. obsahuje nejaky zbytkovy retezec $p_pompole=explode(' ',trim($p_str_uvozovka)); $p_pocet_pompole=count($p_pompole); // pocet prvku v pompole for ($pom=0;$pom<$p_pocet_pompole;$pom++): if ($p_pompole[$pom]!=' '): $slova[]=$p_pompole[$pom]; endif; endfor; endif; // vraceni vysledkoveho pole return $slova; endif; } // vyhledavani function Vyhledavani() { // nacteni seznamu uzivatelu(autoru) do pole "autori" $dotazautori=mysql_query("select idu,jmeno,email from ".$GLOBALS["rspredpona"]."user order by idu",$GLOBALS["dbspojeni"]); $pocetautori=mysql_num_rows($dotazautori); for ($pom=0;$pom<$pocetautori;$pom++): $pole_data_aut=mysql_fetch_assoc($dotazautori); $autori[$pole_data_aut["idu"]][0]=$pole_data_aut["jmeno"]; $autori[$pole_data_aut["idu"]][1]="mailto:".$pole_data_aut["email"]; endfor; // nacteni seznamu temat do pole "rubriky" $dotazrubr=mysql_query("select idt,nazev from ".$GLOBALS["rspredpona"]."topic order by idt",$GLOBALS["dbspojeni"]); $pocetrubr=mysql_num_rows($dotazrubr); for ($pom=0;$pom<$pocetrubr;$pom++): $rubriky[mysql_Result($dotazrubr,$pom,"idt")]=mysql_Result($dotazrubr,$pom,"nazev"); endfor; // ************* Tvorba dotazu ************* // mozne vstupni promenne: $rstext, $rstema, $rsautor, $rsod + $rsdo, $rskde (titulek,uvod,text,t_slova), $rskolik + $rskolikata, $rsvztah $GLOBALS["rstext"]=stripslashes(trim($GLOBALS["rstext"])); // priprava hledaneho retezce - odstraneni zbytecnych mezer,tabelatoru,atd. + lomitka u spec. znaku if ($GLOBALS["rstext"]==''): // prazdna promenna $rstext $mozneobratky=0; $rotace=0; else: // dekompilace vyhledavaneho retezce - vysledkem je pole hledanych slov a retezcu $slova[] $slova=ZpracujHleStr($GLOBALS["rstext"]); // start sestavovani prikazu $obsahpodminky="where"; // zpracovani pole hledanych slov; kdyz je text "all-phpRS-all" tak se pozaduje uplny vypis if ($slova[0]!='all-phpRS-all'): $GLOBALS["rsvztah"]=mysql_escape_string($GLOBALS["rsvztah"]); $pocet_slova=count($slova); // vyhledavani omezene na nektera slova $obsahpodminky.=" ("; for ($pom=0;$pom<$pocet_slova;$pom++): if ($pom>0): // vztah se neuvadi u prvniho prubehu $obsahpodminky.=" ".$GLOBALS["rsvztah"]." "; endif; if (SubStr($slova[$pom],0,1)=="-"): $obsahpodminky.=Prohledej("-",$GLOBALS["rskde"],SubStr($slova[$pom],1,(StrLen($slova[$pom])-1))); else: $obsahpodminky.=Prohledej("+",$GLOBALS["rskde"],$slova[$pom]); endif; endfor; $obsahpodminky.=")"; else: $obsahpodminky.=" idc!=0"; endif; // omezeni tematem - $GLOBALS["stromhlmenu"] ... ukazuje miru vnoreni if (isset($GLOBALS["rstema"])&&($GLOBALS["rstema"]!="nic")): // inic. $pomseznamu $pomseznam[0][0]=mysql_escape_string($GLOBALS["rstema"]); $pomseznam[0][1]=1; // umele zapnute rodicovstvi z inic. dotazu $poc_pomseznam=1; // celkovy pocet polozek v $pomseznam $akt_poz_pomseznam=0; // akt. pozice v $pomseznam $str_temata=""; $spojka_temata=""; // sestaveni stromu temat while($poc_pomseznam>$akt_poz_pomseznam): // zapis temata do vysledku $str_temata.=$spojka_temata.$pomseznam[$akt_poz_pomseznam][0]; $spojka_temata=","; // test na rodicovstvi if ($pomseznam[$akt_poz_pomseznam][1]==1): $dotazkapit=mysql_query("select idt,rodic from ".$GLOBALS["rspredpona"]."topic where id_predka='".$pomseznam[$akt_poz_pomseznam][0]."'",$GLOBALS["dbspojeni"]); $pocetkapit=mysql_num_rows($dotazkapit); // zapis do $pomseznam for ($pom=0;$pom<$pocetkapit;$pom++): $pomseznam[$poc_pomseznam][0]=mysql_Result($dotazkapit,$pom,"idt"); $pomseznam[$poc_pomseznam][1]=mysql_Result($dotazkapit,$pom,"rodic"); $poc_pomseznam++; endfor; endif; // posunuti na dalsi pozici v seznamu $akt_poz_pomseznam++; endwhile; // finalni podminka $obsahpodminky.=" AND tema IN (".$str_temata.")"; endif; // omezeni autorem if (isset($GLOBALS["rsautor"])&&($GLOBALS["rsautor"]!="nic")): $obsahpodminky.=" AND autor='".mysql_escape_string($GLOBALS["rsautor"])."'"; endif; // omezeni casem if (isset($GLOBALS["rsod"])&&($GLOBALS["rsod"]!="nic")): if (!isset($GLOBALS["rsdo"])): $GLOBALS["rsdo"]=Date("Y-m-d"); endif; $obsahpodminky.=" AND datum>='".mysql_escape_string($GLOBALS["rsod"])."' AND datum<='".mysql_escape_string($GLOBALS["rsdo"])."'"; endif; // finalni vyhodnoceni podminky if ($obsahpodminky!="where"): $obsahpodminky.=" AND"; endif; // ziskani auktualniho podminkoveho data $dnesaktdatum=Date("Y-m-d H:i:s"); // vypocet limitu $dotazpocet=mysql_query("SELECT count(idc) as pocet FROM ".$GLOBALS["rspredpona"]."clanky ".$obsahpodminky." visible=1 AND datum<='".$dnesaktdatum."'",$GLOBALS["dbspojeni"]); if (mysql_num_rows($dotazpocet)==1): $celkemnalezeno=mysql_Result($dotazpocet,0,"pocet"); else: $celkemnalezeno=0; endif; $mozneobratky=ceil($celkemnalezeno/$GLOBALS["rskolik"]); if ($GLOBALS["rskolikata"]==1): $rspocatecni=0; else: $rspocatecni=$GLOBALS["rskolik"]*($GLOBALS["rskolikata"]-1); endif; // sestaveni kompletniho dotazu if ($GLOBALS['rsvelikost']=='sab'): $dotaz="SELECT idc,link,titulek,uvod,text,tema,date_format(datum,'%d. %m. %Y') as vyslden,autor,kom,visit,visible,zdroj,skupina_cl,znacky,typ_clanku,sablona "; $dotaz.="FROM ".$GLOBALS["rspredpona"]."clanky ".$obsahpodminky." visible=1 AND datum<='".$dnesaktdatum."' ORDER BY datum desc LIMIT ".$rspocatecni.",".$GLOBALS["rskolik"]; else: $dotaz="SELECT link,titulek,uvod,date_format(datum,'%d.%m.%Y') as vyslden,tema,autor "; $dotaz.="FROM ".$GLOBALS["rspredpona"]."clanky ".$obsahpodminky." visible=1 AND datum<='".$dnesaktdatum."' ORDER BY datum desc LIMIT ".$rspocatecni.",".$GLOBALS["rskolik"]; endif; $vvysledek=mysql_query($dotaz,$GLOBALS["dbspojeni"]); $rotace=mysql_num_rows($vvysledek); endif; if (!is_int($rotace)): $rotace=round($rotace); endif; // ************* Tvorba vypisu ************* if ($rotace==0): // prazdne vyhl. echo "
".RS_VY_NULL."
\n"; else: // exiteje vysledek echo "".RS_VY_VYSLEDEK_1." ".$rotace." ".RS_VY_VYSLEDEK_2." ".$celkemnalezeno." ".RS_VY_VYSLEDEK_3."
\n"; endif; // sestaveni navigacniho pasu $navigace=''; if ($mozneobratky>1): $navigace.='|'; for ($pom=0;$pom<$mozneobratky;$pom++): $vysl_strana=$pom+1; if ($vysl_strana==$GLOBALS["rskolikata"]): // omezeni akt. vypisove stranky $navigace.=($pom*$GLOBALS["rskolik"]).'-'.min(($vysl_strana*$GLOBALS["rskolik"]),$celkemnalezeno).'|'; else: $navigace.=''.($pom*$GLOBALS["rskolik"]).'-'.min(($vysl_strana*$GLOBALS["rskolik"]),$celkemnalezeno).'|'; endif; endfor; $navigace.="
\n"; endif; // 1. navigacni lista echo $navigace; // test na zpusob vypis vysledku vyhledavani switch ($GLOBALS['rsvelikost']): case 'sab': // *** vypis pres sablonu *** include_once("trclanek.php"); // nacteni tridy clanky $GLOBALS["clanek"] = new CClanek(); $GLOBALS["clanek"]->NactiZdrojCla($vvysledek); for ($pom=0;$pom<$GLOBALS["clanek"]->Ukaz("pocetclanku");$pom++): // urceni pozadovane varianty sablony if ($GLOBALS["clanek"]->Ukaz("typ_clanku")==2): // 1 - standardni, 2 - kratky $rs_typ_clanku="kratky"; // urceni pozadovane varianty sablony else: $rs_typ_clanku="nahled"; // urceni pozadovane varianty sablony endif; // volani sablony if ($GLOBALS["clanek"]->Ukaz("sablona")==""): // chybova hlaska: Chyba při zobrazování článku číslo xxxx! Systém nemůže nalézt odpovídající šablonu! echo "".RS_IN_ERR1_1." ".$GLOBALS["clanek"]->Ukaz("link")."! ".RS_IN_ERR1_2."
\n"; else: include($GLOBALS["clanek"]->Ukaz("sablona")); // vlozeni sablony; pozor, musi byt povoleno vice-nasobne vlozeni sablony endif; $GLOBALS["clanek"]->DalsiRadek(); // prechod na dalsi radek endfor; // *** konec: vypis pres sablonu *** break; case 'uvod': // *** vypis s uvodnim textem *** for($pro=0;$pro<$rotace;$pro++): $pole_data=mysql_fetch_assoc($vvysledek); echo "
| ".RS_VY_NAZEV_CLA." | ".RS_VY_DATUM_VYD." | ".RS_VY_AUTOR." | ".RS_VY_TEMA." | ||
| ".$pole_data["titulek"]." | \n"; echo "".$pole_data["vyslden"]." | \n"; // kompilace autora if (isset($autori[$pole_data["autor"]][0])): echo "".$autori[$pole_data["autor"]][0]." | \n"; else: echo "".RS_VY_REDAKCE." | \n"; endif; // kompilace tematu if (isset($rubriky[$pole_data["tema"]])): echo "".$rubriky[$pole_data["tema"]]." | "; else: echo ""; endif; echo " |
".RS_VY_NADPIS."
\n"; } // specifikace neexistujicich promennych - jen v pripade, ze nejsou definovany vstupem if (!isset($GLOBALS["rsvelikost"])): $GLOBALS["rsvelikost"]="jr"; endif; if (!isset($GLOBALS["rskde"])): $GLOBALS["rskde"]="vse"; endif; if (!isset($GLOBALS["rskolikata"])): if ($GLOBALS["rsvelikost"]=="sab"): $GLOBALS["rskolik"]=15; else: $GLOBALS["rskolik"]=50; endif; $GLOBALS["rskolikata"]=1; endif; if (!isset($GLOBALS["rsautor"])): $GLOBALS["rsautor"]="nic"; endif; if (!isset($GLOBALS["rstema"])): $GLOBALS["rstema"]="nic"; endif; if (!isset($GLOBALS["rsvztah"])): $GLOBALS["rsvztah"]="OR"; endif; if (isset($GLOBALS["stromhlmenu"])): $GLOBALS["prmenulink"]="&stromhlmenu=".$GLOBALS["stromhlmenu"]; else: $GLOBALS["prmenulink"]=""; endif; // Tvorba stranky $vzhledwebu->Generuj(); if ($GLOBALS["rsvelikost"]!='sab'): ObrTabulka(); // Vlozeni layout prvku krome 'sab' modu endif; // detekce existence $rstext if (isset($GLOBALS["rstext"])): Vyhledavani(); else: VyFormular(); endif; if ($GLOBALS["rsvelikost"]!='sab'): KonecObrTabulka(); // Vlozeni layout prvku krome 'sab' modu endif; $vzhledwebu->Generuj(); ?>