Subversion Repositories Applications.papyrus

Rev

Rev 2104 | Go to most recent revision | 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: more_recherche_papyrus_menu.class.php,v 1.15 2008-10-21 15:24:50 aperonnet Exp $
24
// CVS : $Id: more_recherche_papyrus_menu.class.php,v 1.15 2008-10-21 15:24:50 aperonnet Exp $
25
/**
25
/**
26
* Classe permettant d'effectuer des recherches sur les informations des menus de Papyrus.
26
* Classe permettant d'effectuer des recherches sur les informations des menus de Papyrus.
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
* 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-2004
40
*@copyright     Tela-Botanica 2000-2004
41
*@version       $Revision: 1.15 $ $Date: 2008-10-21 15:24:50 $
41
*@version       $Revision: 1.15 $ $Date: 2008-10-21 15:24:50 $
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_Papyrus_Menu extends More_Recherche{
55
class More_Recherche_Papyrus_Menu 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
        $db = $GLOBALS['_MOTEUR_RECHERCHE_']['bd']['papyrus'];
72
        $db = $GLOBALS['_MOTEUR_RECHERCHE_']['bd']['papyrus'];
73
        $tab_menus = GEN_retournerMenus($db);
73
        $tab_menus = GEN_retournerMenus($db);
74
        foreach ($tab_menus as $cle => $menu_id) {
74
        foreach ($tab_menus as $cle => $menu_id) {
75
            // Initialisation du tableau de résultat vide
75
            // Initialisation du tableau de résultat vide
76
            $aso_resultat = array(  'poids' => 0, 'url' => '', 'titre' => '',
76
            $aso_resultat = array(  'poids' => 0, 'url' => '', 'titre' => '',
77
                                    'hreflang' => '', 'accesskey' => '', 'title' => '',
77
                                    'hreflang' => '', 'accesskey' => '', 'title' => '',
78
                                    'date_creation' => '', 'description' => '');
78
                                    'date_creation' => '', 'description' => '');
79
            
79
            
80
            // Récupération des infos du menu courant : transtypage pour éviter les erreur avec array_merge
80
            // Récupération des infos du menu courant : transtypage pour éviter les erreur avec array_merge
81
            $aso_menu_info = (array) GEN_lireInfoMenu($db, $menu_id, DB_FETCHMODE_ASSOC);
81
            $aso_menu_info = (array) GEN_lireInfoMenu($db, $menu_id, DB_FETCHMODE_ASSOC);
82
            // Nous vérifions que le menu a une date de validité valide
82
            // Nous vérifions que le menu a une date de validité valide
83
            if ($aso_menu_info['gm_date_fin_validite'] == '0000-00-00 00:00:00' || strtotime($aso_menu_info['gm_date_fin_validite']) > time() ) {
83
            if ($aso_menu_info['gm_date_fin_validite'] == '0000-00-00 00:00:00' || strtotime($aso_menu_info['gm_date_fin_validite']) > time() ) {
84
	            // Récupération du contenu du menu courant : transtypage pour éviter les erreur avec array_merge
84
	            // Récupération du contenu du menu courant : transtypage pour éviter les erreur avec array_merge
85
	            $aso_menu_contenu = (array) GEN_lireContenuMenu($db, $menu_id, DB_FETCHMODE_ASSOC);
85
	            $aso_menu_contenu = (array) GEN_lireContenuMenu($db, $menu_id, DB_FETCHMODE_ASSOC);
86
				
86
				
87
				// Fusion des deux tableaux de champs à analyser
87
				// Fusion des deux tableaux de champs à analyser
88
				$aso_menu = array_merge($aso_menu_info, $aso_menu_contenu);
88
				$aso_menu = array_merge($aso_menu_info, $aso_menu_contenu);
89
				
89
				
90
	            // Analyse du poids de cette page vis à vis des méta informations et du contenu
90
	            // Analyse du poids de cette page vis à vis des méta informations et du contenu
91
	            $tab_champs_a_visiter = array(  'gm_nom', 'gm_titre', 'gm_titre_alternatif', 'gm_mots_cles', 
91
	            $tab_champs_a_visiter = array(  'gm_nom', 'gm_titre', 'gm_titre_alternatif', 'gm_mots_cles', 
92
	                                            'gm_description_libre', 'gm_description_resume', 'gm_description_table_matieres', 
92
	                                            'gm_description_libre', 'gm_description_resume', 'gm_description_table_matieres', 
93
	                                            'gm_source', 'gm_auteur', 'gm_contributeur', 'gm_editeur', 'gm_categorie', 
93
	                                            'gm_source', 'gm_auteur', 'gm_contributeur', 'gm_editeur', 'gm_categorie', 
94
	                                            'gm_public', 'gmc_contenu');
94
	                                            'gm_public', 'gmc_contenu');
95
				foreach ($tab_champs_a_visiter as $val) {
95
				foreach ($tab_champs_a_visiter as $val) {
96
	                // Vérification que le champ existe et contient quelque chose 
96
	                // Vérification que le champ existe et contient quelque chose 
97
	                if (isset($aso_menu[$val]) && $aso_menu[$val] != '') {
97
	                if (isset($aso_menu[$val]) && !empty($aso_menu[$val])) {
98
						$aso_resultat['poids'] += $this->retournerOccurenceMotif($motif, $aso_menu[$val]);
98
						$aso_resultat['poids'] += $this->retournerOccurenceMotif($motif, $aso_menu[$val]);
99
	                }
99
	                }
100
	            }
100
	            }
101
	            
101
	            
102
	            // Si le menu contient les mots recherchés nous poursuivons 
102
	            // Si le menu contient les mots recherchés nous poursuivons 
103
				if ($aso_resultat['poids'] > 0) {
103
				if ($aso_resultat['poids'] > 0) {
104
	                // Création de l'url
104
	                // Création de l'url
105
		            // TODO : utiliser comme pour spip un fichier de config spécifique pour virer PAP_URL d'ici
105
		            // TODO : utiliser comme pour spip un fichier de config spécifique pour virer PAP_URL d'ici
106
		            $une_url =& new Pap_URL(PAP_URL);
106
		            $une_url =& new Pap_URL(PAP_URL);
107
		            $une_url->setId($menu_id);
107
		            $une_url->setId($menu_id);
108
		            $aso_resultat['url_simple'] = $une_url->getURL();
108
		            $aso_resultat['url_simple'] = $une_url->getURL();
109
		            $une_url->addQueryString('var_recherche', More_Recherche::traiterMotif($motif, 'url'), true);
109
		            $une_url->addQueryString('var_recherche', More_Recherche::traiterMotif($motif, 'url'), true);
110
		            $aso_resultat['url'] = $une_url->getURL();
110
		            $aso_resultat['url'] = $une_url->getURL();
111
		            $une_url->removeQueryString('var_recherche');
111
		            $une_url->removeQueryString('var_recherche');
112
		            
112
		            
113
		            // Récupération du titre de la page
113
		            // Récupération du titre de la page
114
		            if (trim($aso_menu_info['gm_nom']) != '') {
114
		            if (trim($aso_menu_info['gm_nom'])) {
115
		                $aso_resultat['titre'] = htmlentities($aso_menu_info['gm_nom']);
115
		                $aso_resultat['titre'] = htmlentities($aso_menu_info['gm_nom'], ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
116
		            } else if (trim($aso_menu_info['gm_titre']) != '') {
116
		            } else if (trim($aso_menu_info['gm_titre'])) {
117
		                $aso_resultat['titre'] = htmlentities($aso_menu_info['gm_titre']);
117
		                $aso_resultat['titre'] = htmlentities($aso_menu_info['gm_titre'], ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
118
		            } else if (trim($aso_menu_info['gm_titre_alternatif']) != '') {
118
		            } else if (trim($aso_menu_info['gm_titre_alternatif'])) {
119
		                $aso_resultat['titre'] = htmlentities($aso_menu_info['gm_titre_alternatif']);
119
		                $aso_resultat['titre'] = htmlentities($aso_menu_info['gm_titre_alternatif'], ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
120
		            }
120
		            }
121
		            $aso_resultat['hreflang'] = htmlentities($aso_menu_info['gm_ce_i18n']);
121
		            $aso_resultat['hreflang'] = htmlentities($aso_menu_info['gm_ce_i18n'], ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
122
		            $raccourci_txt = '';
122
		            $raccourci_txt = '';
123
		            $aso_resultat['accesskey'] = htmlentities($aso_menu_info['gm_raccourci_clavier']);
123
		            $aso_resultat['accesskey'] = htmlentities($aso_menu_info['gm_raccourci_clavier'], ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
124
		            if ($aso_resultat['accesskey'] != '') {
124
		            if (!empty($aso_resultat['accesskey'])) {
125
		                $raccourci_txt =    MORE_LG_RESULTAT_CADRE_OUVRIR.
125
		                $raccourci_txt =    MORE_LG_RESULTAT_CADRE_OUVRIR.
126
		                                    MORE_LG_RESULTAT_RACCOURCI.$aso_resultat['accesskey'].' '.
126
		                                    MORE_LG_RESULTAT_RACCOURCI.$aso_resultat['accesskey'].' '.
127
		                                    MORE_LG_RESULTAT_CADRE_FERMER.MORE_LG_RESULTAT_POINT.' ';
127
		                                    MORE_LG_RESULTAT_CADRE_FERMER.MORE_LG_RESULTAT_POINT.' ';
128
		            }
128
		            }
129
		            $aso_resultat['title'] = htmlentities($raccourci_txt.$aso_menu_info['gm_description_resume']);
129
		            $aso_resultat['title'] = htmlentities($raccourci_txt.$aso_menu_info['gm_description_resume'], ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
130
		            
130
		            
131
		            $aso_resultat['description'] = htmlentities($aso_menu_info['gm_description_libre']);
131
		            $aso_resultat['description'] = htmlentities($aso_menu_info['gm_description_libre'], ENT_COMPAT|ENT_HTML401, 'ISO8859-15');
132
		            if (($jour = date('d', strtotime($aso_menu_info['gm_date_creation'] )) ) != 0 ) {
132
		            if (($jour = date('d', strtotime($aso_menu_info['gm_date_creation'] )) ) != 0 ) {
133
		                $aso_resultat['date_creation'] .= '<span class="page_modification_jour"> '.$jour.'</span>'."\n";
133
		                $aso_resultat['date_creation'] .= '<span class="page_modification_jour"> '.$jour.'</span>'."\n";
134
		            }
134
		            }
135
		            if (($mois = $this->traduireMois(date('m', strtotime($aso_menu_info['gm_date_creation'] ))) ) != '' ) {
135
		            if (($mois = $this->traduireMois(date('m', strtotime($aso_menu_info['gm_date_creation'] ))) ) != '' ) {
136
		                $aso_resultat['date_creation'] .= '<span class="page_modification_mois"> '.$mois.'</span>'."\n";
136
		                $aso_resultat['date_creation'] .= '<span class="page_modification_mois"> '.$mois.'</span>'."\n";
137
		            }
137
		            }
138
		            if (($annee = date('Y', strtotime($aso_menu_info['gm_date_creation'] )) ) != 0 ) {
138
		            if (($annee = date('Y', strtotime($aso_menu_info['gm_date_creation'] )) ) != 0 ) {
139
		                $aso_resultat['date_creation'] .= '<span class="page_modification_annee"> '.$annee.'</span>'."\n";
139
		                $aso_resultat['date_creation'] .= '<span class="page_modification_annee"> '.$annee.'</span>'."\n";
140
		            }
140
		            }
141
		                
141
		                
142
	                $this->setResultat($aso_resultat);
142
	                $this->setResultat($aso_resultat);
143
				}
143
				}
144
            }
144
            }
145
        }
145
        }
146
        return $this->getResultats();
146
        return $this->getResultats();
147
    }
147
    }
148
}
148
}
149
 
149
 
150
/* +--Fin du code ----------------------------------------------------------------------------------------+
150
/* +--Fin du code ----------------------------------------------------------------------------------------+
151
*
151
*
152
* $Log: not supported by cvs2svn $
152
* $Log: not supported by cvs2svn $
153
* Revision 1.14  2008-08-08 16:04:41  jp_milcent
153
* Revision 1.14  2008-08-08 16:04:41  jp_milcent
154
* Fusion avec la livraions AHA.
154
* Fusion avec la livraions AHA.
155
*
155
*
156
* Revision 1.13.2.1  2008-08-08 15:59:09  jp_milcent
156
* Revision 1.13.2.1  2008-08-08 15:59:09  jp_milcent
157
* Les menus dont la date de fin de validité est dépassée ne sont plus affichés.
157
* Les menus dont la date de fin de validité est dépassée ne sont plus affichés.
158
*
158
*
159
* Revision 1.13  2007-10-29 18:29:30  jp_milcent
159
* Revision 1.13  2007-10-29 18:29:30  jp_milcent
160
* Ajout d'un préfixe devant les classes de l'applette pour éviter les conflits avec d'autres classes provenant des applis clientes.
160
* Ajout d'un préfixe devant les classes de l'applette pour éviter les conflits avec d'autres classes provenant des applis clientes.
161
*
161
*
162
* Revision 1.12  2007-01-02 18:49:22  jp_milcent
162
* Revision 1.12  2007-01-02 18:49:22  jp_milcent
163
* Amélioration de la gestion du motif.
163
* Amélioration de la gestion du motif.
164
* Ajout de la gestion des expressions complête via l'utilisation de guillemets.
164
* Ajout de la gestion des expressions complête via l'utilisation de guillemets.
165
*
165
*
166
* Revision 1.11  2006/11/21 18:52:20  jp_milcent
166
* Revision 1.11  2006/11/21 18:52:20  jp_milcent
167
* Ajout de la possibilité de surligner des mots.
167
* Ajout de la possibilité de surligner des mots.
168
*
168
*
169
* Revision 1.10  2006/11/20 09:36:59  jp_milcent
169
* Revision 1.10  2006/11/20 09:36:59  jp_milcent
170
* 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.
171
*
171
*
172
* Revision 1.9  2006/10/17 09:21:40  jp_milcent
172
* Revision 1.9  2006/10/17 09:21:40  jp_milcent
173
* Mise en commun des spécifications de la recherche.
173
* Mise en commun des spécifications de la recherche.
174
*
174
*
175
* Revision 1.8  2006/10/16 14:11:30  jp_milcent
175
* Revision 1.8  2006/10/16 14:11:30  jp_milcent
176
* Amélioration du moteur de recherche.
176
* Amélioration du moteur de recherche.
177
* Utilisation de l'opérateur "et" entre les mots recherchés.
177
* Utilisation de l'opérateur "et" entre les mots recherchés.
178
*
178
*
179
* Revision 1.7  2006/10/10 13:28:13  jp_milcent
179
* Revision 1.7  2006/10/10 13:28:13  jp_milcent
180
* Suppression d'une variable et utilisation de la constante PAP_URL
180
* Suppression d'une variable et utilisation de la constante PAP_URL
181
*
181
*
182
* Revision 1.6  2006/05/19 10:04:55  jp_milcent
182
* Revision 1.6  2006/05/19 10:04:55  jp_milcent
183
* 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.
184
*
184
*
185
* Revision 1.5  2006/04/28 12:41:49  florian
185
* Revision 1.5  2006/04/28 12:41:49  florian
186
* corrections erreurs chemin
186
* corrections erreurs chemin
187
*
187
*
188
* Revision 1.4  2005/05/25 13:49:22  jpm
188
* Revision 1.4  2005/05/25 13:49:22  jpm
189
* Corection erreur pour la recherche dans le contenu.
189
* Corection erreur pour la recherche dans le contenu.
190
*
190
*
191
* Revision 1.3  2005/05/19 12:46:12  jpm
191
* Revision 1.3  2005/05/19 12:46:12  jpm
192
* Correction bogue accesskey.
192
* Correction bogue accesskey.
193
* Ajout d'un id à la liste.
193
* Ajout d'un id à la liste.
194
* Arrondissement des score.
194
* Arrondissement des score.
195
*
195
*
196
* Revision 1.2  2005/04/14 17:39:34  jpm
196
* Revision 1.2  2005/04/14 17:39:34  jpm
197
* Amélioration du moteur de rechercher :
197
* Amélioration du moteur de rechercher :
198
*  - pourcentage
198
*  - pourcentage
199
*  - ajout d'info
199
*  - ajout d'info
200
*
200
*
201
* Revision 1.1  2004/12/07 10:24:06  jpm
201
* Revision 1.1  2004/12/07 10:24:06  jpm
202
* Moteur de recherche version de départ.
202
* Moteur de recherche version de départ.
203
*
203
*
204
* 
204
* 
205
* +-- Fin du code ----------------------------------------------------------------------------------------+
205
* +-- Fin du code ----------------------------------------------------------------------------------------+
206
*/
206
*/
207
?>
207
?>