Subversion Repositories eFlore/Applications.del

Rev

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

Rev 798 Rev 800
Line 23... Line 23...
23
	private $masque;
23
	private $masque;
24
	private $gestionBdd;
24
	private $gestionBdd;
25
	private $bdd;
25
	private $bdd;
26
	private $parametres = array();
26
	private $parametres = array();
27
	private $ressources = array();
27
	private $ressources = array();
-
 
28
	private $tri = 'date_transmission';
-
 
29
	private $directionTri = 'desc';
Line 28... Line 30...
28
	
30
	
29
	public function __construct(Conteneur $conteneur = null) {
31
	public function __construct(Conteneur $conteneur = null) {
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
32
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
31
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
33
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
Line 49... Line 51...
49
		
51
		
50
		// Gestion des configuration du script
52
		// Gestion des configuration du script
51
		$this->configurer();
53
		$this->configurer();
Line -... Line 54...
-
 
54
		$this->verifierConfiguration();
-
 
55
		
-
 
56
		$this->verifierParametresTri();
52
		$this->verifierConfiguration();
57
		$this->initialiserTri();
53
		
58
		
54
		// Lancement du service
59
		// Lancement du service
55
		$liaisons = $this->chargerLiaisons();
60
		$liaisons = $this->chargerLiaisons();
56
		$total = $this->compterImages();
61
		$total = $this->compterImages();
Line 66... Line 71...
66
	
71
	
67
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
72
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
68
		$this->ressources = $ressources;
73
		$this->ressources = $ressources;
69
		$this->parametres = $parametres;
74
		$this->parametres = $parametres;
-
 
75
	}
-
 
76
	
-
 
77
	private function verifierParametresTri() {
-
 
78
		
-
 
79
		$erreurs = array();
-
 
80
		$tris_possibles = $this->conteneur->getParametre('tris_possibles');
-
 
81
		$tris_possibles_tableau = explode(',', $tris_possibles);
-
 
82
		if(isset($this->parametres['tri']) && !in_array($this->parametres['tri'], $tris_possibles_tableau)) {
-
 
83
			$erreurs[] = '- le type de tri demandé est incorrect, les valeurs possibles sont '.$tris_possibles.' ;';
-
 
84
		}
-
 
85
		
-
 
86
		$directions_tri = array('asc', 'desc');
-
 
87
		if(isset($this->parametres['ordre']) && !in_array($this->parametres['ordre'], $directions_tri)) {
-
 
88
			$erreurs[] = '- la direction du tri demandé est incorrecte, les valeurs supportées sont asc ou desc ;';
-
 
89
		}
-
 
90
		 
-
 
91
		if (!empty($erreurs)) {
-
 
92
			$e = 'Erreur lors de l\'analyse des parametres du tri : '."\n";
-
 
93
			$e .= implode("\n", $erreurs);
-
 
94
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
-
 
95
		}
-
 
96
	}
-
 
97
	
-
 
98
	private function initialiserTri() {
-
 
99
		$this->tri = isset($this->parametres['tri']) ? $this->parametres['tri'] : $this->tri;
-
 
100
		$this->directionTri = isset($this->parametres['ordre']) ? $this->parametres['ordre'] : $this->directionTri;
70
	}
101
	}
71
	/*-------------------------------------------------------------------------------
102
	/*-------------------------------------------------------------------------------
72
	 							CONFIGURATION DU SERVICE
103
	 							CONFIGURATION DU SERVICE
73
	 --------------------------------------------------------------------------------*/
104
	 --------------------------------------------------------------------------------*/
74
	/**
105
	/**
Line 121... Line 152...
121
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
152
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
122
				}				
153
				}				
123
			}
154
			}
124
		}
155
		}
Line -... Line 156...
-
 
156
		
-
 
157
		$tris_possibles = $this->conteneur->getParametre('tris_possibles');
-
 
158
		if (empty($tris_possibles)) {
-
 
159
			$erreurs[] = '- le fichier de configuration ne contient pas le parametre tris_possibles ou celui-ci est vide ;';
-
 
160
		}
125
		
161
		
126
		if (!empty($erreurs)) {
162
		if (!empty($erreurs)) {
127
			$e = 'Erreur lors de la configuration : '."\n";
163
			$e = 'Erreur lors de la configuration : '."\n";
128
			$e .= implode("\n", $erreurs);
164
			$e .= implode("\n", $erreurs);
129
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
165
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
Line 146... Line 182...
146
	
182
	
147
	/**
183
	/**
148
	* Charger la clause WHERE en fonction des paramètres de masque
184
	* Charger la clause WHERE en fonction des paramètres de masque
149
	* */
185
	* */
