Subversion Repositories eFlore/Applications.del

Rev

Rev 1352 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1352 Rev 1353
Line 84... Line 84...
84
		if ($this->requeteSansParametres($ressources, $parametres)) {
84
		if ($this->requeteSansParametres($ressources, $parametres)) {
85
			$liaisons = $this->chargerLiaisonsSimple();
85
			$liaisons = $this->chargerLiaisonsSimple();
86
			$observations = $this->chargerObservations($liaisons);
86
			$observations = $this->chargerObservations($liaisons);
87
			$total = $this->compterObservations();
87
			$total = $this->compterObservations();
88
			$this->navigation->setTotal($total);
88
			$this->navigation->setTotal($total);
-
 
89
			// modifie $observations
89
			$observations = $this->chargerImages($observations);
90
			$this->chargerImages($observations);
-
 
91
			// modifie $observations
90
			$observations = $this->chargerDeterminations($observations);
92
			$this->chargerDeterminations($observations);
Line 91... Line 93...
91
 
93
 
92
			//Compute
94
			//Compute
93
			$resultats = array();
95
			$resultats = array();
94
			foreach ($observations as $id => $observation) {
96
			foreach ($observations as $id => $observation) {
Line 101... Line 103...
101
		} else {
103
		} else {
102
			$liaisons = $this->chargerLiaisons();
104
			$liaisons = $this->chargerLiaisons();
103
			$total = $this->compterObservations();
105
			$total = $this->compterObservations();
104
			$this->navigation->setTotal($total);
106
			$this->navigation->setTotal($total);
105
			$observations = $this->chargerObservations($liaisons);
107
			$observations = $this->chargerObservations($liaisons);
-
 
108
			// modifie $observations
106
			$observations = $this->chargerImages($observations);
109
			$this->chargerImages($observations);
-
 
110
			// modifie $observations
107
			$observations = $this->chargerDeterminations($observations);
111
			$this->chargerDeterminations($observations);
Line 108... Line 112...
108
 
112
 
109
			// Mettre en forme le résultat et l'envoyer pour affichage
113
			// Mettre en forme le résultat et l'envoyer pour affichage
110
			$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
114
			$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
111
		}
115
		}
Line 469... Line 473...
469
	--------------------------------------------------------------------------------*/
473
	--------------------------------------------------------------------------------*/
470
	/**
474
	/**
471
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
475
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
472
	* */
476
	* */
473
	private function chargerLiaisons() {
477
	private function chargerLiaisons() {
-
 
478
		$requeteLiaisons = sprintf(
474
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS '.
479
			'SELECT SQL_CALC_FOUND_ROWS '.
475
			'	dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
480
			' dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
476
			'	station, milieu, date_observation, dob.mots_cles_texte, date_transmission, di.id_image, '.
481
			' station, milieu, date_observation, dob.mots_cles_texte, date_transmission, di.id_image, '.
477
			'	dob.ce_utilisateur, prenom, nom, courriel, '.
482
			' dob.ce_utilisateur, prenom, nom, courriel, '.
478
			'	dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
483
			' dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
479
			'	nom_original, dob.commentaire AS dob_commentaire, '.
484
			' nom_original, dob.commentaire AS dob_commentaire, '.
480
			'	dob.nt, dob.nom_sel_nn '.
485
			' dob.nt, dob.nom_sel_nn '.
481
			'FROM del_observation AS dob '.
486
			'FROM del_observation AS dob '.
482
			'	LEFT JOIN del_utilisateur AS du '.
487
			' LEFT JOIN del_utilisateur AS du '.
483
			'		ON du.id_utilisateur = dob.ce_utilisateur '.
488
			'  ON du.id_utilisateur = dob.ce_utilisateur '.
484
			'	LEFT JOIN del_obs_image AS doi '.
489
			' LEFT JOIN del_obs_image AS doi '.
485
			'		ON doi.id_observation = dob.id_observation '.
490
			'  ON doi.id_observation = dob.id_observation '.
486
			'	LEFT JOIN del_image AS di '.
491
			' LEFT JOIN del_image AS di '.
487
			'		ON di.id_image = doi.id_image '.
492
			'  ON di.id_image = doi.id_image '.
488
			$this->chargerClauseWhere().
493
			'%s'.
489
			' GROUP BY doi.id_observation'.
494
			' GROUP BY doi.id_observation'.
-
 
495
			' ORDER BY %s %s %s -- %s',
-
 
496
			$this->chargerClauseWhere(),
-
 
497
			$this->tri,
490
			' ORDER BY '.$this->tri.' '.$this->directionTri.' '.
498
			$this->directionTri,
491
			$this->gestionBdd->getLimitSql();
499
			$this->gestionBdd->getLimitSql(),
-
 
500
			__FILE__ . ':' . __LINE__);
Line 492... Line 501...
492
 
501
 
493
		return $this->bdd->recupererTous($requeteLiaisons);
502
		return $this->bdd->recupererTous($requeteLiaisons);
Line 494... Line 503...
494
	}
503
	}
-
 
504
 
495
 
505
	private function chargerLiaisonsSimple() {
496
	private function chargerLiaisonsSimple() {
506
		$requeteObs = sprintf(
497
		$requeteObs = 'SELECT SQL_CALC_FOUND_ROWS '.
507
			'SELECT SQL_CALC_FOUND_ROWS '.
498
			'	dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
508
			' dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
499
			'	station, milieu, date_observation, dob.mots_cles_texte, date_transmission, '.
509
			' station, milieu, date_observation, dob.mots_cles_texte, date_transmission, '.
500
			'	dob.ce_utilisateur, prenom, nom, courriel, '.
510
			' dob.ce_utilisateur, prenom, nom, courriel, '.
501
			'	dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
511
			' dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
502
			'	dob.commentaire as dob_commentaire, '.
512
			' dob.commentaire as dob_commentaire, '.
503
			'	dob.nt, dob.nom_sel_nn '.
513
			' dob.nt, dob.nom_sel_nn '.
504
			'FROM del_observation AS dob '.
514
			'FROM del_observation AS dob '.
-
 
515
			' LEFT JOIN del_utilisateur AS du ON dob.ce_utilisateur = du.id_utilisateur '.
505
			'	LEFT JOIN del_utilisateur AS du
516
			' ORDER BY %s %s %s -- %s',
506
					ON dob.ce_utilisateur = du.id_utilisateur '.
517
			$this->tri,
-
 
518
			$this->directionTri,
507
			' ORDER BY '.$this->tri.' '.$this->directionTri.' '.
519
			$this->gestionBdd->getLimitSql(),
Line 508... Line 520...
508
			$this->gestionBdd->getLimitSql();
520
			__FILE__ . ':' . __LINE__);
509
		$liaisons = $this->bdd->recupererTous($requeteObs);
521
		$liaisons = $this->bdd->recupererTous($requeteObs);
Line 546... Line 558...
546
 
558
 
547
	/**
559
	/**
548
	 * Sélectionner toutes les images de chaque observation
560
	 * Sélectionner toutes les images de chaque observation
549
	 * @param array $observations la liste des observations
561
	 * @param array $observations la liste des observations
550
	 * */
562
	 * */
551
	private function chargerImages($observations) {
563
	private function chargerImages(&$observations) {
552
		$idObs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'),
564
		$idObs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'),
553
									$observations));
565
									$observations));
554
		$r = sprintf('SELECT id_observation, doi.id_image, date_prise_de_vue AS date, hauteur , largeur ' .
566
		$r = sprintf('SELECT id_observation, doi.id_image, date_prise_de_vue AS date, hauteur , largeur ' .
555
					 ' FROM del_obs_image AS doi ' .
567
					 ' FROM del_obs_image AS doi ' .
556
					 ' INNER JOIN del_image AS di ON doi.id_image = di.id_image ' .
568
					 ' INNER JOIN del_image AS di ON doi.id_image = di.id_image ' .
557
					 ' WHERE doi.id_observation IN (%s)',
569
					 ' WHERE doi.id_observation IN (%s) -- %s',
-
 
570
					 implode(',',$idObs),
558
					 implode(',',$idObs));
571
					 __FILE__ . ':' . __LINE__);
-
 
572
		$images = $this->bdd->recupererTous($r);
559
		$images = $this->bdd->recupererTous($r);
573
		if(!$images) return;
560
		foreach ($images as $image) {
574
		foreach ($images as $image) {
561
			$idObs = $image['id_observation'];
575
			$idObs = $image['id_observation'];
562
			// rapide formatage de l'image puisque le SELECT à déjà fait le gros du travail
576
			// rapide formatage de l'image puisque le SELECT à déjà fait le gros du travail
563
			unset($image['id_observation']);
577
			unset($image['id_observation']);
564
			$image['binaire.href'] = $this->formaterLienImage($image['id_image']);
578
			$image['binaire.href'] = $this->formaterLienImage($image['id_image']);
565
			$observations['"' . $idObs . '"']['images'][] = $image;
579
			$observations['"' . $idObs . '"']['images'][] = $image;
566
		}
-
 
567
		return $observations;
580
		}
Line 568... Line 581...
568
	}
581
	}
