Subversion Repositories Applications.papyrus

Rev

Rev 1935 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1935 Rev 1973
Line 19... Line 19...
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: more_recherche.class.php,v 1.12.2.1 2008-10-22 07:45:46 aperonnet Exp $
24
// CVS : $Id: more_recherche.class.php,v 1.12.2.2 2008-11-19 09:30:18 aperonnet Exp $
25
/**
25
/**
26
* Classe permettant d'effectuer des recherches sur les métas informations des menus.
26
* Classe permettant d'effectuer des recherches sur les métas informations des menus.
27
*
27
*
28
* Permet de rechercher et classer les menus en fonction d'une chaine.
28
* Permet de rechercher et classer les menus en fonction d'une chaine.
29
*
29
*
Line 32... Line 32...
32
//Auteur original :
32
//Auteur original :
33
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
33
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
34
//Autres auteurs :
34
//Autres auteurs :
35
*@author        aucun
35
*@author        aucun
36
*@copyright     Tela-Botanica 2000-2004
36
*@copyright     Tela-Botanica 2000-2004
37
*@version       $Revision: 1.12.2.1 $ $Date: 2008-10-22 07:45:46 $
37
*@version       $Revision: 1.12.2.2 $ $Date: 2008-11-19 09:30:18 $
38
// +------------------------------------------------------------------------------------------------------+
38
// +------------------------------------------------------------------------------------------------------+
39
*/
39
*/
Line 40... Line 40...
40
 
40
 
41
// +------------------------------------------------------------------------------------------------------+
41
// +------------------------------------------------------------------------------------------------------+
Line 60... Line 60...
60
    // Accesseurs
60
    // Accesseurs
61
    function getMotif() {
61
    function getMotif() {
62
        return $this->motif;
62
        return $this->motif;
63
    }
63
    }
64
    function setMotif($motif) {
64
    function setMotif($motif) {
65
        $this->motif = $motif;
65
        $this->motif = $motif ;
66
    }
66
    }
67
    function getMoteurs() {
67
    function getMoteurs() {
68
        return $this->moteurs_recherches;
68
        return $this->moteurs_recherches;
69
    }
69
    }
70
    function getMoteur($id) {
70
    function getMoteur($id) {
Line 84... Line 84...
84
        $id_nouveau = count($this->resultats);
84
        $id_nouveau = count($this->resultats);
85
        $this->resultats[$id_nouveau] = $aso_page;
85
        $this->resultats[$id_nouveau] = $aso_page;
86
    }
86
    }
Line 87... Line 87...
87
    
87
    
-
 
88
    // Méthodes
-
 
89
    function eliminerAccents($motif)
-
 
90
    {
-
 
91
    	return strtr($motif,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç'",
-
 
92
                 "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc " ); 
Line 88... Line 93...
88
    // Méthodes
93
    }
89
    
94
    
90
    function ajouterRecherche(&$objet_recherche) {
95
    function ajouterRecherche(&$objet_recherche) {
Line 91... Line 96...
91
        return $this->setMoteur($objet_recherche);
96
        return $this->setMoteur($objet_recherche);
92
    }
97
    }
93
 
98
 
94
    function rechercherMotif() {
99
    function rechercherMotif() {
95
        foreach ($this->getMoteurs() as $cle => $val) {
100
        foreach ($this->getMoteurs() as $cle => $val) {
-
 
101
            $this->setResultats(array_merge((array)$this->getResultats(),(array)$val->rechercherMotif($this->getMotif())));
-
 
102
        }
96
            $this->setResultats(array_merge((array)$this->getResultats(),(array)$val->rechercherMotif($this->getMotif())));
103
        $aso_resultats = $this->getResultats();
97
        }
104
        
98
        $aso_resultats = $this->getResultats();
105
        // on teste l'existence de la fonction anonyme car sinon bug d'inclusion très pénible !
99
        if(!function_exists('comparer'))
106
	    if (!function_exists('comparer')) {
100
        {
107
	    	
101
	        function comparer($a, $b) {
108
	       	function comparer($a, $b) {
102
	            if ($a['poids'] > $b['poids']) {
109
	            if ($a['poids'] > $b['poids']) {
103
	                return -1;
110
	                return -1;
104
	            }
111
	            }
105
	            if ($a['poids'] < $b['poids']) {
112
	            if ($a['poids'] < $b['poids']) {
106
	                return +1;
113
	                return +1;
107
	            }
114
	            }
108
	            if ($a['poids'] = $b['poids']) {
115
	            if ($a['poids'] = $b['poids']) {
109
	                return 0;
116
	                return 0;
110
	            }
117
	            }
111
	        }
118
	        }
112
        }
119
	    }
113
        usort($aso_resultats, 'comparer');
120
        usort($aso_resultats, 'comparer');
114
        $pds_max = 0;
121
        $pds_max = 0;
Line 154... Line 161...
154
		}
161
		}
