Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 993 Rev 1329
Line 24... Line 24...
24
	private $flux = array();
24
	private $flux = array();
Line 25... Line 25...
25
	
25
	
Line 26... Line 26...
26
	private $format_image = 'XL';
26
	private $format_image = 'XL';
27
	
27
	
28
	private $criteres = array(
28
	private $criteres = array(
29
		'utilisateur' => 'c.id_utilisateur', 
29
		'utilisateur' => 'c.courriel_utilisateur', 
30
		'commune' => 'b.zone_geo', 
30
		'commune' => 'b.zone_geo', 
31
		'dept' => 'b.id_zone_geo',
31
		'dept' => 'b.ce_zone_geo',
32
		'taxon' => 'b.nom_ret',
32
		'taxon' => 'b.nom_ret',
33
		'commentaire' => 'c.commentaire',
33
		'commentaire' => 'c.commentaire',
34
		'date' => 'c.date_prise_de_vue',
34
		'date' => 'c.date_prise_de_vue',
Line 199... Line 199...
199
		}
199
		}
200
		return $url_service;
200
		return $url_service;
201
	}
201
	}
Line 202... Line 202...
202
	
202
	
-
 
203
	protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) {
203
	protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) {
204
		$infos = null;
204
		try {
205
		try {
205
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
206
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
206
			if ($infos === false) {
207
			if ($infos === false) {
207
				$this->messages[] = "La requête suivante a retourné aucun résultat :\n$requete";
208
				$this->messages[] = "La requête suivante a retourné aucun résultat :\n$requete";
Line 214... Line 215...
214
	
215
	
215
	private function executerService($elements) {
216
	private function executerService($elements) {
216
		// Prétraitement des données
217
		// Prétraitement des données
217
		$donnees = $this->construireDonneesCommunesAuFlux($elements);
218
		$donnees = $this->construireDonneesCommunesAuFlux($elements);
218
		foreach ($elements as $element) {
219
		foreach ($elements as $element) {
219
			$identifiants[$element['ci_ce_utilisateur']] = $element['ci_ce_utilisateur'];
220
			$identifiants[$element['ce_utilisateur']] = $element['ce_utilisateur'];
220
		}
221
		}
221
		$this->auteurs = $this->creerAuteurs($identifiants);
222
		$this->auteurs = $this->creerAuteurs($identifiants);
222
		foreach ($elements as $element) {
223
		foreach ($elements as $element) {
223
			$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
224
			$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
Line 231... Line 232...
231
	
232
	
232
	private function construireDonneesCommunesAuFlux($infos) {
233
	private function construireDonneesCommunesAuFlux($infos) {
233
		$donnees = $this->getFlux($this->service);
234
		$donnees = $this->getFlux($this->service);
234
		$donnees['guid'] = $this->getUrlServiceBase();
235
		$donnees['guid'] = $this->getUrlServiceBase();
235
		$donnees['lien_service'] = $this->creerUrlService();
236
		$donnees['lien_service'] = $this->creerUrlService();
236
		$donnees['lien_cel'] = (isset($infos['num_nom_sel'])) ? 
237
		$donnees['lien_cel'] = (isset($infos['nom_sel_nn'])) ? 
237
			sprintf($this->config['settings']['efloreUrlTpl'], $infos['num_nom_sel'], 'illustration') : '';
238
			sprintf($this->config['settings']['efloreUrlTpl'], $infos['nom_sel_nn'], 'illustration') : '';
238
		$donnees['editeur'] = $this->config['settings']['editeur'];
239
		$donnees['editeur'] = $this->config['settings']['editeur'];
239
		$derniere_info_en_date = reset($infos);
240
		$derniere_info_en_date = reset($infos);
240
		$date_modification_timestamp = strtotime($derniere_info_en_date['ci_meta_date_ajout']);
241
		$date_modification_timestamp = strtotime($derniere_info_en_date['date_creation']);
241
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
242
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
242
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
243
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
243
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
244
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
244
		$donnees['annee_courante'] = date('Y');
245
		$donnees['annee_courante'] = date('Y');
Line 247... Line 248...
247
		return $donnees; 
248
		return $donnees; 
248
	}
249
	}
Line 249... Line 250...
249
	
250
	
250
	private function construireDonneesCommunesAuxItems($info) {
251
	private function construireDonneesCommunesAuxItems($info) {
251
		$item = array();
252
		$item = array();
252
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['ci_meta_date_ajout']);
253
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['date_creation']);
253
		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
254
		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
254
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
255
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
255
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
256
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
256
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
257
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
257
		$item['titre'] = $this->creerTitre($info);
258
		$item['titre'] = $this->creerTitre($info);
258
		$item['guid'] = $this->creerGuidItem($info);
259
		$item['guid'] = $this->creerGuidItem($info);
259
		$item['lien'] = $this->creerLienItem($info);
260
		$item['lien'] = $this->creerLienItem($info);
260
		$item['categorie'] = $this->creerCategorie($item);
261
		$item['categorie'] = $this->creerCategorie($item);
261
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($info), $item);
262
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($info), $item);
262
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
263
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
263
		$item['modifier_par'] = $this->auteurs[$info['ci_ce_utilisateur']];
264
		$item['modifier_par'] = $this->auteurs[$info['ce_utilisateur']];
264
		return $item;
265
		return $item;
Line 265... Line 266...
265
	}
266
	}
266
	
267
	
267
	private function creerGuidItem($element) {
268
	private function creerGuidItem($element) {
268
		$guid = $this->getUrlImage($element['ci_id_image']);
269
		$guid = $this->getUrlImage($element['id_image']);
Line 269... Line 270...
269
		return $guid;
270
		return $guid;
270
	}
271
	}
Line 284... Line 285...
284
		$description = $this->nettoyerTexte($description);
285
		$description = $this->nettoyerTexte($description);
285
		return $description;
286
		return $description;
286
	}
287
	}
Line 287... Line 288...
287
 
288
 
-
 
289
	private function creerLienItem($element) {
288
	private function creerLienItem($element) {
290
 
289
		if ($this->etreNull($element['id'])) {
291
		if ($this->etreNull($element['id_observation'])) {
290
			// Lien vers image grand format
292
			// Lien vers image grand format
291
			$lien = $this->getUrlImage($element['ci_id_image'], $this->format_image);
293
			$lien = $this->getUrlImage($element['id_image'], $this->format_image);
292
		} else {
294
		} else {
293
			// Lien vers fiche eFlore onglet Illustration
295
			// Lien vers fiche eFlore onglet Illustration
294
			$lien = sprintf($this->config['settings']['efloreUrlTpl'], $element['num_nom_sel'], 'illustration');
296
			$lien = sprintf($this->config['settings']['efloreUrlTpl'], $element['nom_sel_nn'], 'illustration');
295
		}
297
		}
296
		return $lien;
298
		return $lien;
Line 297... Line 299...
297
	}
299
	}
Line 324... Line 326...
324
			$this->format_image = $this->parametres[0];
326
			$this->format_image = $this->parametres[0];
325
		}
327
		}
Line 326... Line 328...
326
		
328
		
327
		// Construction de la requête
329
		// Construction de la requête
328
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
330
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
-
 
331
			' cim.id_image, cim.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images,
329
			'	ci_id_image, ci_ce_utilisateur, ci_nom_original, ci_meta_date_ajout, ci_meta_mots_cles, ci_meta_comment, ci_note_image  '.
332
				 ci.mots_cles_texte as mots_cles_texte_images_obs, cim.commentaire, note_qualite  '.
330
			'FROM cel_obs_images AS coi '.
333
			'FROM cel_obs_images AS coi '.
331
			'LEFT JOIN cel_inventory AS ci '.
334
			'LEFT JOIN cel_obs AS ci '.
332
				'ON (coi.coi_ce_observation = ci.ordre AND coi.coi_ce_utilisateur = ci.identifiant) '.
335
				'ON (coi.id_observation = ci.id_observation) '.
333
			'LEFT JOIN cel_images AS cim '.
336
			'LEFT JOIN cel_images AS cim '.
334
				'ON (coi.coi_ce_image = cim.ci_id_image AND coi.coi_ce_utilisateur = cim.ci_ce_utilisateur) '.  
337
				'ON (coi.id_image = cim.id_image) '.  
335
			'WHERE ci.transmission = 1 '.
338
			'WHERE ci.transmission = 1 '.
336
			'	AND ci.identifiant = cim.ci_ce_utilisateur '.
339
			'	AND ci.ce_utilisateur = cim.ce_utilisateur '.
337
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'ci_meta_date_ajout DESC').' '.
340
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'cim.date_creation DESC').' '.
338
			"LIMIT $this->start, $this->limit ";
