Subversion Repositories eFlore/Applications.cel

Rev

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

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