Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2206 Rev 2459
Line 1... Line 1...
1
<?php
1
<?php
-
 
2
// declare(encoding='UTF-8');
2
/**
3
/**
3
 * Librairie de recherche d'observations à partir de divers critères.
4
 * Librairie de recherche d'observations à partir de divers critères.
4
 * Encodage en entrée : utf8
-
 
5
 * Encodage en sortie : utf8
-
 
6
 *
5
 *
-
 
6
 * @internal   Mininum PHP version : 5.2
7
 * @category  php 5.2
7
 * @category   CEL
8
 * @package   cel
8
 * @package    Services
-
 
9
 * @subpackage Bibliothèques
-
 
10
 * @version    0.1
-
 
11
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
-
 
12
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @author    Aurélien Peronnet <aurelien@tela-botania.org>
13
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
10
 * @copyright 2010 Tela-Botanica
14
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
11
 * @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
15
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
12
 * @version   SVN: <svn_id>
16
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
13
 * @link      /doc/jrest/
-
 
14
 */
17
 */
15
class RechercheObservation extends Cel {
18
class RechercheObservation extends Cel {
Line 16... Line 19...
16
 
19
 
17
	public $requete_selection_observations;
20
	public $requete_selection_observations;
18
	public static $tris_possibles = array(
21
	public static $tris_possibles = array(
19
		"nom_referentiel",
22
		'nom_referentiel',
20
		"nom_sel",
23
		'nom_sel',
21
		"certitude",
24
		'certitude',
22
		"nom_ret",
25
		'nom_ret',
23
		"famille",
26
		'famille',
24
		"abondance",
27
		'abondance',
25
		"phenologie",
28
		'phenologie',
26
		"transmission",
29
		'transmission',
27
		"ce_zone_geo",
30
		'ce_zone_geo',
28
		"altitude",
31
		'altitude',
29
		"date_observation",
32
		'date_observation',
30
		"ordre"
33
		'ordre'
Line 31... Line 34...
31
	);
34
	);
32
 
-
 
33
	public function obtenirIdObservationsPourOrdre($id_utilisateur, $ordre) {
-
 
34
		$requete_selection_id = 'SELECT id_observation FROM cel_obs WHERE ordre ';
35
 
35
 
36
	public function obtenirIdObservationsPourOrdre($id_utilisateur, $ordre) {
36
		if (is_array($ordre)) {
37
		if (is_array($ordre)) {
37
			$ordre = array_map(array(Cel::db(),'proteger'), $ordre);
38
			$ordre = array_map(array(Cel::db(), 'proteger'), $ordre);
38
			$requete_selection_id .= ' IN ('.implode(',',$ordre).') ';
39
			$portionOrdre = ' IN ('.implode(',', $ordre).') ';
39
		} else {
40
		} else {
40
			$requete_selection_id .= ' = '.Cel::db()->proteger($ordre).' ';
-
 
41
		}
41
			$portionOrdre .= ' = '.Cel::db()->proteger($ordre).' ';
-
 
42
		}
-
 
43
		$idUtilisateurP = Cel::db()->proteger($id_utilisateur);
-
 
44
		$requete = 'SELECT id_observation '.
-
 
45
			'FROM cel_obs '.
42
 
46
			"WHERE ordre $portionOrdre ".
43
		$requete_selection_id .= ' AND ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).
-
 
-
 
47
			"AND ce_utilisateur = $idUtilisateurP ".
44
			' ORDER BY id_observation';
48
			'ORDER BY id_observation '.
Line 45... Line 49...
45
 
49
			' -- '.__FILE__.':'.__LINE__;
46
		$resultat_ids = Cel::db()->requeter($requete_selection_id);
50
		$resultats = Cel::db()->requeter($requete);
47
 
51
 
48
		$ids = array();
52
		$ids = array();
49
		if (is_array($resultat_ids)) {
53
		if (is_array($resultats)) {
50
			foreach ($resultat_ids as $resultat) {
54
			foreach ($resultats as $resultat) {
51
				$ids[] = $resultat['id_observation'];
-
 
52
			}
55
				$ids[] = $resultat['id_observation'];
53
		}
56
			}
Line 54... Line 57...
54
 
57
		}
55
		return $ids;
58
		return $ids;
Line 83... Line 86...
83
		$this->requete_selection_observations = $requete_selection_observations;
86
		$this->requete_selection_observations = $requete_selection_observations;
84
		return $this;
87
		return $this;
85
	}
88
	}
Line 86... Line 89...
86
 
89
 
87
	public function get() {
90
	public function get() {
-
 
91
		if (!$this->requete_selection_observations) {
-
 
92
			return false;
88
		if(!$this->requete_selection_observations) return FALSE;
93
		}
89
		return Cel::db()->requeter($this->requete_selection_observations);
94
		return Cel::db()->requeter($this->requete_selection_observations);
Line 90... Line 95...
90
	}
95
	}
91
 
96
 
92
	public function compterObservations($id_utilisateur = null, $criteres = array()) {
-
 
93
 		$requete_selection_observations = 'SELECT COUNT(*) as nb_obs FROM cel_obs ';
97
	public function compterObservations($id_utilisateur = null, $criteres = array()) {
94
 
98
 		$requete = 'SELECT COUNT(*) AS nb_obs FROM cel_obs ';
95
		if ($id_utilisateur != null) {
99
		if ($id_utilisateur != null) {
96
			$requete_selection_observations .= 'WHERE ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).' AND ';
100
			$requete .= 'WHERE ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).' AND ';
97
		} else if(count($criteres) > 0) {
-
 
98
			$requete_selection_observations .= 'WHERE ';
-
 
99
		}
-
 
100
 
-
 
101
		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
-
 
102
 
-
 
103
		$requete_selection_observations .= $sous_requete_recherche;
-
 
104
		$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
-
 
105
 
-
 
106
		$nb_obs = '0';
-
 
107
		$resultat_requete_nombre_observations = Cel::db()->requeter($requete_selection_observations);
-
 
108
 
-
 
109
		if($resultat_requete_nombre_observations && is_array($resultat_requete_nombre_observations) && count($resultat_requete_nombre_observations) > 0) {
101
		} else if(count($criteres) > 0) {
-
 
102
			$requete .= 'WHERE ';
-
 
103
		}
-
 
104
		$requete .= $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
Line -... Line 105...
-
 
105
		$requete = rtrim($requete, 'AND ');
110
			$nb_obs = $resultat_requete_nombre_observations[0]['nb_obs'];
106
		$resultat = Cel::db()->requeter($requete);
111
		}
107
 
Line 112... Line 108...
112
 
108
		$nb_obs = ($resultat && is_array($resultat) && count($resultat) > 0) ? $resultat[0]['nb_obs'] : '0';
113
		return $nb_obs;
109
		return $nb_obs;
Line 135... Line 131...
135
		}
131
		}
Line 136... Line 132...
136
 
132
 
137
		$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
133
		$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
Line 138... Line 134...
138
		$champs_supp = $gestion_champs_etendus->consulterParLots($ids);
134
		$champs_supp = $gestion_champs_etendus->consulterParLots($ids);
139
 
135
 
140
		foreach($tableau_observations as &$obs) {
136
		foreach ($tableau_observations as &$obs) {
141
			if(isset($champs_supp[$obs['id_observation']])) {
137
			if (isset($champs_supp[$obs['id_observation']])) {
142
				$obs['obs_etendue'] = $champs_supp[$obs['id_observation']];
138
				$obs['obs_etendue'] = $champs_supp[$obs['id_observation']];
143
			}
-
 
144
		}
139
			}
145
 
140
		}
146
		return $tableau_observations;
141
		return $tableau_observations;
147
	}
142
	}
