Subversion Repositories eFlore/Applications.cel

Rev

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