Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
/**
522 jpm 3
 * Service fournissant des informations concernant les images du CEL au format RSS1, RSS2 ou ATOM.
416 aurelien 4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
6
 *
7
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
8
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
9
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
10
 * @version $Id$
11
 * @copyright 2010
12
 */
528 jpm 13
// TODO : résoudre le problème des images liées à plusieurs obs. Cela créé plusieurs item avec le même id pour atom...
416 aurelien 14
class CelSyndicationImage extends Cel {
15
 
528 jpm 16
	private $parametres_origines = null;
416 aurelien 17
	private $format = null;
18
	private $service = null;
19
	private $squelette = null;
20
	private $squelette_dossier = null;
21
	private $flux = array();
22
 
23
	private $format_image = 'L';
24
 
25
	/**
26
	 * Méthode appelée avec une requête de type GET.
27
	 */
524 jpm 28
	public function getElement($params = array()) {
416 aurelien 29
		// Initialisation des variables
528 jpm 30
		$this->parametres_origines = $params;
416 aurelien 31
		$info = array();
32
		$contenu = '';
522 jpm 33
 
536 jpm 34
		if (! $this->etreFluxAdmin() || $this->authentifierAdmin()) {
522 jpm 35
			// Pré traitement des paramêtres
36
			$pour_bdd = false;
524 jpm 37
			$p = $this->traiterParametres(array('service', 'format'), $params, $pour_bdd);
522 jpm 38
			extract($p);
524 jpm 39
			$this->parametres = $params;
40
			$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
416 aurelien 41
 
522 jpm 42
			// Récupération de la liste des flux
43
			$this->chargerListeDesFlux();
44
 
45
			// Chargement du bon type de service demandé
46
			if (isset($service)) {
524 jpm 47
				$this->service = $this->traiterNomService($service);
522 jpm 48
				$methode = $this->getNomMethodeService();
49
				if (method_exists($this, $methode)) {
524 jpm 50
					if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) {
51
						// Mise en minuscule de l'indication du format
52
						$this->format = strtolower($format);
53
						// Définition du fichier squelette demandé
54
						$this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml';
55
					} else if (isset($this->flux[$this->service])) {
56
						$this->format = '';
57
						$this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
416 aurelien 58
					}
524 jpm 59
 
60
					if (!isset($this->flux[$this->service]) || isset($this->format)) {
61
						// Suppression des paramêtres inutile pour le reste des méthodes
62
						array_shift($this->parametres);
63
						array_shift($this->parametres);
64
 
65
						// Récupération du contenu à renvoyer
66
						$contenu = $this->$methode();
67
					}
522 jpm 68
				} else {
69
					$this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible.";
416 aurelien 70
				}
71
			} else {
522 jpm 72
				$this->messages[] = "Le service CEL Syndication Image nécessite d'indiquer en premier paramètre le type d'information demandé.";
416 aurelien 73
			}
74
		}
75
 
76
		// Envoie sur la sortie standard
77
		$encodage = 'utf-8';
78
		$mime = $this->getTypeMime();
79
		$formatage_json = $this->getFormatageJson();
80
		$this->envoyer($contenu, $mime, $encodage, $formatage_json);
81
	}
82
 
