Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1384 Rev 1386
Line 64... Line 64...
64
					   'ce_zone_geo AS id_zone_geo', 'zone_geo', 'lieudit',
64
					   'ce_zone_geo AS id_zone_geo', 'zone_geo', 'lieudit',
65
					   'station', 'milieu', 'date_observation', 'mots_cles_texte', 'date_transmission',
65
					   'station', 'milieu', 'date_observation', 'mots_cles_texte', 'date_transmission',
66
					   'ce_utilisateur AS `auteur.id`', 'prenom_utilisateur AS `auteur.prenom`',
66
					   'ce_utilisateur AS `auteur.id`', 'prenom_utilisateur AS `auteur.prenom`',
67
					   'nom_utilisateur AS `auteur.nom`', 'courriel_utilisateur AS observateur',
67
					   'nom_utilisateur AS `auteur.nom`', 'courriel_utilisateur AS observateur',
68
					   'commentaire'),
68
					   'commentaire'),
69
		'di' => array('id_image', 'date_prise_de_vue AS `date`', 'hauteur' , 'largeur' /* 'nom_original'//apparemment inutilisé */),
69
		'di' => array('id_image', 'date_prise_de_vue AS `date`', 'hauteur',/* 'largeur','nom_original' // apparemment inutilisés */),
70
		'du' => array('prenom', 'nom', 'courriel'),
70
		'du' => array('prenom', 'nom', 'courriel'),
71
		'dc' => array('commentaire')
71
		'dc' => array('commentaire')
72
	);
72
	);
Line 87... Line 87...
87
	static function reformateObservation($obs, $url_pattern = '') {
87
	static function reformateObservation($obs, $url_pattern = '') {
88
		$obs = array_map('array_filter', $obs);
88
		$obs = array_map('array_filter', $obs);
89
		$obs_merged = array();
89
		$obs_merged = array();
90
		foreach($obs as $o) {
90
		foreach($obs as $o) {
91
			$id = $o['id_observation'];
91
			$id = $o['id_observation'];
-
 
92
 
-
 
93
			// car auteur.id peut être un email, un hash, ou un annuaire_tela.U_ID
-
 
94
			// mais dans les deux premiers cas SELECT courriel AS observateur fait déjà l'affaire
-
 
95
			if(!is_numeric($o['auteur.id'])) $o['auteur.id'] = "0";
-
 
96
			if(!isset($o['auteur.nom'])) $o['auteur.nom'] = '[inconnu]';
-
 
97
 
92
			$image = array_intersect_key($o, array_flip(array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original')));
98
			$image = array_intersect_key($o, array_flip(array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original')));
93
			$image['binaire.href'] = sprintf($url_pattern, $image['id_image']);
99
			$image['binaire.href'] = sprintf($url_pattern, $image['id_image']);
94
			unset($o['id_image'], $o['date'], $o['hauteur'], $o['largeur'], $o['nom_original']);
100
			unset($o['id_image'], $o['date'], $o['hauteur'], $o['largeur'], $o['nom_original']);
95
			if(!isset($obs_merged['"' . $id . '"'])) $obs_merged['"' . $id . '"'] = $o;
101
			if(!isset($obs_merged['"' . $id . '"'])) $obs_merged['"' . $id . '"'] = $o;
96
			$obs_merged['"' . $id . '"']['images'][] = $image;
102
			$obs_merged['"' . $id . '"']['images'][] = $image;
97
		}
103
		}
98
		return $obs_merged;
104
		return $obs_merged;
99
	}
105
	}
Line -... Line 106...
-
 
106
 
100
 
107
	// utilisée uniquement par Observation.php
-
 
108
	static function reformateObservationSimpleIndex($obs, $url_pattern = '') {
-
 
109
		// XXX: cf Observation.php::consulter(), nous pourriouns ici
101
	static function reformateObservationSimpleIndex($obs, $url_pattern = '') {
110
		// conserver les valeurs vides (pour les phptests notamment, ou non)
102
		$obs = array_map('array_filter', $obs);
111
		$obs = array_map('array_filter', $obs);
103
		$obs_merged = array();
112
		$obs_merged = array();
104
		foreach($obs as $o) {
113
		foreach($obs as $o) {
105
			$id = $o['id_observation'];
114
			$id = $o['id_observation'];
Line 478... Line 487...
478
					 __FILE__ . ':' . __LINE__);
487
					 __FILE__ . ':' . __LINE__);
479
		$propositions = $this->bdd->recupererTous($r);
488
		$propositions = $this->bdd->recupererTous($r);
480
		if(!$propositions) return;
489
		if(!$propositions) return;
481
		foreach ($propositions as $proposition) {
490
		foreach ($propositions as $proposition) {
482
			$idObs = $proposition['ce_observation'];
491
			$idObs = $proposition['ce_observation'];
-
 
492
			$idComment = $proposition['id_commentaire'];
-
 
493
			$comment = $this->formaterDetermination($idComment, $proposition);
483
			$observations['"' . $idObs . '"']['commentaires'][] = $this->formaterDeterminations($proposition);
494
			if($comment) $observations['"' . $idObs . '"']['commentaires'][$idComment] = $comment;
-
 
495
				
484
		}
496
		}
485
	}
497
	}
Line -... Line 498...
-
 
498
 
-
 
499
	private function formaterDetermination($commentId, $proposition) {
486
 
500
		if(!$proposition) return NULL;
-
 
501
 
-
 
502
		$proposition_formatee = array('nb_commentaires' => '0');
487
	/**
503
		foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
488
	 * Charger les votes sur les déterminations
504
			if (isset($proposition[$nomOriginal])) {
489
	 * @param Array $observations le tableau des observations à mettre à jour
505
				$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
-
 
506
			}
-
 
507
		}
490
	* */
508
 
491
	private function chargerVotes($ids_proposition, &$propositions) {
509
		// Charger les votes sur les déterminations
492
		$resultatsVotes = $this->bdd->recupererTous(sprintf('SELECT * FROM del_commentaire_vote WHERE ce_proposition IN (%s)',
510
		$resultatsVotes = $this->bdd->recupererTous(
-
 
511
			sprintf('SELECT * FROM del_commentaire_vote WHERE ce_proposition = %d', $commentId));
493
															implode(',', $ids_proposition)));
512
		
494
		foreach ($resultatsVotes as $vote) {
513
		foreach ($resultatsVotes as $vote) {
495
			$propositions[$vote['ce_proposition']]['votes'][$vote['id_vote']] = $this->formaterVote($vote);
514
			$proposition_formatee['votes'][$vote['id_vote']] = $this->formaterVote($vote);
496
		}
-
 
Line 497... Line 515...
497
	}
515
		}
-
 
516
 
498
 
517
 
499
	/**
-
 
500
	 * Charger le nombre de commentaires (sans détermination) associé à l'observation
-
 
501
	 * @param Array $observations le tableau des observatins à mettre à jour
518
		// chargerNombreCommentaire()
502
	 * */
519
		// Charger le nombre de commentaires (sans détermination) associé à l'observation
503
	private function chargerNombreCommentaire($ids_proposition, &$propositions) {
520
		$listeCommentaires = $this->bdd->recupererTous(sprintf(
504
		$listeCommentaires = $this->bdd->recupererTous(sprintf('SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '.
521
			'SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '.
505
															   'FROM del_commentaire WHERE ce_proposition IN (%s) GROUP BY ce_proposition',
522
			'FROM del_commentaire WHERE ce_proposition = %d GROUP BY ce_proposition -- %s',
506
															   implode(',', $ids_proposition)));
523
			$commentId, __FILE__ . ':' . __LINE__));
-
 
524
		foreach ($listeCommentaires as $ligneProposition) {
-
 
525
			// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
-
 
526
			if($ligneProposition['ce_commentaire_parent']) {
-
 
527
				// TODO/debug: id_commentaire_parent != $commentId ??
-
 
528
				// reprendre la "logique" du code... moins de boucles, moins de requêtes, ...
-
 
529
				if($ligneProposition['ce_commentaire_parent'] != $commentId) {
507
		foreach ($listeCommentaires as $ligneProposition) {
530
					// restore_error_handler();
-
 
531
					error_log(sprintf("possible error: nb_commentaires = %s: comment = %d, parent = %d, %s",
508
			// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
532
									  $ligneProposition['nb'], $commentId, $ligneProposition['ce_commentaire_parent'], __FILE__));
509
			if($ligneProposition['ce_commentaire_parent'] != null && $ligneProposition['ce_commentaire_parent'] != 0) {
533
				}
510
				$propositions[$ligneProposition['ce_commentaire_parent']]['nb_commentaires'] = $ligneProposition['nb'];
534
				$proposition_formatee['nb_commentaires'] = $ligneProposition['nb'];
511
			} else {
535
			} else {
512
				$propositions[$ligneProposition['ce_proposition']]['observation']['nb_commentaires'] = $ligneProposition['nb'];
536
				$proposition_formatee['observation']['nb_commentaires'] = $ligneProposition['nb'];
513
			}
-
 
514
		}
-
 
515
	}
-
 
516
 
-
 
517
	/**
-
 
518
	 *
-
 
519
	 * Formate une liste de proposition en fonction du fichier de configuration
-
 
520
	 */
-
 
521
	private function formaterDeterminations($proposition) {
-
 
522
		if(!$proposition) return array();
-
 
Line 523... Line -...
523
		$propositions_format = array();
-
 
524
		$ids_proposition[] = $proposition['id_commentaire'];
-
 
525
 
-
 
526
		$proposition_formatee = array('nb_commentaires' => '0');
-
 
527
		foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
-
 
528
			if (isset($proposition[$nomOriginal])) {
-
 
529
				$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
-
 
530
			}
-
 
531
		}
-
 
532
		$propositions_format[$proposition['id_commentaire']] = $proposition_formatee;
-
 
533
		// modifie $propositions_format
-
 
534
		$this->chargerVotes($ids_proposition, $propositions_format);
537
			}
535
		// modifie $propositions_format
538
		}
Line 536... Line 539...
536
		$this->chargerNombreCommentaire($ids_proposition, $propositions_format);
539
 
537
		return $propositions_format;
540
		return $proposition_formatee;
538
	}
541
	}