341
			"LIMIT $this->start, $this->limit ";
339
		
342
 
Line 340... Line 343...
340
		$elements = $this->executerRequete($requete);
343
		$elements = $this->executerRequete($requete);
341
		
344
		
342
		// Création du contenu
345
		// Création du contenu
343
		$contenu = $this->executerService($elements);
346
		$contenu = $this->executerService($elements);
Line 344... Line 347...
344
		return $contenu;
347
		return $contenu;
345
	}
348
	}
346
	
349
	
347
	private function creerTitreSimple($element) {
350
	private function creerTitreSimple($element) {
348
		if ($this->etreNull($element['nom_sel']) && $this->etreNull($element['num_nom_sel'])) {
351
		if ($this->etreNull($element['nom_sel']) && $this->etreNull($element['nom_sel_nn'])) {
349
			$titre = "Ajout d'une photo par ".$this->auteurs[$element['ci_ce_utilisateur']];
352
			$titre = "Ajout d'une photo par ".$this->auteurs[$element['ce_utilisateur']];
350
		} else {
353
		} else {
351
			$titre = $element['nom_sel'].' [nn'.$element['num_nom_sel'].'] par '.$this->auteurs[$element['ci_ce_utilisateur']];
354
			$titre = $element['nom_sel'].' [nn'.$element['nom_sel_nn'].'] par '.$element['prenom_utilisateur'].' '.$element['nom_utilisateur'];
Line 352... Line 355...
352
		}
355
		}
353
		return $titre;
356
		return $titre;
354
	}
357
	}
