Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 3794 Rev 3909
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Service fournissant des informations concernant les images du CEL au format RSS1, RSS2 ou ATOM.
4
 * Service fournissant des informations concernant les images du CEL au format RSS1, RSS2 ou ATOM.
5
 
5
 
6
 *
6
 *
7
 * @internal   Mininum PHP version : 5.2
7
 * @internal   Mininum PHP version : 5.2
8
 * @category   CEL
8
 * @category   CEL
9
 * @package    Services
9
 * @package    Services
10
 * @subpackage Syndication
10
 * @subpackage Syndication
11
 * @version    0.1
11
 * @version    0.1
12
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
12
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
13
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
14
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
14
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
15
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
15
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
16
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
16
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
17
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
17
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
18
 */
18
 */
19
class CelSyndicationImage extends Cel {
19
class CelSyndicationImage extends Cel {
20
    
20
    
21
    private $parametres_origines = null;
21
    private $parametres_origines = null;
22
    private $format = null;
22
    private $format = null;
23
    private $service = null;
23
    private $service = null;
24
    private $squelette = null;
24
    private $squelette = null;
25
    private $squelette_dossier = null;
25
    private $squelette_dossier = null;
26
    private $auteurs = array();
26
    private $auteurs = array();
27
    private $flux = array();
27
    private $flux = array();
28
    
28
    
29
    private $format_image = 'XL';
29
    private $format_image = 'XL';
30
    
30
    
31
    private $criteres = array(
31
    private $criteres = array(
32
        'utilisateur' => 'b.courriel_utilisateur',
32
        'utilisateur' => 'b.courriel_utilisateur',
33
        'commune' => 'b.zone_geo',
33
        'commune' => 'b.zone_geo',
34
        'dept' => 'b.dept',
34
        'dept' => 'b.dept',
35
        'taxon' => 'b.nom_ret',
35
        'taxon' => 'b.nom_ret',
36
        'num_taxon' => 'b.nt',
36
        'num_taxon' => 'b.nt',
37
        'num_nom' => 'b.nom_sel_nn',
37
        'num_nom' => 'b.nom_sel_nn',
38
        'commentaire' => 'c.commentaire',
38
        'commentaire' => 'c.commentaire',
39
        'date' => 'c.date_prise_de_vue',
39
        'date' => 'c.date_prise_de_vue',
40
        'tag' => 'tag',
40
        'tag' => 'tag',
41
        'motcle' => 'tag',
41
        'motcle' => 'tag',
42
        'projet' => 'projet',
42
        'projet' => 'projet',
43
        'referentiel' => 'referentiel',
43
        'referentiel' => 'referentiel',
44
        'groupe_zones_geo' => 'groupe_zones_geo'
44
        'groupe_zones_geo' => 'groupe_zones_geo'
45
    );
45
    );
46
    
46
    
47
    /**
47
    /**
48
     * Méthode appelée avec une requête de type GET.
48
     * Méthode appelée avec une requête de type GET.
49
     */
49
     */
50
    public function getElement($params = array()) {
50
    public function getElement($params = array()) {
51
        // Initialisation des variables
51
        // Initialisation des variables
52
        $this->parametres_origines = $params;
52
        $this->parametres_origines = $params;
53
        $info = array();
53
        $info = array();
54
        $contenu = '';
54
        $contenu = '';
55
        
55
        
56
        if (! $this->etreFluxAdmin() || $this->authentifierAdmin()) {
56
        if (! $this->etreFluxAdmin() || $this->authentifierAdmin()) {
57
            // Pré traitement des paramêtres
57
            // Pré traitement des paramêtres
58
            $pour_bdd = false;
58
            $pour_bdd = false;
59
            $p = $this->traiterParametres(array('service', 'format'), $params, $pour_bdd);
59
            $p = $this->traiterParametres(array('service', 'format'), $params, $pour_bdd);
60
            extract($p);
60
            extract($p);
61
            $this->parametres = $params;
61
            $this->parametres = $params;
62
            $this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
62
            $this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
63
            
63
            
64
            // Récupération de la liste des flux
64
            // Récupération de la liste des flux
65
            $this->chargerListeDesFlux();
65
            $this->chargerListeDesFlux();
66
            
66
            
67
            // Chargement du bon type de service demandé
67
            // Chargement du bon type de service demandé
68
            if (isset($service)) {
68
            if (isset($service)) {
69
                $this->service = $this->traiterNomService($service);
69
                $this->service = $this->traiterNomService($service);
70
                $methode = $this->getNomMethodeService();
70
                $methode = $this->getNomMethodeService();
71
                if (method_exists($this, $methode)) {
71
                if (method_exists($this, $methode)) {
72
                    if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) {
72
                    if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) {
73
                        // Mise en minuscule de l'indication du format
73
                        // Mise en minuscule de l'indication du format
74
                        $this->format = strtolower($format);
74
                        $this->format = strtolower($format);
75
                        // Définition du fichier squelette demandé
75
                        // Définition du fichier squelette demandé
76
                        $this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml';
76
                        $this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml';
77
                    } else if (isset($this->flux[$this->service])) {
77
                    } else if (isset($this->flux[$this->service])) {
78
                        $this->format = '';
78
                        $this->format = '';
79
                        $this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
79
                        $this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
80
                    }
80
                    }
81
                    
81
                    
82
                    if (!isset($this->flux[$this->service]) || isset($this->format)) {
82
                    if (!isset($this->flux[$this->service]) || isset($this->format)) {
83
                        // Suppression des deux premiers paramètres (service et format)  pour le reste des méthodes
83
                        // Suppression des deux premiers paramètres (service et format)  pour le reste des méthodes
84
                        array_shift($this->parametres);
84
                        array_shift($this->parametres);
85
                        array_shift($this->parametres);
85
                        array_shift($this->parametres);
86
                        
86
                        
87
                        // Récupération du contenu à renvoyer
87
                        // Récupération du contenu à renvoyer
88
                        $contenu = $this->$methode();
88
                        $contenu = $this->$methode();
89
                    }
89
                    }
90
                } else {
90
                } else {
91
                    $this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible.";
91
                    $this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible.";
92
                }
92
                }
93
            } else {
93
            } else {
94
                $this->messages[] = "Le service CEL Syndication Image nécessite d'indiquer en premier paramètre le type d'information demandé.";
94
                $this->messages[] = "Le service CEL Syndication Image nécessite d'indiquer en premier paramètre le type d'information demandé.";
95
            }
95
            }
96
        }
96
        }
97
        
97
        
98
        // Envoie sur la sortie standard
98
        // Envoie sur la sortie standard
99
        $encodage = 'utf-8';
99
        $encodage = 'utf-8';
100
        $mime = $this->getTypeMime();
100
        $mime = $this->getTypeMime();
101
        $formatage_json = $this->getFormatageJson();
101
        $formatage_json = $this->getFormatageJson();
102
        $this->envoyer($contenu, $mime, $encodage, $formatage_json);
102
        $this->envoyer($contenu, $mime, $encodage, $formatage_json);
103
    }
103
    }
104
    
104
    