148
	
143
 
149
	public function obtenirIdUtilisateurPourIdObs($id_obs) {
144
	public function obtenirIdUtilisateurPourIdObs($id_obs) {
150
		$id_obs = Cel::db()->proteger($id_obs);
-
 
-
 
145
		$idObsP = Cel::db()->proteger($id_obs);
-
 
146
		$requete = 'SELECT ce_utilisateur '.
-
 
147
			'FROM cel_obs '.
151
		$requete = "SELECT ce_utilisateur FROM cel_obs WHERE id_observation = $id_obs";
148
			"WHERE id_observation = $idObsP ".
152
	
149
			' -- '.__FILE__.':'.__LINE__;
153
		$utilisateur_id = Cel::db()->requeter($requete . ' -- ' . __FILE__ . ':' . __LINE__);
150
		$utilisateur_id = Cel::db()->requeter($requete);
154
	
151
 
155
		$retour = false;
152
		$retour = false;
156
		if (!empty($utilisateur_id) && isset($utilisateur_id[0]['ce_utilisateur'])) {
153
		if (!empty($utilisateur_id) && isset($utilisateur_id[0]['ce_utilisateur'])) {
157
			$retour = $utilisateur_id[0]['ce_utilisateur'];
154
			$retour = $utilisateur_id[0]['ce_utilisateur'];
158
		}
155
		}
Line 159... Line 156...
159
		return $retour;
156
		return $retour;
160
	}
157
	}
