Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1855 Rev 1863
Line 30... Line 30...
30
	private $filtrage;
30
	private $filtrage;
31
	private $sql;
31
	private $sql;
32
	private $navigation;
32
	private $navigation;
33
	private $paramsFiltres = array();
33
	private $paramsFiltres = array();
34
	private $mappings = array();
34
	private $mappings = array();
-
 
35
	private $idsImagesOrdonnees = array();
-
 
36
	private $infosImagesOrdonnees = array();
Line 35... Line 37...
35
 
37
 
36
	public function __construct(Conteneur $conteneur) {
38
	public function __construct(Conteneur $conteneur) {
37
		$this->conteneur = $conteneur;
39
		$this->conteneur = $conteneur;
38
		$this->bdd = $this->conteneur->getBdd();
40
		$this->bdd = $this->conteneur->getBdd();
Line 49... Line 51...
49
		$this->sql->setParametres($this->paramsFiltres);
51
		$this->sql->setParametres($this->paramsFiltres);
50
		$this->sql->ajouterContraintes();
52
		$this->sql->ajouterContraintes();
51
		$this->sql->ajouterConstrainteAppliImg();
53
		$this->sql->ajouterConstrainteAppliImg();
52
		$this->sql->definirOrdreSqlAppliImg();
54
		$this->sql->definirOrdreSqlAppliImg();
Line 53... Line 55...
53
 
55
 
54
		$idImgs = $this->getIdImages();
56
		$this->idsImagesOrdonnees = $this->getIdImages();
Line 55... Line 57...
55
		$this->navigation->setTotal($this->sql->getTotalLignesTrouvees());
57
		$this->navigation->setTotal($this->sql->getTotalLignesTrouvees());
56
 
58
 
57
		// Ce n'est pas la peine de continuer s'il n'y a pas eu de résultats
59
		// Ce n'est pas la peine de continuer s'il n'y a pas eu de résultats
58
		$resultat = new ResultatService();
60
		$resultat = new ResultatService();
59
		$resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => array());
61
		$resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => array());
60
		if (count($idImgs) > 0) {
62
		if (count($this->idsImagesOrdonnees) > 0) {
Line 61... Line 63...
61
			$liaisons = $this->getInfosImages($idImgs);
63
			$this->infosImagesOrdonnees = $this->getInfosImages();
62
			list($images, $images_indexe_par_id_image) = $this->reformaterImagesDoubleIndex($liaisons);
64
			$images = $this->reformaterImagesDoubleIndex();
63
 
65
 
64
			// Chargement des votes pour ces images et pour *tous* les protocoles
66
			// Chargement des votes pour ces images et pour *tous* les protocoles
65
			$votes = $this->sql->getVotesDesImages($idImgs);
67
			$votes = $this->sql->getVotesDesImages($this->idsImagesOrdonnees);
66
			if ($votes) {
68
			if ($votes) {
Line 67... Line 69...
67
				// ATTENTION : $images_indexe_par_id_image est lié par référence à $images !
69
				// ATTENTION : $images est récupéré par référence !
68
				$this->sql->ajouterInfosVotesProtocoles($votes, $images_indexe_par_id_image);
70
				$this->sql->ajouterInfosVotesProtocoles($votes, $images);
69
			}
71
			}
70
 
72
 
71
			$resultat->corps = array(
73
			$resultat->corps = array(
72
				'entete' => $this->navigation->getEntete(),
74
				'entete' => $this->navigation->getEntete(),
Line 73... Line 75...
73
				'resultats' => $images);
75
				'resultats' => array_values($images));
Line 82... Line 84...
82
			'WHERE '.$this->sql->getWhere().
84
			'WHERE '.$this->sql->getWhere().
83
			$this->sql->getGroupBy().
85
			$this->sql->getGroupBy().
84
			$this->sql->getOrderBy().
86
			$this->sql->getOrderBy().
85
			$this->sql->getLimit().
87
			$this->sql->getLimit().
86
			' -- '.__FILE__.':'.__LINE__;
88
			' -- '.__FILE__.':'.__LINE__;
87
 
-
 
-
 
89
		//Debug::printr($requete);
88
		$resultats = $this->bdd->recupererTous($requete);
90
		$resultats = $this->bdd->recupererTous($requete);
89
		$idImgs = array();
91
		$idImgs = array();
90
		if ($resultats !== false ) {
92
		if ($resultats !== false ) {
91
			foreach ($resultats as $resultat) {
93
			foreach ($resultats as $resultat) {
92
				$idImgs[] = $resultat['id_image'];
94
				$idImgs[] = $resultat['id_image'];
93
			}
95
			}
94
		}
96
		}
95
		return $idImgs;
97
		return $idImgs;
96
	}
98
	}
Line 97... Line 99...
97
 
99
 