105
    private function chargerListeDesFlux() {
105
    private function chargerListeDesFlux() {
106
        $this->setFlux('simple', 'Nouvelles images liées à une observation dans le CEL',
106
        $this->setFlux('simple', 'Nouvelles images liées à une observation dans le CEL',
107
            "Ce flux fournit l'url des nouvelles images du CEL liées à une observation.");
107
            "Ce flux fournit l'url des nouvelles images du CEL liées à une observation.");
108
        $this->setFlux('complet', 'Nouvelles images liées à une observation dans le CEL (détails)',
108
        $this->setFlux('complet', 'Nouvelles images liées à une observation dans le CEL (détails)',
109
            "Ce flux fournit les informations sur les nouvelles images du CEL liées à une observation.");
109
            "Ce flux fournit les informations sur les nouvelles images du CEL liées à une observation.");
110
        $this->setFlux('par-mots-cles', 'Flux de syndication obsolète',
110
        $this->setFlux('par-mots-cles', 'Flux de syndication obsolète',
111
            "Ce flux est désormais accessible via le flux multicriteres/atom/M?tag='mot-cle'.");
111
            "Ce flux est désormais accessible via le flux multicriteres/atom/M?tag='mot-cle'.");
112
        $this->setFlux('par-commune','Flux de syndication obsolète',
112
        $this->setFlux('par-commune','Flux de syndication obsolète',
113
            "Ce flux  est désormais accessible via le flux multicriteres/atom/M?commune='commune'.");
113
            "Ce flux  est désormais accessible via le flux multicriteres/atom/M?commune='commune'.");
114
        $this->setFlux('multicriteres','Flux de syndication des nouvelles images liées à une observation publique du CEL '.
114
        $this->setFlux('multicriteres','Flux de syndication des nouvelles images liées à une observation publique du CEL '.
115
            'filtrées par un ou plusieurs critères',
115
            'filtrées par un ou plusieurs critères',
116
            "Ce flux fournit des informations sur les nouvelles images liées à une observation du CEL filtrées par ".
116
            "Ce flux fournit des informations sur les nouvelles images liées à une observation du CEL filtrées par ".
117
            "auteur (mail), commune (nom), departement (code postal), taxon (nom scientifique), commentaire, tag ".
117
            "auteur (mail), commune (nom), departement (code postal), taxon (nom scientifique), commentaire, tag ".
118
            "et/ou date.");
118
            "et/ou date.");
119
    }
119
    }
120
    
120
    
121
    private function setFlux($nom, $titre, $description) {
121
    private function setFlux($nom, $titre, $description) {
122
        $url_base = $this->config['settings']['baseURLAbsoluDyn'].'CelSyndicationImage/';
122
        $url_base = $this->config['settings']['baseURLAbsoluDyn'].'CelSyndicationImage/';
123
        $formats = array('atom', 'rss2', 'rss1');
123
        $formats = array('atom', 'rss2', 'rss1');
124
        $flux = array();
124
        $flux = array();
125
        foreach ($formats as $format) {
125
        foreach ($formats as $format) {
126
            $url = $url_base.$nom.'/'.$format;
126
            $url = $url_base.$nom.'/'.$format;
127
            $flux[$format] = $url;
127
            $flux[$format] = $url;
128
        }
128
        }
129
        $this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
129
        $this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
130
    }
130
    }
131
    
131
    
132
    private function getFlux($nom) {
132
    private function getFlux($nom) {
133
        return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
133
        return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
134
    }
134
    }
135
    
135
    
136
    private function traiterNomService($nom) {
136
    private function traiterNomService($nom) {
137
        $nom = strtolower($nom);
137
        $nom = strtolower($nom);
138
        return $nom;
138
        return $nom;
139
    }
139
    }
140
    
140
    
141
    private function getNomMethodeService() {
141
    private function getNomMethodeService() {
142
        $methode = '';
142
        $methode = '';
143
        $service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
143
        $service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
144
        $methode = 'getService'.$service_formate;
144
        $methode = 'getService'.$service_formate;
145
        return $methode;
145
        return $methode;
146
    }
146
    }
147
    
147
    
148
    private function getUrlBase() {
148
    private function getUrlBase() {
149
        $url_base = sprintf($this->config['settings']['baseURLAbsolu'], get_class($this).'/');
149
        $url_base = sprintf($this->config['settings']['baseURLAbsolu'], get_class($this).'/');
150
        return $url_base;
150
        return $url_base;
151
    }
151
    }
152
    
152
    
153
    private function getUrlServiceBase() {
153
    private function getUrlServiceBase() {
154
        $url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
154
        $url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
155
        return $url_service;
155
        return $url_service;
156
    }
156
    }
157
    
157
    
158
    private function getTypeMime() {
158
    private function getTypeMime() {
159
        $mime = '';
159
        $mime = '';
160
        switch ($this->format) {
160
        switch ($this->format) {
161
            case 'atom' :
161
            case 'atom' :
162
                $mime = 'application/atom+xml';
162
                $mime = 'application/atom+xml';
163
                break;
163
                break;
164
            case 'rss1' :
164
            case 'rss1' :
165
            case 'rss2' :
165
            case 'rss2' :
166
                $mime = 'application/rss+xml';
166
                $mime = 'application/rss+xml';
167
                break;
167
                break;
168
            case 'opml' :
168
            case 'opml' :
169
                $mime = 'text/x-opml';
169
                $mime = 'text/x-opml';
170
                break;
170
                break;
171
            default:
171
            default:
172
                $mime = 'text/html';
172
                $mime = 'text/html';
173
        }
173
        }
174
        return $mime;
174
        return $mime;
175
    }
175
    }
176
    
176
    
177
    private function getFormatageJson() {
177
    private function getFormatageJson() {
178
        $json = false;
178
        $json = false;
179
        switch ($this->service) {
179
        switch ($this->service) {
180
            case 'liste-des-flux' :
180
            case 'liste-des-flux' :
181
                $json = true;
181
                $json = true;
182
                break;
182
                break;
183
            default:
183
            default:
184
                $json = false;
184
                $json = false;
185
        }
185
        }
186
        return $json;
186
        return $json;
187
    }
187
    }
188
    
188
    
189
    private function creerCategorie($element) {
189
    private function creerCategorie($element) {
190
        $categorie = '';
190
        $categorie = '';
191
        $categorie = 'Image';
191
        $categorie = 'Image';
192
        $categorie = $this->nettoyerTexte($categorie);
192
        $categorie = $this->nettoyerTexte($categorie);
193
        return $categorie;
193
        return $categorie;
194
    }
194
    }
195
    
195
    
196
    private function etreFluxAdmin() {
196
    private function etreFluxAdmin() {
197
        return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
197
        return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
198
    }
198
    }
199
    
199
    
200
    private function creerUrlService() {
200
    private function creerUrlService() {
201
        $url_service = $this->getUrlServiceBase();
201
        $url_service = $this->getUrlServiceBase();
202
        if (count($_GET) > 0) {
202
        if (count($_GET) > 0) {
203
            $parametres_get = array();
203
            $parametres_get = array();
204
            foreach ($_GET as $cle => $valeur) {
204
            foreach ($_GET as $cle => $valeur) {
205
                $parametres_get[] = $cle.'='.$valeur;
205
                $parametres_get[] = $cle.'='.$valeur;
206
            }
206
            }
207
            $url_service .= '?'.implode('&amp;', $parametres_get);
207
            $url_service .= '?'.implode('&amp;', $parametres_get);
208
        }
208
        }
209
        return $url_service;
209
        return $url_service;
210
    }
210
    }
211
    
211
    
212
    protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) {
212
    protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) {
213
        $infos = null;
213
        $infos = null;
214
        try {
214
        try {
215
            $infos = Cel::db()->query($requete)->fetchAll(PDO::FETCH_ASSOC);
215
            $infos = Cel::db()->query($requete)->fetchAll(PDO::FETCH_ASSOC);
216
            if ($infos === false) {
216
            if ($infos === false) {
217
                $this->messages[] = "La requête suivante n'a retourné aucun résultat :\n$requete";
217
                $this->messages[] = "La requête suivante n'a retourné aucun résultat :\n$requete";
218
            }
218
            }
219
        } catch (PDOException $e) {
219
        } catch (PDOException $e) {
220
            $msgTpl = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s';
220
            $msgTpl = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s';
221
            $this->messages[] = sprintf($msgTpl, $e->getFile(), $e->getLine(), $e->getMessage());
221
            $this->messages[] = sprintf($msgTpl, $e->getFile(), $e->getLine(), $e->getMessage());
222
        }
222
        }
223
        return $infos;
223
        return $infos;
224
    }