569
 
582
 
570
	/**
583
	/**
571
	* Récupérer toutes les déterminations et le nombre de commentaire au total
584
	* Récupérer toutes les déterminations et le nombre de commentaire au total
572
	* @param array $observations la liste des observations à mettre à jour
585
	* @param array $observations la liste des observations à mettre à jour
573
	* */
586
	* */
574
	private function chargerDeterminations($observations) {
587
	private function chargerDeterminations(&$observations) {
-
 
588
		$idObs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'),
575
		foreach ($observations as $id => $observation) {
589
									$observations));
576
			$idObs = $observation['id_observation'];
590
		$r = sprintf('SELECT * FROM del_commentaire AS dc WHERE dc.nom_sel IS NOT NULL AND ce_observation IN (%s) -- %s',
-
 
591
					 implode(',',$idObs),
577
			$requetePropositions = 'SELECT * '.
592
					 __FILE__ . ':' . __LINE__);
578
				'FROM del_commentaire AS dc '.
593
		$propositions = $this->bdd->recupererTous($r);
579
				'WHERE dc.nom_sel IS NOT NULL '.
594
		if(!$propositions) return;
580
				"	AND ce_observation = $idObs ";
595
		foreach ($propositions as $proposition) {
581
			$propositions = $this->bdd->recupererTous($requetePropositions);
596
			$idObs = $proposition['ce_observation'];
582
			$observations[$id]['commentaires'] = $this->formaterDeterminations($propositions);
-
 
583
		}
597
			$observations['"' . $idObs . '"']['commentaires'][] = $this->formaterDeterminations($proposition);
Line 584... Line 598...
584
		return $observations;
598
		}