524 jpm 83
	private function chargerListeDesFlux() {
84
		$this->setFlux('simple', 'Nouvelles images liées à une observation dans le CEL',
85
			"Ce flux fournit l'url des nouvelles images du CEL liées à une observation.");
86
		$this->setFlux('complet', 'Nouvelles images liées à une observation dans le CEL (détails)',
87
			"Ce flux fournit les informations sur les nouvelles images du CEL liées à une observation.");
528 jpm 88
		$this->setFlux('par-mots-cles', 'Flux de syndication des nouvelles images liées à une observation publique du CEL filtrées par mots clés',
89
			"Ce flux fournit des informations sur les nouvelles images du CEL liées à une observation du CEL filtrées par mots-clés. Il nécessite d'être
90
			paramétré en indiquant en dernier position de l'url le mot-clé à rechercher.");
91
		$this->setFlux('par-commune','Flux de syndication des nouvelles images liées à une observation publique du CEL filtrées par commune',
92
			"Ce flux fournit des informations sur les nouvelles images liées à une observation du CEL filtrées par commune. Il nécessite d'être
93
			paramétré en indiquant en dernier position de l'url le nom de la commune à rechercher.");
416 aurelien 94
	}
95
 
524 jpm 96
	private function setFlux($nom, $titre, $description) {
97
		$url_base = $this->config['settings']['baseURLAbsoluDyn'].'CoelSyndicationImage/';
98
		$formats = array('atom', 'rss2', 'rss1');
99
		$flux = array();
100
		foreach ($formats as $format) {
101
			$url = $url_base.$nom.'/'.$format;
102
			$flux[$format] = $url;
103
		}
104
		$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
105
	}
106
 
107
	private function getFlux($nom) {
108
		return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
109
	}
110
 
111
	private function traiterNomService($nom) {
112
		$nom = strtolower($nom);
113
		return $nom;
114
	}
115
 
416 aurelien 116
	private function getNomMethodeService() {
117
		$methode = '';
524 jpm 118
		$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
416 aurelien 119
		$methode = 'getService'.$service_formate;
120
		return $methode;
121
	}
122
 
524 jpm 123
	private function getUrlBase() {
124
		$url_base = sprintf($this->config['settings']['baseURLAbsoluDyn'], get_class($this).'/');
125
		return $url_base;
126
	}
127
 
128
	private function getUrlServiceBase() {
528 jpm 129
		$url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
524 jpm 130
		return $url_service;
131
	}
132
 
416 aurelien 133
	private function getTypeMime() {
134
		$mime = '';
135
		switch ($this->format) {
136
			case 'atom' :
137
				$mime = 'application/atom+xml';
138
				break;
139
			case 'rss1' :
140
			case 'rss2' :
141
				$mime = 'application/rss+xml';
142
				break;
524 jpm 143
			case 'opml' :
144
				$mime = 'text/x-opml';
145
				break;
416 aurelien 146
			default:
147
				$mime = 'text/html';
148
		}
149
		return $mime;
150
	}
151
 
152
	private function getFormatageJson() {
153
		$json = false;
154
		switch ($this->service) {
524 jpm 155
			case 'liste-des-flux' :
416 aurelien 156
				$json = true;
157
				break;
158
			default:
159
				$json = false;
160
		}
161
		return $json;
162
	}
528 jpm 163
 
164
	private function creerCategorie($element) {
165
		$categorie = '';
166
		$categorie = 'Image';
167
		$categorie = $this->nettoyerTexte($categorie);
168
		return $categorie;
169
	}
524 jpm 170
 
522 jpm 171
	private function etreFluxAdmin() {
172
		return ($_GET['admin'] == '1') ? true : false;
416 aurelien 173
	}
174
 
522 jpm 175
	private function creerUrlService() {
176
		$url_service = $this->getUrlServiceBase();
528 jpm 177
		if (count($_GET) > 0) {
178
			$url_service .= '?'.implode('&', $_GET);
416 aurelien 179
		}
522 jpm 180
		return $url_service;
416 aurelien 181
	}
182
 
183
	protected function executerRequete($requete) {
184
		try {
185
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
186
			if ($infos === false) {
187
				$this->messages[] = "La requête suivante a retourné aucun résultat :\n$requete";
188
			}
189
		} catch (PDOException $e) {
190
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
191
		}
192
		return $infos;
193
	}
194
 
195
	private function executerService($elements) {
196
		// Prétraitement des données
197
		$donnees = $this->construireDonneesCommunesAuFlux($elements);
198
 
199
		foreach ($elements as $element) {
200
			$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
201
		}
202
 
203
		// Création du contenu à partir d'un template PHP
204
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
205
 
206
		return $contenu;
207
	}
208
 
209
	private function construireDonneesCommunesAuFlux($infos) {
210
		$donnees = $this->getFlux($this->service);
211
		$donnees['guid'] = $this->getUrlServiceBase();
212
		$donnees['lien_service'] = $this->creerUrlService();
585 jpm 213
		$donnees['lien_cel'] = sprintf($this->config['settings']['efloreUrlTpl'], $infos['num_nom_sel'], 'illustration');
416 aurelien 214
		$donnees['editeur'] = $this->config['settings']['editeur'];
215
		$derniere_info_en_date = reset($infos);
216
		$date_modification_timestamp = strtotime($derniere_info_en_date['ci_meta_date_ajout']);
217
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
218
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
219
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
220
		$donnees['annee_courante'] = date('Y');
221
		$donnees['generateur'] = 'CEL - Jrest - CelSyndicationImage';
222
		preg_match('/([0-9]+)/', '$Revision$', $match);
223
		$donnees['generateur_version'] = $match[1];
224
		return $donnees;
225
	}
226
 
227
	private function construireDonneesCommunesAuxItems($info) {
228
		$item = array();
528 jpm 229
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['ci_meta_date_ajout']);
416 aurelien 230
		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
231
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
232
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
233
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
234
		$item['titre'] = $this->creerTitre($info);
235
		$item['guid'] = $this->creerGuidItem($info);
236
		$item['lien'] = $this->creerLienItem($info);
528 jpm 237
		$item['categorie'] = $this->creerCategorie($item);
238
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($info), $item);
239
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
240
		$item['modifier_par'] = $this->creerAuteur($info['identifiant'], $this->etreFluxAdmin());
416 aurelien 241
		return $item;
242
	}
