Subversion Repositories eFlore/Applications.cel

Rev

Rev 1078 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
/**
664 aurelien 3
 * Service recherche, et de suppression multiple d'images a partir de divers critères
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
416 aurelien 6
 *
664 aurelien 7
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
8
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
9
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
10
 * @version $Id$
416 aurelien 11
 */
12
 Class InventoryImageList extends DBAccessor {
13
 
14
	var $config;
15
 
16
	function InventoryImageList($config) {
17
 
18
		$this->config=$config;
19
	}
20
 
21
 
22
	// renvoie l'enregistrement correspond � une image
23
	function getElement($uid)
24
	{
25
			// uid[0] : utilisateur obligatoire
26
			// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2
27
 
28
		// Controle detournement utilisateur
1078 aurelien 29
		if(!isset($_SESSION)) {session_start();}
416 aurelien 30
		$this->controleUtilisateur($uid[0]);
31
 
32
		$DB=$this->connectDB($this->config,'cel_db');
33
 
34
		$criteres = array() ;
35
 
36
		if(isset($uid[1]))
37
		{
38
			$criteres = explode("&", $uid[1]) ;
39
		}
40
 
41
		$query='SELECT * FROM cel_images WHERE ci_ce_utilisateur = "'.$uid[0].'" AND ' ;
42
 
43
		$numero_page = 0 ;
44
		$limite = 50 ;
45
 
46
		foreach($criteres as $pair)
47
		{
48
			$nom_valeur = explode("=",$pair) ;
49
 
50
			if(sizeof($nom_valeur) != 0)
51
			{
52
					if($nom_valeur[0] == "ci_limite")
53
					{
54
						$limite = $DB->escapeSimple($nom_valeur[1]) ;
55
					}
56
					elseif($nom_valeur[0] == "ci_numero_page")
57
					{
58
						$numero_page = $DB->escapeSimple($nom_valeur[1]) ;
59
					}
60
					elseif($nom_valeur[0] == "ci_meta_mots_cles")
61
					{
62
						$mots_cles = rtrim($nom_valeur[1], ',') ;
63
						$mots_cles_liste = explode("," , $mots_cles) ;
64
 
65
						foreach($mots_cles_liste as $mot_cle)
66
						{
67
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ;
68
							$query .= ' AND ' ;
69
						}
70
					}
71
					elseif($nom_valeur[0] == "ci_meta_comment")
72
					{
73
						$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
74
 
75
						foreach($mots_comment_liste as $mot_comment)
76
						{
77
							$mot_comment = trim($mot_comment) ;
78
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ;
79
							$query .= ' AND ' ;
80
						}
81
					}
664 aurelien 82
					elseif($nom_valeur[0] == "annee" || $nom_valeur[0] == "mois" || $nom_valeur[0] == "jour")
416 aurelien 83
					{
664 aurelien 84
						$query .= $this->fabriquerSousRequeteRechercheDate($nom_valeur[0], $nom_valeur[1]) ;
416 aurelien 85
						$query .= ' AND ' ;
86
					}
87
					elseif($nom_valeur[0] == "ci_id_tampon")
88
					{
89
						$ids_tampon = rtrim($nom_valeur[1], ',') ;
90
						$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')' ;
91
					}
664 aurelien 92
					elseif($nom_valeur[0] == "ci_recherche_generale")
93
					{
94
						$query .= $this->fabriquerSousRequeteRechercheGenerale($uid[0], $nom_valeur[1]);
95
						$query .= ' AND ';
96
					}
416 aurelien 97
					else
98
					{
99
						$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ;
100
						$query .= '" AND ' ;
101
					}
102
			}
103
		}
104
 
105
		$debut = $limite*$numero_page ;
106
 
107
		$query = rtrim($query,' AND ') ;
664 aurelien 108
 
416 aurelien 109
		$query .= ' ORDER BY ci_ordre LIMIT '.$debut.','.$limite ;
110
 
111
		$res =& $DB->query($query);
112
                if (PEAR::isError($res)) {
113
 
114
                	die($res->getMessage());
115
                }
116
 
117
		$result = array() ;
118
 
119
		while($image = $res->fetchrow(DB_FETCHMODE_ASSOC))
120
		{
121
			$date = split("-",$image['ci_meta_date']) ;
122
			if(count($date) > 2)
123
			{
124
				$image['ci_meta_date'] = $date[2].'/'.$date[1].'/'.$date[0] ;
125
			}
126
 
127
			$image['ci_ce_observation'] = '';
128
 
129
			$requete_table_liaison = 'SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = '.$image['ci_id_image'].' AND coi_ce_utilisateur ="'.$uid[0].'"';
130
 
131
			$res_table_liaison =& $DB->query($requete_table_liaison);
132
            if (PEAR::isError($res_table_liaison)) {
133
 
134
            	die($res_table_liaison->getMessage());
135
            }
136
 
137
			$ids_obs = '';
138
			while($liaison = $res_table_liaison->fetchrow(DB_FETCHMODE_ASSOC))
139
			{
140
				$ids_obs .= $liaison['coi_ce_observation'].",";
141
			}
142
 
143
			$ids_obs = rtrim($ids_obs,',');
144
 
145
			if(trim($ids_obs) != '') {
146
				$requete_obs_liees = 'SELECT * FROM cel_inventory WHERE ordre IN  ('.$ids_obs.') AND identifiant ="'.$uid[0].'"';
147
				$res_obs_liees =& $DB->query($requete_obs_liees);
148
	            if (PEAR::isError($res_obs_liees)) {
149
 
150
	            	die($res_obs_liees->getMessage());
151
	            }
152
 
153
				while($obs_liee = $res_obs_liees->fetchrow(DB_FETCHMODE_ASSOC))
154
				{
155
					$image['ci_ce_observation'] .= $obs_liee['ordre'].'#'.$obs_liee['nom_sel'].'#'.$obs_liee['transmission'].';;' ;
156
				}
157
			}
158
 
159
			$result[] = $image ;
160
		}
161
 
162
		$res = json_encode($result) ;
664 aurelien 163
 
164
		$res = str_replace('\u0000','',$res);
416 aurelien 165
 
1115 aurelien 166
		header("content-type: application/json") ;
416 aurelien 167
		print $res ;
168
		exit() ;
169
	}
170
 
664 aurelien 171
 
416 aurelien 172
	function updateElement($uid,$pairs)
173
	{
174
 
175
	}
176
 
177
	function deleteElement($uid)
178
	{
179
 
180
		// uid[0] : utilisateur obligatoire
181
	// uid[1] : identifiant(s) image(s) obligatoire(s)
182
 
183
	 // Controle detournement utilisateur
1078 aurelien 184
		if(!isset($_SESSION)) {session_start();}
416 aurelien 185
		$this->controleUtilisateur($uid[0]);
186
 
187
		$DB=$this->connectDB($this->config,'cel_db');
188
 
189
		$id = rtrim($uid[1],",") ;
190
 
191
		if (isset($id)) {
192
	           	$query="DELETE FROM cel_images WHERE ci_id_image in (".$DB->escapeSimple($id) .")";
193
				$query_sup_lien = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$DB->escapeSimple($id) .")";
194
		}
195
 
196
		$res =& $DB->query($query);
197
 
198
		if (PEAR::isError($res)) {
199
			die($res->getMessage());
200
		}
201
		else
202
		{
203
			$res =& $DB->query($query_sup_lien);
204
			if(PEAR::isError($res))
205
			{
206
				die($res->getMessage());
207
			}
208
 
209
			$id_fichiers = explode(",",$id) ;
210
			foreach($id_fichiers as $en_cours)
211
			{
605 aurelien 212
				$manipulateur_image = new ImageRecreation($this->config);
213
            	$manipulateur_image->detruireImageSurDisque($id);
416 aurelien 214
			}
215
 
216
			echo "OK" ;
217
			exit() ;
218
		}
219
	}
664 aurelien 220
 
221
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
222
 
1115 aurelien 223
		$requete_recherche_taxon = 'SELECT coi_ce_image
664 aurelien 224
								FROM cel_obs_images
225
								WHERE coi_ce_observation IN ' .
226
								'(SELECT ordre ' .
227
									'FROM cel_inventory '.
228
									'WHERE identifiant ="'.$id_utilisateur.'" '.
229
									'AND nom_sel LIKE "'.$chaine_recherche.'%" '.
230
								')';
231
 
232
		$requete_recherche_comm = ' ci_meta_comment LIKE "%'.$chaine_recherche.'%" ';
1115 aurelien 233
		$requete_recherche_nom_or = ' ci_nom_original LIKE "%'.$chaine_recherche.'%" ';
234
		$requete_recherche_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.') OR ('.$requete_recherche_nom_or.'))' ;
235
 
664 aurelien 236
		return $requete_recherche_generale;
237
	}
238
 
239
	private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
240
 
241
		$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
242
 
243
		$requete_recherche_date = '';
736 aurelien 244
 
245
		if(is_numeric($valeur) && $valeur != "00") {
246
			$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = "'.$valeur.'" ';
247
		} else {
248
			$requete_recherche_date = '( ci_meta_date IS NULL OR ci_meta_date = "0000-00-00")';
249
		}
664 aurelien 250
 
251
		return $requete_recherche_date;
252
	}
416 aurelien 253
}
254
?>