Subversion Repositories eFlore/Applications.del

Rev

Rev 1375 | Rev 1380 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1375 Rev 1379
Line 120... Line 120...
120
 
120
 
121
		// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS)
121
		// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS)
122
		$idobs_tab = self::getIdObs($params, $req, $db);
122
		$idobs_tab = self::getIdObs($params, $req, $db);
123
		// idobs est une liste (toujours ordonnée) des id d'observations recherchées
123
		// idobs est une liste (toujours ordonnée) des id d'observations recherchées
124
		$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab));
-
 
Line -... Line 124...
-
 
124
		$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab));
125
		$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']);
125
 
126
 
-
 
Line 127... Line 126...
127
		// 2) récupération des données nécessaires pour ces observations (obs + images)
126
		if($idobs) {
128
		$obs_unfmt = self::getInfos($idobs, $db);
127
			$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']);
Line 129... Line 128...
129
 
128
 
130
		// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
-
 
131
		$observations = self::reformateObservation($obs_unfmt, $this->conteneur);
-
 
132
 
129
			// 2) récupération des données nécessaires pour ces observations (obs + images)
Line -... Line 130...
-
 
130
			$obs_unfmt = self::getInfos($idobs, $db);
-
 
131
 
-
 
132
			// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
-
 
133
			$observations = self::reformateObservation($obs_unfmt, $this->conteneur);
-
 
134
 
133
		// 4) récupération des données nécessaires pour ces observations (commentaires + votes)
135
			// 4) récupération des données nécessaires pour ces observations (commentaires + votes)
134
		// modifie $observations
136
			// modifie $observations
-
 
137
			$this->configurer();
-
 
138
			$this->chargerDeterminations($observations);
-
 
139
 
-
 
140
			// 5) restauration de l'ordre souhaité initialement
Line 135... Line 141...
135
		$this->configurer();
141
			$observations = self::sortArrayByArray($observations, $idobs);
136
		$this->chargerDeterminations($observations);
142
		} else {
Line 137... Line 143...
137
 
143
			$observations = array();
Line 192... Line 198...
192
						 ' FROM del_image dob'.
198
						 ' FROM del_image dob'.
193
						 ' %s' . // LEFT JOIN if any
199
						 ' %s' . // LEFT JOIN if any
194
						 ' WHERE %s'. // where-clause ou TRUE
200
						 ' WHERE %s'. // where-clause ou TRUE
195
						 ' %s'. // group-by
201
						 ' %s'. // group-by
196
						 ' %s'. // having (si commentaires)
202
						 ' %s'. // having (si commentaires)
197
						 ' ORDER BY %s %s'.
203
						 ' ORDER BY %s %s %s'.
198
						 ' LIMIT %d, %d -- %s',
204
						 ' LIMIT %d, %d -- %s',
Line 199... Line 205...
199
						 
205
						 
200
						 $req['join'] ? implode(' ', $req['join']) : '',
206
						 $req['join'] ? implode(' ', $req['join']) : '',
Line 201... Line 207...
201
						 $req['where'] ? implode(' AND ', $req['where']) : 'TRUE',
207
						 $req['where'] ? implode(' AND ', $req['where']) : 'TRUE',
202
 
208
 
Line 203... Line 209...
203
						 $req['groupby'] ? ('GROUP BY ' . implode(', ', array_unique($req['groupby']))) : '',
209
						 $req['groupby'] ? ('GROUP BY ' . implode(', ', array_unique($req['groupby']))) : '',
204
						 $req['having'] ? ('HAVING ' . implode(' AND ', $req['having'])) : '',
210
						 $req['having'] ? ('HAVING ' . implode(' AND ', $req['having'])) : '',
205
 
211
 
-
 
212
						 $p['tri'], strtoupper($p['ordre']),
206
						 $p['tri'], strtoupper($p['ordre']),
213
						 // date_transmission peut-être NULL et nous voulons de la consistence
Line 207... Line 214...
207
						 $p['navigation.depart'],
214
						 $p['tri'] == 'date_transmission' ? ', id_observation' : '',
208
						 $p['navigation.limite'],
215
 
209
						 __FILE__ . ':' . __LINE__);