355
	
358
	
Line 356... Line 359...
356
	private function creerDescriptionSimple($donnees, $item) {
359
	private function creerDescriptionSimple($donnees, $item) {
-
 
360
		$description = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($donnees['nom_sel_nn']), 'illustration');
357
		$description = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($donnees['num_nom_sel']), 'illustration');
361
		return $description;
358
		return $description;
362
	}
359
	}
363
	
-
 
364
	private function getServiceComplet() {
360
	
365
		
361
	private function getServiceComplet() {
366
		// Construction de la requête
362
		// Construction de la requête
367
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
363
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
368
			'	cim.id_image, ci.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images, '.
364
			'	ci_id_image, ci_ce_utilisateur, ci_nom_original, ci_meta_date_ajout, ci_meta_mots_cles, ci_meta_comment, ci_note_image '.
369
			'   ci.mots_cles_texte as mots_cles_texte_obs, cim.commentaire, note_qualite '.
365
			'FROM cel_images AS cim '.
370
			'FROM cel_images AS cim '.
366
			'	LEFT JOIN cel_obs_images AS coi '.
371
			'	LEFT JOIN cel_obs_images AS coi '.
367
			'		ON (coi.coi_ce_image = cim.ci_id_image AND coi.coi_ce_utilisateur = cim.ci_ce_utilisateur) '.
372
			'		ON (coi.id_image = cim.id_image) '.
Line 368... Line 373...
368
			'	LEFT JOIN cel_inventory AS ci '.
373
			'	LEFT JOIN cel_obs AS ci '.
Line 369... Line 374...
369
			'		ON (coi.coi_ce_observation = ci.ordre AND coi.coi_ce_utilisateur = ci.identifiant) '.
374
			'		ON (coi.id_observation = ci.id_observation) '.
370
			(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 ').
375
			(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 ').
371
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'ci_meta_date_ajout DESC').' '.
376
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'cim.date_creation DESC').' '.
372
			"LIMIT $this->start, $this->limit ";
377
			"LIMIT $this->start, $this->limit ";
373
		
378
		
-
 
379
		$elements = $this->executerRequete($requete);
374
		$elements = $this->executerRequete($requete);
380
 
Line 375... Line 381...
375
 
381
		// Création du contenu
376
		// Création du contenu
382
		if ($elements != false && count($elements) > 0) {
Line 387... Line 393...
387
		$contenu = '';
393
		$contenu = '';
388
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];		
394
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];		
389
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
395
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
Line 390... Line 396...
390
		
396
		
391
		// Construction de la requête
397
		// Construction de la requête
392
		$requete = 'SELECT * '.
398
		$requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images '.
393
			'FROM cel_obs_images AS a '.
399
			'FROM cel_obs_images AS a '.
394
			'	INNER JOIN cel_inventory AS b '.
400
			'	INNER JOIN cel_obs AS b '.
395
			'		ON (a.coi_ce_observation = b.ordre AND a.coi_ce_utilisateur = b.identifiant) '.
401
			'		ON (a.id_observation = b.id_observation) '.
396
			'	INNER JOIN cel_images AS c '.
402
			'	INNER JOIN cel_images AS c '.
397
			'		ON (a.coi_ce_image = c.ci_id_image AND a.coi_ce_utilisateur = c.ci_ce_utilisateur) '. 
403
			'		ON (a.id_image = c.id_image) '. 
398
			'WHERE b.identifiant = c.ci_ce_utilisateur '.
404
			'WHERE b.ce_utilisateur = c.ce_utilisateur '.
399
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
405
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
Line 400... Line 406...
400
			'	AND ';
406
			'	AND ';
401
		
407
		
Line 409... Line 415...
409
			}	