585
	}
599
	}
586
 
600
 
587
	/**
601
	/**
588
	 * Charger les votes sur les déterminations
602
	 * Charger les votes sur les déterminations
589
	 * @param Array $observations le tableau des observations à mettre à jour
603
	 * @param Array $observations le tableau des observations à mettre à jour
590
	* */
-
 
591
	private function chargerVotes($ids_proposition, $propositions) {
-
 
592
		$listePropositions = implode(', ', $ids_proposition);
604
	* */
593
		$requeteVotes = 'SELECT * '.
-
 
594
			'FROM del_commentaire_vote '.
-
 
595
			"WHERE ce_proposition IN ($listePropositions)";
605
	private function chargerVotes($ids_proposition, &$propositions) {
596
 
606
		$resultatsVotes = $this->bdd->recupererTous(sprintf('SELECT * FROM del_commentaire_vote WHERE ce_proposition IN (%s)',
597
		$resultatsVotes = $this->bdd->recupererTous($requeteVotes);
607
															implode(',', $ids_proposition)));
598
		foreach ($resultatsVotes as $vote) {
-
 
599
			$propositions[$vote['ce_proposition']]['votes'][$vote['id_vote']] = $this->formaterVote($vote);
608
		foreach ($resultatsVotes as $vote) {
Line 600... Line 609...
600
		}
609
			$propositions[$vote['ce_proposition']]['votes'][$vote['id_vote']] = $this->formaterVote($vote);
601
		return $propositions;
610
		}
602
	}
611
	}
603
 
612
 
604
	/**
613
	/**
605
	 * Charger le nombre de commentaires (sans détermination) associé à l'observation
-
 
606
	 * @param Array $observations le tableau des observatins à mettre à jour
614
	 * Charger le nombre de commentaires (sans détermination) associé à l'observation
607
	 * */