155
		// Nous recherchons chaque mot
162
		// Nous recherchons chaque mot
156
		$compteur_mot = 0;
163
		$compteur_mot = 0;
157
		foreach ($tab_motif as $mot) {
164
		foreach ($tab_motif as $mot) {
158
			//$nbre_correspondance += preg_match_all('/'.$mot.'/i', $texte, $tab_morceaux);
165
			//$nbre_correspondance += preg_match_all('/'.$mot.'/i', $texte, $tab_morceaux);
159
			$nbre_correspondance = substr_count(strtolower($texte), strtolower($mot));
166
			$nbre_correspondance = substr_count($this->eliminerAccents(strtolower($texte)), $this->eliminerAccents(strtolower($mot)));
160
			if ($nbre_correspondance > 0) {
167
			if ($nbre_correspondance > 0) {
161
				$compteur_mot++;
168
				$compteur_mot++;
162
			}
169
			}
163
			$nbre_correspondance_total += $nbre_correspondance; 
170
			$nbre_correspondance_total += $nbre_correspondance; 
164
		}
171
		}
Line 169... Line 176...
169
			return 0;
176
			return 0;
170
		}
177
		}
171
	}
178
	}
Line 172... Line 179...
172
	
179
	
173
	function traiterMotif($motif, $type = 0)
180
	function traiterMotif($motif, $type = 0)
174
    {
181
    { 	
175
    	switch ($type) {
182
    	switch ($type) {
176
			case 'simple' :
183
			case 'simple' :
177
				return trim(stripslashes($motif));
184
				return trim(stripslashes($motif));
178
				break;
185
				break;
Line 223... Line 230...
223
                return 'décembre';
230
                return 'décembre';
224
            default:
231
            default:
225
                return '';
232
                return '';
226
        }
233
        }
227
    }
234
    }
-
 
235
    
-
 
236
    /**
-
 
237
     * Coupe un texte suivant une taille donnée, pour éviter qu'il ne soit 
-
 
238
     * trop long lors de l'affichage
-
 
239
     * @param String texte à couper
-
 
240
     * @param int taille maximum du texte
-
 
241
     */
-
 
242
	function couperTexte($texte, $taille = 50)
-
 
243
	{
-
 
244
		$texte = substr($texte, 0, 400 + 2*$taille); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
-
 
245
	
-
 
246
		// on utilise les \r pour passer entre les gouttes
-
 
247
		$texte = str_replace("\r\n", "\n", $texte);
-
 
248
		$texte = str_replace("\r", "\n", $texte);
-
 
249
	
-
 
250
		// sauts de ligne et paragraphes
-
 
251
		$texte = ereg_replace("\n\n+", "\r", $texte);
-
 
252
		$texte = ereg_replace("<(p|br)( [^>]*)?".">", "\r", $texte);
-
 
253
	
-
 
254
		// supprimer les traits, lignes etc
-
 
255
		$texte = ereg_replace("(^|\r|\n)(-[-#\*]*|_ )", "\r", $texte);
-
 
256
	
-
 
257
		// supprimer les tags
-
 
258
		$texte = $this->supprimerTags($texte);
-
 
259
		$texte = trim(str_replace("\n"," ", $texte));
-
 
260
		$texte .= "\n";	// marquer la fin
-
 
261
	
-
 
262
		// travailler en accents charset
-
 
263
		// On supprime dans Papyrus car cela tire trop de fonctions...
-
 
264
		//$texte = $this->filtrer_entites($texte);
-
 
265
	
-
 
266
		// supprimer les liens
-
 
267
		$texte = ereg_replace("\[->([^]]*)\]","\\1", $texte); // liens sans texte
-
 
268
		$texte = ereg_replace("\[([^\[]*)->([^]]*)\]","\\1", $texte);
-
 
269
	
-
 
270
		// supprimer les notes
-
 
271
		$texte = ereg_replace("\[\[([^]]|\][^]])*\]\]", "", $texte);
-
 
272
	
-
 
273
		// supprimer les codes typos
-
 
274
		$texte = ereg_replace("[}{]", "", $texte);
-
 
275
	
-
 
276
		// supprimer les tableaux
-
 
277
		$texte = ereg_replace("(^|\r)\|.*\|\r", "\r", $texte);
-
 
278
	
-
 
279
		// couper au mot precedent
-
 
280
		$long = $this->gererSubstr($texte, 0, max($taille-4,1));
-
 
281
		$court = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*\n?$", "\\1", $long);
-
 
282
		$points = MORE_LG_RESULTAT_ETC;
-
 
283
	
-
 
284
		// trop court ? ne pas faire de (...)
-
 
285
		if (strlen($court) < max(0.75 * $taille,2)) {
-
 
286
			$points = '';
-
 
287
			$long = $this->gererSubstr($texte, 0, $taille);
-
 
288
			$texte = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $long);
-
 
289
			// encore trop court ? couper au caractere
-
 
290
			if (strlen($texte) < 0.75 * $taille)
-
 
291
				$texte = $long;
-
 
292
		} else