224
    }
225
    
225
    
226
    private function executerService($elements) {
226
    private function executerService($elements) {
227
        // Prétraitement des données
227
        // Prétraitement des données
228
        $donnees = $this->construireDonneesCommunesAuFlux($elements);
228
        $donnees = $this->construireDonneesCommunesAuFlux($elements);
229
        foreach ($elements as $element) {
229
        foreach ($elements as $element) {
230
            $identifiants[$element['courriel_utilisateur']] = $element['courriel_utilisateur'];
230
            $identifiants[$element['courriel_utilisateur']] = $element['courriel_utilisateur'];
231
        }
231
        }
232
        $this->auteurs = $this->creerAuteurs($identifiants);
232
        $this->auteurs = $this->creerAuteurs($identifiants);
233
        
233
        
234
        foreach ($elements as $element) {
234
        foreach ($elements as $element) {
235
            $donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
235
            $donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
236
        }
236
        }
237
        
237
        
238
        // Création du contenu à partir d'un template PHP
238
        // Création du contenu à partir d'un template PHP
239
        $contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
239
        $contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
240
        
240
        
241
        return $contenu;
241
        return $contenu;
242
    }
242
    }
243
    
243
    
244
    private function construireDonneesCommunesAuFlux($infos) {
244
    private function construireDonneesCommunesAuFlux($infos) {
245
        $donnees = $this->getFlux($this->service);
245
        $donnees = $this->getFlux($this->service);
246
        $donnees['guid'] = $this->getUrlServiceBase();
246
        $donnees['guid'] = $this->getUrlServiceBase();
247
        $donnees['lien_service'] = $this->creerUrlService();
247
        $donnees['lien_service'] = $this->creerUrlService();
248
        $donnees['lien_cel'] = (isset($infos['nom_sel_nn']) && $infos['nom_sel_nn'] != '' && $infos['nom_sel_nn'] != 0) ?
248
        $donnees['lien_cel'] = (isset($infos['nom_sel_nn']) && $infos['nom_sel_nn'] != '' && $infos['nom_sel_nn'] != 0) ?
249
        $this->getUrlEflore($infos['nom_referentiel'], $infos['nom_sel_nn']) : '';
249
        $this->getUrlEflore($infos['nom_referentiel'], $infos['nom_sel_nn']) : '';
250
        $donnees['editeur'] = $this->config['settings']['editeur'];
250
        $donnees['editeur'] = $this->config['settings']['editeur'];
251
        $derniere_info_en_date = reset($infos);
251
        $derniere_info_en_date = reset($infos);
252
        $date_modification_timestamp = strtotime($derniere_info_en_date['date_creation']);
252
        $date_modification_timestamp = strtotime($derniere_info_en_date['date_creation']);
253
        $donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
253
        $donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
254
        $donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
254
        $donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
255
        $donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
255
        $donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
256
        $donnees['annee_courante'] = date('Y');
256
        $donnees['annee_courante'] = date('Y');
257
        $donnees['generateur'] = 'CEL - Jrest - CelSyndicationImage';
257
        $donnees['generateur'] = 'CEL - Jrest - CelSyndicationImage';
258
        $donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ?  $match[1] : '0';
258
        $donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ?  $match[1] : '0';
259
        return $donnees;
259
        return $donnees;
260
    }
260
    }
261
    
261
    
262
    private function construireDonneesCommunesAuxItems($info) {
262
    private function construireDonneesCommunesAuxItems($info) {
263
        $item = array();
263
        $item = array();
264
        $date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['date_creation']);
264
        $date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['date_creation']);
265
        $item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
265
        $item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
266
        $item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
266
        $item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
267
        $item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
267
        $item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
268
        $item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
268
        $item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
269
        $item['titre'] = $this->creerTitre($info);
269
        $item['titre'] = $this->creerTitre($info);
270
        $item['guid'] = $this->creerGuidItem($info);
270
        $item['guid'] = $this->creerGuidItem($info);
271
        $item['lien'] = $this->creerLienItem($info);
271
        $item['lien'] = $this->creerLienItem($info);
272
        $item['categorie'] = $this->creerCategorie($item);
272
        $item['categorie'] = $this->creerCategorie($item);
273
        $item['description'] = $this->creerDescription(Cel::protegerCaracteresHtmlDansChamps($info), $item);
273
        $item['description'] = $this->creerDescription(Cel::protegerCaracteresHtmlDansChamps($info), $item);
274
        $item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
274
        $item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
275
        $item['modifier_par'] = $this->nettoyerTexte($this->getIntituleAuteur($info['courriel_utilisateur']));
275
        $item['modifier_par'] = $this->nettoyerTexte($this->getIntituleAuteur($info['courriel_utilisateur']));
276
        return $item;
276
        return $item;
277
    }
277
    }
278
    
278
    
279
    private function creerGuidItem($element) {
279
    private function creerGuidItem($element) {
280
        $guid = $this->getUrlImage($element['id_image']);
280
        $guid = $this->getUrlImage($element['id_image']);
281
        return $guid;
281
        return $guid;
282
    }
282
    }
283
    
283
    
284
    private function creerTitre($element) {
284
    private function creerTitre($element) {
285
        $methode = 'creerTitre'.$this->service;
285
        $methode = 'creerTitre'.$this->service;
286
        $methode = (method_exists($this, $methode)) ? $methode : 'creerTitreSimple';
286
        $methode = (method_exists($this, $methode)) ? $methode : 'creerTitreSimple';
287
        $titre = $this->$methode($element);
287
        $titre = $this->$methode($element);
288
        $titre = $this->nettoyerTexte($titre);
288
        $titre = $this->nettoyerTexte($titre);
289
        return $titre;
289
        return $titre;
290
    }
290
    }
291
    
291
    
292
    private function creerDescription($donnees, $item) {
292
    private function creerDescription($donnees, $item) {
293
        $methode = 'creerDescription'.$this->service;
293
        $methode = 'creerDescription'.$this->service;
294
        $methode = (method_exists($this, $methode)) ? $methode : 'creerDescriptionComplet';
294
        $methode = (method_exists($this, $methode)) ? $methode : 'creerDescriptionComplet';
295
        $description = $this->$methode($donnees, $item);
295
        $description = $this->$methode($donnees, $item);
296
        $description = $this->nettoyerTexte($description);
296
        $description = $this->nettoyerTexte($description);
297
        return $description;
297
        return $description;
298
    }
298
    }
299
    
299
    
300
    private function creerLienItem($element) {
300
    private function creerLienItem($element) {
301
        
301
        
302
        if ($this->etreNull($element['id_observation'])) {
302
        if ($this->etreNull($element['id_observation'])) {
303
            // Lien vers image grand format
303
            // Lien vers image grand format
304
            $lien = $this->getUrlImage($element['id_image'], $this->format_image);
304
            $lien = $this->getUrlImage($element['id_image'], $this->format_image);
305
        } else {
305
        } else {
306
            // Lien vers fiche eFlore onglet Illustration
306
            // Lien vers fiche eFlore onglet Illustration
307
            $lien = $this->getUrlEflore($element['nom_referentiel'], $element['nom_sel_nn'], 'illustration');
307
            $lien = $this->getUrlEflore($element['nom_referentiel'], $element['nom_sel_nn'], 'illustration');
308
        }
308
        }
309
        return $lien;
309
        return $lien;
310
    }
310
    }