-
 
608
	private function chargerNombreCommentaire($ids_proposition, $propositions) {
615
	 * @param Array $observations le tableau des observatins à mettre à jour
609
		$listePropositions = implode(', ', $ids_proposition);
616
	 * */
610
		$requeteNbCommentaires = 'SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '.
-
 
611
			'FROM del_commentaire '.
-
 
612
			"WHERE ce_proposition IN ($listePropositions) ".
-
 
613
			'GROUP BY ce_proposition ';
617
	private function chargerNombreCommentaire($ids_proposition, &$propositions) {
614
 
618
		$listeCommentaires = $this->bdd->recupererTous(sprintf('SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '.
615
		$listeCommentaires = $this->bdd->recupererTous($requeteNbCommentaires);
619
															   'FROM del_commentaire WHERE ce_proposition IN (%s) GROUP BY ce_proposition',
616
 
620
															   implode(',', $ids_proposition)));
617
		foreach ($listeCommentaires as $ligneProposition) {
621
		foreach ($listeCommentaires as $ligneProposition) {
618
			// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
622
			// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
619
			if($ligneProposition['ce_commentaire_parent'] != null && $ligneProposition['ce_commentaire_parent'] != 0) {
623
			if($ligneProposition['ce_commentaire_parent'] != null && $ligneProposition['ce_commentaire_parent'] != 0) {
620
				$propositions[$ligneProposition['ce_commentaire_parent']]['nb_commentaires'] = $ligneProposition['nb'];
624
				$propositions[$ligneProposition['ce_commentaire_parent']]['nb_commentaires'] = $ligneProposition['nb'];
621
			} else {
-
 
622
				$propositions[$ligneProposition['ce_proposition']]['observation']['nb_commentaires'] = $ligneProposition['nb'];
625
			} else {
Line 623... Line 626...
623
			}
626
				$propositions[$ligneProposition['ce_proposition']]['observation']['nb_commentaires'] = $ligneProposition['nb'];
624
		}
627
			}
625
		return $propositions;
628
		}
Line 656... Line 659...
656
	/**
659
	/**
657
	 *
660
	 *
658
	 * Formate une liste de proposition en fonction du fichier de configuration
661
	 * Formate une liste de proposition en fonction du fichier de configuration
659
	 */
662
	 */
660
	private function formaterDeterminations($listePropositions) {
663
	private function formaterDeterminations($listePropositions) {
-
 
664
		if(!$listePropositions) return array();
661
		$propositions_format = array();
665
		$propositions_format = array();
662
		if ($listePropositions != array()) {
-
 
-
 
666
 
663
			foreach ($listePropositions as $id => $proposition) {
667
		foreach ($listePropositions as $id => $proposition) {
664
				$ids_proposition[] = $proposition['id_commentaire'];
668
			$ids_proposition[] = $proposition['id_commentaire'];
665
 
669
 
666
				$proposition_formatee = array('nb_commentaires' => '0');
670
			$proposition_formatee = array('nb_commentaires' => '0');
667
				foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
671
			foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
668
					if (isset($proposition[$nomOriginal])) {
672
				if (isset($proposition[$nomOriginal])) {
669
						$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
673
					$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
670
					}
-
 
671
				}
674
				}
672
				$propositions_format[$proposition['id_commentaire']] = $proposition_formatee;
-
 
673
			}
675
			}
674
			$propositions_format = $this->chargerVotes($ids_proposition, $propositions_format);
676
			$propositions_format[$proposition['id_commentaire']] = $proposition_formatee;
675
			$propositions_format = $this->chargerNombreCommentaire($ids_proposition, $propositions_format);
-
 
676
		}
677
		}
-
 
678
		// modifie $propositions_format
-
 
679
		$this->chargerVotes($ids_proposition, $propositions_format);
-
 
680
		// modifie $propositions_format
-
 
681
		$this->chargerNombreCommentaire($ids_proposition, $propositions_format);
677
		return $propositions_format;
682
		return $propositions_format;
678
	}
683
	}
Line 679... Line 684...
679
 
684
 
680
	/**
685
	/**