Subversion Repositories Applications.papyrus

Rev

Rev 2104 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2104 Rev 2109
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 More_Recherche_Spip_Article extends More_Recherche {
55
class More_Recherche_Spip_Article extends More_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
	            
86
	            
87
	            // 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');
88
	            $tab_champs_a_visiter = array('surtitre', 'titre', 'soustitre', 'descriptif', 'chapo', 'texte', 'ps');
89
	            foreach ($tab_champs_a_visiter as $val) {
89
	            foreach ($tab_champs_a_visiter as $val) {
90
	                // Vérification que le champ existe et contient quelque chose 
90
	                // Vérification que le champ existe et contient quelque chose 
91
	                if (isset($Article->$val) && $Article->$val != '') {
91
	                if (isset($Article->$val) && !empty($Article->$val)) {
92
						$aso_resultat['poids'] += $this->retournerOccurenceMotif($motif, $Article->$val);
92
						$aso_resultat['poids'] += $this->retournerOccurenceMotif($motif, $Article->$val);
93
	                }
93
	                }
94
	            }
94
	            }
95
	            
95
	            
96
	            if ($aso_resultat['poids'] > 0) {
96
	            if ($aso_resultat['poids'] > 0) {
97
	                // Création de l'url
97
	                // Création de l'url
98
		            $aso_resultat['url_simple'] = $url_base.'article'.$article_id.'.html';
98
		            $aso_resultat['url_simple'] = $url_base.'article'.$article_id.'.html';
99
		            $aso_resultat['url'] = $aso_resultat['url_simple'].'?var_recherche='.More_Recherche::traiterMotif($motif, 'url');
99
		            $aso_resultat['url'] = $aso_resultat['url_simple'].'?var_recherche='.More_Recherche::traiterMotif($motif, 'url');
100
		            
100
 
101
		            // Récupération du titre de la page
101
		            // Récupération du titre de la page
102
		            if (trim($Article->titre) != '') {
102
		            if (trim($Article->titre)) {
103
		                $aso_resultat['titre'] = htmlentities($Article->titre);
103
		                $aso_resultat['titre'] = htmlentities($Article->titre, ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
104
		            } else if (trim($Article->surtitre) != '') {
104
		            } else if (trim($Article->surtitre)) {
105
		                $aso_resultat['titre'] = htmlentities($Article->surtitre);
105
		                $aso_resultat['titre'] = htmlentities($Article->surtitre, ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
106
		            } else if (trim($Article->soustitre) != '') {
106
		            } else if (trim($Article->soustitre)) {
107
		                $aso_resultat['titre'] = htmlentities($Article->soustitre);
107
		                $aso_resultat['titre'] = htmlentities($Article->soustitre, ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
108
		            }
108
		            }
-
 
109
 
109
		            $aso_resultat['hreflang'] = htmlentities($Article->lang);
110
		            $aso_resultat['hreflang'] = htmlentities($Article->lang, ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
110
		            
111
		            
111
		            $aso_resultat['description'] = More_Recherche::couperTexte($Article->texte, MORE_RESULTAT_TAILLE_DESCRIPTION);
112
		            $aso_resultat['description'] = More_Recherche::couperTexte($Article->texte, MORE_RESULTAT_TAILLE_DESCRIPTION);
112
		            
113
		            
113
		            if (($jour = date('d', strtotime($Article->date)) ) != 0 ) {
114
		            if (($jour = date('d', strtotime($Article->date)) ) != 0 ) {
114
		                $aso_resultat['date_creation'] .= '<span class="page_modification_jour"> '.$jour.'</span>'."\n";
115
		                $aso_resultat['date_creation'] .= '<span class="page_modification_jour"> '.$jour.'</span>'."\n";
115
		            }
116
		            }
116
		            if (($mois = $this->traduireMois(date('m', strtotime($Article->date))) ) != '' ) {
117
		            if (($mois = $this->traduireMois(date('m', strtotime($Article->date))) ) != '' ) {
117
		                $aso_resultat['date_creation'] .= '<span class="page_modification_mois"> '.$mois.'</span>'."\n";
118
		                $aso_resultat['date_creation'] .= '<span class="page_modification_mois"> '.$mois.'</span>'."\n";
118
		            }
119
		            }
119
		            if (($annee = date('Y', strtotime($Article->date)) ) != 0 ) {
120
		            if (($annee = date('Y', strtotime($Article->date)) ) != 0 ) {
120
		                $aso_resultat['date_creation'] .= '<span class="page_modification_annee"> '.$annee.'</span>'."\n";
121
		                $aso_resultat['date_creation'] .= '<span class="page_modification_annee"> '.$annee.'</span>'."\n";
121
		            }
122
		            }
122
	                $this->setResultat($aso_resultat);
123
	                $this->setResultat($aso_resultat);
123
	            }
124
	            }
124
	        }
125
	        }
125
    	}
126
    	}
126
        return $this->getResultats();
127
        return $this->getResultats();
127
    }
128
    }
128
    
129
    