243
 
244
	private function creerGuidItem($element) {
528 jpm 245
		$guid = $this->getUrlImage($element['ci_id_image']);
416 aurelien 246
		return $guid;
247
	}
248
 
522 jpm 249
	private function creerTitre($element) {
250
		$methode = 'creerTitre'.$this->service;
251
		$methode = (method_exists($this, $methode)) ? $methode : 'creerTitreSimple';
252
		$titre = $this->$methode($element);
253
		$titre = $this->nettoyerTexte($titre);
254
		return $titre;
416 aurelien 255
	}
256
 
523 jpm 257
	private function creerDescription($donnees, $item) {
522 jpm 258
		$methode = 'creerDescription'.$this->service;
525 jpm 259
		$methode = (method_exists($this, $methode)) ? $methode : 'creerDescriptionComplet';
523 jpm 260
		$description = $this->$methode($donnees, $item);
416 aurelien 261
		$description = $this->nettoyerTexte($description);
262
		return $description;
263
	}
522 jpm 264
 
265
	private function creerLienItem($element) {
266
		$lien = $this->getUrlImage($element['ci_id_image'], $this->format_image);
267
		return $lien;
416 aurelien 268
	}
269
 
524 jpm 270
	private function getServiceListeDesFlux() {
271
		return $this->flux;
272
	}
273
 
274
	private function getServiceOpml() {
275
		$donnees = array();
276
		$id = 1;
277
		foreach ($this->flux as $flux_nom => $flux){
278
			$info = array();
279
			$info['type'] = 'atom';
280
			$info['titre'] = $flux['titre'];
281
			$info['texte'] = "CEL - Images - $flux_nom";
282
			$info['description'] = $flux['description'];
283
			$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
284
			$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
285
			$donnees['liste_flux'][] = $info;
522 jpm 286
		}
287
 
524 jpm 288
		$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
289
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
290
		return $contenu;
291
	}
292
 
293
	private function getServiceSimple() {
294
		if (isset($this->parametres[0])) {
295
			$this->format_image = $this->parametres[0];
296
		}
522 jpm 297
 
298
		// Construction de la requête
568 jpm 299
		$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
300
			'	ci_id_image, ci_nom_original, ci_meta_date_ajout, ci_meta_mots_cles, ci_meta_comment, ci_note_image  '.
522 jpm 301
			'FROM cel_obs_images AS coi '.
302
			'LEFT JOIN cel_inventory AS ci '.
303
				'ON (coi.coi_ce_observation = ci.ordre AND coi.coi_ce_utilisateur = ci.identifiant) '.
304
			'LEFT JOIN cel_images AS cim '.
305
				'ON (coi.coi_ce_image = cim.ci_id_image AND coi.coi_ce_utilisateur = cim.ci_ce_utilisateur) '.
306
			'WHERE ci.transmission = 1 '.
307
			'	AND ci.identifiant = cim.ci_ce_utilisateur '.
308
			'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'ci_meta_date_ajout DESC').' '.
309
			"LIMIT $this->start, $this->limit ";
310
 
311
		$elements = $this->executerRequete($requete);
312
 
313
		// Création du contenu
314
		$contenu = $this->executerService($elements);
315
		return $contenu;
416 aurelien 316
	}
317
 
522 jpm 318
	private function creerTitreSimple($element) {
319
		$titre = $element['nom_sel'].' [nn'.$element['num_nom_sel'].'] par '.$this->creerAuteur($element['identifiant'], $this->etreFluxAdmin());
320
		return $titre;
416 aurelien 321
	}
322
 
523 jpm 323
	private function creerDescriptionSimple($donnees, $item) {
585 jpm 324
		$description = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($donnees['num_nom_sel']), 'illustration');
522 jpm 325
		return $description;
416 aurelien 326
	}
327
 