415
			}	
410
		}
416
		}
411
		$requete = str_replace(' AND ) ',' ', $requete);
417
		$requete = str_replace(' AND ) ',' ', $requete);
412
		$requete = rtrim($requete, 'AND ');
418
		$requete = rtrim($requete, 'AND ');
413
		$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 
419
		$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 
414
			'c.ci_meta_date_ajout DESC').' '."LIMIT $this->start,$this->limit ";
420
			'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
-
 
421
 
415
		$elements = $this->executerRequete($requete);
422
		$elements = $this->executerRequete($requete);
Line 416... Line 423...
416
 
423
 
417
		// Création du contenu
424
		// Création du contenu
418
		if ($elements != false && count($elements) > 0) {
425
		if ($elements != false && count($elements) > 0) {
Line 430... Line 437...
430
			$nom_valeur = explode("=",$pair);
437
			$nom_valeur = explode("=",$pair);
431
			if (sizeof($nom_valeur) != 0) {
438
			if (sizeof($nom_valeur) != 0) {
432
				switch ($nom_valeur[0]) {
439
				switch ($nom_valeur[0]) {
433
					case "ci_limite" : $this->limite = $this->bdd->quote($nom_valeur[1]); break;
440
					case "ci_limite" : $this->limite = $this->bdd->quote($nom_valeur[1]); break;
434
					case "c.ci_numero_page" : $this->limite*$this->bdd->quote($nom_valeur[1]); break;
441
					case "c.ci_numero_page" : $this->limite*$this->bdd->quote($nom_valeur[1]); break;
435
					case "c.ci_meta_comment" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
442
					case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
436
						foreach($mots_comment_liste as $mot_comment) {
443
						foreach($mots_comment_liste as $mot_comment) {
437
							$mot_comment = trim($mot_comment) ;
444
							$mot_comment = trim($mot_comment) ;
438
							$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
445
							$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
439
						}
446
						}
440
						break;
447
						break;
441
					case "c.ci_meta_date" : 
448
					case "c.date_prise_de_vue" : 
442
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
449
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
443
						if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
450
						if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
444
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
451
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
445
						}
452
						}
446
						$requete .= $nom_valeur[0].'='.$this->bdd->quote($nom_valeur[1]).' AND '; break;
453
						$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote($nom_valeur[1]."%").' AND '; break;
-
 
454
					case "b.ce_zone_geo" :
-
 
455
						$requete .= ' ('.$nom_valeur[0].' LIKE "%INSEE-C:'.$nom_valeur[1].'%") AND '; break;
447
					case "b.nom_ret" : 
456
					case "b.nom_ret" : 
448
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';						
457
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';						
449
						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR b.nom_sel LIKE "%'.
458
						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR b.nom_sel LIKE "%'.
450
							$nom_valeur[1].'%") AND '; break;
459
							$nom_valeur[1].'%") AND '; break;
451
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]); break; 
460
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]); break; 
Line 457... Line 466...
457
		$requete = rtrim($requete,' AND ');
466
		$requete = rtrim($requete,' AND ');
458
		return $requete;
467
		return $requete;
459
	}
468
	}
Line 460... Line 469...
460
	
469
	
-
 