150
	private function chargerClauseWhere() {
-
 
151
		// TODO: factoriser cette fonction qui est quasiment identique dans liste image et dans liste observation
-
 
152
		// faire une classe mère, une classe utilitaire ?
186
	private function chargerClauseWhere() {
153
		$where = array();
187
		$where = array();
154
		$tableauMasque = $this->masque->getMasque();
188
		$tableauMasque = $this->masque->getMasque();
155
		if (!empty($tableauMasque)) {
189
		if (!empty($tableauMasque)) {
156
			foreach($tableauMasque as $idMasque => $valeurMasque) {
190
			foreach($tableauMasque as $idMasque => $valeurMasque) {
Line 307... Line 341...
307
		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
341
		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
308
		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '.
342
		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '.
309
		           ')';
343
		           ')';
310
		return $masque;
344
		return $masque;
311
	}
345
	}
312
	
346
		
313
	private function creerFiltreMotsCles($valeurMasque) {
347
	private function creerFiltreMotsCles($valeurMasque) {
-
 
348
		
-
 
349
		$mots_cles = explode(' ', $valeurMasque);
-
 
350
		$requeteMotsClesImg = '';
-
 
351
		$requeteMotsClesObs = '';
-
 
352
		//TODO voir s'il existe un moyen plus simple que le foreach + rtrim
-
 
353
		// comme avec implode
-
 
354
		foreach($mots_cles as $mot_cle) {
314
		$masque = '(di.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').' OR '.
355
			$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
-
 
356
			$requeteMotsClesImg .= 'di.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
315
		                 ' dob.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').') ';  
357
			$requeteMotsClesObs .= 'dob.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
-
 
358
		}
-
 
359
		$requeteMotsClesImg = rtrim($requeteMotsClesImg, ' AND ');
-
 
360
		$requeteMotsClesObs = rtrim($requeteMotsClesObs, ' AND ');
-
 
361
		
-
 
362
		$masque = '('.
-
 
363
		          	'('.$requeteMotsClesImg.') OR '.
-
 
364
		          	'('.$requeteMotsClesObs.') '.
-
 
365
				  ') ';
-
 
366
		
316
		return $masque;                                                  			
367
		return $masque;                                                  			
317
	}
368
	}
Line 318... Line 369...
318
	
369
	
319
	/*-------------------------------------------------------------------------------
370
	/*-------------------------------------------------------------------------------
Line 322... Line 373...
322
	/**
373
	/**
323
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
374
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
324
	* */
375
	* */
325
	private function chargerLiaisons() {
376
	private function chargerLiaisons() {
Line 326... Line 377...
326
	
377
	
327
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS * '.
378
		$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * '.
328
						   'FROM '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
379
						   'FROM '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
329
						   'INNER JOIN del_image di '.
380
						   'INNER JOIN del_image di '.
330
						   'ON doi.id_image = di.id_image '.
381
						   'ON doi.id_image = di.id_image '.
331
						   'INNER JOIN del_observation dob '.
382
						   'INNER JOIN del_observation dob '.
332
						   'ON doi.id_observation = dob.id_observation '.
383
						   'ON doi.id_observation = dob.id_observation '.
333
						   'INNER JOIN del_utilisateur du '.
384
						   'INNER JOIN del_utilisateur du '.
334
						   'ON du.id_utilisateur = doi.id_utilisateur';
385
						   'ON du.id_utilisateur = doi.id_utilisateur';
335
		$requeteLiaisons .= $this->chargerClauseWhere();
386
		$requeteLiaisons .= $this->chargerClauseWhere();
336
		$requeteLiaisons .= ' ORDER BY date_transmission DESC';
387
		$requeteLiaisons .= $this->getTri();
Line 337... Line 388...
337
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
388
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
338
 
389
 
Line -... Line 390...
-
 
390
		return $this->bdd->recupererTous($requeteLiaisons);
-
 
391
	}
-
 
392
	
-
 
393
	private function getTri() {		
-
 
394
		$order = '';
-
 
395
		if($this->tri != 'vote') {
-
 
396
			$order = ' ORDER BY '.$this->tri.' '.$this->directionTri.' ';
-
 
397
		}
339
		return $this->bdd->recupererTous($requeteLiaisons);
398
		return $order;
340
	}
399
	}
341
	
400
	
342
	/**
401
	/**
343
	* Compter le nombre total d'images dans la base pour affichage dans entete.
402
	* Compter le nombre total d'images dans la base pour affichage dans entete.
Line 358... Line 417...
358
		foreach ($liaisons as $liaison) {
417
		foreach ($liaisons as $liaison) {
359
			$idImage = $liaison['id_image'];
418
			$idImage = $liaison['id_image'];
Line 360... Line 419...
360
			
419
			
361
			// On enregistre l'ID de l'image pour n'effectuer qu'une seule requête par la suite
420
			// On enregistre l'ID de l'image pour n'effectuer qu'une seule requête par la suite
-
 
421
			$this->imageIds[] = $idImage;
362
			$this->imageIds[] = $idImage;
422
			$index = $liaison['id_image'].'-'.$liaison['id_observation'];
363
			$images[$idImage] = array('id_image' => $idImage, 'date' => $liaison['date_prise_de_vue'], 'binaire.href' => $this->formaterLienImage($idImage),
423
			$images[$index] = array('id_image' => $idImage, 'date' => $liaison['date_prise_de_vue'], 'binaire.href' => $this->formaterLienImage($idImage),
364
						'hauteur' => $liaison['hauteur'], 'largeur' => $liaison['largeur'], 'protocoles_votes' => array(), 'observation' => $this->formaterObservation($liaison));
424
						'hauteur' => $liaison['hauteur'], 'largeur' => $liaison['largeur'], 'protocoles_votes' => array(), 'observation' => $this->formaterObservation($liaison));
365
		}
425
		}
366
		return $images;
426
		return $images;