| 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;
|