Subversion Repositories eFlore/Applications.cel

Rev

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

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