Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
456 aurelien 1
<?php
2
 
3
Class InventoryImageListPublic extends DBAccessor {
4
 
605 aurelien 5
	private $DB = null;
6
 
456 aurelien 7
	private $start = 0;
605 aurelien 8
	private $limit = 100;
456 aurelien 9
	private $distinct = true;
10
 
11
	private $criteres = array('mot_cles' => 'c.ci_meta_mots_cles',
12
							'auteur' => 'c.ci_ce_utilisateur',
13
							'commune' => 'b.location',
14
							'departement' => 'b.id_location',
15
							'taxon' => 'b.nom_ret');
16
 
17
	function InventoryImageListPublic($config) {
18
 
19
		$this->config=$config;
20
	}
21
 
22
	function getRessource() {
23
 
24
	}
25
 
26
	function getElement($uid)
605 aurelien 27
	{
456 aurelien 28
		// uid[0] : utilisateur obligatoire
29
		// uid[1] : critères de filtrage de la forme critère1:valeur1;critère2:valeur2
30
 
605 aurelien 31
		$this->DB = $this->connectDB($this->config,'cel_db');
456 aurelien 32
 
33
		$criteres = array() ;
34
 
605 aurelien 35
		if($uid[0] == '*') {
36
			$criteres = array();
37
		} else {
456 aurelien 38
 
605 aurelien 39
			if(!$this->estUneRechercheGenerale()) {
40
 
41
				$criteres = $this->traiterCriteres($_GET);
42
 
43
				if(empty($criteres)) {
44
					header("content-type: text/html");
45
					$images_json = json_encode(array());
46
					print $images_json;
47
					exit() ;
48
				}
49
			}
456 aurelien 50
		}
51
 
605 aurelien 52
		if(isset($_GET['start'])) {
53
			$this->start = $_GET['start'];
54
		}
55
 
56
		if(isset($_GET['limit'])) {
57
			$this->limit = $_GET['limit'];
58
		}
59
 
60
		// Construction de la requête
61
		$requete_debut = 'SELECT * ';
62
 
63
		$requete_nb = 'SELECT COUNT(*) as nb_res ';
64
 
65
		$jointure = 'FROM cel_obs_images a '.
456 aurelien 66
			'INNER JOIN cel_inventory b '.
67
				'ON a.coi_ce_observation = b.ordre AND a.coi_ce_utilisateur = b.identifiant '.
68
			'INNER JOIN cel_images c '.
69
				'ON a.coi_ce_image = c.ci_id_image AND a.coi_ce_utilisateur = c.ci_ce_utilisateur '.
70
			'WHERE b.transmission = 1 AND b.identifiant = c.ci_ce_utilisateur AND ';
605 aurelien 71
 
72
		$requete_debut .= $jointure;
73
		$requete_nb .= $jointure;
74
 
75
		if($this->estUneRechercheGenerale()) {
76
			$chaine_requete = $_GET['recherche'];
77
			$requete = $this->creerSousRequeteRechercheGenerale($chaine_requete) ;
78
		} else {
79
			$criteres = $this->traiterCriteres($_GET) ;
80
			$requete = $this->creerSousRequeteRechercheParCriteres($criteres);
81
		}
82
 
83
		$requete_debut .= $requete;
84
		$requete_nb .= $requete;
85
 
86
		$requete_debut = rtrim($requete_debut,'AND ');
87
		$requete_nb = rtrim($requete_nb,'AND ');
88
 
89
		$requete_debut .= ' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'c.ci_meta_date_ajout DESC').' ';
90
		$requete_debut .= "LIMIT $this->start,$this->limit ";
91
 
92
		$res =& $this->DB->query($requete_debut);
93
        if (PEAR::isError($res)) {
94
        	die($res->getMessage());
95
        }
96
 
97
		$res_nb =& $this->DB->query($requete_nb);
98
        if (PEAR::isError($res)) {
99
        	die($res->getMessage());
100
        }
101
 
102
        $images = array();
103
 
104
        $total = 0;
105
 
106
		while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
107
	    	$images[]= $row;
108
	    	$nb_res = $row['nb_res'];
109
    	}
110
 
111
		while ($row =& $res_nb->fetchrow(DB_FETCHMODE_ASSOC)) {
112
	    	$total= $row['nb_res'];
113
    	}
456 aurelien 114
 
605 aurelien 115
    	$resultat = array('total' => $total,'images' => $images, 'requete' => $requete_debut);
116
 
117
		$images_json = json_encode($resultat) ;
456 aurelien 118
 
605 aurelien 119
		header("content-type: text/html") ;
120
		print $images_json ;
121
		exit() ;
122
	}
123
 
