Subversion Repositories eFlore/Applications.cel

Rev

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

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