524 jpm 328
	private function getServiceComplet() {
522 jpm 329
		// Construction de la requête
525 jpm 330
		$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
331
			'	ci_id_image, ci_nom_original, ci_meta_date_ajout, ci_meta_mots_cles, ci_meta_comment, ci_note_image '.
332
			'FROM cel_images AS cim '.
333
			'	LEFT JOIN cel_obs_images AS coi '.
334
			'		ON (coi.coi_ce_image = cim.ci_id_image AND coi.coi_ce_utilisateur = cim.ci_ce_utilisateur) '.
335
			'	LEFT JOIN cel_inventory AS ci '.
336
			'		ON (coi.coi_ce_observation = ci.ordre AND coi.coi_ce_utilisateur = ci.identifiant) '.
337
			(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 ').
522 jpm 338
			'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'ci_meta_date_ajout DESC').' '.
339
			"LIMIT $this->start, $this->limit ";
340
 
341
		$elements = $this->executerRequete($requete);
525 jpm 342
 
522 jpm 343
		// Création du contenu
525 jpm 344
		if ($elements != false && count($elements) > 0) {
345
			$contenu = $this->executerService($elements);
346
		} else {
347
			$this->messages[] = "Aucune image disponible.";
348
		}
349
 
522 jpm 350
		return $contenu;
516 aurelien 351
	}
522 jpm 352
 
523 jpm 353
	private function creerDescriptionComplet($donnees, $item) {
528 jpm 354
		$auteur = $this->creerAuteur($donnees['identifiant'], $this->etreFluxAdmin());
355
 
525 jpm 356
		$id_img = $donnees['ci_id_image'];
528 jpm 357
		$nom_fichier = $donnees['ci_nom_original'];
358
		$url_img = $this->getUrlImage($donnees['ci_id_image'], 'M');
359
		$mots_cles_image = $this->decoderMotsClesImg($donnees['identifiant'], $donnees['ci_meta_mots_cles']);
360
		$note = ($donnees['ci_note_image'] +1).'/5';
361
		$commentaire_img = $donnees['ci_meta_comment'];
362
 
525 jpm 363
		$id_obs = $donnees['id'];
528 jpm 364
		$famille = $donnees['famille'];
365
		$nom_saisi = $donnees['nom_sel'];
366
		$nom_retenu = $donnees['nom_ret'];
525 jpm 367
		$mots_cles_obs = $this->decoderMotsClesObs($donnees['identifiant'], $donnees['mots_cles']);
528 jpm 368
		$lieu =  $donnees['location'].' ('.$donnees['id_location'].') > '.$donnees['lieudit'].' > '.$donnees['station'];
369
		$milieu = $donnees['milieu'];
525 jpm 370
		$coordonnees = ($this->etreNull($donnees['coord_x']) && $this->etreNull($donnees['coord_y'])) ? '' : $donnees['coord_x'].'/'.$donnees['coord_y'];
528 jpm 371
		$commentaire_obs = $donnees['commentaire'];
525 jpm 372
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
373
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
374
		$date_modification = $this->formaterDate($donnees['date_modification']);
375
		$date_creation = $this->formaterDate($donnees['date_creation']);
376
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
523 jpm 377
 
525 jpm 378
		$description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'.
379
			'<h2>'."Image #$id_img liée à l'observation #$id_obs".'</h2>'.
528 jpm 380
			'<img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" />'.
525 jpm 381
			'<div class="gauche">'.
382
			'<h3>'.'Image'.'</h3>'.
383
			'<ul>'.
384
			'<li>'.'<span class="champ">Importée le :</span> '.$item['date_maj_simple'].'</li>'.
385
			'<li>'.'<span class="champ">Par :</span> '.
386
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur.'">'.$auteur.'</a>' : $auteur).
387
			'</li>'.
528 jpm 388
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'.
389
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
390
			'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'.
525 jpm 391
			'<li>'.'<span class="champ">Mots-clés :</span> '.implode(', ', $mots_cles_image).'</li>'.
392
			'</ul>'.
393
			'</div>'.
394
			// TODO : ajouter le champ commentaire EXIF.
395
			'<div class="gauche">'.
396
			'<h3>'.'Observation'.'</h3>'.
397
			'<ul>'.
528 jpm 398
			'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
399
			'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
400
			'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
525 jpm 401
			'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
402
			'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
528 jpm 403
			'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
525 jpm 404
			(($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : '').
528 jpm 405
			'<li>'.'<span class="champ">Commentaire :</span> '.$commentaire_obs.'</li>'.
525 jpm 406
			'<li>'.'<span class="champ">Mots-clés :</span> '.implode(', ', $mots_cles_obs).'</li>'.
407
			(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
408
			'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
409
			'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
410
			'</ul>'.
411
			'</div>';
522 jpm 412
		$description = $this->nettoyerTexte($description);
413
		return $description;
416 aurelien 414
	}
525 jpm 415
 
416
	private function getServiceParMotsCles() {
417
		$contenu = '';
418
		$mot_cle = $this->parametres[0];
419
 
420
		if (isset($mot_cle)) {
421
			$mot_cle_encode = $this->bdd->quote($this->encoderMotCle($mot_cle));
422
 
423
			// Construction de la requête
424
			$requete = 	'SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire '.
425
				'FROM cel_mots_cles_images '.
426
				"WHERE cmc_id_mot_cle_general = $mot_cle_encode ";
427
			$elements = $this->executerRequete($requete);
428
 
429
			if ($elements != false && count($elements) > 0) {
430
				// Pré-construction du where de la requête
431
				$tpl_where = '(ci_meta_mots_cles LIKE "%%%s%%" AND ci_ce_utilisateur = %s )';
432
				$requete_where = array();
433
				foreach ($elements as $occurence) {
434
					$requete_where[] = sprintf($tpl_where, $occurence['cmc_id_mot_cle_utilisateur'], $this->bdd->quote($occurence['cmc_id_proprietaire']));
435
				}
436
 
437
				// Construction de la requête
438
				$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
439
					'	ci_id_image, ci_nom_original, ci_meta_date_ajout, ci_meta_mots_cles, ci_meta_comment, ci_note_image '.
440
					'FROM cel_images AS cim '.
441
					'	LEFT JOIN cel_obs_images AS coi '.
442
					'		ON (coi.coi_ce_image = cim.ci_id_image AND coi.coi_ce_utilisateur = cim.ci_ce_utilisateur) '.
443
					'	LEFT JOIN cel_inventory AS ci '.
444
					'		ON (coi.coi_ce_observation = ci.ordre AND coi.coi_ce_utilisateur = ci.identifiant) '.
445
					'WHERE '.implode(" \nOR ", $requete_where).' '.
446
					'	'.(($this->etreFluxAdmin()) ? '' : 'AND ci.transmission = 1').' '.
447
					'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'ci_meta_date_ajout DESC').' '.
448
					"LIMIT $this->start, $this->limit ";
449
				$elements = $this->executerRequete($requete);
450
 
451
				// Création du contenu
452
				$contenu = $this->executerService($elements);
453
			} else {
454
				$this->messages[] = "Aucune image ne correspond à ce mot clé.";
455
			}
456
		} else {
457
			$this->messages[] = "Le service demandé nécessite d'indiquer un mot-clé en dernier paramêtre.";
458
		}
459
		return $contenu;
460
	}
461
 
462
	private function getServiceParCommune() {
463
		$contenu = '';
464
		$commune = $this->parametres[0];
465
		if (isset($commune)) {
466
			$commune = $this->bdd->quote($commune);
467
 
468
			// Construction de la requête
469
			$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
470
			'	ci_id_image, ci_nom_original, ci_meta_date_ajout, ci_meta_mots_cles, ci_meta_comment, ci_note_image '.
471
			'FROM cel_images AS cim '.
472
			'	LEFT JOIN cel_obs_images AS coi '.
473
			'		ON (coi.coi_ce_image = cim.ci_id_image AND coi.coi_ce_utilisateur = cim.ci_ce_utilisateur) '.
474
			'	LEFT JOIN cel_inventory AS ci '.
475
			'		ON (coi.coi_ce_observation = ci.ordre AND coi.coi_ce_utilisateur = ci.identifiant) '.
476
			"WHERE ci.location = $commune ".
477
			'	'.(($this->etreFluxAdmin()) ? '' : 'AND ci.transmission = 1').' '.
478
			'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'ci_meta_date_ajout DESC').' '.
479
			"LIMIT $this->start,$this->limit ";
480
			$elements = $this->executerRequete($requete);
481
 
482
			// Création du contenu
483
			if ($elements != false && count($elements) > 0) {
484
				$contenu = $this->executerService($elements);
485
			} else {
486
				$this->messages[] = "Aucune image ne correspond à cette commune.";
487
			}
488
		} else {
489
			$this->messages[] = "Le service demandé nécessite d'indiquer une nom de commune en dernier paramêtre.";
490
		}
491
		return $contenu;
492
	}
416 aurelien 493
}