470
	private function creerSousRequeteMotsCles($mot_cle) {
461
	private function creerSousRequeteMotsCles($mot_cle) {
471
	$requete = '';
462
		if (preg_match('/.*OU.*/', $mot_cle)) {
-
 
463
			$requete = $this->creerSousRequeteMotsClesOu($mot_cle);
472
		if (preg_match('/.*OU.*/', $mot_cle)) {
464
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
-
 
465
			$requete = $this->creerSousRequeteMotsClesEt($mot_cle);
-
 
466
		} else {		
-
 
467
			// Construction de la requête
-
 
468
			$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_images WHERE ".
-
 
469
				'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle)); 
-
 
470
			$elements = $this->executerRequete($prerequete);
-
 
471
			if ($elements != false && count($elements) > 0) {
-
 
472
				$requete = ' ( ';
473
			$mots_cles_tab = explode('OU',$mot_cle);
473
				foreach ($elements as $occurence) {
474
			foreach($mots_cles_tab as $mot_cle_item) {
474
					$requete .= '(ci_meta_mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND ci_ce_utilisateur = '.
-
 
475
						$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';	
-
 
476
				}
-
 
477
			} else {
-
 
478
				$requete = ' (ci_meta_mots_cles like "inexistant" OR';
475
				$requete .= '(c.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') OR ';
479
			}
-
 
480
		}
476
			}
481
		$requete = rtrim($requete,' OR ').' ) AND ';
-
 
482
		return $requete;
-
 
483
	}
-
 
484
	
477
			$requete = '('.rtrim($requete,'OR ').')';
485
	private function creerSousRequeteMotsClesOu($mot_cle) {
478
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
486
		$tab_mots_cles = explode('OU', $mot_cle);
-
 
487
		$where = '';
479
			$mots_cles_tab = explode('ET',$mot_cle);
488
		foreach ($tab_mots_cles as $mot) {
480
			foreach($mots_cles_tab as $mot_cle_item) {
489
			$where .= 'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle(trim($mot))).' OR ';
-
 
490
		}
-
 
491
		$where = rtrim($where,' OR ');
-
 
492
		
-
 
493
		// Construction de la requête
-
 
494
		$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_images WHERE $where "; 
-
 
495
		$elements = $this->executerRequete($prerequete);//print_r($elements);
-
 
496
		if ($elements != false && count($elements) > 0) {
-
 
497
			$requete = ' ( ';
-
 
498
			foreach ($elements as $occurence) {
-
 
499
				$requete .= '(ci_meta_mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND ci_ce_utilisateur = '.
-
 
500
					$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
481
				$requete .= '(c.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') AND ';
-
 
482
			}
501
			}
483
			$requete = '('.rtrim($requete, 'AND ').')';
502
		} else {
484
		} else {
503
			$requete = ' (ci_meta_mots_cles like "inexistant" OR';
485
			$requete = "(c.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') AND';
504
		}
486
		}
505
		return $requete;
487
		return $requete;
Line 506... Line -...
506
	}
-
 
507
	
-
 
508
	private function creerSousRequeteMotsClesEt($mot_cle) {
-
 
509
		$where = '';
-
 
510
		$champs = 'a.cmc_id_proprietaire , ';
-
 
511
		$table = '';
-
 
512
		$i = "a"; $j = "a";
-
 
513
		
-
 
514
		$tab_mots_cles = explode("ET", $mot_cle); 
-
 
515
		foreach ($tab_mots_cles as $mot) {
-
 
516
			$champs .= "$i.cmc_id_mot_cle_utilisateur as $i , ";
-
 
517
			$table .= "cel_mots_cles_images $i , ";
-
 
518
			$where .= "$i.cmc_id_mot_cle_general = ".$this->bdd->quote($this->encoderMotCle(trim($mot))).' AND ';
-
 
519
			if ($i !== "a") {
-
 
520
				$where .= " $i.cmc_id_proprietaire = ".$j.".cmc_id_proprietaire AND ";
-
 
521
				$j++;
-
 
522
			}
-
 
523
			$i++;
-
 
524
		}
-
 
525
		$where = rtrim($where,' AND ');
-
 
526
		$champs = rtrim($champs,' , ');
-
 
527
		$table = rtrim($table,' , ');
-
 
528
		
-
 
529
		// Construction de la requête
-
 
530
		$prerequete = 	"SELECT $champs FROM $table WHERE $where ";
-
 
531
		$elements = $this->executerRequete($prerequete);//print_r($elements);
-
 
532
		if ($elements != false && count($elements) > 0) {
-
 
533
			$requete = ' ( ';
-
 
534
			foreach ($elements as $occurence) {
-
 
535
				$requete .= ' (';
-
 
536
				for ($j = 'a'; $j < $i; $j++) {
-
 
537
					$requete .= 'ci_meta_mots_cles like "%'.$occurence[$j].'%" AND ';
-
 
538
				}
-
 
539
				$requete .= ' ci_ce_utilisateur = '.$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
-
 
540
			}
-
 
541
		} else {
-
 
542
			$requete = ' (ci_meta_mots_cles like "inexistant" OR';
-
 
543
		}
-
 
544
		return $requete;
-
 
545
	}		
