Subversion Repositories Applications.papyrus

Rev

Rev 846 | Rev 1034 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 846 Rev 1032
1
<?php
1
<?php
2
/*vim: set expandtab tabstop=4 shiftwidth=4: */ 
2
/*vim: set expandtab tabstop=4 shiftwidth=4: */ 
3
// +------------------------------------------------------------------------------------------------------+
3
// +------------------------------------------------------------------------------------------------------+
4
// | PHP version 4.1                                                                                      |
4
// | PHP version 4.1                                                                                      |
5
// +------------------------------------------------------------------------------------------------------+
5
// +------------------------------------------------------------------------------------------------------+
6
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
6
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
7
// +------------------------------------------------------------------------------------------------------+
7
// +------------------------------------------------------------------------------------------------------+
8
// | This file is part of Papyrus.                                                                        |
8
// | This file is part of Papyrus.                                                                        |
9
// |                                                                                                      |
9
// |                                                                                                      |
10
// | Foobar is free software; you can redistribute it and/or modify                                       |
10
// | Foobar is free software; you can redistribute it and/or modify                                       |
11
// | it under the terms of the GNU General Public License as published by                                 |
11
// | it under the terms of the GNU General Public License as published by                                 |
12
// | the Free Software Foundation; either version 2 of the License, or                                    |
12
// | the Free Software Foundation; either version 2 of the License, or                                    |
13
// | (at your option) any later version.                                                                  |
13
// | (at your option) any later version.                                                                  |
14
// |                                                                                                      |
14
// |                                                                                                      |
15
// | Foobar is distributed in the hope that it will be useful,                                            |
15
// | Foobar is distributed in the hope that it will be useful,                                            |
16
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
16
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
17
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
17
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
18
// | GNU General Public License for more details.                                                         |
18
// | GNU General Public License for more details.                                                         |
19
// |                                                                                                      |
19
// |                                                                                                      |
20
// | You should have received a copy of the GNU General Public License                                    |
20
// | You should have received a copy of the GNU General Public License                                    |
21
// | along with Foobar; if not, write to the Free Software                                                |
21
// | along with Foobar; if not, write to the Free Software                                                |
22
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
22
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
23
// +------------------------------------------------------------------------------------------------------+
23
// +------------------------------------------------------------------------------------------------------+
24
// CVS : $Id$
24
// CVS : $Id$
25
/**
25
/**
26
* Classe permettant d'effectuer des recherches sur les informations des articles de Spip.
26
* Classe permettant d'effectuer des recherches sur les informations des articles de Spip.
27
*
27
*
28
* Permet de rechercher et classer les articles en fonction d'une chaine.
28
* Permet de rechercher et classer les articles en fonction d'une chaine.
29
* Utilisation des bibliothèques inclue par Papyrus :
29
* Utilisation des bibliothèques inclue par Papyrus :
30
* - Papyrus pap_meta.fonct.php
30
* - Papyrus pap_meta.fonct.php
31
* - Papyrus pap_menu.fonct.php
31
* - Papyrus pap_menu.fonct.php
32
* - Papyrus pap_url.class.php
32
* - Papyrus pap_url.class.php
33
*
33
*
34
*@package Applette
34
*@package Applette
35
*@subpackage Moteur_Recherche
35
*@subpackage Moteur_Recherche
36
//Auteur original :
36
//Auteur original :
37
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
37
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
38
//Autres auteurs :
38
//Autres auteurs :
39
*@author        aucun
39
*@author        aucun
40
*@copyright     Tela-Botanica 2000-2006
40
*@copyright     Tela-Botanica 2000-2006
41
*@version       $Revision$ $Date$
41
*@version       $Revision$ $Date$
42
// +------------------------------------------------------------------------------------------------------+
42
// +------------------------------------------------------------------------------------------------------+
43
*/
43
*/
44
 
44
 