311
    
311
    
312
    private function getServiceListeDesFlux() {
312
    private function getServiceListeDesFlux() {
313
        return $this->flux;
313
        return $this->flux;
314
    }
314
    }
315
    
315
    
316
    private function getServiceOpml() {
316
    private function getServiceOpml() {
317
        $donnees = array();
317
        $donnees = array();
318
        $id = 1;
318
        $id = 1;
319
        foreach ($this->flux as $flux_nom => $flux){
319
        foreach ($this->flux as $flux_nom => $flux){
320
            $info = array();
320
            $info = array();
321
            $info['type'] = 'atom';
321
            $info['type'] = 'atom';
322
            $info['titre'] = $flux['titre'];
322
            $info['titre'] = $flux['titre'];
323
            $info['texte'] = "CEL - Images - $flux_nom";
323
            $info['texte'] = "CEL - Images - $flux_nom";
324
            $info['description'] = $flux['description'];
324
            $info['description'] = $flux['description'];
325
            $info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
325
            $info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
326
            $info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
326
            $info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
327
            $donnees['liste_flux'][] = $info;
327
            $donnees['liste_flux'][] = $info;
328
        }
328
        }
329
        
329
        
330
        $this->squelette = $this->squelette_dossier.'opml.tpl.xml';
330
        $this->squelette = $this->squelette_dossier.'opml.tpl.xml';
331
        $contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
331
        $contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
332
        return $contenu;
332
        return $contenu;
333
    }
333
    }
334
    
334
    
335
    private function getServiceSimple() {
335
    private function getServiceSimple() {
336
        if (isset($this->parametres[0])) {
336
        if (isset($this->parametres[0])) {
337
            $this->format_image = $this->parametres[0];
337
            $this->format_image = $this->parametres[0];
338
        }
338
        }
339
        
339
        
340
        // Construction de la requête
340
        // Construction de la requête
341
        $requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' co.*, '.
341
        $requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' co.*, '.
342
            ' ci.id_image, co.ce_utilisateur, nom_original, ci.date_creation, ci.mots_cles_texte AS mots_cles_texte_images, '.
342
            ' ci.id_image, co.ce_utilisateur, nom_original, ci.date_creation, ci.mots_cles_texte AS mots_cles_texte_images, '.
343
            ' co.mots_cles_texte AS mots_cles_texte_images_obs, "" as commentaire, "" as note_qualite, nom_referentiel '.
343
            ' co.mots_cles_texte AS mots_cles_texte_images_obs, "" as commentaire, "" as note_qualite, nom_referentiel '.
344
            'FROM cel_export_total AS co JOIN cel_images_export AS ci ON (co.id_observation = ci.ce_observation) '.
344
            'FROM cel_export_total AS co JOIN cel_images_export AS ci ON (co.id_observation = ci.ce_observation) '.
345
            'WHERE co.transmission = 1 '.
345
            'WHERE co.transmission = 1 '.
346
            '	AND co.ce_utilisateur = ci.ce_utilisateur '.
346
            '	AND co.ce_utilisateur = ci.ce_utilisateur '.
347
            'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'ci.date_creation DESC').' '.
347
            'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'ci.date_creation DESC').' '.
348
            "LIMIT $this->start, $this->limit ";
348
            "LIMIT $this->start, $this->limit ";
349
        
349
        
350
        $elements = $this->executerRequete($requete);
350
        $elements = $this->executerRequete($requete);
351
        
351
        
352
        // Création du contenu
352
        // Création du contenu
353
        $contenu = $this->executerService($elements);
353
        $contenu = $this->executerService($elements);
354
        return $contenu;
354
        return $contenu;
355
    }
355
    }
356
    
356
    
357
    private function creerTitreSimple($element) {
357
    private function creerTitreSimple($element) {
358
        $date = $element['date_observation'];
358
        $date = $element['date_observation'];
359
        $date = date("d/m/Y", strtotime($date));
359
        $date = date("d/m/Y", strtotime($date));
360
        if ($this->etreNull($element['nom_sel']) && $this->etreNull($element['nom_sel_nn'])) {
360
        if ($this->etreNull($element['nom_sel']) && $this->etreNull($element['nom_sel_nn'])) {
361
            $titre = "Ajout d'une photo par ".$this->getIntituleAuteur($element['courriel_utilisateur']).' le '.$date;
361
            $titre = "Ajout d'une photo par ".$this->getIntituleAuteur($element['courriel_utilisateur']).' le '.$date;
362
        } else {
362
        } else {
363
            $titre = $element['nom_sel'].' [nn'.$element['nom_sel_nn'].'] par '.$this->getIntituleAuteur($element['courriel_utilisateur']).' le '.$date;
363
            $titre = $element['nom_sel'].' [nn'.$element['nom_sel_nn'].'] par '.$this->getIntituleAuteur($element['courriel_utilisateur']).' le '.$date;
364
        }
364
        }
365
        $zoneGeo = $element['zone_geo'];
365
        $zoneGeo = $element['zone_geo'];
366
        if ($zoneGeo) {
366
        if ($zoneGeo) {
367
            $titre .= " - $zoneGeo";
367
            $titre .= " - $zoneGeo";
368
        }
368
        }
369
        return $titre;
369
        return $titre;
370
    }
370
    }
371
    
371
    
372
    private function creerDescriptionSimple($donnees, $item) {
372
    private function creerDescriptionSimple($donnees, $item) {
373
        $description = $this->getUrlEflore($element['nom_referentiel'], $element['nom_sel_nn'], 'illustration');
373
        $description = $this->getUrlEflore($element['nom_referentiel'], $element['nom_sel_nn'], 'illustration');
374
        return $description;
374
        return $description;
375
    }
375
    }
376
    
376
    
377
    private function getServiceComplet() {
377
    private function getServiceComplet() {
378
        
378
        
379
        // Construction de la requête
379
        // Construction de la requête
380
        $requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' co.*, '.
380
        $requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' co.*, '.
381
            '	ci.id_image, co.ce_utilisateur, nom_original, ci.date_creation, ci.mots_cles_texte AS mots_cles_texte_images, '.
381
            '	ci.id_image, co.ce_utilisateur, nom_original, ci.date_creation, ci.mots_cles_texte AS mots_cles_texte_images, '.
382
            '	co.mots_cles_texte AS mots_cles_texte_obs, ci.commentaire AS commentaire_img, note_qualite, nom_referentiel, '.
382
            '	co.mots_cles_texte AS mots_cles_texte_obs, ci.commentaire AS commentaire_img, note_qualite, nom_referentiel, '.
383
            '	co.commentaire AS commentaire_obs '.
383
            '	co.commentaire AS commentaire_obs '.
384
            'FROM cel_images_export AS ci '.
384
            'FROM cel_images_export AS ci '.
385
            '	JOIN cel_export AS co '.
385
            '	JOIN cel_export AS co '.
386
            '		ON (ci.ce_observation = co.id_observation) '.
386
            '		ON (ci.ce_observation = co.id_observation) '.
387
            (($this->etreFluxAdmin()) ? '' : 'WHERE co.transmission = 1 ').
387
            (($this->etreFluxAdmin()) ? '' : 'WHERE co.transmission = 1 ').
388
            'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'ci.date_creation DESC').' '.
388
            'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'ci.date_creation DESC').' '.
389
            "LIMIT $this->start, $this->limit ";
389
            "LIMIT $this->start, $this->limit ";
390
            //echo $requete;
390
            //echo $requete;
391
            $elements = $this->executerRequete($requete);
391
            $elements = $this->executerRequete($requete);
392
            
392
            
393
            // Création du contenu
393
            // Création du contenu
394
            if ($elements != false && count($elements) > 0) {
394
            if ($elements != false && count($elements) > 0) {
395
                $contenu = $this->executerService($elements);
395
                $contenu = $this->executerService($elements);
396
            } else {
396
            } else {
397
                // ne pas faire ça, car ça déclenche une erreur 500 à tort !
397
                // ne pas faire ça, car ça déclenche une erreur 500 à tort !
398
                //$this->messages[] = "Aucune image disponible.";
398
                //$this->messages[] = "Aucune image disponible.";
399
                $contenu = array();
399
                $contenu = array();
400
            }
400
            }
401
            
401
            
402
            return $contenu;
402
            return $contenu;
403
    }
403
    }