98
	private function getInfosImages($idImgs) {
100
	private function getInfosImages() {
99
		$obsChamps = $this->sql->getAliasDesChamps($this->mappings['observations']);
101
		$obsChamps = $this->sql->getAliasDesChamps($this->mappings['observations']);
100
		$imgChamps = $this->sql->getAliasDesChamps($this->mappings['images']);
102
		$imgChamps = $this->sql->getAliasDesChamps($this->mappings['images']);
Line 101... Line 103...
101
		$idImgsConcat = implode(',', $idImgs);
103
		$idImgsConcat = implode(',', $this->idsImagesOrdonnees);
102
 
104
 
103
		$requete = "SELECT CONCAT(id_image, '-', id_observation) AS jsonindex, $obsChamps, $imgChamps ".
105
		$requete = "SELECT $obsChamps, $imgChamps ".
104
			'FROM v_del_image '.
-
 
105
			"WHERE id_image IN ($idImgsConcat) ".
106
			'FROM v_del_image '.
106
			"ORDER BY FIELD(id_image, $idImgsConcat) ". // important car MySQL ne conserve par l'ordre du IN()
-
 
107
			'-- '.__FILE__.':'.__LINE__;
107
			"WHERE id_image IN ($idImgsConcat) ".
108
 
108
			'-- '.__FILE__.':'.__LINE__;
Line 109... Line 109...
109
		return $this->bdd->recupererTous($requete);
109
		return $this->bdd->recupererTous($requete);
110
	}
110
	}
111
 
111
 
112
	// cf Observation::reformateObservationSimpleIndex() et ListeObservations::reformateObservation()
112
	// cf Observation::reformateObservationSimpleIndex() et ListeObservations::reformateObservation()
113
	// (trop de variétés de formatage, à unifier côté client pour unifier côté backend ...)
113
	// (trop de variétés de formatage, à unifier côté client pour unifier côté backend ...)
114
	private function reformaterImagesDoubleIndex($imagesInfos) {
114
	private function reformaterImagesDoubleIndex() {
115
		$urlImgTpl = $this->conteneur->getParametre('cel_img_url_tpl');
115
		$urlImgTpl = $this->conteneur->getParametre('cel_img_url_tpl');
116
		$imageFormat = isset($this->paramsFiltres['format']) ? $this->paramsFiltres['format'] : 'XL';
-
 
117
		$obs_merged = $obs_keyed_by_id_image = array();
116
		$imageFormat = isset($this->paramsFiltres['format']) ? $this->paramsFiltres['format'] : 'XL';
118
		foreach ($imagesInfos as $infos) {
117
		$obs_merged = array_flip($this->idsImagesOrdonnees);
119
			// ceci nous complique la tâche pour le reste du processing...
118
		foreach ($this->infosImagesOrdonnees as $infos) {
120
			$id = $infos['jsonindex'];
119
			$id = $infos['id_image'];
121
			// ainsi nous utilisons deux tableaux: le final, indexé par couple d'id(image-obs)
120
			// ainsi nous utilisons deux tableaux: le final, indexé par couple d'id(image-obs)
122
			// et celui indexé par simple id_image qui est fort utile pour mapVotesToImages()
121
			// et celui indexé par simple id_image qui est fort utile pour mapVotesToImages()
123
			// mais tout deux partage leur référence à "protocole"
122
			// mais tout deux partage leur référence à "protocole"
124
			$image = array(
123
			$image = array(
125
				'id_image' => $infos['id_image'],
124
				'id_image' => $id,
-
 
125
				'binaire.href' => sprintf($urlImgTpl, $infos['id_image'], $imageFormat),
Line 126... Line -...
126
				'binaire.href' => sprintf($urlImgTpl, $infos['id_image'], $imageFormat),
-
 
127
				'mots_cles_texte' => @$infos['mots_cles_texte_img'], // @, peut avoir été filtré par array_map() ci-dessus
-
 
128
			);
126
				'mots_cles_texte' => isset($infos['mots_cles_texte_img']) ? $infos['mots_cles_texte_img'] : null,
129
 
-
 
130
			unset($infos['id_image'], $infos['mots_cles_texte_img'], $infos['jsonindex']);
127
			);
131
			if (!isset($obs_merged[$id])) {
128
			unset($infos['id_image'], $infos['mots_cles_texte_img']);
132
				$obs_merged[$id] = $image;
-
 
133
			}
-
 
134
			$obs_merged[$id]['observation'] = $infos;
129
 
135
			$obs_merged[$id]['protocoles_votes'] = array();
-
 
136
 
130
			$obs_merged[$id] = $image;
137
			$obs_keyed_by_id_image[$image['id_image']]['protocoles_votes'] =& $obs_merged[$id]['protocoles_votes'];
131
			$obs_merged[$id]['observation'] = $infos;
Line 138... Line 132...
138
		}
132
			$obs_merged[$id]['protocoles_votes'] = array();
139
 
133
		}
140
		return array($obs_merged, $obs_keyed_by_id_image);
134
		return $obs_merged;