45
// +------------------------------------------------------------------------------------------------------+
45
// +------------------------------------------------------------------------------------------------------+
46
// |                                            ENTETE du PROGRAMME                                       |
46
// |                                            ENTETE du PROGRAMME                                       |
47
// +------------------------------------------------------------------------------------------------------+
47
// +------------------------------------------------------------------------------------------------------+
48
///** Inclusion du fichier contenant les fonctions de manipulations des menus de Papyrus.*/
48
///** Inclusion du fichier contenant les fonctions de manipulations des menus de Papyrus.*/
49
//require_once GEN_CHEMIN_BIBLIO.'pap_menu.fonct.php';
49
//require_once GEN_CHEMIN_BIBLIO.'pap_menu.fonct.php';
50
 
50
 
51
// +------------------------------------------------------------------------------------------------------+
51
// +------------------------------------------------------------------------------------------------------+
52
// |                                            CORPS du PROGRAMME                                        |
52
// |                                            CORPS du PROGRAMME                                        |
53
// +------------------------------------------------------------------------------------------------------+
53
// +------------------------------------------------------------------------------------------------------+
54
 
54
 
55
class Recherche_Spip_Article extends Recherche {
55
class Recherche_Spip_Article extends Recherche {
56
    
56
    
57
    // Constructeur
57
    // Constructeur
58
    function Recherche_Menu_Meta($motif) {
58
    function Recherche_Menu_Meta($motif) {
59
        $this->setMotif($motif);
59
        $this->setMotif($motif);
60
    }
60
    }
61
    
61
    
62
    // Accesseurs
62
    // Accesseurs
63
    function getMotif() {
63
    function getMotif() {
64
        return $this->motif;
64
        return $this->motif;
65
    }
65
    }
66
    function setMotif($motif) {
66
    function setMotif($motif) {
67
        $this->motif = $motif;
67
        $this->motif = $motif;
68
    }
68
    }
69
    
69
    
70
    // Méthodes
70
    // Méthodes
71
    function rechercherMotif($motif) {
71
    function rechercherMotif($motif) {
72
    	for ($i = 0; $i < count($GLOBALS['_MOTEUR_RECHERCHE_']['spip']); $i++ ) {
72
    	for ($i = 0; $i < count($GLOBALS['_MOTEUR_RECHERCHE_']['spip']); $i++ ) {
73
	        $db = DB::connect($GLOBALS['_MOTEUR_RECHERCHE_']['spip'][$i]['bdd_dsn']);
73
	        $db = DB::connect($GLOBALS['_MOTEUR_RECHERCHE_']['spip'][$i]['bdd_dsn']);
74
	        if (DB::isError($db)) {
74
	        if (DB::isError($db)) {
75
	    		$msg_erreur_connection = 'Impossible de se connecter à la base de données Spip.';
75
	    		$msg_erreur_connection = 'Impossible de se connecter à la base de données Spip.';
76
	    		die(BOG_afficherErreurSql(__FILE__, __LINE__, $db->getMessage(), 'connexion à la base de données',$msg_erreur_connection));
76
	    		die(BOG_afficherErreurSql(__FILE__, __LINE__, $db->getMessage(), 'connexion à la base de données',$msg_erreur_connection));
77
			}
77
			}
78
	        $prefixe = $GLOBALS['_MOTEUR_RECHERCHE_']['spip'][$i]['table_prefixe'];
78
	        $prefixe = $GLOBALS['_MOTEUR_RECHERCHE_']['spip'][$i]['table_prefixe'];
79
	        $url_base = $GLOBALS['_MOTEUR_RECHERCHE_']['spip'][$i]['url'];
79
	        $url_base = $GLOBALS['_MOTEUR_RECHERCHE_']['spip'][$i]['url'];
80
	        $tab_articles = $this->retournerArticles($db, $prefixe);
80
	        $tab_articles = $this->retournerArticles($db, $prefixe);
81
	        foreach ($tab_articles as $article_id => $Article) {
81
	        foreach ($tab_articles as $article_id => $Article) {
82
	            // Initialisation du tableau de résultat vide
82
	            // Initialisation du tableau de résultat vide
83
	            $aso_resultat = array(  'poids' => 0, 'url' => '', 'titre' => '',
83
	            $aso_resultat = array(  'poids' => 0, 'url' => '', 'titre' => '',
84
	                                    'hreflang' => '', 'accesskey' => '', 'title' => '',
84
	                                    'hreflang' => '', 'accesskey' => '', 'title' => '',
85
	                                    'date_creation' => '', 'description' => '');
85
	                                    'date_creation' => '', 'description' => '');
86
	            
-
 
87
	            // Création de l'url
-
 
88
	            $var_recherche = str_replace(' ', '+', trim($motif));
-
 
89
	            $aso_resultat['url'] = $url_base.'article'.$article_id.'.html?var_recherche='.$var_recherche;
-
 
90
	            
-
 
91
	            // Récupération du titre de la page
-
 
92
	            if (trim($Article->titre) != '') {
-
 
93
	                $aso_resultat['titre'] = htmlentities($Article->titre);
-
 
94
	            } else if (trim($Article->surtitre) != '') {
-
 
95
	                $aso_resultat['titre'] = htmlentities($Article->surtitre);
-
 
96
	            } else if (trim($Article->soustitre) != '') {
-
 
97
	                $aso_resultat['titre'] = htmlentities($Article->soustitre);
-
 
98
	            }
-
 
99
	            $aso_resultat['hreflang'] = htmlentities($Article->lang);
-
 
100
	            
-
 
101
	            $aso_resultat['description'] = $this->couper($Article->texte, 450);
-
 
102
	            
-
 
103
	            if (($jour = date('d', strtotime($Article->date)) ) != 0 ) {
-
 
104
	                $aso_resultat['date_creation'] .= '<span class="page_modification_jour"> '.$jour.'</span>'."\n";
-
 
105
	            }
-
 
106
	            if (($mois = $this->traduireMois(date('m', strtotime($Article->date))) ) != '' ) {
-
 
107
	                $aso_resultat['date_creation'] .= '<span class="page_modification_mois"> '.$mois.'</span>'."\n";
-
 
108
	            }
-
 
109
	            if (($annee = date('Y', strtotime($Article->date)) ) != 0 ) {
-
 
110
	                $aso_resultat['date_creation'] .= '<span class="page_modification_annee"> '.$annee.'</span>'."\n";
-
 
111
	            }
-
 
112
	            
86
	            
113
	            // Analyse du poids de cette page vis à vis des données
87
	            // Analyse du poids de cette page vis à vis des données
-
 
88
	            $tab_champs_a_visiter = array(  'surtitre', 'titre', 'soustitre', 'descriptif', 'chapo', 'texte', 'ps');
-
 
89
	            $tab_motif = explode(' ', $motif);
114
	            $tab_champs_a_visiter = array(  'surtitre', 'titre', 'soustitre', 'descriptif', 'chapo', 'texte', 'ps');
90
	            $bool_operateur_et = false;
-
 
91
	            foreach ($tab_champs_a_visiter as $val) {
-
 
92
	                $compteur_mot = 0;
115
	            foreach ($tab_champs_a_visiter as $val) {
93
	                foreach ($tab_motif as $mot_motif) {
-
 
94
	                	$nbre_mot = $this->retournerOccurenceMotif($mot_motif, $Article->$val);
-
 
95
	                	if ($nbre_mot > 0) {
-
 
96
	                		$compteur_mot++;
-
 
97
	                	}
-
 
98
	                	$aso_resultat['poids'] += $nbre_mot;
-
 
99
	                }
-
 
100
	                if ($compteur_mot == count($tab_motif)) {
-
 
101
	                	$bool_operateur_et = true;
116
	                $aso_resultat['poids'] += $this->retournerOccurenceMotif($motif, $Article->$val);
102
	                }
117
	            }
103
	            }
118
	            
104
	            
-
 
105
	            if ($aso_resultat['poids'] > 0 && $bool_operateur_et == true) {
-
 
106
	                // Création de l'url
-
 
107
		            $var_recherche = str_replace(' ', '+', trim($motif));
-
 
108
		            $aso_resultat['url'] = $url_base.'article'.$article_id.'.html?var_recherche='.$var_recherche;
-
 
109
		            
-
 
110
		            // Récupération du titre de la page
-
 
111
		            if (trim($Article->titre) != '') {
-
 
112
		                $aso_resultat['titre'] = htmlentities($Article->titre);
-
 
113
		            } else if (trim($Article->surtitre) != '') {
-
 
114
		                $aso_resultat['titre'] = htmlentities($Article->surtitre);
-
 
115
		            } else if (trim($Article->soustitre) != '') {
-
 
116
		                $aso_resultat['titre'] = htmlentities($Article->soustitre);
-
 
117
		            }
-
 
118
		            $aso_resultat['hreflang'] = htmlentities($Article->lang);
-
 
119
		            
-
 
120
		            $aso_resultat['description'] = $this->couper($Article->texte, 450);
-
 
121
		            
-
 
122
		            if (($jour = date('d', strtotime($Article->date)) ) != 0 ) {
-
 
123
		                $aso_resultat['date_creation'] .= '<span class="page_modification_jour"> '.$jour.'</span>'."\n";
-
 
124
		            }
-
 
125
		            if (($mois = $this->traduireMois(date('m', strtotime($Article->date))) ) != '' ) {
-
 
126
		                $aso_resultat['date_creation'] .= '<span class="page_modification_mois"> '.$mois.'</span>'."\n";
-
 
127
		            }
-
 
128
		            if (($annee = date('Y', strtotime($Article->date)) ) != 0 ) {
-
 
129
		                $aso_resultat['date_creation'] .= '<span class="page_modification_annee"> '.$annee.'</span>'."\n";
119
	            if ($aso_resultat['poids'] > 0) {
130
		            }
120
	                $this->setResultat($aso_resultat);
131
	                $this->setResultat($aso_resultat);
121
	            }
132
	            }
122
	        }
133
	        }
123
    	}
134
    	}
124
        return $this->getResultats();
135
        return $this->getResultats();
125
    }
136
    }
126
    
137
    
127
    /** Renvoie un tableau contenant les infos sur les articles
138
    /** Renvoie un tableau contenant les infos sur les articles
128
	*
139
	*
129
	* @param  mixed		une instance de la classse Pear DB.
140
	* @param  mixed		une instance de la classse Pear DB.
130
	* @param  string	le préfixe pour les tables spip.
141
	* @param  string	le préfixe pour les tables spip.
131
	* @return array		tableau contenant les articles.
142
	* @return array		tableau contenant les articles.
132
	*/
143
	*/
133
	function retournerArticles(&$db, $prefixe = '')
144
	function retournerArticles(&$db, $prefixe = '')
134
	{
145
	{
135
	    //----------------------------------------------------------------------------
146
	    //----------------------------------------------------------------------------
136
	    // Recherche des informations sur le menu
147
	    // Recherche des informations sur le menu
137
	    $requete =  'SELECT * '.
148
	    $requete =  'SELECT * '.
138
	                'FROM '.$prefixe.'spip_articles '.
149
	                'FROM '.$prefixe.'spip_articles '.
139
	                'WHERE statut = "publie"';
150
	                'WHERE statut = "publie"';
140
	
151
	
141
	    $resultat = $db->query($requete);
152
	    $resultat = $db->query($requete);
142
	    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
153
	    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
143
	
154
	
144
	    //----------------------------------------------------------------------------
155
	    //----------------------------------------------------------------------------
145
	    // Récupération des infos
156
	    // Récupération des infos
146
	    $tab_retour = array();
157
	    $tab_retour = array();
147
	    while ($info_article = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
158
	    while ($info_article = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
148
	        $tab_retour[$info_article->id_article] = $info_article;
159
	        $tab_retour[$info_article->id_article] = $info_article;
149
	    }
160
	    }
150
	    $resultat->free();
161
	    $resultat->free();
151
	
162
	
152
	    return $tab_retour;
163
	    return $tab_retour;
153
	}
164
	}
154
	
165
	
155
	// Fichier : inc_texte.php3
166
	// Fichier : inc_texte.php3
156
	function couper($texte, $taille = 50)
167
	function couper($texte, $taille = 50)
157
	{
168
	{
158
		$texte = substr($texte, 0, 400 + 2*$taille); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
169
		$texte = substr($texte, 0, 400 + 2*$taille); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
159
	
170
	
160
		// on utilise les \r pour passer entre les gouttes
171
		// on utilise les \r pour passer entre les gouttes
161
		$texte = str_replace("\r\n", "\n", $texte);
172
		$texte = str_replace("\r\n", "\n", $texte);
162
		$texte = str_replace("\r", "\n", $texte);
173
		$texte = str_replace("\r", "\n", $texte);
163
	
174
	
164
		// sauts de ligne et paragraphes
175
		// sauts de ligne et paragraphes
165
		$texte = ereg_replace("\n\n+", "\r", $texte);
176
		$texte = ereg_replace("\n\n+", "\r", $texte);
166
		$texte = ereg_replace("<(p|br)( [^>]*)?".">", "\r", $texte);
177
		$texte = ereg_replace("<(p|br)( [^>]*)?".">", "\r", $texte);
167
	
178
	
168
		// supprimer les traits, lignes etc
179
		// supprimer les traits, lignes etc
169
		$texte = ereg_replace("(^|\r|\n)(-[-#\*]*|_ )", "\r", $texte);
180
		$texte = ereg_replace("(^|\r|\n)(-[-#\*]*|_ )", "\r", $texte);
170
	
181
	
171
		// supprimer les tags
182
		// supprimer les tags
172
		$texte = $this->supprimer_tags($texte);
183
		$texte = $this->supprimer_tags($texte);
173
		$texte = trim(str_replace("\n"," ", $texte));
184
		$texte = trim(str_replace("\n"," ", $texte));
174
		$texte .= "\n";	// marquer la fin
185
		$texte .= "\n";	// marquer la fin
175
	
186
	
176
		// travailler en accents charset
187
		// travailler en accents charset
177
		// On supprime dans Papyrus car cela tire trop de fonctions...
188
		// On supprime dans Papyrus car cela tire trop de fonctions...
178
		//$texte = $this->filtrer_entites($texte);
189
		//$texte = $this->filtrer_entites($texte);
179
	
190
	
180
		// supprimer les liens
191
		// supprimer les liens
181
		$texte = ereg_replace("\[->([^]]*)\]","\\1", $texte); // liens sans texte
192
		$texte = ereg_replace("\[->([^]]*)\]","\\1", $texte); // liens sans texte
182
		$texte = ereg_replace("\[([^\[]*)->([^]]*)\]","\\1", $texte);
193
		$texte = ereg_replace("\[([^\[]*)->([^]]*)\]","\\1", $texte);
183
	
194
	
184
		// supprimer les notes
195
		// supprimer les notes
185
		$texte = ereg_replace("\[\[([^]]|\][^]])*\]\]", "", $texte);
196
		$texte = ereg_replace("\[\[([^]]|\][^]])*\]\]", "", $texte);
186
	
197
	
187
		// supprimer les codes typos
198
		// supprimer les codes typos
188
		$texte = ereg_replace("[}{]", "", $texte);
199
		$texte = ereg_replace("[}{]", "", $texte);
189
	
200
	
190
		// supprimer les tableaux
201
		// supprimer les tableaux
191
		$texte = ereg_replace("(^|\r)\|.*\|\r", "\r", $texte);
202
		$texte = ereg_replace("(^|\r)\|.*\|\r", "\r", $texte);
192
	
203
	
193
		// couper au mot precedent
204
		// couper au mot precedent
194
		$long = $this->spip_substr($texte, 0, max($taille-4,1));
205
		$long = $this->spip_substr($texte, 0, max($taille-4,1));
195
		$court = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*\n?$", "\\1", $long);
206
		$court = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*\n?$", "\\1", $long);
196
		$points = '&nbsp;(...)';
207
		$points = '&nbsp;(...)';
197
	
208
	
198
		// trop court ? ne pas faire de (...)
209
		// trop court ? ne pas faire de (...)
199
		if (strlen($court) < max(0.75 * $taille,2)) {
210
		if (strlen($court) < max(0.75 * $taille,2)) {
200
			$points = '';
211
			$points = '';
201
			$long = $this->spip_substr($texte, 0, $taille);
212
			$long = $this->spip_substr($texte, 0, $taille);
202
			$texte = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $long);
213
			$texte = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $long);
203
			// encore trop court ? couper au caractere
214
			// encore trop court ? couper au caractere
204
			if (strlen($texte) < 0.75 * $taille)
215
			if (strlen($texte) < 0.75 * $taille)
205
				$texte = $long;
216
				$texte = $long;
206
		} else
217
		} else
207
			$texte = $court;
218
			$texte = $court;
208
	
219
	
209
		if (strpos($texte, "\n"))	// la fin est encore la : c'est qu'on n'a pas de texte de suite
220
		if (strpos($texte, "\n"))	// la fin est encore la : c'est qu'on n'a pas de texte de suite
210
			$points = '';
221
			$points = '';
211
	
222
	
212
		// remettre les paragraphes
223
		// remettre les paragraphes
213
		$texte = ereg_replace("\r+", "\n\n", $texte);
224
		$texte = ereg_replace("\r+", "\n\n", $texte);
214
	
225
	
215
		// supprimer l'eventuelle entite finale mal coupee
226
		// supprimer l'eventuelle entite finale mal coupee
216
		$texte = preg_replace('/&#?[a-z0-9]*$/', '', $texte);
227
		$texte = preg_replace('/&#?[a-z0-9]*$/', '', $texte);
217
	
228
	
218
		return trim($texte).$points;
229
		return trim($texte).$points;
219
	}
230
	}
