122,22 → 122,28 |
$idobs_tab = self::getIdObs($params, $req, $db); |
// idobs est une liste (toujours ordonnée) des id d'observations recherchées |
$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab)); |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']); |
|
// 2) récupération des données nécessaires pour ces observations (obs + images) |
$obs_unfmt = self::getInfos($idobs, $db); |
if($idobs) { |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']); |
|
// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output |
$observations = self::reformateObservation($obs_unfmt, $this->conteneur); |
// 2) récupération des données nécessaires pour ces observations (obs + images) |
$obs_unfmt = self::getInfos($idobs, $db); |
|
// 4) récupération des données nécessaires pour ces observations (commentaires + votes) |
// modifie $observations |
$this->configurer(); |
$this->chargerDeterminations($observations); |
// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output |
$observations = self::reformateObservation($obs_unfmt, $this->conteneur); |
|
// 5) restauration de l'ordre souhaité initialement |
$observations = self::sortArrayByArray($observations, $idobs); |
// 4) récupération des données nécessaires pour ces observations (commentaires + votes) |
// modifie $observations |
$this->configurer(); |
$this->chargerDeterminations($observations); |
|
// 5) restauration de l'ordre souhaité initialement |
$observations = self::sortArrayByArray($observations, $idobs); |
} else { |
$observations = array(); |
$total = 0; |
} |
|
// 6) JSON output |
$resultat = new ResultatService(); |
|
194,7 → 200,7 |
' WHERE %s'. // where-clause ou TRUE |
' %s'. // group-by |
' %s'. // having (si commentaires) |
' ORDER BY %s %s'. |
' ORDER BY %s %s %s'. |
' LIMIT %d, %d -- %s', |
|
$req['join'] ? implode(' ', $req['join']) : '', |
204,10 → 210,11 |
$req['having'] ? ('HAVING ' . implode(' AND ', $req['having'])) : '', |
|
$p['tri'], strtoupper($p['ordre']), |
$p['navigation.depart'], |
$p['navigation.limite'], |
__FILE__ . ':' . __LINE__); |
// date_transmission peut-être NULL et nous voulons de la consistence |
$p['tri'] == 'date_transmission' ? ', id_observation' : '', |
|
$p['navigation.depart'], $p['navigation.limite'], __FILE__ . ':' . __LINE__); |
|
$res = $db->recupererTous($req_s); |
$err = mysql_error(); |
if(!$res && $err) { |
284,11 → 291,13 |
} |
|
if(!empty($p['masque.date'])) { |
if(is_integer($p['masque.date']) && $p['masque.date'] < 2030) |
if(is_integer($p['masque.date']) && $p['masque.date'] < 2030 && $p['masque.date'] > 1600) { |
$req['where'][] = sprintf("YEAR(dob.date_observation) = %d", $p['masque.date']); |
else |
$req['where'][] = sprintf("DATE_FORMAT(dob.date_observation, '%Y-%m-%d') = %s", |
} |
else { |
$req['where'][] = sprintf("DATE_FORMAT(dob.date_observation, '%%Y-%%m-%%d') = %s", |
$db->proteger(strftime('%Y-%m-%d', $p['masque.date']))); |
} |
} |
|
// TODO: avoir des champs d'entrée distinct |
365,11 → 374,11 |
|
|
/* Lorsque l'on concatène des champs, un seul NULL prend le dessus, |
Il faut donc utiliser la syntaxe IF(%s IS NULL, "", %s). |
Il faut donc utiliser la syntaxe IFNULL(%s, ""). |
(Cette fonction effectue aussi l'implode() "final" */ |
static function sqlAddIfNullPourConcat($tab) { |
// XXX: PHP-5.3 |
return implode(',',array_map(create_function('$a', 'return "IF($a IS NULL, \"\", $a)";'), $tab)); |
return implode(',',array_map(create_function('$a', 'return "IFNULL($a, \"\")";'), $tab)); |
} |
|
/* |
575,7 → 584,7 |
if(isset($params['masque.date'])) { |
// une année, TODO: masque.annee |
if(is_numeric($params['masque.date'])) { |
$p['masque.date'] = intval($params['masque.date']); |
$p['masque.date'] = $params['masque.date']; |
} |
elseif(strpos($params['masque.date'], '/' !== false) && |
($x = strtotime(str_replace('/','-',$params['masque.date'])))) { |