129
    /** Renvoie un tableau contenant les infos sur les articles
130
    /** Renvoie un tableau contenant les infos sur les articles
130
	*
131
	*
131
	* @param  mixed		une instance de la classse Pear DB.
132
	* @param  mixed		une instance de la classse Pear DB.
132
	* @param  string	le préfixe pour les tables spip.
133
	* @param  string	le préfixe pour les tables spip.
133
	* @return array		tableau contenant les articles.
134
	* @return array		tableau contenant les articles.
134
	*/
135
	*/
135
	function retournerArticles(&$db, $prefixe = '')
136
	function retournerArticles(&$db, $prefixe = '')
136
	{
137
	{
137
	    //----------------------------------------------------------------------------
138
	    //----------------------------------------------------------------------------
138
	    // Recherche des informations sur le menu
139
	    // Recherche des informations sur le menu
139
	    $requete =  'SELECT * '.
140
	    $requete =  'SELECT * '.
140
	                'FROM '.$prefixe.'spip_articles '.
141
	                'FROM '.$prefixe.'spip_articles '.
141
	                'WHERE statut = "publie"';
142
	                'WHERE statut = "publie"';
142
	
143
	
143
	    $resultat = $db->query($requete);
144
	    $resultat = $db->query($requete);
144
	    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
145
	    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
145
	
146
	
146
	    //----------------------------------------------------------------------------
147
	    //----------------------------------------------------------------------------
147
	    // Récupération des infos
148
	    // Récupération des infos
148
	    $tab_retour = array();
149
	    $tab_retour = array();
149
	    while ($info_article = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
150
	    while ($info_article = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
150
	        $tab_retour[$info_article->id_article] = $info_article;
151
	        $tab_retour[$info_article->id_article] = $info_article;
151
	    }
152
	    }
152
	    $resultat->free();
153
	    $resultat->free();
153
	
154
	
154
	    return $tab_retour;
155
	    return $tab_retour;
155
	}
156
	}
156
}
157
}
157
 
158
 
158
/* +--Fin du code ----------------------------------------------------------------------------------------+
159
/* +--Fin du code ----------------------------------------------------------------------------------------+
159
*
160
*
160
* $Log$
161
* $Log$
161
* Revision 1.7  2007-10-29 18:29:30  jp_milcent
162
* Revision 1.7  2007-10-29 18:29:30  jp_milcent
162
* Ajout d'un préfixe devant les classes de l'applette pour éviter les conflits avec d'autres classes provenant des applis clientes.
163
* Ajout d'un préfixe devant les classes de l'applette pour éviter les conflits avec d'autres classes provenant des applis clientes.
163
*
164
*
164
* Revision 1.6  2007-01-02 18:49:22  jp_milcent
165
* Revision 1.6  2007-01-02 18:49:22  jp_milcent
165
* Amélioration de la gestion du motif.
166
* Amélioration de la gestion du motif.
166
* Ajout de la gestion des expressions complête via l'utilisation de guillemets.
167
* Ajout de la gestion des expressions complête via l'utilisation de guillemets.
167
*
168
*
168
* Revision 1.5  2006/11/20 09:36:59  jp_milcent
169
* Revision 1.5  2006/11/20 09:36:59  jp_milcent
169
* Correction bogue zéro résultat et ajout d'url simple pour indiquer la page de l'article.
170
* Correction bogue zéro résultat et ajout d'url simple pour indiquer la page de l'article.
170
*
171
*
171
* Revision 1.4  2006/11/14 16:08:40  jp_milcent
172
* Revision 1.4  2006/11/14 16:08:40  jp_milcent
172
* Paramétrage de la découpe de la description et du symbole "etc"
173
* Paramétrage de la découpe de la description et du symbole "etc"
173
*
174
*
174
* Revision 1.3  2006/10/17 09:21:40  jp_milcent
175
* Revision 1.3  2006/10/17 09:21:40  jp_milcent
175
* Mise en commun des spécifications de la recherche.
176
* Mise en commun des spécifications de la recherche.
176
*
177
*
177
* Revision 1.2  2006/10/16 14:11:30  jp_milcent
178
* Revision 1.2  2006/10/16 14:11:30  jp_milcent
178
* Amélioration du moteur de recherche.
179
* Amélioration du moteur de recherche.
179
* Utilisation de l'opérateur "et" entre les mots recherchés.
180
* Utilisation de l'opérateur "et" entre les mots recherchés.
180
*
181
*
181
* Revision 1.1  2006/05/19 10:04:55  jp_milcent
182
* Revision 1.1  2006/05/19 10:04:55  jp_milcent
182
* Ajout d'un moteur de recherche analysant les articles des sites sous Spip.
183
* Ajout d'un moteur de recherche analysant les articles des sites sous Spip.
183
*
184
*
184
* 
185
* 
185
* +-- Fin du code ----------------------------------------------------------------------------------------+
186
* +-- Fin du code ----------------------------------------------------------------------------------------+
186
*/
187
*/
187
?>
188
?>