488
	}
546
	
489
	
547
	private function creerSousRequeteProjet($mot_cle) {
490
	private function creerSousRequeteProjet($mot_cle) {
548
		$requete = 'mots_cles like "inexistant" OR';
-
 
549
		if (preg_match('/.*OU.*/', $mot_cle)) {
-
 
550
			$requete = $this->creerSousRequeteProjetOu($mot_cle);
-
 
551
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
-
 
552
			$requete = $this->creerSousRequeteProjetEt($mot_cle);
-
 
553
		} else {
-
 
554
			// Construction de la requête
-
 
555
			$prerequete = 	'SELECT * '.
-
 
556
				'FROM cel_mots_cles_obs '.
-
 
557
				'WHERE cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle)); 
-
 
558
			$elements = $this->executerRequete($prerequete);
-
 
559
			if ($elements != false && count($elements) > 0) {
-
 
560
				$requete = '';
-
 
561
				foreach ($elements as $occurence) {
-
 
562
					$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
-
 
563
						$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';	
-
 
564
				}
-
 
565
			}
-
 
566
		}
-
 
567
		$requete = rtrim($requete,' OR ').' AND ';
-
 
568
		return $requete;
-
 
569
	}
-
 
570
	
-
 
571
	private function creerSousRequeteProjetOu($mot_cle) {	
491
		$requete = '';
572
		$requete = 'mots_cles like "inexistant" OR';	
-
 
573
		$tab_mots_cles = explode('OU', $mot_cle);
492
		if (preg_match('/.*OU.*/', $mot_cle)) {
574
		$where = '';
-
 
575
		foreach ($tab_mots_cles as $mot) {
-
 
576
			$where .= 'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle(trim($mot))).' OR ';
-
 
577
		}
-
 
578
		$where = rtrim($where,' OR ');
-
 
579
		
-
 
580
		// Construction de la requête
-
 
581
		$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_obs WHERE $where "; 
-
 
582
		$elements = $this->executerRequete($prerequete);
-
 
583
		if ($elements != false && count($elements) > 0) {
-
 
584
			$requete = '';
493
			$mots_cles_tab = explode('OU',$mot_cle);
585
			foreach ($elements as $occurence) {
-
 
586
				$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
-
 
587
					$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
-
 
588
			}
-
 
589
		}
-
 
590
		return $requete;
-
 
591
	}
-
 
592
	
-
 
593
	private function creerSousRequeteProjetEt($mot_cle) {
-
 
594
		$requete = 'mots_cles like "inexistant" OR';
-
 
595
		$where = '';
-
 
596
		$champs = 'a.cmc_id_proprietaire , ';
-
 
597
		$table = '';
-
 
598
		$i = "a"; $j = "a";
-
 
599
		
-
 
600
		$tab_mots_cles = explode("ET", $mot_cle);
-
 
601
		 
-
 
602
		foreach ($tab_mots_cles as $mot) {
-
 
603
			$champs .= "$i.cmc_id_mot_cle_utilisateur as $i , ";
-
 
604
			$table .= "cel_mots_cles_obs $i , ";
-
 
605
			$where .= "$i.cmc_id_mot_cle_general = ".$this->bdd->quote($this->encoderMotCle(trim($mot))).' AND ';
-
 
606
			if ($i !== "a") {
-
 
607
				$where .= " $i.cmc_id_proprietaire = ".$j.".cmc_id_proprietaire AND ";
494
			foreach($mots_cles_tab as $mot_cle_item) {
608
				$j++;
-
 
609
			}
-
 
610
			$i++;
495
				$requete .= '(b.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') OR ';
611
		}
496
			}
612
		$where = rtrim($where, ' AND ');
497
			$requete = '('.rtrim($requete,'OR ').')';
613
		$champs = rtrim($champs, ' , ');
-
 
614
		$table = rtrim($table, ' , ');
-
 
615
		
-
 
616
		// Construction de la requête
-
 
617
		$prerequete = 	"SELECT $champs FROM $table WHERE $where "; 
-
 
618
		$elements = $this->executerRequete($prerequete);//print_r($elements);
-
 
619
		if ($elements != false && count($elements) > 0) {
498
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
620
			$requete = '';
-
 
621
			foreach ($elements as $occurence) {
-
 
622
				$requete = ' (';
499
			$mots_cles_tab = explode('ET',$mot_cle);
623
				for ($j = 'a'; $j < $i; $j++) {
-
 
624
					$requete .= 'mots_cles like "%'.$occurence[$j].'%" AND ';
-
 
625
				}
500
			foreach($mots_cles_tab as $mot_cle_item) {
-
 
501
				$requete .= '(b.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') AND ';
-
 
502
			}
-
 
503
			$requete = '('.rtrim($requete, 'AND ').')';
626
				$requete .= ' identifiant = '.$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
504
		} else {
627
			}
505
			$requete = "(b.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') AND';
628
		}
506
		}
