Subversion Repositories eFlore/Applications.cel

Rev

Rev 921 | Rev 935 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
862 aurelien 1
<?php
2
/**
921 aurelien 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/
12
*/
13
 
14
/**
15
* in : utf8
16
* out : utf8
17
*
18
* Librairie recherche d'images a partir de divers critères
19
*
20
*/
862 aurelien 21
class RechercheImage extends Cel {
22
 
23
 
896 aurelien 24
	function rechercherImagesEtObservationAssociees($id_utilisateur, $criteres, $numero_page = 0, $taille_page = 50)
862 aurelien 25
	{
26
		$images_trouvees = $this->rechercherImages($id_utilisateur, $criteres, $numero_page, $taille_page);
27
 
28
		$retour = array();
29
 
30
		foreach($images_trouvees as $image)
31
		{
32
			$image['id_observation'] = $this->obtenirInformationsObservationsAssociees($id_utilisateur,$image['id_image']);
33
			$retour[] = $image ;
34
		}
35
 
36
		return $retour;
37
	}
38
 
39
	// TODO: fonction temporaire
40
	public function parserRequeteCriteres($chaine_criteres) {
41
		$criteres_parses = array();
42
		$criteres = explode("&", $chaine_criteres) ;
43
 
44
		foreach($criteres as &$critere) {
930 aurelien 45
			$nom_valeur = explode("=",$critere) ;
46
			if(count($nom_valeur) >= 2) {
47
				$criteres_parses[$nom_valeur[0]] = $nom_valeur[1];
48
			}
862 aurelien 49
		}
50
 
51
		return $criteres_parses;
52
	}
53
 
54
	// TODO: fonction temporaire
55
	private function formaterDateSqlVersDateAvecSlash($date_sql) {
56
 
57
		$date_formatee = '';
58
 
59
		$date = split("-",$date_sql) ;
60
		if(count($date) > 2)
61
		{
62
			$image['date_prise_de_vue'] = $date[2].'/'.$date[1].'/'.$date[0] ;
63
		}
64
 
65
		return $date_formatee;
66
	}
67
 
68
	public function rechercherImages($id_utilisateur, $criteres, $numero_page = 0 , $taille_page = 50) {
69
 
930 aurelien 70
		$requete_recherche_images = 'SELECT * FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
862 aurelien 71
 
72
		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
73
		$requete_recherche_images .= $sous_requete_recherche;
74
 
75
		$debut = $taille_page*$numero_page ;
930 aurelien 76
		$requete_recherche_images .= ' ORDER BY ordre LIMIT '.$debut.','.$taille_page ;
862 aurelien 77
 
78
		$resultats_images = array();
79
		$resultats_images = $this->requeter($requete_recherche_images);
80
 
81
		return $resultats_images;
82
	}
83
 
84
	public function compterImages($id_utilisateur, $criteres) {
85
 
86
		$requete_recherche_images = 'SELECT COUNT(*) as nb_images FROM cel_images WHERE ce_utilisateur = "'.$id_utilisateur.'"' ;
87
		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
88
 
89
		$requete_recherche_images .= $sous_requete_recherche;
90
		$nb_images = 0;
91
 
92
		$resultat_requete_nombre_images = $this->requeter($requete_recherche_images);
93
 
94
		if($resultat_requete_nombre_images && is_array($resultat_requete_nombre_images) && count($resultat_requete_nombre_images) > 0) {
95
			$nb_images = $resultat_requete_nombre_images[0]['nb_images'];
96
		}
97
 
98
		return $nb_images;
99
	}
100
 
101
	public function obtenirInformationsObservationsAssociees($id_utilisateur, $id_image) {
102
 
103
		$requete_table_liaison = 'SELECT id_observation FROM cel_obs_images WHERE id_image = '.$id_image.' AND id_utilisateur ="'.$id_utilisateur.'"';
104
 
105
		$resultats_liaisons_images = $this->requeter($requete_table_liaison);
106
 
107
		$ids_obs = '';
108
 
109
		foreach($resultats_liaisons_images as $liaison) {
110
			$ids_obs .= $liaison['id_observation'].",";
111
		}
112
		$ids_obs = rtrim($ids_obs,',');
113
		$infos_obs = '';
114
 
115
		if(trim($ids_obs) != '') {
116
			$requete_obs_liees = 'SELECT * FROM cel_obs WHERE id_observation IN  ('.$ids_obs.') AND ce_utilisateur ="'.$id_utilisateur.'"';
117
			$resultat_obs_liees = $this->requeter($requete_obs_liees);
118
 
119
			foreach($resultat_obs_liees as $obs_liee)
120
			{
121
				$infos_obs .= $obs_liee['ordre'].'#'.$obs_liee['nom_sel'].'#'.$obs_liee['transmission'].';;' ;
122
			}
123
		}
124
 
125
		return $infos_obs;
126
	}
127
 
128
	private function fabriquerSousRequeteRecherche($id_utilisateur, $criteres) {
129
 
130
		$sous_requete = ' AND ';
131
 
930 aurelien 132
		foreach($criteres as $nom => $valeur)
862 aurelien 133
		{
930 aurelien 134
			if(trim($nom) == "" || trim($valeur) == "") {
862 aurelien 135
				continue;
136
			}
137
 
930 aurelien 138
			switch($nom) {
862 aurelien 139
 
140
				case "mots_cles";
930 aurelien 141
					$mots_cles = rtrim($valeur, ',') ;
142
					$mots_cles_liste = explode(',' , $mots_cles) ;
862 aurelien 143
 
144
					foreach($mots_cles_liste as $mot_cle)
145
					{
930 aurelien 146
						$sous_requete .= $nom.' LIKE '.$this->proteger('%'.$mot_cle.'%') ;
862 aurelien 147
						$sous_requete .= ' AND ' ;
148
					}
149
				break;
150
 
151
				case "commentaire":
930 aurelien 152
					$mots_comment_liste = explode(" " , $valeur) ;
862 aurelien 153
 
154
					foreach($mots_comment_liste as $mot_comment)
155
					{
156
						$mot_comment = trim($mot_comment) ;
930 aurelien 157
						$sous_requete .= $nom.' LIKE '.$this->proteger('%'.$mot_comment.'%') ;
862 aurelien 158
						$sous_requete .= ' AND ' ;
159
					}
160
				break;
161
 
162
				case "annee":
163
				case "mois":
164
				case "jour":
930 aurelien 165
					$sous_requete .= $this->fabriquerSousRequeteRechercheDate($nom, $valeur) ;
862 aurelien 166
					$sous_requete .= ' AND ' ;
167
				break;
168
 
169
				case "tampon":
930 aurelien 170
					$ids_tampon = rtrim($valeur, ',') ;
862 aurelien 171
					$sous_requete .= 'id_images IN ( '.$this->proteger($ids_tampon).')' ;
172
				break;
173
 
174
				case "recherche_generale":
930 aurelien 175
					$sous_requete .= $this->fabriquerSousRequeteRechercheGenerale($id_utilisateur, $valeur);
862 aurelien 176
					$sous_requete .= ' AND ';
177
				break;
178
 
179
				default:
930 aurelien 180
					$sous_requete .= $nom.' = '.$this->proteger($valeur) ;
181
					$sous_requete .= ' AND ' ;
862 aurelien 182
				break;
183
			}
184
		}
185
 
186
		$sous_requete = rtrim($sous_requete,' AND ');
187
 
188
		return $sous_requete;
189
	}
190
 
191
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
192
 
193
		$requete_recherche_taxon .= 'SELECT id_image
194
								FROM cel_obs_images
195
								WHERE id_observation IN ' .
196
								'(SELECT id_observation ' .
197
									'FROM cel_obs '.
930 aurelien 198
									'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' '.
199
									'AND nom_sel LIKE "'.$this->proteger($chaine_recherche.'%').
862 aurelien 200
								')';
201
 
930 aurelien 202
		$requete_recherche_comm = ' commentaire LIKE '.$this->proteger('%'.chaine_recherche.'%');
862 aurelien 203
 
204
		$requete_recherche_generale = '(id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.'))' ;
205
 
206
		return $requete_recherche_generale;
207
	}
208
 
209
	private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
210
 
211
		$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
212
 
213
		$requete_recherche_date = '';
214
 
215
		if(is_numeric($valeur) && $valeur != "00") {
930 aurelien 216
			$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = '.$this->proteger($valeur).' ';
862 aurelien 217
		} else {
218
			$requete_recherche_date = '(date_prise_de_vue IS NULL OR date_prise_de_vue = "0000-00-00")';
219
		}
220
 
221
		return $requete_recherche_date;
222
	}
223
}
224
?>