Subversion Repositories eFlore/Applications.cel

Rev

Rev 906 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 906 Rev 919
1
<?php
1
<?php
2
/**
2
/**
3
* PHP Version 5
3
* PHP Version 5
4
*
4
*
5
* @category  PHP
5
* @category  PHP
6
* @package   jrest
6
* @package   jrest
7
* @author    Aurélien Peronnet <aurelien@tela-botania.org>
7
* @author    Aurélien Peronnet <aurelien@tela-botania.org>
8
* @copyright 2010 Tela-Botanica
8
* @copyright 2010 Tela-Botanica
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @version   SVN: <svn_id>
10
* @version   SVN: <svn_id>
11
* @link      /doc/jrest/
11
* @link      /doc/jrest/
12
*/
12
*/
13
 
13
 
14
/**
14
/**
15
* in : utf8
15
* in : utf8
16
* out : utf8
16
* out : utf8
17
* 
17
* 
18
* Librairie recherche d'observations a partir de divers critères
18
* Librairie recherche d'observations a partir de divers critères
19
*
19
*
20
*/
20
*/
21
class RechercheObservation extends Cel {
21
class RechercheObservation extends Cel {
22
	
22
	
23
	public function rechercherObservations($id_utilisateur = null, $criteres = array(), $numero_page = 0, $taille_page = 50) {
23
	public function rechercherObservations($id_utilisateur = null, $criteres = array(), $numero_page = 0, $taille_page = 50) {
24
		
24
		
25
 		$requete_selection_observations = 'SELECT * FROM cel_obs ';
25
 		$requete_selection_observations = 'SELECT * FROM cel_obs ';
26
 		
26
 		
27
 		if($id_utilisateur != null) {
27
 		if($id_utilisateur != null) {
28
 			$requete_selection_observations .= 'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ';
28
 			$requete_selection_observations .= 'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ';
29
 		} else if(count($criteres) > 0) {
29
 		} else if(count($criteres) > 0) {
30
 			$requete_selection_observations .= 'WHERE ';
30
 			$requete_selection_observations .= 'WHERE ';
31
 		}
31
 		}
32
 		
32
 		
33
 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
33
 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
34
 		
34
 		
35
 		$requete_selection_observations .= $sous_requete_recherche;
35
 		$requete_selection_observations .= $sous_requete_recherche;
36
 		
36
 		
37
 		$debut = $taille_page*$numero_page ;
37
 		$debut = $taille_page*$numero_page ;
38
		$requete_selection_observations .= ' ORDER BY ordre LIMIT '.$debut.','.$taille_page ;
38
		$requete_selection_observations .= ' ORDER BY ordre LIMIT '.$debut.','.$taille_page ;
39
		
39
		
40
		$resultats_observations = array();
40
		$resultats_observations = array();
41
		$resultats_observations = $this->requeter($requete_selection_observations);
41
		$resultats_observations = $this->requeter($requete_selection_observations);
42
		
42
		
43
		return $resultats_observations;
43
		return $resultats_observations;
44
	}
44
	}
45
	
45
	
46
	public function compterObservations($id_utilisateur = null, $criteres = array()) {
46
	public function compterObservations($id_utilisateur = null, $criteres = array()) {
47
		
47
		
48
 		$requete_selection_observations = 'SELECT COUNT(*) as nb_obs FROM cel_obs ';
48
 		$requete_selection_observations = 'SELECT COUNT(*) as nb_obs FROM cel_obs ';
49
 		
49
 		
50
 		if($id_utilisateur != null) {
50
 		if($id_utilisateur != null) {
51
 			$requete_selection_observations .= 'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ';
51
 			$requete_selection_observations .= 'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ';
52
 		} else if(count($criteres) > 0) {
52
 		} else if(count($criteres) > 0) {
53
 			$requete_selection_observations .= 'WHERE ';
53
 			$requete_selection_observations .= 'WHERE ';
54
 		}
54
 		}
55
 		
55
 		
56
 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
56
 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
57
 		
57
 		
58
 		$requete_selection_observations .= $sous_requete_recherche;
58
 		$requete_selection_observations .= $sous_requete_recherche;
59
		
59
		
60
		$nb_obs = 0;
60
		$nb_obs = 0;
61
		$resultat_requete_nombre_observations = $this->requeter($requete_selection_observations);
61
		$resultat_requete_nombre_observations = $this->requeter($requete_selection_observations);
62
		
62
		
63
		if($resultat_requete_nombre_observations && is_array($resultat_requete_nombre_observations) && count($resultat_requete_nombre_observations) > 0) {
63
		if($resultat_requete_nombre_observations && is_array($resultat_requete_nombre_observations) && count($resultat_requete_nombre_observations) > 0) {
64
			$nb_obs = $resultat_requete_nombre_observations[0]['nb_obs'];
64
			$nb_obs = $resultat_requete_nombre_observations[0]['nb_obs'];
65
		} 
65
		} 
66
		
66
		
67
		return $nb_obs;
67
		return $nb_obs;
68
	}
68
	}
69
	
69
	
70
	// TODO: fonction temporaire
70
	// TODO: fonction temporaire
71
	public function parserRequeteCriteres($chaine_criteres) {
71
	public function parserRequeteCriteres($chaine_criteres) {
72
		$criteres_parses = array();
72
		$criteres_parses = array();
73
		$criteres = explode("&", $chaine_criteres) ;	
73
		$criteres = explode("&", $chaine_criteres) ;	
74
 
74
 
75
		foreach ($criteres as &$critere) {
75
		foreach ($criteres as &$critere) {
76
			$criteres_parses[] = explode("=",$critere) ;
76
			$criteres_parses[] = explode("=",$critere) ;
77
		}
77
		}
78
		
78
		
79
		return $criteres_parses;
79
		return $criteres_parses;
80
	}
80
	}
81
	
81
	
82
	private function fabriquerSousRequeteRecherche($id_utilisateur, $criteres) {
82
	private function fabriquerSousRequeteRecherche($id_utilisateur, $criteres) {
83
		
83
		
84
		foreach ($criteres as $nom_valeur)
84
		foreach ($criteres as $nom_valeur)
85
		{
85
		{
86
			if (count($nom_valeur) == 0)
86
			if (count($nom_valeur) == 0)
87
			{
87
			{
88
				continue;
88
				continue;
89
			}
89
			}
90
						
90
						
91
			switch ($nom_valeur[0]) {
91
			switch ($nom_valeur[0]) {
92
				
92
				
93
				case 'annee':
93
				case 'annee':
94
					$sous_requete .= "year(date_observation) = ".$this->proteger($nom_valeur[1]) ;
94
					$sous_requete .= "year(date_observation) = ".$this->proteger($nom_valeur[1]) ;
95
					$sous_requete .= ' AND ' ;
95
					$sous_requete .= ' AND ' ;
96
				break;
96
				break;
97
				
97
				
98
				case 'mois':
98
				case 'mois':
99
					$sous_requete .= "month(date_observation) = ".$this->proteger($nom_valeur[1]) ;
99
					$sous_requete .= "month(date_observation) = ".$this->proteger($nom_valeur[1]) ;
100
					$sous_requete .= ' AND ' ;
100
					$sous_requete .= ' AND ' ;
101
				break;
101
				break;
102
				
102
				
103
				case 'jour':
103
				case 'jour':
104
					$sous_requete .= "day(date_observation) = ".$this->proteger($nom_valeur[1]) ;
104
					$sous_requete .= "day(date_observation) = ".$this->proteger($nom_valeur[1]) ;
105
					$sous_requete .= ' AND ' ;
105
					$sous_requete .= ' AND ' ;
106
				break;
106
				break;
107
				
-
 
108
				
107
								
109
				// TODO: adapter la structure aux nouveaux mots clés
108
				// TODO: vérifier l'adaptation de la structure aux nouveaux mots clés
110
                case 'mots_cles':
109
                case 'mots_cles':
111
                    $liste_mc = str_replace(";",',',$nom_valeur[1]);
110
                    $liste_mc = str_replace(";",',',$nom_valeur[1]);
112
                    $sous_requete .= '(' ;   
111
                    $sous_requete .= '(' ;   
113
                    'id_observation IN (SELECT id_observation FROM cel_obs_mots_cles WHERE id_mot_cle_utilisateur IN ('.$liste_mc.')';
112
                    'id_observation IN (SELECT id_observation FROM cel_obs_mots_cles WHERE id_mot_cle_utilisateur IN ('.$liste_mc.')';
114
                    $sous_requete .= ') AND ' ;
113
                    $sous_requete .= ') AND ' ;
115
                break;
114
                break;
116
                
115
                
117
                //TODO: choisir un meilleur nom
116
                //TODO: choisir un meilleur nom
118
                case 'nom_taxon':
117
                case 'nom_taxon':
119
                	$nom_valeur[1] = str_replace("*","%",$nom_valeur[1]);
118
                	$nom_valeur[1] = str_replace("*","%",$nom_valeur[1]);
120
                	$sous_requete .= "(nom_sel LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
119
                	$sous_requete .= "(nom_sel LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
121
								" OR courriel_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
120
								" OR courriel_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
122
								" OR prenom_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
121
								" OR prenom_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
123
								" OR nom_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
122
								" OR nom_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
124
								" OR nom_sel LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
123
								" OR nom_sel LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
125
								" OR nom_sel_nn LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
124
								" OR nom_sel_nn LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
126
								" OR nom_ret LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
125
								" OR nom_ret LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
127
								" OR nom_ret_nn LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
126
								" OR nom_ret_nn LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
128
								" OR nt LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
127
								" OR nt LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
129
								" OR famille LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
128
								" OR famille LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
130
								" OR zone_geo LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
129
								" OR zone_geo LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
131
								" OR ce_zone_geo LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
130
								" OR ce_zone_geo LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
132
								" OR date_observation LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
131
								" OR date_observation LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
133
								" OR lieudit LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
132
								" OR lieudit LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
134
								" OR station LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
133
								" OR station LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
135
								" OR milieu LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
134
								" OR milieu LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
136
								" OR commentaire LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
135
								" OR commentaire LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
137
								" OR transmission LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
136
								" OR transmission LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
138
								" OR latitude LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
137
								" OR latitude LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
139
								" OR longitude LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
138
								" OR longitude LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
140
								")";
139
								")";
141
                break;
140
                break;
142
				
141
				
143
				default:
142
				default:
144
					if(trim($nom_valeur[0]) != '')
143
					if(trim($nom_valeur[0]) != '')
145
					{
144
					{
146
						$sous_requete .= $nom_valeur[0]." = '".$this->proteger($nom_valeur[1])."'" ;
145
						$sous_requete .= $nom_valeur[0]." = ".$this->proteger($nom_valeur[1]) ;
147
						$sous_requete .= ' AND ' ;
146
						$sous_requete .= ' AND ' ;
148
					}
147
					}
149
				break;
148
				break;
150
			}
149
			}
151
		}
150
		}
152
		
151
		
153
		$sous_requete = rtrim($sous_requete,' AND ');
152
		$sous_requete = rtrim($sous_requete,' AND ');
154
		return $sous_requete;
153
		return $sous_requete;
155
	}
154
	}
156
}
155
}
157
?>
156
?>