161
 
158
 
Line 310... Line 307...
310
		$date = $annee . '-' . $mois . '-' . $jour;
307
		$date = $annee . '-' . $mois . '-' . $jour;
311
		return $date;
308
		return $date;
312
	}
309
	}
Line 313... Line 310...
313
 
310
 
314
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $valeur) {
311
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $valeur) {
315
		$valeur = str_replace("*","%",$valeur);
312
		$valeur = str_replace('*', '%', $valeur);
316
		$valeur = Cel::db()->proteger('%'.$valeur.'%');
313
		$valeur = Cel::db()->proteger("%$valeur%");
317
		$sous_requete = "(nom_sel LIKE ".$valeur.
314
		$sous_requete = "(nom_sel LIKE $valeur ".
318
			" OR courriel_utilisateur LIKE ".$valeur.
315
			"OR courriel_utilisateur LIKE $valeur ".
319
			" OR prenom_utilisateur LIKE ".$valeur.
316
			"OR prenom_utilisateur LIKE $valeur ".
320
			" OR nom_utilisateur LIKE ".$valeur.
317
			"OR nom_utilisateur LIKE $valeur ".
321
			" OR nom_sel LIKE ".$valeur.
318
			"OR nom_sel LIKE $valeur ".
322
			" OR nom_sel_nn LIKE ".$valeur.
319
			"OR nom_sel_nn LIKE $valeur ".
323
			" OR nom_ret LIKE ".$valeur.
320
			"OR nom_ret LIKE $valeur ".
324
			" OR nom_ret_nn LIKE ".$valeur.
321
			"OR nom_ret_nn LIKE $valeur ".
325
			" OR nt LIKE ".$valeur.
322
			"OR nt LIKE $valeur ".
326
			" OR famille LIKE ".$valeur.
323
			"OR famille LIKE $valeur ".
327
			" OR zone_geo LIKE ".$valeur.
324
			"OR zone_geo LIKE $valeur ".
328
			" OR ce_zone_geo LIKE ".$valeur.
325
			"OR ce_zone_geo LIKE $valeur ".
329
			" OR date_observation LIKE ".$valeur.
326
			"OR date_observation LIKE $valeur ".
330
			" OR lieudit LIKE ".$valeur.
327
			"OR lieudit LIKE $valeur ".
331
			" OR station LIKE ".$valeur.
328
			"OR station LIKE $valeur ".
332
			" OR milieu LIKE ".$valeur.
329
			"OR milieu LIKE $valeur ".
333
			" OR commentaire LIKE ".$valeur.
330
			"OR commentaire LIKE $valeur ".
334
			" OR transmission LIKE ".$valeur.
331
			"OR transmission LIKE $valeur ".
335
			" OR latitude LIKE ".$valeur.
332
			"OR latitude LIKE $valeur ".
336
			" OR longitude LIKE ".$valeur.
333
			"OR longitude LIKE $valeur ".
337
			" OR mots_cles_texte LIKE ".$valeur.
334
			"OR mots_cles_texte LIKE $valeur ".
338
			")";
335
			")";
339
		return $sous_requete;
336
		return $sous_requete;
Line 340... Line 337...
340
	}
337
	}
Line 371... Line 368...
371
			'jour' => 'date_observation',
368
			'jour' => 'date_observation',
372
			'departement' => 'ce_zone_geo',
369
			'departement' => 'ce_zone_geo',
373
			'commune' => 'zone_geo');
370
			'commune' => 'zone_geo');
374
		return $sous_requete .= $champs[$valeur]." = ".Cel::db()->proteger("");
371
		return $sous_requete .= $champs[$valeur]." = ".Cel::db()->proteger("");
375
	}
372
	}
376
}
-
 
377
?>
-
 
378
373
}
-
 
374
379
375