404
    
404
    
405
    private function getServiceMultiCriteres() {
405
    private function getServiceMultiCriteres() {
406
        $contenu = '';
406
        $contenu = '';
407
        if (isset($_GET['debut'])) $this->start = Cel::db()->proteger($_GET['debut']);
407
        if (isset($_GET['debut'])) $this->start = Cel::db()->proteger($_GET['debut']);
408
        if (isset($_GET['limite'])) $this->limit = Cel::db()->proteger($_GET['limite']);
408
        if (isset($_GET['limite'])) $this->limit = Cel::db()->proteger($_GET['limite']);
409
        
409
        
410
        $this->limit = ($this->limit < 1000) ? $this->limit : 1000;// Pour éviter les abus !
410
        $this->limit = ($this->limit < 1000) ? $this->limit : 1000;// Pour éviter les abus !
411
        
411
        
412
        if ($this->parametresSontDemandes()) {
412
        if ($this->parametresSontDemandes()) {
413
            $requete = $this->creerRequeteAvecParametres();
413
            $requete = $this->creerRequeteAvecParametres();
414
        } else {
414
        } else {
415
            $requete = $this->creerRequeteSansParametres();
415
            $requete = $this->creerRequeteSansParametres();
416
        }
416
        }
417
        $elements = $this->executerRequete($requete);
417
        $elements = $this->executerRequete($requete);
418
        
418
        
419
        // Création du contenu
419
        // Création du contenu
420
        if ($elements != false && count($elements) > 0) {
420
        if ($elements != false && count($elements) > 0) {
421
            $contenu = $this->executerService($elements);
421
            $contenu = $this->executerService($elements);
422
        } else {
422
        } else {
423
            // ne pas faire ça, car ça déclenche une erreur 500 à tort !
423
            // ne pas faire ça, car ça déclenche une erreur 500 à tort !
424
            //$this->messages[] = "Aucune image disponible.";
424
            //$this->messages[] = "Aucune image disponible.";
425
        }
425
        }
426
        
426
        
427
        return $contenu;
427
        return $contenu;
428
    }
428
    }
429
    
429
    
430
    private function parametresSontDemandes() {
430
    private function parametresSontDemandes() {
431
        $criteres = $this->traiterCriteresMultiples($_GET) ;
431
        $criteres = $this->traiterCriteresMultiples($_GET) ;
432
        return (isset($_GET['recherche']) && $_GET['recherche'] != '') || !empty($criteres);
432
        return (isset($_GET['recherche']) && $_GET['recherche'] != '') || !empty($criteres);
433
    }
433
    }
434
    
434
    
435
    private function creerRequeteSansParametres() {
435
    private function creerRequeteSansParametres() {
436
        // Construction de la requête
436
        // Construction de la requête
437
        $requete = 'SELECT *, b.mots_cles_texte AS mots_cles_texte_obs, c.mots_cles_texte AS mots_cles_texte_images, '.
437
        $requete = 'SELECT *, b.mots_cles_texte AS mots_cles_texte_obs, c.mots_cles_texte AS mots_cles_texte_images, '.
438
            ' b.commentaire AS commentaire_obs, "" AS commentaire_img, nom_referentiel '.
438
            ' b.commentaire AS commentaire_obs, "" AS commentaire_img, nom_referentiel '.
439
            'FROM cel_images_export c '.
439
            'FROM cel_images_export c '.
440
            '	JOIN cel_export AS b '.
440
            '	JOIN cel_export AS b '.
441
            '		ON (c.ce_observation = b.id_observation) ';
441
            '		ON (c.ce_observation = b.id_observation) ';
442
        $requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'c.date_creation DESC').' '.
442
        $requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'c.date_creation DESC').' '.
443
            "LIMIT $this->start,$this->limit ";
443
            "LIMIT $this->start,$this->limit ";
444
        //echo $requete;
444
        //echo $requete;
445
        return $requete;
445
        return $requete;
446
    }
446
    }
447
    
447
    
448
    private function creerRequeteAvecParametres() {
448
    private function creerRequeteAvecParametres() {
449
        // Construction de la requête
449
        // Construction de la requête
450
        $requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '.
450
        $requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '.
451
            ' b.commentaire as commentaire_obs, "" as commentaire_img, nom_referentiel '.
451
            ' b.commentaire as commentaire_obs, "" as commentaire_img, nom_referentiel '.
452
            'FROM cel_images_export AS c '.
452
            'FROM cel_images_export AS c '.
453
            '	JOIN cel_export_total AS b '.
453
            '	JOIN cel_export_total AS b '.
454
            '		ON (c.ce_observation = b.id_observation) '.
454
            '		ON (c.ce_observation = b.id_observation) '.
455
            'WHERE '.
455
            'WHERE '.
456
            (($this->etreFluxAdmin()) ? '' : ' b.transmission = 1 ').
456
            (($this->etreFluxAdmin()) ? '' : ' b.transmission = 1 ').
457
            '	AND ';
457
            '	AND ';
458
            
458
            
459
            if ($this->estUneRechercheGenerale()) {
459
            if ($this->estUneRechercheGenerale()) {
460
                $chaine_requete = $_GET['recherche'];
460
                $chaine_requete = $_GET['recherche'];
461
                $requete .= "donnees_standard =  1 AND ".$this->creerSousRequeteRechercheGenerale($chaine_requete);
461
                $requete .= "donnees_standard =  1 AND ".$this->creerSousRequeteRechercheGenerale($chaine_requete);
462
            } else {
462
            } else {
463
                $criteres = $this->traiterCriteresMultiples($_GET) ;
463
                $criteres = $this->traiterCriteresMultiples($_GET) ;
464
                if (!isset($_GET["standard"])) {
464
                if (!isset($_GET["standard"])) {
465
                    $requete .= "donnees_standard =  1 AND ";
465
                    $requete .= "donnees_standard =  1 AND ";
466
                } elseif ($_GET["standard"] = 1) {
466
                } elseif ($_GET["standard"] = 1) {
467
                    $requete .= "donnees_standard =  1 AND ";
467
                    $requete .= "donnees_standard =  1 AND ";
468
                }
468
                }
469
                if (!empty($criteres)) {
469
                if (!empty($criteres)) {
470
                    $requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
470
                    $requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
471
                }
471
                }
472
            }
472
            }
473
            $requete = str_replace(' AND ) ',' ', $requete);
473
            $requete = str_replace(' AND ) ',' ', $requete);
474
            $requete = rtrim($requete, 'AND ');
474
            $requete = rtrim($requete, 'AND ');
475
            $requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
475
            $requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
476
                'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
476
                'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
477
            return $requete;
477
            return $requete;
478
    }
478
    }