216
						 $p['navigation.depart'], $p['navigation.limite'], __FILE__ . ':' . __LINE__);
210
 
217
 
Line 282... Line 289...
282
				self::addAuteursConstraint($p['masque.auteur'], $db, $req['where']);
289
				self::addAuteursConstraint($p['masque.auteur'], $db, $req['where']);
283
			}
290
			}
284
		}
291
		}
Line 285... Line 292...
285
 
292
 
286
		if(!empty($p['masque.date'])) {
293
		if(!empty($p['masque.date'])) {
287
			if(is_integer($p['masque.date']) && $p['masque.date'] < 2030)
294
			if(is_integer($p['masque.date']) && $p['masque.date'] < 2030 && $p['masque.date'] > 1600) {
-
 
295
				$req['where'][] = sprintf("YEAR(dob.date_observation) = %d", $p['masque.date']);
288
				$req['where'][] = sprintf("YEAR(dob.date_observation) = %d", $p['masque.date']);
296
			}
289
			else
297
			else {
290
				$req['where'][] = sprintf("DATE_FORMAT(dob.date_observation, '%Y-%m-%d') = %s",
298
				$req['where'][] = sprintf("DATE_FORMAT(dob.date_observation, '%%Y-%%m-%%d') = %s",
-
 
299
										  $db->proteger(strftime('%Y-%m-%d', $p['masque.date'])));
291
										  $db->proteger(strftime('%Y-%m-%d', $p['masque.date'])));
300
			}
Line 292... Line 301...
292
		}
301
		}
293
 
302
 
294
		// TODO: avoir des champs d'entrée distinct
303
		// TODO: avoir des champs d'entrée distinct
Line 363... Line 372...
363
	}
372
	}
Line 364... Line 373...
364
 
373
 
365
 
374
 
366
 
375
 
367
	/* Lorsque l'on concatène des champs, un seul NULL prend le dessus,
376
	/* Lorsque l'on concatène des champs, un seul NULL prend le dessus,
368
	   Il faut donc utiliser la syntaxe IF(%s IS NULL, "", %s).
377
	   Il faut donc utiliser la syntaxe IFNULL(%s, "").
369
	   (Cette fonction effectue aussi l'implode() "final" */
378
	   (Cette fonction effectue aussi l'implode() "final" */
370
	static function sqlAddIfNullPourConcat($tab) {
379
	static function sqlAddIfNullPourConcat($tab) {
Line 371... Line 380...
371
		// XXX: PHP-5.3
380
		// XXX: PHP-5.3
372
		return implode(',',array_map(create_function('$a', 'return "IF($a IS NULL, \"\", $a)";'), $tab));
381
		return implode(',',array_map(create_function('$a', 'return "IFNULL($a, \"\")";'), $tab));
373
	}
382
	}
Line 573... Line 582...
573
		}
582
		}
Line 574... Line 583...
574
 
583
 
575
		if(isset($params['masque.date'])) {
584
		if(isset($params['masque.date'])) {
576
			// une année, TODO: masque.annee
585
			// une année, TODO: masque.annee
577
			if(is_numeric($params['masque.date'])) {
586
			if(is_numeric($params['masque.date'])) {
578
				$p['masque.date'] = intval($params['masque.date']);
587
				$p['masque.date'] = $params['masque.date'];
579
			}
588
			}
580
			elseif(strpos($params['masque.date'], '/' !== false) &&
589
			elseif(strpos($params['masque.date'], '/' !== false) &&
581
				   ($x = strtotime(str_replace('/','-',$params['masque.date'])))) {
590
				   ($x = strtotime(str_replace('/','-',$params['masque.date'])))) {
582
				$p['masque.date'] = $x;
591
				$p['masque.date'] = $x;