001: <?php 002: /* 003: CircaLib.php3 : provide function to perform search on Circa with PHP 004: Copyright 2000 A.Barbet alian@alianwebserver.com. All rights reserved. 005: 006: Revision 1.1 2000年11月23日 22:51:17 Administrateur 007: addSite.php3 008: 009: Revision 1.2 2000年10月27日 16:01:12 Administrateur 010: - Navigation par categorie 011: - Passer le prefixe en variable globale 012: - Passer la database en variable globale 013: 014: Revision 1.1 2000年10月22日 22:43:47 Administrateur 015: Premiere version fonctionnelle. Supporte: 016: - Requetes booleenes 017: - Affichage par pages de 10 liens 018: 019: */ 020: 021: /* 022: 023: Fonction permettant d'effectuer une recherche par mot dans Circa 024: 025: Param鑼res : 026: 027: $template : Masque HTML pour le resultat de chaque lien. La liste des variables d馭inies au 028: moment du eval sont : $indiceG,$titre,$description,$url,$facteur,$last_update,$langue 029: 030: Exemple de masque : 031: 032: '"<p>$indiceG - <a href=\"$url\">$titre</a> $description<br> 033: <font class=\"small\"><b>Url:</b> $url <b>Facteur:</b> $facteur 034: <b>Last update:</b> $last_update </font></p>\n"' 035: 036: $mot : S駲uence des mots recherch駸 tel que tap? par l'utilisateur 037: first : Indice du premier site affich? dans le r駸ultat 038: $id : Id du site dans lequel effectu? la recherche 039: $langue : Restriction par langue (facultatif) 040: $Url : Restriction par url : les url trouv馥s commenceront par $Url (facultatif) 041: $create : Restriction par date inscription. Format YYYY-MM-JJ HH:MM:SS (facultatif) 042: $update : Restriction par date de mise ? jour des pages. Format YYYY-MM-JJ HH:MM:SS (facultatif) 043: $catego : Restriction par categorie (facultatif) 044: 045: Retourne ($resultat,$links,$indice) 046: 047: $resultat : Buffer HTML contenant la liste des sites trouves format? en fonction 048: de $template et des mots present dans $mots 049: $links : Liens vers les pages suivantes / precedentes 050: $indice : Nombre de sites trouves 051: 052: */ 053: 054: include("foo.php"); 055: include_once("bar.php"); 056: 057: function search($template,$word,$first,$idc,$langue,$Url,$create,$update,$categorie) 058: { 059: $mots = split( " ", strtolower($word)); 060: $i=0; 061: # Recherche des requetes booleenes 062: while( list($key,$valeur) = each ($mots)) 063: { 064: if ($valeur == '+') {$ind_and[]=$i;} # Reperage de la position des mots 'and' 065: else if ($valeur == '-') {$ind_not[]=$i;} # Reperage de la position des mots 'not' 066: else {$mots_tmp[]=$valeur;} 067: $i++; 068: } 069: # Recherche SQL 070: $tab = search_word(join("','",$mots_tmp),$idc,'','','','',''); 071: # On supprime tout ceux qui ne repondent pas aux criteres and si present 072: if (is_array($ind_and)) 073: {while( list($key,$ind) = each($ind_and)) {while( list($url,$tab_url) = each ($tab)) 074: {if (!appartient($mots[$ind+1],$tab_url[5])) {unset($tab[$url]);}}}reset($tab);} 075: # On supprime tout ceux qui ne repondent pas aux criteres not si present 076: if (is_array($ind_not)) 077: {while( list($key,$ind) = each($ind_not)) {while( list($url,$tab_url) = each ($tab)) 078: {if (appartient($mots[$ind+1],$tab_url[5])) {unset($tab[$url]);}}}reset($tab);} 079: $indice=0;$nbResultPerPage=10; 080: $lasto = $first + $nbResultPerPage; 081: # On met en forme le resultat 082: if (is_array($tab)) 083: { 084: while( list($url,$tab_url) = each ($tab)) 085: { 086: $indiceG=$indice+1; 087: list($titre,$description,$facteur,$langue,$last_update,$mot)=$tab_url; 088: 089: if (($indice>=$first)&&($indice<$lasto)) {eval($template);} 090: # Constitution des liens suivants / precedents 091: if (!($indice%$nbResultPerPage)) 092: { 093: $nbPage++; 094: if ($indice==$first) {$links.="$nbPage- ";} 095: else {$links.='<a href="'.get_link($indice,$word,$idc).'">'.$nbPage.'</a>- '."\n";} 096: } 097: $indice++; 098: } 099: } 100: if ($indice) {$indice="$indice sites trouves";} 101: else {$indice="<p>Aucun document trouv?.</p>";} 102: return array($resultat,$links,$indice); 103: } 104: 105: /* 106: 107: Construction de la requete SQL. Son exploitation est faite par search 108: 109: $tab : Reference du hash o? mettre le resultat 110: $word : Mot recherch? 111: $id : Id du site dans lequel effectu? la recherche 112: $langue : Restriction par langue (facultatif) 113: $Url : Restriction par url 114: $create : Restriction par date inscription 115: $update : Restriction par date de mise ? jour des pages 116: $catego : Restriction par categorie 117: 118: Retourne le tableau avec le resultat de la recherche 119: Le hash est constitu? comme tel: 120: 121: $tab{$url}[0] : titre 122: $tab{$url}[1] : description 123: $tab{$url}[2] : facteur 124: $tab{$url}[3] : langue 125: $tab{$url}[4] : date de derni鑽e modification 126: @{$$tab{$url}[5]}: liste des mots trouves pour cet url 127: 128: */ 129: function search_word($word,$idc,$langue,$Url,$create,$update,$categorie) 130: { 131: global $prefix; 132: global $database; 133: if ($langue) {$langue=" and langue='$langue' ";} else {$langue= ' ';} 134: if (($Url)&&($Url != 'http://')) {$Url=" and url like '$Url%' ";} else {$Url=' ';} 135: if ($create) {$create="and unix_timestamp('$create')< unix_timestamp(last_check) ";} else {$create=' ';} 136: if ($update) {$update="and unix_timestamp('$update')< unix_timestamp(last_update) ";} else {$update=' ';} 137: if ($categorie) {} 138: else {$categorie=' ';} 139: $requete = " 140: select facteur,url,titre,description,langue,last_update,mot 141: from ".$prefix.$idc."links l,".$prefix.$idc."relation r 142: where r.id_site=l.id 143: and r.mot in ('$word') 144: $langue $Url $create $update $categorie 145: order by facteur desc"; 146: $result = mysql_db_query($database,$requete); 147: if (!$result) {print "$requete";return ;} 148: $RowCount = MySQL_NUMROWS($result); 149: while ($i<$RowCount) 150: { 151: list ($facteur,$url,$titre,$description,$langue,$last_update,$mot)= mysql_fetch_row($result); 152: $tab[$url][0] = $titre; 153: $tab[$url][1]=$description; 154: $tab[$url][2]+=$facteur; 155: $tab[$url][3]=$langue; 156: $tab[$url][4]=$last_update; 157: $tab[$url][5][]=$mot; 158: $i++; 159: } 160: return $tab; 161: } 162: 163: /* 164: 165: Fonction retournant la liste des categories de la categorie $id dans le site $idr 166: 167: $id : Id de la categorie de depart. Si undef, 0 est utilis? (Consid駻? comme le "Home") 168: $idr : Id du responsable 169: $template : Masque HTML pour le resultat de chaque lien. Si undef, le masque par defaut 170: (defini en haut de ce module) sera utlise 171: 172: Retourne ($resultat,$nom_categorie) : 173: 174: $resultat : Buffer contenant la liste des sites format馥s en ft de $template 175: $nom_categorie : Nom court de la categorie 176: 177: */ 178: 179: function categories_in_categorie($id,$idr,$template) 180: { 181: global $database; 182: global $prefix; 183: if (!$idr) {$idr=1;} 184: if (!$id) {$id=0;} 185: $requete = "select id,nom,parent from ".$prefix.$idr."categorie"; 186: $result = mysql_db_query($database,$requete); 187: $RowCount = MySQL_NUMROWS($result); 188: $i=0; 189: while ($i<$RowCount) 190: { 191: list ($idc,$nom,$parent)= mysql_fetch_row($result); 192: $tab[$idc][0]=$nom; 193: $tab[$idc][1]=$parent; 194: $i++; 195: } 196: while( list($key,$val) = each ($tab)) 197: { 198: $nom=$tab[$key][0]; 199: $parent=$tab[$key][1]; 200: $nom_complet="<a href=\"".getenv('SCRIPT_NAME')."?browse=1&id=$idr\">Accueil</a>".getParent($key,$idr,$tab); 201: $links = get_link_categorie($key,$idr); 202: if ($parent==$id) {eval($template);} 203: } 204: if ($i==0) {$resultat="<p>Plus de cat馮orie</p>";} 205: if ($id!=0) {$titre = "<a href=\"".getenv('SCRIPT_NAME')."?browse=1&id=$idr\">Accueil</a> ".getParent($id,$idr,$tab);} 206: else {$titre=" ";} 207: return array($resultat,$titre); 208: } 209: 210: /* 211: 212: Fonction retournant la liste des pages de la categorie $id dans le site $idr 213: 214: $id : Id de la categorie de depart. Si undef, 0 est utilis? (Consid駻? comme le "Home") 215: $idr : Id du responsable 216: $template : Masque HTML pour le resultat de chaque lien. Si undef, le masque par defaut 217: (defini en haut de ce module) sera utlise 218: 219: Retourne le buffer contenant la liste des sites format馥s en ft de $template 220: 221: */ 222: 223: function sites_in_categorie($id,$idr,$template) 224: { 225: global $database; 226: global $prefix; 227: $indiceG=1;$facteur=100; 228: if (!$idr) {$idr=1;} 229: if (!$id) {$id=0;} 230: $i=0; 231: $requete = "select url,titre,description,langue,last_update from ".$prefix.$idr."links where categorie=$id and browse_categorie='1' and parse='1'"; 232: $result = mysql_db_query($database,$requete); 233: $RowCount = MySQL_NUMROWS($result); 234: while ($i<$RowCount) 235: { 236: list ($url,$titre,$description,$langue,$last_update)= mysql_fetch_row($result); 237: eval($template); 238: $indiceG++;$i++; 239: } 240: if ($i==0) {$resultat="<p>Pas de pages dans cette cat馮orie</p>";} 241: return $resultat; 242: } 243: 244: /* 245: 246: Rend la chaine correspondante ? la cat馮orie $id avec ses rubriques parentes 247: 248: */ 249: 250: function getParent($id,$idr,$tab) 251: { 252: if (($tab[$id][1]!=0)&&($tab[$id][0])) {$parent = getParent($tab[$id][1],$idr,$tab);} 253: if (!$tab[$id][0]) {$tab[$id][0]='Home';} 254: $parent.="><a href=\"".get_link_categorie($id,$idr).'">'.$tab[$id][0]."</a>"; 255: return $parent; 256: } 257: function getWLParent($id,$idr,$tab) 258: { 259: if (($tab[$id][1]!=0)&&($tab[$id][0])) {$parent = getWLParent($tab[$id][1],$idr,$tab);} 260: if (!$tab[$id][0]) {$tab[$id][0]='Home';} 261: $parent.=">".$tab[$id][0]; 262: return $parent; 263: } 264: /* 265: 266: Retourne 1 si $var appartient ? $liste, 0 sinon. 267: 268: */ 269: function appartient($var,$liste) 270: { 271: while( list($key,$val) = each ($liste)) {if ($val==$var) {return 1;}} 272: return 0; 273: } 274: /** 275: * Retourne l'URL correspondant ? la page no $no_page dans la recherche en cours 276: */ 277: function get_link($no_page,$word,$id) 278: { 279: $buf = getenv('SCRIPT_NAME')."?word=".urlencode($word)."&id=".$id."&first=".$no_page; 280: if ($nbResultPerPage) {$buf.="&nbResultPerPage=".$nbResultPerPage;} 281: return $buf; 282: } 283: /** 284: * Retourne l'URL correspondant ? la categorie no $no_categorie 285: */ 286: function get_link_categorie($no_categorie,$id) {return getenv('SCRIPT_NAME')."?categorie=$no_categorie&id=$id";} 287: 288: /** 289: * Retourne le nom du site dans la table responsable correspondant ? l'id $id 290: */ 291: 292: function get_name_site($id,$prefix) 293: { 294: #$result = mysql_db_query("circa","select titre from ".$this->{PREFIX_TABLE}."responsable where id=$id"); 295: #$sth->execute() || print "Erreur: $DBI::errstr\n"; 296: #my ($titre)=$sth->fetchrow_array; 297: #$sth->finish; 298: return $titre; 299: } 300: 301: function get_liste_categorie($idr) 302: { 303: global $database; 304: global $prefix; 305: $requete = "select id,nom,parent from ".$prefix.$idr."categorie"; 306: $result = mysql_db_query($database,$requete); 307: $RowCount = MySQL_NUMROWS($result); 308: $i=0; 309: while ($i<$RowCount) 310: { 311: list ($idc,$nom,$parent)= mysql_fetch_row($result); 312: $tab[$idc][0]=$nom; 313: $tab[$idc][1]=$parent; 314: $i++; 315: } 316: while( list($key,$val) = each ($tab)) 317: { 318: $nom=$tab[$key][0]; 319: $parent=$tab[$key][1]; 320: $buf.="<option value=\"$key\">".getWLParent($key,$idr,$tab)."</option>"; 321: } 322: return $buf; 323: } 324: 325: function addSite($url,$categorie) 326: { 327: global $database; 328: global $prefix; 329: global $idr; 330: $requete="insert into ".$prefix.$idr."links (url,titre,description,langue,valide,categorie,browse_categorie) 331: values ('$url',' ',' ','fr',0,$categorie,'1')"; 332: $result = mysql_db_query($database,$requete); 333: } 334: ?> 335: