Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1490 Rev 1494
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
    }