124
	private function creerSousRequeteRechercheParCriteres($criteres) {
125
 
126
		$requete = '';
127
 
456 aurelien 128
		foreach($criteres as $pair)
605 aurelien 129
			{
456 aurelien 130
			$nom_valeur = explode("=",$pair) ;
131
 
132
			if(sizeof($nom_valeur) != 0)
133
			{
134
					if($nom_valeur[0] == "ci_limite")
135
					{
605 aurelien 136
						$this->limite = $this->DB->escapeSimple($nom_valeur[1]) ;
456 aurelien 137
					}
138
					elseif($nom_valeur[0] == "c.ci_numero_page")
139
					{
605 aurelien 140
						$this->start = $this->limite*$this->DB->escapeSimple($nom_valeur[1]) ;
456 aurelien 141
					}
142
					elseif($nom_valeur[0] == "c.ci_meta_mots_cles")
143
					{
144
						$mots_cles = rtrim($nom_valeur[1], ',') ;
145
						$mots_cles_liste = explode("," , $mots_cles) ;
146
 
147
						foreach($mots_cles_liste as $mot_cle)
148
						{
605 aurelien 149
							$requete .= $nom_valeur[0].' LIKE "%'.$this->DB->escapeSimple($mot_cle).'%"' ;
456 aurelien 150
							$requete .= ' AND ' ;
151
						}
152
					}
153
					elseif($nom_valeur[0] == "c.ci_meta_comment")
154
					{
155
						$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
156
 
157
						foreach($mots_comment_liste as $mot_comment)
158
						{
159
							$mot_comment = trim($mot_comment) ;
605 aurelien 160
							$requete .= $nom_valeur[0].' LIKE "%'.$this->DB->escapeSimple($mot_comment).'%"' ;
456 aurelien 161
							$requete .= ' AND ' ;
162
						}
163
					}
164
					elseif($nom_valeur[0] == "c.ci_meta_date")
165
					{
605 aurelien 166
						$requete .= 'DATE_FORMAT( '.$nom_valeur[0].', \'%Y-%m-%d\' ) = "'.$this->DB->escapeSimple($nom_valeur[1]).'"' ;
456 aurelien 167
						$requete .= ' AND ' ;
168
					}
169
					elseif($nom_valeur[0] == "c.ci_id_tampon")
170
					{
171
						$ids_tampon = rtrim($nom_valeur[1], ',') ;
605 aurelien 172
						$requete .= 'c.ci_id_image IN ( '.$this->DB->escapeSimple($ids_tampon).')' ;
456 aurelien 173
					}
605 aurelien 174
					elseif($nom_valeur[0] == "b.nom_ret")
456 aurelien 175
					{
605 aurelien 176
						if($nom_valeur[1] == "indetermine") {
177
							$nom_valeur[1] = 'null';
178
						}
179
 
180
						$requete .= ' (';
181
						$requete .= $nom_valeur[0].' LIKE "%'.$this->DB->escapeSimple($nom_valeur[1]).'%"' ;
182
						$requete .= ' OR ' ;
183
						$requete .= 'b.nom_sel LIKE "%'.$this->DB->escapeSimple($nom_valeur[1]).'%"' ;
184
						$requete .= ') AND ' ;
185
 
186
					} else
187
					{
188
						$requete .= $nom_valeur[0].' = "'.$this->DB->escapeSimple($nom_valeur[1]) ;
456 aurelien 189
						$requete .= '" AND ' ;
190
					}
191
			}
192
		}
193
 
194
		$requete = rtrim($requete,' AND ') ;
605 aurelien 195
 
196
		return $requete;
197
	}
198
 
199
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
200
 
201
		if(trim($chaine_requete) == '') {
202
			return '';
203
		}
204
 
205
		$chaine_requete = strtolower($chaine_requete);
206
 
207
		$chaine_requete = str_replace(' ','_',$chaine_requete);
208
 
209
		$requete = ' (';
210
 
211
		$requete .= 'b.nom_ret LIKE "'.$this->DB->escapeSimple($chaine_requete).'%"' ;
212
		$requete .= ' OR ' ;
213
 
214
		$requete .= 'b.nom_sel LIKE "'.$this->DB->escapeSimple($chaine_requete).'%"' ;
215
		$requete .= ' OR ' ;
456 aurelien 216
 
605 aurelien 217
		$requete .= 'b.location LIKE "'.$this->DB->escapeSimple($chaine_requete).'%" ' ;
218
		$requete .= ' OR ' ;
456 aurelien 219
 
605 aurelien 220
		$requete .= 'b.id_location LIKE "'.$this->DB->escapeSimple($chaine_requete).'%" ' ;
221
		$requete .= ' OR ' ;
222
 
223
		$requete .= 'c.ci_ce_utilisateur LIKE "'.$this->DB->escapeSimple($chaine_requete).'%" ' ;
224
 
225
		$requete .= ') ';
226
 
227
		return $requete;
456 aurelien 228
	}
229
 
605 aurelien 230
	private function estUneRechercheGenerale() {
231
		return isset($_GET['recherche']);
232
	}
233
 
456 aurelien 234
	private function traiterCriteres($tableau_criteres) {
235
 
236
		$tableau_criteres_pour_bdd = array();
605 aurelien 237
 
238
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
456 aurelien 239
 
240
			if(isset($this->criteres[$nom_critere])) {
241
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
242
			}
243
		}
244
 
245
		return $tableau_criteres_pour_bdd;
246
	}
247
}
248
?>