Line 629... Line 507...
629
		return $requete;
507
		return $requete;
Line 637... Line 515...
637
			$requete = ' ('.
515
			$requete = ' ('.
638
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
516
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
639
				' OR '.
517
				' OR '.
640
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
518
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
641
				' OR '.
519
				' OR '.
642
				'b.location LIKE "'.$chaine_requete.'%" '.
520
				'b.zone_geo LIKE "'.$chaine_requete.'%" '.
-
 
521
				' OR '.
-
 
522
				'b.ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
-
 
523
				' OR '.
-
 
524
				'b.ce_zone_geo LIKE "'.$chaine_requete.'%" '.
-
 
525
				' OR '.
-
 
526
				'c.id_utilisateur LIKE "'.$chaine_requete.'%" '.
643
				' OR '.
527
				' OR '.
644
				'b.id_location LIKE "'.$chaine_requete.'%" '.
528
				'b.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
645
				' OR '.
529
				' OR '.
646
				'c.ci_ce_utilisateur LIKE "'.$chaine_requete.'%" '.
530
				'c.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
647
				') ';
531
				') ';
648
		}
532
		}
649
		return $requete;
533
		return $requete;
650
	}
534
	}
Line 663... Line 547...
663
		}
547
		}
664
		return $tableau_criteres_pour_bdd;
548
		return $tableau_criteres_pour_bdd;
665
	}
549
	}
Line 666... Line 550...
666
 
550
 
