Line 26... |
Line 26... |
26 |
error_reporting(E_ALL);
|
26 |
error_reporting(E_ALL);
|
27 |
*/
|
27 |
*/
|
Line 28... |
Line 28... |
28 |
|
28 |
|
Line 147... |
Line 147... |
147 |
$resultat->corps = array('entete' => DelTk::makeJSONHeader($total, $params, Config::get('url_service')),
|
147 |
$resultat->corps = array('entete' => DelTk::makeJSONHeader($total, $params, Config::get('url_service')),
|
148 |
'resultats' => $observations);
|
148 |
'resultats' => $observations);
|
Line 149... |
Line 149... |
149 |
|
149 |
|
150 |
return $resultat;
|
150 |
return $resultat;
|
151 |
}
|
151 |
}
|
152 |
|
152 |
|
153 |
static function sortArrayByArray($array, $orderArray) {
|
153 |
static function sortArrayByArray($array, $orderArray) {
|
154 |
$ordered = array();
|
154 |
$ordered = array();
|
155 |
foreach($orderArray as $key) {
|
155 |
foreach($orderArray as $key) {
|
156 |
if(array_key_exists('"' . $key . '"', $array)) {
|
156 |
if(array_key_exists('"' . $key . '"', $array)) {
|
157 |
$ordered['"' . $key . '"'] = $array['"' . $key . '"'];
|
157 |
$ordered['"' . $key . '"'] = $array['"' . $key . '"'];
|
158 |
unset($array['"' . $key . '"']);
|
158 |
unset($array['"' . $key . '"']);
|
159 |
}
|
159 |
}
|
160 |
}
|
160 |
}
|
161 |
return $ordered + $array;
|
161 |
return $ordered + $array;
|
162 |
}
|
162 |
}
|
163 |
|
163 |
|
164 |
// SQL helpers
|
164 |
// SQL helpers
|
165 |
/*
|
165 |
/*
|
166 |
* Retourne une liste ordonnée d'id d'observation correspondant aux critères
|
166 |
* Retourne une liste ordonnée d'id d'observation correspondant aux critères
|
167 |
* passés dans p et aux clauses where/join présentes dans le tableau $req
|
167 |
* passés dans p et aux clauses where/join présentes dans le tableau $req
|
168 |
*
|
168 |
*
|
169 |
* @param p: $params (filtrés sauf escape-string)
|
169 |
* @param p: $params (filtrés sauf escape-string)
|
170 |
* @param req: le tableau représentant les composants de la requete SQL
|
170 |
* @param req: le tableau représentant les composants de la requete SQL
|
171 |
* @param db: l'instance de db
|
171 |
* @param db: l'instance de db
|
172 |
*/
|
172 |
*/
|
173 |
static function getIdObs($p, $req, $db) {
|
173 |
static function getIdObs($p, $req, $db) {
|
174 |
$req_s = sprintf('SELECT SQL_CALC_FOUND_ROWS id_observation' .
|
174 |
$req_s = sprintf('SELECT SQL_CALC_FOUND_ROWS id_observation' .
|
175 |
' FROM v_del_image vdi'.
|
175 |
' FROM v_del_image vdi'.
|
176 |
' %s' . // LEFT JOIN if any
|
176 |
' %s' . // LEFT JOIN if any
|
177 |
' WHERE %s'. // where-clause ou TRUE
|
177 |
' WHERE %s'. // where-clause ou TRUE
|
Line 178... |
Line 178... |
178 |
' %s'. // group-by
|
178 |
' %s'. // group-by
|
179 |
' %s'. // having (si commentaires)
|
179 |
' %s'. // having (si commentaires)
|
Line 180... |
Line 180... |
180 |
' ORDER BY %s %s %s'.
|
180 |
' ORDER BY %s %s %s'.
|
181 |
' LIMIT %d, %d -- %s',
|
181 |
' LIMIT %d, %d -- %s',
|
182 |
|
- |
|
183 |
$req['join'] ? implode(' ', $req['join']) : '',
|
- |
|
184 |
$req['where'] ? implode(' AND ', $req['where']) : 'TRUE',
|
- |
|
185 |
|
- |
|
186 |
$req['groupby'] ? ('GROUP BY ' . implode(', ', array_unique($req['groupby']))) : '',
|
- |
|
187 |
$req['having'] ? ('HAVING ' . implode(' AND ', $req['having'])) : '',
|
- |
|
188 |
|
- |
|
189 |
$p['tri'], strtoupper($p['ordre']),
|
- |
|
190 |
// date_transmission peut-être NULL et nous voulons de la consistence
|
- |
|
191 |
// (sauf après r1860 de Cel)
|
- |
|
192 |
$p['tri'] == 'date_transmission' ? ', id_observation' : '',
|
- |
|
193 |
|
- |
|
194 |
$p['navigation.depart'], $p['navigation.limite'], __FILE__ . ':' . __LINE__);
|
- |
|
195 |
|
- |
|
196 |
$res = $db->recupererTous($req_s);
|
- |
|
197 |
$err = mysql_error();
|
- |
|
198 |
if(!$res && $err) {
|
- |
|
199 |
// http_response_code(400);
|
- |
|
Line -... |
Line 182... |
- |
|
182 |
|
- |
|
183 |
$req['join'] ? implode(' ', $req['join']) : '',
|
- |
|
184 |
$req['where'] ? implode(' AND ', $req['where']) : 'TRUE',
|
- |
|
185 |
|
- |
|
186 |
$req['groupby'] ? ('GROUP BY ' . implode(', ', array_unique($req['groupby']))) : '',
|
- |
|
187 |
$req['having'] ? ('HAVING ' . implode(' AND ', $req['having'])) : '',
|
- |
|
188 |
|
- |
|
189 |
$p['tri'], strtoupper($p['ordre']),
|
- |
|
190 |
// date_transmission peut-être NULL et nous voulons de la consistence
|
- |
|
191 |
// (sauf après r1860 de Cel)
|
- |
|
192 |
$p['tri'] == 'date_transmission' ? ', id_observation' : '',
|
- |
|
193 |
|
- |
|
194 |
$p['navigation.depart'], $p['navigation.limite'], __FILE__ . ':' . __LINE__);
|
200 |
// if(defined('DEBUG') && DEBUG) header("X-Debug: $req_s");
|
195 |
|
- |
|
196 |
$res = $db->recupererTous($req_s);
|
- |
|
197 |
$err = mysql_error();
|
- |
|
198 |
if(!$res && $err) {
|
- |
|
199 |
// http_response_code(400);
|
- |
|
200 |
// if(defined('DEBUG') && DEBUG) header("X-Debug: $req_s");
|
201 |
throw new Exception('not found', 400);
|
201 |
throw new Exception('not found', 400);
|
202 |
}
|
202 |
}
|
203 |
// ordre préservé, à partir d'ici c'est important.
|
203 |
// ordre préservé, à partir d'ici c'est important.
|
204 |
return $res;
|
204 |
return $res;
|
205 |
}
|
205 |
}
|
206 |
|
206 |
|
207 |
/*
|
207 |
/*
|
208 |
Champs récupérés:
|
208 |
Champs récupérés:
|
209 |
Pour del_images, la vue retourne déjà ce que nous recherchons de cel_obs et cel_images
|
209 |
Pour del_images, la vue retourne déjà ce que nous recherchons de cel_obs et cel_images
|
210 |
(cel_obs.* et cel_[obs_]images.{id_observation, id_image, date_prise_de_vue AS date, hauteur, largeur})
|
210 |
(cel_obs.* et cel_[obs_]images.{id_observation, id_image, date_prise_de_vue AS date, hauteur, largeur})
|
211 |
Pour del_commentaires: nous voulons *
|
211 |
Pour del_commentaires: nous voulons *
|
212 |
Reste ensuite à formatter.
|
212 |
Reste ensuite à formatter.
|
213 |
Note: le préfixe de table utilisé ici (vdi) n'impacte *aucune* autre partie du code car rien
|
213 |
Note: le préfixe de table utilisé ici (vdi) n'impacte *aucune* autre partie du code car rien
|
214 |
n'en dépend pour l'heure. (inutilisation de $req['select'])
|
214 |
n'en dépend pour l'heure. (inutilisation de $req['select'])
|
215 |
*/
|
215 |
*/
|
216 |
static function getInfos($idobs, $db) {
|
216 |
static function getInfos($idobs, $db) {
|
217 |
/*$select_fields = implode(',', array_merge(
|
217 |
/*$select_fields = implode(',', array_merge(
|
218 |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['dob']),
|
218 |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['dob']),
|
219 |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['di']),
|
219 |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['di']),
|
220 |
array_map(create_function('$a', 'return "du.".$a;'), self::$sql_fields_liaisons['du'])));*/
|
220 |
array_map(create_function('$a', 'return "du.".$a;'), self::$sql_fields_liaisons['du'])));*/
|
221 |
$select_fields = array_merge(self::$sql_fields_liaisons['dob'],
|
221 |
$select_fields = array_merge(self::$sql_fields_liaisons['dob'],
|
222 |
self::$sql_fields_liaisons['di']);
|
222 |
self::$sql_fields_liaisons['di']);
|
223 |
$req_s = sprintf('SELECT %s FROM v_del_image vdi'.
|
223 |
$req_s = sprintf('SELECT %s FROM v_del_image vdi'.
|
224 |
// ' LEFT JOIN del_commentaire AS dc ON di.id_observation = dc.ce_observation AND dc.nom_sel IS NOT NULL'.
|
224 |
// ' LEFT JOIN del_commentaire AS dc ON di.id_observation = dc.ce_observation AND dc.nom_sel IS NOT NULL'.
|
225 |
' WHERE id_observation IN (%s)',
|
225 |
' WHERE id_observation IN (%s)',
|
226 |
implode(',', $select_fields),
|
226 |
implode(',', $select_fields),
|
227 |
implode(',', $idobs));
|
227 |
implode(',', $idobs));
|
228 |
return $db->recupererTous($req_s);
|
228 |
return $db->recupererTous($req_s);
|
Line 335... |
Line -... |
335 |
$propositions = $this->bdd->recupererTous($r);
|
- |
|
336 |
if(!$propositions) return;
|
360 |
$propositions = $this->bdd->recupererTous($r);
|
- |
|
361 |
if(!$propositions) return;
|
Line 337... |
Line 362... |
337 |
foreach ($propositions as $proposition) {
|
362 |
foreach ($propositions as $proposition) {
|
338 |
$idObs = $proposition['ce_observation'];
|
363 |
$idObs = $proposition['ce_observation'];
|
Line 339... |
Line 364... |
339 |
$idComment = $proposition['id_commentaire'];
|
364 |
$idComment = $proposition['id_commentaire'];
|
340 |
$comment = $this->formaterDetermination($idComment, $proposition);
|
365 |
$comment = $this->formaterDetermination($idComment, $proposition);
|
341 |
if($comment) $observations['"' . $idObs . '"']['commentaires'][$idComment] = $comment;
|
366 |
if($comment) $observations['"' . $idObs . '"']['commentaires'][$idComment] = $comment;
|
342 |
|
367 |
|
343 |
}
|
368 |
}
|
344 |
}
|
369 |
}
|
Line 345... |
Line 370... |
345 |
|
370 |
|
346 |
private function formaterDetermination($commentId, $proposition) {
|
371 |
private function formaterDetermination($commentId, $proposition) {
|
347 |
if(!$proposition) return NULL;
|
372 |
if(!$proposition) return NULL;
|
Line 348... |
Line 373... |
348 |
|
373 |
|
349 |
$proposition_formatee = array('nb_commentaires' => '0');
|
374 |
$proposition_formatee = array('nb_commentaires' => '0');
|
350 |
foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
|
- |
|
351 |
if (isset($proposition[$nomOriginal])) {
|
- |
|
352 |
$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
|
- |
|
353 |
}
|
- |
|
354 |
}
|
- |
|
355 |
|
- |
|
356 |
// Charger les votes sur les déterminations
|
- |
|
357 |
$resultatsVotes = $this->bdd->recupererTous(
|
- |
|
358 |
sprintf('SELECT * FROM del_commentaire_vote WHERE ce_proposition = %d', $commentId));
|
- |
|
359 |
|
- |
|
360 |
foreach ($resultatsVotes as $vote) {
|
- |
|
361 |
$proposition_formatee['votes'][$vote['id_vote']] = $this->formaterVote($vote);
|
- |
|
362 |
}
|
- |
|
363 |
|
- |
|
364 |
|
- |
|
365 |
// chargerNombreCommentaire()
|
- |
|
366 |
// Charger le nombre de commentaires (sans détermination) associé à l'observation
|
- |
|
367 |
$listeCommentaires = $this->bdd->recupererTous(sprintf(
|
- |
|
368 |
'SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '.
|
- |
|
369 |
'FROM del_commentaire WHERE ce_proposition = %d GROUP BY ce_proposition -- %s',
|
- |
|
370 |
$commentId, __FILE__ . ':' . __LINE__));
|
- |
|
371 |
foreach ($listeCommentaires as $ligneProposition) {
|
- |
|
372 |
// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
|
- |
|
373 |
if($ligneProposition['ce_commentaire_parent']) {
|
- |
|
374 |
// TODO/debug: id_commentaire_parent != $commentId ??
|
- |
|
375 |
// reprendre la "logique" du code... moins de boucles, moins de requêtes, ...
|
- |
|
376 |
if($ligneProposition['ce_commentaire_parent'] != $commentId) {
|
375 |
foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
|
Line -... |
Line 376... |
- |
|
376 |
if (isset($proposition[$nomOriginal])) {
|
- |
|
377 |
$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
|
- |
|
378 |
}
|
- |
|
379 |
}
|
- |
|
380 |
|
- |
|
381 |
// Charger les votes sur les déterminations
|
- |
|
382 |
$resultatsVotes = $this->bdd->recupererTous(
|
- |
|
383 |
sprintf('SELECT * FROM del_commentaire_vote WHERE ce_proposition = %d', $commentId));
|
- |
|
384 |
|
- |
|
385 |
foreach ($resultatsVotes as $vote) {
|
- |
|
386 |
$proposition_formatee['votes'][$vote['id_vote']] = $this->formaterVote($vote);
|
- |
|
387 |
}
|
- |
|
388 |
|
- |
|
389 |
|
- |
|
390 |
// chargerNombreCommentaire()
|
- |
|
391 |
// Charger le nombre de commentaires (sans détermination) associé à l'observation
|
- |
|
392 |
$listeCommentaires = $this->bdd->recupererTous(sprintf(
|
- |
|
393 |
'SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '.
|
- |
|
394 |
'FROM del_commentaire WHERE ce_proposition = %d GROUP BY ce_proposition -- %s',
|
- |
|
395 |
$commentId, __FILE__ . ':' . __LINE__));
|
- |
|
396 |
foreach ($listeCommentaires as $ligneProposition) {
|
- |
|
397 |
// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
|
- |
|
398 |
if($ligneProposition['ce_commentaire_parent']) {
|
- |
|
399 |
// TODO/debug: id_commentaire_parent != $commentId ??
|
- |
|
400 |
// reprendre la "logique" du code... moins de boucles, moins de requêtes, ...
|
- |
|
401 |
if($ligneProposition['ce_commentaire_parent'] != $commentId) {
|
377 |
// restore_error_handler();
|
402 |
// restore_error_handler();
|
378 |
error_log(sprintf("possible error: nb_commentaires = %s: comment = %d, parent = %d, %s",
|
403 |
error_log(sprintf("possible error: nb_commentaires = %s: comment = %d, parent = %d, %s",
|
379 |
$ligneProposition['nb'], $commentId, $ligneProposition['ce_commentaire_parent'], __FILE__));
|
404 |
$ligneProposition['nb'], $commentId, $ligneProposition['ce_commentaire_parent'], __FILE__));
|
380 |
}
|
405 |
}
|
381 |
$proposition_formatee['nb_commentaires'] = $ligneProposition['nb'];
|
406 |
$proposition_formatee['nb_commentaires'] = $ligneProposition['nb'];
|
382 |
} else {
|
407 |
} else {
|
383 |
$proposition_formatee['observation']['nb_commentaires'] = $ligneProposition['nb'];
|
408 |
$proposition_formatee['observation']['nb_commentaires'] = $ligneProposition['nb'];
|
384 |
}
|
409 |
}
|
385 |
}
|
- |
|
386 |
|
- |
|
387 |
return $proposition_formatee;
|
410 |
}
|
- |
|
411 |
|
- |
|
412 |
return $proposition_formatee;
|
388 |
}
|
413 |
}
|