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.="&gt;<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.="&gt;".$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: 

AltStyle によって変換されたページ (->オリジナル) /