667
	private function creerDescriptionComplet($donnees, $item) {
551
	private function creerDescriptionComplet($donnees, $item) {
668
		$auteur = $this->auteurs[$donnees['ci_ce_utilisateur']];
552
		$auteur = $donnees['prenom_utilisateur'].' '.$donnees['nom_utilisateur'];
Line 669... Line 553...
669
		$auteur_mail = $donnees['ci_ce_utilisateur'];
553
		$auteur_mail = $donnees['courriel_utilisateur'];
670
		
554
		
671
		$id_img = $donnees['ci_id_image'];
555
		$id_img = $donnees['id_image'];
672
		$nom_fichier = $donnees['ci_nom_original'];
556
		$nom_fichier = $donnees['nom_original'];
-
 
557
		$url_img = $this->getUrlImage($donnees['id_image'], 'CS');
673
		$url_img = $this->getUrlImage($donnees['ci_id_image'], 'CS');
558
		$url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
674
		$url_img_normale = $this->getUrlImage($donnees['ci_id_image'], 'XL');
559
		//
675
		$mots_cles_image = $this->decoderMotsClesImg($donnees['identifiant'], $donnees['ci_meta_mots_cles']);
560
		$mots_cles_image = $donnees['mots_cles_texte_images'];
Line 676... Line 561...
676
		$note = ($donnees['ci_note_image'] +1).'/5';
561
		$note = ($donnees['note_qualite'] +1).'/5';
677
		$commentaire_img = $donnees['ci_meta_comment'];
562
		$commentaire_img = $donnees['commentaire'];
678
		
563
		
679
		$id_obs = $donnees['id'];
564
		$id_obs = $donnees['id_observation'];
-
 
565
		$famille = $donnees['famille'];
680
		$famille = $donnees['famille'];
566
		$nom_saisi = $donnees['nom_sel'];
681
		$nom_saisi = $donnees['nom_sel'];
567
		$nom_retenu = $donnees['nom_ret'];
682
		$nom_retenu = $donnees['nom_ret'];
568
		//
683
		$mots_cles_obs = $this->decoderMotsClesObs($donnees['identifiant'], $donnees['mots_cles']);
569
		$mots_cles_obs = $donnees['mots_cles_texte_obs'];
684
		$lieu =  $donnees['location'].' ('.$donnees['id_location'].') > '.$donnees['lieudit'].' > '.$donnees['station'];
570
		$lieu =  $donnees['zone_geo'].' ('.$donnees['ce_zone_geo'].') > '.$donnees['lieudit'].' > '.$donnees['station'];
685
		$milieu = $donnees['milieu'];
571
		$milieu = $donnees['milieu'];
686
		$coordonnees = ($this->etreNull($donnees['coord_x']) && $this->etreNull($donnees['coord_y'])) ? '' : $donnees['coord_x'].'/'.$donnees['coord_y'];
572
		$coordonnees = ($this->etreNull($donnees['latitude']) && $this->etreNull($donnees['longitude'])) ? '' : $donnees['latitude'].'/'.$donnees['longitude'];
687
		$commentaire_obs = $donnees['commentaire'];
573
		$commentaire_obs = $donnees['commentaire'];
688
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
574
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
Line 703... Line 589...
703
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
589
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
704
			'</li>'.
590
			'</li>'.
705
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'.
591
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'.
706
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
592
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
707
			'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'.
593
			'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'.
708
			'<li>'.'<span class="champ">Mots-clés :</span> '.implode(', ', $mots_cles_image).'</li>'.
594
			'<li>'.'<span class="champ">Mots-clés :</span> '.$mots_cles_image.'</li>'.
709
			'</ul>'.
595
			'</ul>'.
710
			'</div>';
596
			'</div>';
711
			// TODO : ajouter le champ commentaire EXIF.
597
			// TODO : ajouter le champ commentaire EXIF.
712
		if (! $this->etreNull($id_obs)) {
598
		if (! $this->etreNull($id_obs)) {
713
			$description .= 
599
			$description .= 
Line 720... Line 606...
720
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
606
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
721
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
607
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
722
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
608
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
723
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : '').
609
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : '').
724
				'<li>'.'<span class="champ">Commentaire :</span> '.$commentaire_obs.'</li>'.
610
				'<li>'.'<span class="champ">Commentaire :</span> '.$commentaire_obs.'</li>'.
725
				'<li>'.'<span class="champ">Mots-clés :</span> '.implode(', ', $mots_cles_obs).'</li>'.
611
				'<li>'.'<span class="champ">Mots-clés :</span> '.$mots_cles_obs.'</li>'.
726
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
612
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
727
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
613
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
728
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
614
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
729
				'</ul>'.
615
				'</ul>'.
730
				'</div>';
616
				'</div>';
Line 733... Line 619...
733
		return $description;
619
		return $description;
734
	}
620
	}
Line 735... Line 621...
735
	
621
	
736
	private function getServiceParMotsCles() {
622
	private function getServiceParMotsCles() {
737
		$infos=array();
623
		$infos=array();
738
		$infos[0]['num_nom_sel'] = '';
624
		$infos[0]['nom_sel_nn'] = '';
739
		$infos[0]['ci_meta_date_ajout'] = '2011-06-28';
625
		$infos[0]['date_creation'] = '2011-06-28';
740
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
626
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
741
		$donnees['items'][0]['guid'] = 0;
627
		$donnees['items'][0]['guid'] = 0;
742
		$donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
628
		$donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
743
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
629
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
Line 751... Line 637...
751
		return $contenu;
637
		return $contenu;
752
	}
638
	}
Line 753... Line 639...
753
	
639
	
754
	private function getServiceParCommune() {
640
	private function getServiceParCommune() {
755
		$infos=array();
641
		$infos=array();
756
		$infos[0]['num_nom_sel'] = '';
642
		$infos[0]['nom_sel_nn'] = '';
757
		$infos[0]['ci_meta_date_ajout'] = '2011-06-28';
643
		$infos[0]['date_creation'] = '2011-06-28';
758
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
644
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
759
		$donnees['items'][0]['guid'] = 0;
645
		$donnees['items'][0]['guid'] = 0;
760
		$donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
646
		$donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
761
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';
647
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';