-
 
293
			$texte = $court;
-
 
294
	
-
 
295
		if (strpos($texte, "\n"))	// la fin est encore la : c'est qu'on n'a pas de texte de suite
-
 
296
			$points = '';
-
 
297
	
-
 
298
		// remettre les paragraphes
-
 
299
		$texte = ereg_replace("\r+", "\n\n", $texte);
-
 
300
	
-
 
301
		// supprimer l'eventuelle entite finale mal coupee
-
 
302
		$texte = preg_replace('/&#?[a-z0-9]*$/', '', $texte);
-
 
303
	
-
 
304
		return trim($texte).$points;
-
 
305
	}
-
 
306
	
-
 
307
	// Gerer les outils mb_string
-
 
308
	// Fichier : inc_texte.php3	
-
 
309
	function gererSubstr($c, $start=0, $end='')
-
 
310
	{
-
 
311
		// methode substr normale
-
 
312
		if ($end) {
-
 
313
			return substr($c, $start, $end);
-
 
314
		} else {
-
 
315
			return substr($c, $start);
-
 
316
		}
-
 
317
	}
-
 
318
 
-
 
319
	// Suppression basique et brutale de tous les <...>
-
 
320
	// Fichier : inc_filtres.php3
-
 
321
	function supprimerTags($texte, $rempl = "")
-
 
322
	{
-
 
323
		$texte = preg_replace(",<[^>]*>,U", $rempl, $texte);
-
 
324
		// ne pas oublier un < final non ferme
-
 
325
		$texte = str_replace('<', ' ', $texte);
-
 
326
		return $texte;
-
 
327
	}
228
}
328
}
Line 229... Line 329...
229
 
329
 
230
/* +--Fin du code ----------------------------------------------------------------------------------------+
330
/* +--Fin du code ----------------------------------------------------------------------------------------+
231
*
331
*
-
 
332
* $Log: not supported by cvs2svn $
-
 
333
* Revision 1.15  2008-11-04 17:34:37  aperonnet
-
 
334
* le moteur de recherche donne les même résultats avec ou sans accents
-
 
335
*
-
 
336
* Revision 1.14  2008-10-21 16:54:18  aperonnet
-
 
337
* correction de bug de double inclusion de fichier quand une balise syndication est présente dans la page
-
 
338
*
-
 
339
* Revision 1.13  2008-10-21 15:24:50  aperonnet
-
 
340
* Ajout de résultats issus des fiches de bazar pour le moteur de recherche
232
* $Log: not supported by cvs2svn $
341
*
233
* Revision 1.12  2007-10-29 18:29:30  jp_milcent
342
* Revision 1.12  2007-10-29 18:29:30  jp_milcent
234
* Ajout d'un préfixe devant les classes de l'applette pour éviter les conflits avec d'autres classes provenant des applis clientes.
343
* Ajout d'un préfixe devant les classes de l'applette pour éviter les conflits avec d'autres classes provenant des applis clientes.
235
*
344
*
236
* Revision 1.11  2007-01-02 18:49:22  jp_milcent
345
* Revision 1.11  2007-01-02 18:49:22  jp_milcent