479
    
479
    
480
    private function creerSousRequeteRechercheParCriteres($criteres) {
480
    private function creerSousRequeteRechercheParCriteres($criteres) {
481
        $requete = '';
481
        $requete = '';
482
        foreach ($criteres as $pair) {
482
        foreach ($criteres as $pair) {
483
            $nom_valeur = explode("=",$pair);
483
            $nom_valeur = explode("=",$pair);
484
            if (sizeof($nom_valeur) != 0) {
484
            if (sizeof($nom_valeur) != 0) {
485
                switch ($nom_valeur[0]) {
485
                switch ($nom_valeur[0]) {
486
                    case "ci_limite" : $this->limit = Cel::db()->quote($nom_valeur[1]); break;
486
                    case "ci_limite" : $this->limit = Cel::db()->quote($nom_valeur[1]); break;
487
                    case "c.ci_numero_page" : $this->limit*Cel::db()->quote($nom_valeur[1]); break;
487
                    case "c.ci_numero_page" : $this->limit*Cel::db()->quote($nom_valeur[1]); break;
488
                    case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
488
                    case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
489
                    foreach($mots_comment_liste as $mot_comment) {
489
                    foreach($mots_comment_liste as $mot_comment) {
490
                        $mot_comment = trim($mot_comment) ;
490
                        $mot_comment = trim($mot_comment) ;
491
                        $requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote('%'.$mot_comment.'%').' AND ';
491
                        $requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote('%'.$mot_comment.'%').' AND ';
492
                    }
492
                    }
493
                    break;
493
                    break;
494
                    case "c.date_prise_de_vue" :
494
                    case "c.date_prise_de_vue" :
495
                        $nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
495
                        $nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
496
                        if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
496
                        if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
497
                            $nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
497
                            $nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
498
                        }
498
                        }
499
                        $requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote($nom_valeur[1]."%").' AND '; break;
499
                        $requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote($nom_valeur[1]."%").' AND '; break;
500
                    case "b.ce_zone_geo" :
500
                    case "b.ce_zone_geo" :
501
                        $requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%") AND '; break;
501
                        $requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%") AND '; break;
502
                    case "b.nom_ret" :
502
                    case "b.nom_ret" :
503
                        if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
503
                        if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
504
                        $requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR b.nom_sel LIKE "%'.
504
                        $requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR b.nom_sel LIKE "%'.
505
                            $nom_valeur[1].'%") AND '; break;
505
                            $nom_valeur[1].'%") AND '; break;
506
                    case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
506
                    case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
507
                    case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
507
                    case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
508
                    case "referentiel" : $requete .= $this->creerSousRequeteReferentiel($nom_valeur[1]).' AND '; break;
508
                    case "referentiel" : $requete .= $this->creerSousRequeteReferentiel($nom_valeur[1]).' AND '; break;
509
                    case "groupe_zones_geo" : $requete .= $this->creerSousRequeteGroupeZonesGeo($nom_valeur[1])." AND "; break;
509
                    case "groupe_zones_geo" : $requete .= $this->creerSousRequeteGroupeZonesGeo($nom_valeur[1])." AND "; break;
510
                    default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
510
                    default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
511
                }
511
                }
512
            }
512
            }
513
        }
513
        }
514
        $requete = rtrim($requete,' AND ');
514
        $requete = rtrim($requete,' AND ');
515
        return $requete;
515
        return $requete;
516
    }
516
    }
517
    
517
    
518
    private function creerSousRequeteGroupeZonesGeo($groupe_zones_geo) {
518
    private function creerSousRequeteGroupeZonesGeo($groupe_zones_geo) {
519
        $req = "SELECT valeur FROM cel_groupes_zones WHERE id_groupe = ".Cel::db()->proteger($groupe_zones_geo);
519
        $req = "SELECT valeur FROM cel_groupes_zones WHERE id_groupe = ".Cel::db()->proteger($groupe_zones_geo);
520
        $res = Cel::db()->requeter($req);
520
        $res = Cel::db()->requeter($req);
521
        $zones = array();
521
        $zones = array();
522
        foreach($res as &$r) {
522
        foreach($res as &$r) {
523
            $zones[] = Cel::db()->proteger($r['valeur']);
523
            $zones[] = Cel::db()->proteger($r['valeur']);
524
        }
524
        }
525
        $sql = '(b.ce_zone_geo IN ('.implode(',', $zones).')) ';
525
        $sql = '(b.ce_zone_geo IN ('.implode(',', $zones).')) ';
526
        
526
        
527
        return $sql;
527
        return $sql;
528
    }
528
    }
529
    
529
    
530
    private function creerSousRequeteMotsCles($mot_cle) {
530
    private function creerSousRequeteMotsCles($mot_cle) {
531
        $requete = '';
531
        $requete = '';
532
        if (preg_match('/.*OU.*/', $mot_cle)) {
532
        if (preg_match('/.*OU.*/', $mot_cle)) {
533
            $mots_cles_tab = explode('OU',$mot_cle);
533
            $mots_cles_tab = explode('OU',$mot_cle);
534
            foreach($mots_cles_tab as $mot_cle_item) {
534
            foreach($mots_cles_tab as $mot_cle_item) {
535
                $requete .= '(c.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
535
                $requete .= '(c.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
536
            }
536
            }
537
            $requete = '('.rtrim($requete,'OR ').')';
537
            $requete = '('.rtrim($requete,'OR ').')';
538
        } else if (preg_match('/.*ET.*/', $mot_cle)) {
538
        } else if (preg_match('/.*ET.*/', $mot_cle)) {
539
            $mots_cles_tab = explode('ET',$mot_cle);
539
            $mots_cles_tab = explode('ET',$mot_cle);
540
            foreach($mots_cles_tab as $mot_cle_item) {
540
            foreach($mots_cles_tab as $mot_cle_item) {
541
                $requete .= '(c.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
541
                $requete .= '(c.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
542
            }
542
            }
543
            $requete = '('.rtrim($requete, 'AND ').') ';
543
            $requete = '('.rtrim($requete, 'AND ').') ';
544
        } else {
544
        } else {
545
            $requete = "(c.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
545
            $requete = "(c.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
546
        }
546
        }
547
        return $requete;
547
        return $requete;
548
    }
548
    }
549
    
549
    
550
    private function creerSousRequeteProjet($mot_cle) {
550
    private function creerSousRequeteProjet($mot_cle) {
551
        $requete = '';
551
        $requete = '';
552
        if (preg_match('/.*OU.*/', $mot_cle)) {
552
        if (preg_match('/.*OU.*/', $mot_cle)) {
553
            $mots_cles_tab = explode('OU',$mot_cle);
553
            $mots_cles_tab = explode('OU',$mot_cle);
554
            foreach($mots_cles_tab as $mot_cle_item) {
554
            foreach($mots_cles_tab as $mot_cle_item) {
555
                $requete .= '(b.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
555
                $requete .= '(b.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
556
            }
556
            }
557
            $requete = '('.rtrim($requete,'OR ').')';
557
            $requete = '('.rtrim($requete,'OR ').')';
558
        } else if (preg_match('/.*ET.*/', $mot_cle)) {
558
        } else if (preg_match('/.*ET.*/', $mot_cle)) {
559
            $mots_cles_tab = explode('ET',$mot_cle);
559
            $mots_cles_tab = explode('ET',$mot_cle);
560
            foreach($mots_cles_tab as $mot_cle_item) {
560
            foreach($mots_cles_tab as $mot_cle_item) {
561
                $requete .= '(b.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
561
                $requete .= '(b.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
562
            }
562
            }
563
            $requete = '('.rtrim($requete, 'AND ').') ';
563
            $requete = '('.rtrim($requete, 'AND ').') ';
564
        } else {
564
        } else {
565
            $requete = "(b.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
565
            $requete = "(b.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').
-
 
566
            ' OR b.programme = '.Cel::db()->proteger($mot_cle).') ';
566
        }
567
        }
567
        return $requete;
568
        return $requete;
568
    }
569
    }
