Subversion Repositories eFlore/Applications.cel

Rev

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

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