220
	
231
	
221
	// Gerer les outils mb_string
232
	// Gerer les outils mb_string
222
	// Fichier : inc_texte.php3	
233
	// Fichier : inc_texte.php3	
223
	function spip_substr($c, $start=0, $end='')
234
	function spip_substr($c, $start=0, $end='')
224
	{
235
	{
225
		// methode substr normale
236
		// methode substr normale
226
		if ($end) {
237
		if ($end) {
227
			return substr($c, $start, $end);
238
			return substr($c, $start, $end);
228
		} else {
239
		} else {
229
			return substr($c, $start);
240
			return substr($c, $start);
230
		}
241
		}
231
	}
242
	}
232
 
243
 
233
	// Suppression basique et brutale de tous les <...>
244
	// Suppression basique et brutale de tous les <...>
234
	// Fichier : inc_filtres.php3
245
	// Fichier : inc_filtres.php3
235
	function supprimer_tags($texte, $rempl = "")
246
	function supprimer_tags($texte, $rempl = "")
236
	{
247
	{
237
		$texte = preg_replace(",<[^>]*>,U", $rempl, $texte);
248
		$texte = preg_replace(",<[^>]*>,U", $rempl, $texte);
238
		// ne pas oublier un < final non ferme
249
		// ne pas oublier un < final non ferme
239
		$texte = str_replace('<', ' ', $texte);
250
		$texte = str_replace('<', ' ', $texte);
240
		return $texte;
251
		return $texte;
241
	}
252
	}
242
 
253
 
243
}
254
}
244
 
255
 
245
/* +--Fin du code ----------------------------------------------------------------------------------------+
256
/* +--Fin du code ----------------------------------------------------------------------------------------+
246
*
257
*
247
* $Log$
258
* $Log$
-
 
259
* Revision 1.1  2006/05/19 10:04:55  jp_milcent
-
 
260
* Ajout d'un moteur de recherche analysant les articles des sites sous Spip.
-
 
261
*
248
* 
262
* 
249
* +-- Fin du code ----------------------------------------------------------------------------------------+
263
* +-- Fin du code ----------------------------------------------------------------------------------------+
250
*/
264
*/
251
?>
265
?>