569
    
570
    
570
    private function creerSousRequeteReferentiel($referentiel) {
571
    private function creerSousRequeteReferentiel($referentiel) {
571
        $requete = "b.nom_referentiel LIKE '$referentiel%'";
572
        $requete = "b.nom_referentiel LIKE '$referentiel%'";
572
        return $requete;
573
        return $requete;
573
    }
574
    }
574
    
575
    
575
    private function creerSousRequeteRechercheGenerale($chaine_requete) {
576
    private function creerSousRequeteRechercheGenerale($chaine_requete) {
576
        $requete = '';
577
        $requete = '';
577
        $chaine_requete = Cel::deb()->proteger($chaine_requete.'%');
578
        $chaine_requete = Cel::deb()->proteger($chaine_requete.'%');
578
        if (trim($chaine_requete) != '') {
579
        if (trim($chaine_requete) != '') {
579
            $chaine_requete = strtolower($chaine_requete);
580
            $chaine_requete = strtolower($chaine_requete);
580
            $chaine_requete = str_replace(' ', '_', $chaine_requete);
581
            $chaine_requete = str_replace(' ', '_', $chaine_requete);
581
            $requete = ' ('.
582
            $requete = ' ('.
582
                'b.nom_ret LIKE '.$chaine_requete.
583
                'b.nom_ret LIKE '.$chaine_requete.
583
                ' OR '.
584
                ' OR '.
584
                'b.nom_sel LIKE '.$chaine_requete.
585
                'b.nom_sel LIKE '.$chaine_requete.
585
                ' OR '.
586
                ' OR '.
586
                'b.zone_geo LIKE '.$chaine_requete.
587
                'b.zone_geo LIKE '.$chaine_requete.
587
                ' OR '.
588
                ' OR '.
588
                'b.ce_zone_geo LIKE INSEE-C:'.$chaine_requete.
589
                'b.ce_zone_geo LIKE INSEE-C:'.$chaine_requete.
589
                ' OR '.
590
                ' OR '.
590
                'b.ce_zone_geo LIKE '.$chaine_requete.
591
                'b.ce_zone_geo LIKE '.$chaine_requete.
591
                ' OR '.
592
                ' OR '.
592
                'b.ce_utilisateur LIKE '.$chaine_requete.
593
                'b.ce_utilisateur LIKE '.$chaine_requete.
593
                ' OR '.
594
                ' OR '.
594
                'b.courriel_utilisateur LIKE '.$chaine_requete.
595
                'b.courriel_utilisateur LIKE '.$chaine_requete.
595
                ' OR '.
596
                ' OR '.
596
                'b.mots_cles_texte LIKE '.$chaine_requete.
597
                'b.mots_cles_texte LIKE '.$chaine_requete.
597
                ') ';
598
                ') ';
598
        }
599
        }
599
        return $requete;
600
        return $requete;
600
    }
601
    }
601
    
602
    
602
    private function estUneRechercheGenerale() {
603
    private function estUneRechercheGenerale() {
603
        return isset($_GET['recherche']);
604
        return isset($_GET['recherche']);
604
    }
605
    }
605
    
606
    
606
    private function traiterCriteresMultiples($tableau_criteres) {
607
    private function traiterCriteresMultiples($tableau_criteres) {
607
        $tableau_criteres_pour_bdd = array();
608
        $tableau_criteres_pour_bdd = array();
608
        
609
        
609
        foreach($tableau_criteres as $nom_critere => $valeur_critere) {
610
        foreach($tableau_criteres as $nom_critere => $valeur_critere) {
610
            if (isset($this->criteres[$nom_critere])) {
611
            if (isset($this->criteres[$nom_critere])) {
611
                //$valeur_critere = Cel::db()->proteger($valeur_critere);
612
                //$valeur_critere = Cel::db()->proteger($valeur_critere);
612
                $tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
613
                $tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
613
            }
614
            }
614
        }
615
        }
615
        return $tableau_criteres_pour_bdd;
616
        return $tableau_criteres_pour_bdd;
616
    }
617
    }
617
    
618
    
