###################################################################### # phpRS Search 1.6.6 ###################################################################### // 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, sab */ /* Speciální dalí proměnná je sourceid (=mozilla-search) je to pro účely mozzila vyhledávcího boxu */ /* 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"); if (isset($GLOBALS['rstema']) && $GLOBALS['rstema'] != 'nic') { $GLOBALS['rstema'] = (int)$GLOBALS['rstema']; } include_once("specfce.php"); include_once("myweb.php"); include_once("sl.php"); include_once("trlayout.php"); include_once($adrlayoutu); // --[zakladni fce - vyhledavani]--------------------------------------------------------------------- function Prohledej($jaky_zpusob = '+', $co = '', $naco = '') { if ($jaky_zpusob=='-'): $jaky_zpusob_txt='NOT LIKE'; else: $jaky_zpusob_txt='LIKE'; endif; $naco=mysql_escape_string($naco); // bezpecnostni korekce switch ($co): case 'tit': $str="titulek ".$jaky_zpusob_txt." ('%".$naco."%')"; break; case 'uvd': $str="uvod ".$jaky_zpusob_txt." ('%".$naco."%')"; break; case 'txt': $str="text ".$jaky_zpusob_txt." ('%".$naco."%')"; break; case 'tsl': $str="t_slova ".$jaky_zpusob_txt." ('%".$naco."%')"; break; case 'vse': if ($jaky_zpusob=='-'): $str="(titulek ".$jaky_zpusob_txt." ('%".$naco."%') AND uvod ".$jaky_zpusob_txt." ('%".$naco."%') AND text ".$jaky_zpusob_txt." ('%".$naco."%'))"; else: $str="(titulek ".$jaky_zpusob_txt." ('%".$naco."%') OR uvod ".$jaky_zpusob_txt." ('%".$naco."%') OR text ".$jaky_zpusob_txt." ('%".$naco."%'))"; endif; break; default: $str=''; endswitch; return $str; // vraceni prikazu } function ZpracujHleStr($vstup = '') { if (empty($vstup)): // vraceni prazdneho vystupu return array(''); else: // roklad 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; } function Vyhledavani() { // *** FAZE 1 *** - test na chybejici promenne; inic. vyhledavaciho enginu /* realizovano jiz u rozcestniku if (empty($GLOBALS["rsvelikost"])): $GLOBALS["rsvelikost"]='jr'; endif; */ $sourceid=""; if(isset($_GET["sourceid"])){$sourceid=$_GET["sourceid"];} if (empty($GLOBALS["rskde"])): // kde vsude se bude vyhledavat $GLOBALS["rskde"]='vse'; endif; if (empty($GLOBALS["rskolikata"])): // zobrazena stranka z vysledku if ($GLOBALS["rsvelikost"]=='sab'): $GLOBALS["rskolik"]=15; else: $GLOBALS["rskolik"]=50; endif; $GLOBALS["rskolikata"]=1; endif; if (empty($GLOBALS["rsautor"])): // omezeni na autora $GLOBALS["rsautor"]='nic'; endif; if (empty($GLOBALS["rstema"])): // omezeni na tema + podtema $GLOBALS["rstema"]='nic'; endif; if (empty($GLOBALS["rsvztah"])): // vztah mezi hledanymi retezci $GLOBALS["rsvztah"]='OR'; endif; $navigace_doplnek_linku=''; if (isset($GLOBALS["stromhlmenu"])): // $GLOBALS["stromhlmenu"] ... ukazuje miru vnoreni $navigace_doplnek_linku.='&stromhlmenu='.$GLOBALS["stromhlmenu"]; endif; // nacteni seznamu uzivatelu(autoru) do pole "autori" $dotazautori=mysql_query("select idu,jmeno,email from ".$GLOBALS["rspredpona"]."user order by idu",$GLOBALS["dbspojeni"]); if ($dotazautori!=0&&mysql_num_rows($dotazautori)>0): while($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"]; endwhile; endif; // nacteni seznamu temat do pole "rubriky" $dotazrubriky=mysql_query("select idt,nazev from ".$GLOBALS["rspredpona"]."topic order by idt",$GLOBALS["dbspojeni"]); if ($dotazrubriky!=0&&mysql_num_rows($dotazrubriky)>0): while($pole_data_rubriky=mysql_fetch_assoc($dotazrubriky)): $rubriky[$pole_data_rubriky["idt"]]=$pole_data_rubriky["nazev"]; endwhile; endif; // *** FAZE 2 *** - tvorba a sestaveni dotazu $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; $pocetvysledek=0; else: // inic. podminky $pole_obsah_podminka=array(); // rozklad vyhledavaneho retezce - vysledkem je pole hledanych slov a retezcu $slova $slova=ZpracujHleStr($GLOBALS["rstext"]); // zpracovani pole hledanych slov; kdyz je text "all-phpRS-all" tak se pozaduje uplny vypis a neni nutne dale retezec zpracovavat if (!in_array('all-phpRS-all',$slova)): // inic. $GLOBALS["rsvztah"]=mysql_escape_string($GLOBALS["rsvztah"]); $pocet_slova=count($slova); $vysl_str_slova=''; // vyhledavani omezene na nektera slova $vysl_str_slova.='('; for ($pom=0;$pom<$pocet_slova;$pom++): if ($pom>0): // vztah se neuvadi u prvniho prubehu $vysl_str_slova.=' '.$GLOBALS["rsvztah"].' '; endif; if (substr($slova[$pom],0,1)=='-'): // test na negaci vyhledavaneho retezce $vysl_str_slova.=Prohledej('-',$GLOBALS["rskde"],substr($slova[$pom],1,(strlen($slova[$pom])-1))); else: $vysl_str_slova.=Prohledej('+',$GLOBALS["rskde"],$slova[$pom]); endif; endfor; $vysl_str_slova.=')'; // ulozeni vysledku do podminkoveho pole $pole_obsah_podminka[]=$vysl_str_slova; endif; // omezeni na tema 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 duvodu neznamosti stavu $poc_pomseznam=1; // celkovy pocet polozek v $pomseznam $akt_poz_pomseznam=0; // akt. pozice v $pomseznam $vysl_str_temata=''; $spojka_temata=''; // sestaveni stromu temat while($poc_pomseznam>$akt_poz_pomseznam): // zapis temata do vysledku $vysl_str_temata.=$spojka_temata.$pomseznam[$akt_poz_pomseznam][0]; $spojka_temata=","; // test na rodicovstvi ID_tema if ($pomseznam[$akt_poz_pomseznam][1]==1): $dotazpodtema=mysql_query("select idt,rodic from ".$GLOBALS["rspredpona"]."topic where id_predka='".$pomseznam[$akt_poz_pomseznam][0]."'",$GLOBALS["dbspojeni"]); // zapis nove nalezenych podsekci do pole $pomseznam if ($dotazpodtema!=0&&mysql_num_rows($dotazpodtema)): while ($pole_podtema = mysql_fetch_assoc($dotazpodtema)): $pomseznam[$poc_pomseznam][0]=$pole_podtema['idt']; $pomseznam[$poc_pomseznam][1]=$pole_podtema['rodic']; $poc_pomseznam++; endwhile; endif; endif; // posunuti na dalsi pozici v seznamu $akt_poz_pomseznam++; endwhile; // ulozeni vysledku do podminkoveho pole $pole_obsah_podminka[]='tema IN ('.$vysl_str_temata.')'; endif; // omezeni na autora if (isset($GLOBALS["rsautor"])&&($GLOBALS["rsautor"]!='nic')): // ulozeni vysledku do podminkoveho pole $pole_obsah_podminka[]="autor='".mysql_escape_string($GLOBALS["rsautor"])."'"; endif; // omezeni na datum if (isset($GLOBALS["rsod"])&&($GLOBALS["rsod"]!='nic')): if (!isset($GLOBALS["rsdo"])): $GLOBALS["rsdo"]=date("Y-m-d"); endif; // ulozeni vysledku do podminkoveho pole $pole_obsah_podminka[]="datum>='".mysql_escape_string($GLOBALS["rsod"])."' AND datum<='".mysql_escape_string($GLOBALS["rsdo"])."'"; endif; // finalni vyhodnoceni podminky if (empty($pole_obsah_podminka)): $obsah_podminky=''; // neexistuji zadne podminky else: $obsah_podminky=implode(' AND ',$pole_obsah_podminka).' AND '; // existuje alespon jedna podminka endif; // dnesni datum - vypis je omezen pouze na clanky, ktere jsou starsi nez toto datum $dnesni_datum=Date("Y-m-d H:i:s"); // dotaz na vsechny polozky odpovidajici zadane podmince $dotaz="SELECT count(idc) as pocet FROM ".$GLOBALS["rspredpona"]."clanky WHERE ".$obsah_podminky." visible=1 AND datum<='".$dnesni_datum."'"; $dotazpocet=mysql_query($dotaz,$GLOBALS["dbspojeni"]); if ($dotazpocet!=0&&mysql_num_rows($dotazpocet)==1): $celkem_nalezeno_polozek=mysql_result($dotazpocet,0,"pocet"); else: $celkem_nalezeno_polozek=0; endif; if ($celkem_nalezeno_polozek==0): // vyhledavacimu dotazu neodpovida zadna polozka $mozneobratky=0; $pocetvysledek=0; else: // vypocet poctu obratek a akt. limitu $mozneobratky=ceil($celkem_nalezeno_polozek/$GLOBALS["rskolik"]); if ($GLOBALS["rskolikata"]==1): $limit_start=0; $limit_kolik=mysql_escape_string($GLOBALS["rskolik"]); else: $limit_start=$GLOBALS["rskolik"]*($GLOBALS["rskolikata"]-1); $limit_kolik=mysql_escape_string($GLOBALS["rskolik"]); 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 WHERE ".$obsah_podminky." visible=1 AND datum<='".$dnesni_datum."' ORDER BY datum desc LIMIT ".$limit_start.",".$limit_kolik; else: $dotaz="SELECT link,titulek,uvod,date_format(datum,'%d.%m.%Y') as vyslden,tema,autor "; $dotaz.="FROM ".$GLOBALS["rspredpona"]."clanky WHERE ".$obsah_podminky." visible=1 AND datum<='".$dnesni_datum."' ORDER BY datum desc LIMIT ".$limit_start.",".$limit_kolik; endif; $dotazvysledek=mysql_query($dotaz,$GLOBALS["dbspojeni"]); $pocetvysledek=mysql_num_rows($dotazvysledek); endif; endif; if (!is_int($pocetvysledek)): $pocetvysledek=ceil($pocetvysledek); endif; // *** FAZE 3 *** - tvorba vypisu // test na vysledek vyhledavani if ($pocetvysledek==0): // prazdny vysledek //echo "
".RS_VY_NULL."
\n"; if (!isset($GLOBALS["hledatakce"])): //normální hledání článků echo "".RS_VY_VYSLEDEK_1." ".$pocetvysledek." ".RS_VY_VYSLEDEK_2." ".$celkem_nalezeno_polozek." ".RS_VY_VYSLEDEK_3."
\n"; //echo "|'; 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"]),$celkem_nalezeno_polozek).'|'; else: $navigace.=''.($pom*$GLOBALS["rskolik"]).'-'.min(($vysl_strana*$GLOBALS["rskolik"]),$celkem_nalezeno_polozek).'|'; 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($dotazvysledek); 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<$pocetvysledek;$pro++): $pole_data=mysql_fetch_assoc($dotazvysledek); echo "
".RS_VY_NAZEV_CLA." | ".RS_VY_DATUM_VYD." | ".RS_VY_AUTOR." | ".RS_VY_TEMA." | ||
".MarkM($sourceid)."".$pole_data["titulek"]."".MarkN($sourceid)." | \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."
echo "