618
    private function creerDescriptionComplet($donnees, $item) {
619
    private function creerDescriptionComplet($donnees, $item) {
619
        $auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
620
        $auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
620
        $auteur_mail = $donnees['courriel_utilisateur'];
621
        $auteur_mail = $donnees['courriel_utilisateur'];
621
        
622
        
622
        $id_img = $donnees['id_image'];
623
        $id_img = $donnees['id_image'];
623
        $nom_fichier = $donnees['nom_original'];
624
        $nom_fichier = $donnees['nom_original'];
624
        $url_img = $this->getUrlImage($donnees['id_image'], 'CS');
625
        $url_img = $this->getUrlImage($donnees['id_image'], 'CS');
625
        $url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
626
        $url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
626
        //
627
        //
627
        $mots_cles_image = $donnees['mots_cles_texte_images'];
628
        $mots_cles_image = $donnees['mots_cles_texte_images'];
628
        $note = ($donnees['note_qualite'] +1).'/5';
629
        $note = ($donnees['note_qualite'] +1).'/5';
629
        $commentaire_img = $donnees['commentaire_img'];
630
        $commentaire_img = $donnees['commentaire_img'];
630
        
631
        
631
        $id_obs = $donnees['id_observation'];
632
        $id_obs = $donnees['id_observation'];
632
        $famille = $donnees['famille'];
633
        $famille = $donnees['famille'];
633
        $nom_saisi = $donnees['nom_sel'];
634
        $nom_saisi = $donnees['nom_sel'];
634
        $nom_retenu = $donnees['nom_ret'];
635
        $nom_retenu = $donnees['nom_ret'];
635
        //
636
        //
636
        $mots_cles_obs = $donnees['mots_cles_texte_obs'];
637
        $mots_cles_obs = $donnees['mots_cles_texte_obs'];
637
        
638
        
638
        $lieu =  $this->formaterZoneGeoEtCodePourAffichage($donnees).' > '.$donnees['lieudit'].' > '.$donnees['station'];
639
        $lieu =  $this->formaterZoneGeoEtCodePourAffichage($donnees).' > '.$donnees['lieudit'].' > '.$donnees['station'];
639
        $milieu = $donnees['milieu'];
640
        $milieu = $donnees['milieu'];
640
        $coordonnees = ($this->etreNull($donnees['latitude']) && $this->etreNull($donnees['longitude'])) ? '' : $donnees['latitude'].'/'.$donnees['longitude'];
641
        $coordonnees = ($this->etreNull($donnees['latitude']) && $this->etreNull($donnees['longitude'])) ? '' : $donnees['latitude'].'/'.$donnees['longitude'];
641
        $commentaire_obs = $donnees['commentaire_obs'];
642
        $commentaire_obs = $donnees['commentaire_obs'];
642
        $date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
643
        $date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
643
        $date_transmission = $this->formaterDate($donnees['date_transmission']);
644
        $date_transmission = $this->formaterDate($donnees['date_transmission']);
644
        $date_modification = $this->formaterDate($donnees['date_modification']);
645
        $date_modification = $this->formaterDate($donnees['date_modification']);
645
        $date_creation = $this->formaterDate($donnees['date_creation']);
646
        $date_creation = $this->formaterDate($donnees['date_creation']);
646
        $transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
647
        $transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
647
        
648
        
648
        $description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'.
649
        $description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'.
649
            '<h2>'.(!$this->etreNull($id_obs) ? "Image #$id_img liée à l'observation #$id_obs" : "Image #$id_img non liée à une observation.").'</h2>'.
650
            '<h2>'.(!$this->etreNull($id_obs) ? "Image #$id_img liée à l'observation #$id_obs" : "Image #$id_img non liée à une observation.").'</h2>'.
650
            '<a href="'.$url_img_normale.'"><img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" /></a>'.
651
            '<a href="'.$url_img_normale.'"><img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" /></a>'.
651
            '<div class="gauche">'.
652
            '<div class="gauche">'.
652
            '<h3>'.'Image'.'</h3>'.
653
            '<h3>'.'Image'.'</h3>'.
653
            '<ul>'.
654
            '<ul>'.
654
            '<li>'.'<span class="champ">URL :</span> <a href="'.$url_img_normale.'.jpg" onclick="javascript:window.open(this.href);return false;">'.$url_img_normale.'</a></li>'.
655
            '<li>'.'<span class="champ">URL :</span> <a href="'.$url_img_normale.'.jpg" onclick="javascript:window.open(this.href);return false;">'.$url_img_normale.'</a></li>'.
655
            '<li>'.'<span class="champ">Importée le :</span> '.$item['date_maj_simple'].'</li>'.
656
            '<li>'.'<span class="champ">Importée le :</span> '.$item['date_maj_simple'].'</li>'.
656
            '<li>'.'<span class="champ">Par :</span> '.
657
            '<li>'.'<span class="champ">Par :</span> '.
657
            (($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
658
            (($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
658
            '</li>'.
659
            '</li>'.
659
            '<li>'.'<span class="champ">Nom du fichier :</span> '.$this->nePasInterpreterXml($nom_fichier).'</li>'.
660
            '<li>'.'<span class="champ">Nom du fichier :</span> '.$this->nePasInterpreterXml($nom_fichier).'</li>'.
660
            '<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
661
            '<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
661
            '<li>'.'<span class="champ">Commentaires :</span> '.$this->nePasInterpreterXml($commentaire_img).'</li>'.
662
            '<li>'.'<span class="champ">Commentaires :</span> '.$this->nePasInterpreterXml($commentaire_img).'</li>'.
662
            '<li>'.'<span class="champ">Mots-clés :</span> '.$this->nePasInterpreterXml($mots_cles_image).'</li>'.
663
            '<li>'.'<span class="champ">Mots-clés :</span> '.$this->nePasInterpreterXml($mots_cles_image).'</li>'.
663
            '</ul>'.
664
            '</ul>'.
664
            '</div>';
665
            '</div>';
665
            // TODO : ajouter le champ commentaire EXIF.
666
            // TODO : ajouter le champ commentaire EXIF.
666
            if (! $this->etreNull($id_obs)) {
667
            if (! $this->etreNull($id_obs)) {
667
                $description .=
668
                $description .=
668
                '<div class="gauche">'.
669
                '<div class="gauche">'.
669
                '<h3>'.'Observation'.'</h3>'.
670
                '<h3>'.'Observation'.'</h3>'.
670
                '<ul>'.
671
                '<ul>'.
671
                '<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
672
                '<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
672
                '<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
673
                '<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
673
                '<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
674
                '<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
674
                '<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
675
                '<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
675
                '<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
676
                '<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
676
                '<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
677
                '<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
677
                (($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : '').
678
                (($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : '').
678
                '<li>'.'<span class="champ">Commentaire :</span> '.$this->nePasInterpreterXml($commentaire_obs).'</li>'.
679
                '<li>'.'<span class="champ">Commentaire :</span> '.$this->nePasInterpreterXml($commentaire_obs).'</li>'.
679
                '<li>'.'<span class="champ">Mots-clés :</span> '.$this->nePasInterpreterXml($mots_cles_obs).'</li>'.
680
                '<li>'.'<span class="champ">Mots-clés :</span> '.$this->nePasInterpreterXml($mots_cles_obs).'</li>'.
680
                (($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
681
                (($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
681
                '<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
682
                '<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
682
                '<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
683
                '<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
683
                '</ul>'.
684
                '</ul>'.
684
                '</div>';
685
                '</div>';
685
            }
686
            }
686
            $description = $this->nettoyerTexte($description);
687
            $description = $this->nettoyerTexte($description);
687
            return $description;
688
            return $description;
688
    }
689
    }
689
    
690
    
690
    private function getServiceParMotsCles() {
691
    private function getServiceParMotsCles() {
691
        $infos=array();
692
        $infos=array();
692
        $infos[0]['nom_sel_nn'] = '';
693
        $infos[0]['nom_sel_nn'] = '';
693
        $infos[0]['date_creation'] = '2011-06-28';
694
        $infos[0]['date_creation'] = '2011-06-28';
694
        $donnees = $this->construireDonneesCommunesAuFlux($infos);
695
        $donnees = $this->construireDonneesCommunesAuFlux($infos);
695
        $donnees['items'][0]['guid'] = 0;
696
        $donnees['items'][0]['guid'] = 0;
696
        $donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
697
        $donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
697
            '<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
698
            '<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
698
        if (isset($this->parametres[0])) {
699
        if (isset($this->parametres[0])) {
699
            $donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
700
            $donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
700
        } else {
701
        } else {
701
            $donnees['items'][0]['description'] .= '</b>';
702
            $donnees['items'][0]['description'] .= '</b>';
702
        }
703
        }
703
        $donnees['items'][0]['titre'] = '';
704
        $donnees['items'][0]['titre'] = '';
704
        $contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
705
        $contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
705
        return $contenu;
706
        return $contenu;
706
    }
707
    }
707
    
708
    
708
    private function getServiceParCommune() {
709
    private function getServiceParCommune() {
709
        $infos=array();
710
        $infos=array();
710
        $infos[0]['nom_sel_nn'] = '';
711
        $infos[0]['nom_sel_nn'] = '';
711
        $infos[0]['date_creation'] = '2011-06-28';
712
        $infos[0]['date_creation'] = '2011-06-28';
712
        $donnees = $this->construireDonneesCommunesAuFlux($infos);
713
        $donnees = $this->construireDonneesCommunesAuFlux($infos);
713
        $donnees['items'][0]['guid'] = 0;
714
        $donnees['items'][0]['guid'] = 0;
714
        $donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
715
        $donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
715
            '<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';
716
            '<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';
716
        if (isset($this->parametres[0])) {
717
        if (isset($this->parametres[0])) {
717
            $donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
718
            $donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
718
        } else {
719
        } else {
719
            $donnees['items'][0]['description'] .= '</b>';
720
            $donnees['items'][0]['description'] .= '</b>';
720
        }
721
        }
721
        $donnees['items'][0]['titre'] = '';
722
        $donnees['items'][0]['titre'] = '';
722
        $contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
723
        $contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
723
        return $contenu;
724
        return $contenu;
724
    }
725
    }
725
    
726
    
726
    private function getIntituleAuteur($courriel) {
727
    private function getIntituleAuteur($courriel) {
727
        $courriel = strtolower($courriel);
728
        $courriel = strtolower($courriel);
728
        $intitule = $this->auteurs[$courriel];
729
        $intitule = $this->auteurs[$courriel];
729
        return $intitule;
730
        return $intitule;
730
    }
731
    }
731
}
732
}