| 985 | aurelien | 1 | <?php
 | 
        
           |  |  | 2 | // declare(encoding='UTF-8');
 | 
        
           |  |  | 3 | /**
 | 
        
           |  |  | 4 | 	* Le web service observations récupère toutes les observations et, pour chacune d'elle, les
 | 
        
           |  |  | 5 | 	* images qui lui sont associées.
 | 
        
           |  |  | 6 |  *
 | 
        
           |  |  | 7 |  * @category	php 5.2
 | 
        
           |  |  | 8 |  * @package	del
 | 
        
           |  |  | 9 |  * @subpackage images
 | 
        
           |  |  | 10 |  * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
 | 
        
           |  |  | 11 |  * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
 | 
        
           |  |  | 12 |  * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 | 
        
           |  |  | 13 |  * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 | 
        
           |  |  | 14 |  * @version	$Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $
 | 
        
           |  |  | 15 |  * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Observations
 | 
        
           |  |  | 16 |  */
 | 
        
           |  |  | 17 |   | 
        
           |  |  | 18 | class ListeObservationsWidget {
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 |   | 
        
           |  |  | 21 | 	private $conteneur;
 | 
        
           |  |  | 22 | 	private $navigation;
 | 
        
           |  |  | 23 | 	private $masque;
 | 
        
           |  |  | 24 | 	private $gestionBdd;
 | 
        
           |  |  | 25 | 	private $bdd;
 | 
        
           |  |  | 26 | 	private $parametres = array();
 | 
        
           |  |  | 27 | 	private $ressources = array();
 | 
        
           |  |  | 28 | 	private $tri = 'date_transmission';
 | 
        
           |  |  | 29 | 	private $directionTri = 'desc';
 | 
        
           |  |  | 30 |   | 
        
           |  |  | 31 | 	public function __construct(Conteneur $conteneur = null) {
 | 
        
           |  |  | 32 | 		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
 | 
        
           |  |  | 33 | 		$this->conteneur->chargerConfiguration('config_observations.ini');
 | 
        
           | 988 | aurelien | 34 | 		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
 | 
        
           | 985 | aurelien | 35 | 		$this->navigation = $conteneur->getNavigation();
 | 
        
           |  |  | 36 | 		$this->masque = $conteneur->getMasque();
 | 
        
           |  |  | 37 | 		$this->gestionBdd = $conteneur->getGestionBdd();
 | 
        
           |  |  | 38 | 		$this->bdd = $this->gestionBdd->getBdd();
 | 
        
           |  |  | 39 | 	}
 | 
        
           |  |  | 40 |   | 
        
           |  |  | 41 | 	/**
 | 
        
           |  |  | 42 | 	 * Méthode principale de la classe.
 | 
        
           |  |  | 43 | 	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
 | 
        
           |  |  | 44 | 	 * pour l'afficher.
 | 
        
           |  |  | 45 | 	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
 | 
        
           |  |  | 46 | 	 * @param array $parametres les paramètres situés après le ? dans l'url
 | 
        
           |  |  | 47 | 	 * */
 | 
        
           |  |  | 48 | 	public function consulter($ressources, $parametres) {
 | 
        
           |  |  | 49 | 		$this->initialiserRessourcesEtParametres($ressources, $parametres);
 | 
        
           |  |  | 50 |   | 
        
           |  |  | 51 | 		// Gestion des configuration du script
 | 
        
           |  |  | 52 | 		$this->configurer();
 | 
        
           |  |  | 53 | 		$this->verifierConfiguration();
 | 
        
           |  |  | 54 |   | 
        
           |  |  | 55 | 		$this->verifierParametresTri();
 | 
        
           |  |  | 56 | 		$this->initialiserTri();
 | 
        
           |  |  | 57 |   | 
        
           |  |  | 58 | 		// Lancement du service
 | 
        
           |  |  | 59 | 		$observations = $this->chargerObservations();
 | 
        
           |  |  | 60 | 		$total = $this->compterObservations();
 | 
        
           |  |  | 61 | 		$this->navigation->setTotal($total);
 | 
        
           |  |  | 62 | 		$observations = $this->formaterObservations($observations);
 | 
        
           |  |  | 63 |   | 
        
           |  |  | 64 | 		// Mettre en forme le résultat et l'envoyer pour affichage
 | 
        
           |  |  | 65 | 		$resultat = new ResultatService();
 | 
        
           |  |  | 66 | 		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
 | 
        
           |  |  | 67 | 		return $resultat;
 | 
        
           |  |  | 68 | 	}
 | 
        
           |  |  | 69 |   | 
        
           |  |  | 70 | 	private function initialiserRessourcesEtParametres($ressources, $parametres) {
 | 
        
           |  |  | 71 | 		$this->ressources = $ressources;
 | 
        
           |  |  | 72 | 		$this->parametres = $parametres;
 | 
        
           |  |  | 73 | 	}
 | 
        
           |  |  | 74 |   | 
        
           |  |  | 75 | 	private function verifierParametresTri() {
 | 
        
           |  |  | 76 |   | 
        
           |  |  | 77 | 		$erreurs = array();
 | 
        
           |  |  | 78 | 		$tris_possibles = $this->conteneur->getParametre('tris_possibles');
 | 
        
           |  |  | 79 | 		$tris_possibles_tableau = explode(',', $tris_possibles);
 | 
        
           |  |  | 80 | 		if(isset($this->parametres['tri']) && !in_array($this->parametres['tri'], $tris_possibles_tableau)) {
 | 
        
           |  |  | 81 | 			$erreurs[] = '- le type de tri demandé est incorrect, les valeurs possibles sont '.$tris_possibles.' ;';
 | 
        
           |  |  | 82 | 		}
 | 
        
           |  |  | 83 |   | 
        
           |  |  | 84 | 		$directions_tri = array('asc', 'desc');
 | 
        
           |  |  | 85 | 		if(isset($this->parametres['ordre']) && !in_array($this->parametres['ordre'], $directions_tri)) {
 | 
        
           |  |  | 86 | 			$erreurs[] = '- la direction du tri demandé est incorrecte, les valeurs supportées sont asc ou desc ;';
 | 
        
           |  |  | 87 | 		}
 | 
        
           |  |  | 88 |   | 
        
           |  |  | 89 | 		if (!empty($erreurs)) {
 | 
        
           |  |  | 90 | 			$e = 'Erreur lors de l\'analyse des parametres du tri : '."\n";
 | 
        
           |  |  | 91 | 			$e .= implode("\n", $erreurs);
 | 
        
           |  |  | 92 | 			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
 | 
        
           |  |  | 93 | 		}
 | 
        
           |  |  | 94 | 	}
 | 
        
           |  |  | 95 |   | 
        
           |  |  | 96 | 	private function initialiserTri() {
 | 
        
           |  |  | 97 | 		$this->tri = isset($this->parametres['tri']) ? $this->parametres['tri'] : $this->tri;
 | 
        
           |  |  | 98 | 		$this->directionTri = isset($this->parametres['ordre']) ? $this->parametres['ordre'] : $this->directionTri;
 | 
        
           |  |  | 99 | 	}
 | 
        
           |  |  | 100 | 	/*-------------------------------------------------------------------------------
 | 
        
           |  |  | 101 | 	 							CONFIGURATION DU SERVICE
 | 
        
           |  |  | 102 | 	 --------------------------------------------------------------------------------*/
 | 
        
           |  |  | 103 | 	/**
 | 
        
           |  |  | 104 | 	 * Configuration du service en fonction du fichier de config config_del.ini
 | 
        
           |  |  | 105 | 	 * */
 | 
        
           |  |  | 106 | 	private function configurer() {
 | 
        
           |  |  | 107 | 		$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');
 | 
        
           |  |  | 108 | 		$this->mappingObservation = $this->conteneur->getParametre('mapping_observation');
 | 
        
           |  |  | 109 | 		$this->mappingVotes = $this->conteneur->getParametre('mapping_votes');
 | 
        
           |  |  | 110 | 		$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire');
 | 
        
           |  |  | 111 | 	}
 | 
        
           |  |  | 112 |   | 
        
           |  |  | 113 | 	/**
 | 
        
           |  |  | 114 | 	 * Vérifier que le service est bien configuré
 | 
        
           |  |  | 115 | 	 * */
 | 
        
           |  |  | 116 | 	private function verifierConfiguration() {
 | 
        
           |  |  | 117 |   | 
        
           |  |  | 118 | 		$erreurs = array();
 | 
        
           |  |  | 119 | 		$tableauObservations = $this->conteneur->getParametre('observations');
 | 
        
           |  |  | 120 | 		if (empty($tableauObservations)) {
 | 
        
           |  |  | 121 | 			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [images] ou celui-ci est vide ;';
 | 
        
           |  |  | 122 | 		} else {
 | 
        
           |  |  | 123 | 			if ($this->conteneur->getParametre('url_service') == null) {
 | 
        
           |  |  | 124 | 				$erreurs[] = '- paramètre "url_service" manquant ;';
 | 
        
           |  |  | 125 | 			}
 | 
        
           |  |  | 126 |   | 
        
           |  |  | 127 | 			if ($this->conteneur->getParametre('url_images') == null) {
 | 
        
           |  |  | 128 | 				$erreurs[] = '- paramètre "url_images" manquant ;';
 | 
        
           |  |  | 129 | 			}
 | 
        
           |  |  | 130 |   | 
        
           |  |  | 131 | 		}
 | 
        
           |  |  | 132 |   | 
        
           |  |  | 133 | 		if (empty($this->mappingObservation)) {
 | 
        
           |  |  | 134 | 			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_observation] ou celui-ci est vide ;';
 | 
        
           |  |  | 135 | 		} else {
 | 
        
           |  |  | 136 | 			$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille', 'nom_sel', 'nom_sel_nn', 'nt',
 | 
        
           |  |  | 137 | 								'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'courriel', 'ce_utilisateur', 'nom', 'prenom');
 | 
        
           |  |  | 138 |   | 
        
           |  |  | 139 | 			foreach ($champsMappingObs as $champ) {
 | 
        
           |  |  | 140 | 				if (!isset($this->mappingObservation[$champ])) {
 | 
        
           |  |  | 141 | 					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
 | 
        
           |  |  | 142 | 				}
 | 
        
           |  |  | 143 | 			}
 | 
        
           |  |  | 144 | 		}
 | 
        
           |  |  | 145 | 		if (!empty($erreurs)) {
 | 
        
           |  |  | 146 | 			$e = 'Erreur lors de la configuration : '."\n";
 | 
        
           |  |  | 147 | 			$e .= implode("\n", $erreurs);
 | 
        
           |  |  | 148 | 			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
 | 
        
           |  |  | 149 | 		}
 | 
        
           |  |  | 150 | 	}
 | 
        
           |  |  | 151 |   | 
        
           |  |  | 152 | 	/**
 | 
        
           |  |  | 153 | 	* Charger la clause WHERE en fonction des paramètres de masque
 | 
        
           |  |  | 154 | 	* */
 | 
        
           |  |  | 155 | 	private function chargerClauseWhere() {
 | 
        
           |  |  | 156 | 		$where = array();
 | 
        
           |  |  | 157 | 		$tableauMasque = $this->masque->getMasque();
 | 
        
           |  |  | 158 | 		if (!empty($tableauMasque)) {
 | 
        
           |  |  | 159 | 			foreach($tableauMasque as $idMasque => $valeurMasque) {
 | 
        
           |  |  | 160 |   | 
        
           |  |  | 161 | 				$idMasque = str_replace('masque.', '', $idMasque);
 | 
        
           |  |  | 162 | 				switch ($idMasque) {
 | 
        
           |  |  | 163 | 					// nom du masque => nom BDD
 | 
        
           |  |  | 164 | 					case 'auteur' :
 | 
        
           |  |  | 165 | 						$whereAuteur = ' '.$this->creerFiltreAuteur($this->masque->getMasque('auteur'));
 | 
        
           |  |  | 166 | 						if($whereAuteur != '') {
 | 
        
           |  |  | 167 | 							$where[] = $whereAuteur;
 | 
        
           |  |  | 168 | 						}
 | 
        
           |  |  | 169 | 						break;
 | 
        
           |  |  | 170 | 					case 'date' :
 | 
        
           |  |  | 171 | 						$whereDate = ' '.$this->creerFiltreDate($valeurMasque);
 | 
        
           |  |  | 172 | 						if($whereDate != '') {
 | 
        
           |  |  | 173 | 							$where[] = $whereDate;
 | 
        
           |  |  | 174 | 						}
 | 
        
           |  |  | 175 | 						break;
 | 
        
           |  |  | 176 | 					case 'departement' :
 | 
        
           |  |  | 177 | 						$where[] = ' '.$this->creerFiltreIdZoneGeo($valeurMasque);
 | 
        
           |  |  | 178 | 						break;
 | 
        
           |  |  | 179 | 					case 'genre' :
 | 
        
           |  |  | 180 | 						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %');
 | 
        
           |  |  | 181 | 						break;
 | 
        
           |  |  | 182 | 					case 'tag' :
 | 
        
           |  |  | 183 | 						$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
 | 
        
           |  |  | 184 | 						break;
 | 
        
           |  |  | 185 | 					case 'ns' :
 | 
        
           |  |  | 186 | 						$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
 | 
        
           |  |  | 187 | 						break;
 | 
        
           |  |  | 188 | 					case 'commune' :
 | 
        
           |  |  | 189 | 						$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger(str_replace(array('-',' '), '_', $valeurMasque).'%');
 | 
        
           |  |  | 190 | 					break;
 | 
        
           |  |  | 191 | 					case 'masque' :
 | 
        
           |  |  | 192 | 						$where[] = ' '.$this->creerFiltreMasqueGeneral($valeurMasque);
 | 
        
           |  |  | 193 | 						break;
 | 
        
           |  |  | 194 | 					default:
 | 
        
           |  |  | 195 | 						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
 | 
        
           |  |  | 196 | 					break;
 | 
        
           |  |  | 197 | 				}
 | 
        
           |  |  | 198 | 			}
 | 
        
           |  |  | 199 | 		}
 | 
        
           |  |  | 200 |   | 
        
           |  |  | 201 | 		if (!empty($where)) {
 | 
        
           |  |  | 202 | 			return ' WHERE '.implode('AND', $where);
 | 
        
           |  |  | 203 | 		} else {
 | 
        
           |  |  | 204 | 			return;
 | 
        
           |  |  | 205 | 		}
 | 
        
           |  |  | 206 | 	}
 | 
        
           |  |  | 207 |   | 
        
           |  |  | 208 | 	private function creerFiltreMasqueGeneral($valeurMasque) {
 | 
        
           |  |  | 209 | 		//TODO: affecter d'aborder les variables, puis les tester pour les
 | 
        
           |  |  | 210 | 		// ajouter à la chaine
 | 
        
           |  |  | 211 | 		$whereAuteur = $this->creerFiltreAuteur($valeurMasque);
 | 
        
           |  |  | 212 | 		$whereIdZoneGeo = $this->creerFiltreIdZoneGeo($valeurMasque);
 | 
        
           |  |  | 213 |   | 
        
           |  |  | 214 | 		$masqueGeneral = '( '.
 | 
        
           |  |  | 215 | 						(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ).
 | 
        
           |  |  | 216 | 						(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ).
 | 
        
           |  |  | 217 | 						'zone_geo LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%').' OR '.
 | 
        
           |  |  | 218 | 						$this->creerFiltreMotsCles($valeurMasque).' OR '.
 | 
        
           |  |  | 219 | 						'nom_sel LIKE '.$this->proteger($valeurMasque.'%').' OR '.
 | 
        
           |  |  | 220 | 						'famille LIKE '.$this->proteger($valeurMasque.'%').' OR '.
 | 
        
           |  |  | 221 | 						'milieu LIKE '.$this->proteger($valeurMasque).' OR '.
 | 
        
           |  |  | 222 | 						$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '.
 | 
        
           |  |  | 223 | 						$this->creerFiltreDate($valeurMasque).
 | 
        
           |  |  | 224 | 						') ';
 | 
        
           |  |  | 225 |   | 
        
           |  |  | 226 | 		return $masqueGeneral;
 | 
        
           |  |  | 227 | 	}
 | 
        
           |  |  | 228 |   | 
        
           |  |  | 229 | 	private function creerFiltreAuteur($valeurMasque) {
 | 
        
           |  |  | 230 | 		$masque = '';
 | 
        
           |  |  | 231 | 		$auteurId = $valeurMasque;
 | 
        
           |  |  | 232 | 		if (is_numeric($auteurId)) {
 | 
        
           |  |  | 233 | 			$masque = ' ce_utilisateur = '.$auteurId;
 | 
        
           |  |  | 234 | 		} else {
 | 
        
           |  |  | 235 | 			if (strpos($auteurId, '@') === false) {
 | 
        
           |  |  | 236 | 				$tableauNomPrenom = explode(' ',$auteurId, 2);
 | 
        
           |  |  | 237 | 				if(count($tableauNomPrenom) == 2) {
 | 
        
           |  |  | 238 | 					// on teste potentiellement un nom prenom ou bien un prénom nom
 | 
        
           |  |  | 239 | 					$masque = '('.
 | 
        
           |  |  | 240 | 							          	'(nom LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
 | 
        
           |  |  | 241 | 									  	'prenom LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
 | 
        
           |  |  | 242 | 									 	'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
 | 
        
           |  |  | 243 | 									  	'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').')'.
 | 
        
           |  |  | 244 | 									  ')';
 | 
        
           |  |  | 245 | 				} else {
 | 
        
           |  |  | 246 | 					$masque = '(
 | 
        
           |  |  | 247 | 							            (nom LIKE '.$this->proteger($auteurId.'%').' OR '.
 | 
        
           |  |  | 248 | 										'prenom LIKE '.$this->proteger($auteurId.'%').')'.
 | 
        
           |  |  | 249 | 									  ')';
 | 
        
           |  |  | 250 | 				}
 | 
        
           |  |  | 251 | 			} else {
 | 
        
           |  |  | 252 | 				$masque = " courriel LIKE ".$this->proteger($valeurMasque.'%')." ";
 | 
        
           |  |  | 253 | 			}
 | 
        
           |  |  | 254 | 		}
 | 
        
           |  |  | 255 | 		return $masque;
 | 
        
           |  |  | 256 | 	}
 | 
        
           |  |  | 257 |   | 
        
           |  |  | 258 | 	private function remplacerParJokerCaractere($valeurMasque) {
 | 
        
           |  |  | 259 | 		return str_replace(array('-',' '), '_', $valeurMasque);
 | 
        
           |  |  | 260 | 	}
 | 
        
           |  |  | 261 | 	//TODO: déplacer les fonctions ci dessus et dessous dans une classe
 | 
        
           |  |  | 262 | 	// utilitaire
 | 
        
           |  |  | 263 | 	function supprimerAccents($str, $charset='utf-8')
 | 
        
           |  |  | 264 | 	{
 | 
        
           |  |  | 265 | 		$str = htmlentities($str, ENT_NOQUOTES, $charset);
 | 
        
           |  |  | 266 |   | 
        
           |  |  | 267 | 		$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
 | 
        
           |  |  | 268 | 		$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ'
 | 
        
           |  |  | 269 | 		$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
 | 
        
           |  |  | 270 |   | 
        
           |  |  | 271 | 		return $str;
 | 
        
           |  |  | 272 | 	}
 | 
        
           |  |  | 273 |   | 
        
           |  |  | 274 | 	private function obtenirIdDepartement($nomDpt) {
 | 
        
           |  |  | 275 |   | 
        
           |  |  | 276 | 		$nomDpt = $this->supprimerAccents($nomDpt);
 | 
        
           |  |  | 277 | 		$nomDpt = strtolower(str_replace(' ','-',$nomDpt));
 | 
        
           |  |  | 278 |   | 
        
           |  |  | 279 | 		$idDpt = $this->conteneur->getParametre($nomDpt);
 | 
        
           |  |  | 280 | 		if($idDpt == null || $idDpt == ' ') {
 | 
        
           |  |  | 281 | 			$idDpt = ' ';
 | 
        
           |  |  | 282 | 		}
 | 
        
           |  |  | 283 | 		return $idDpt;
 | 
        
           |  |  | 284 | 	}
 | 
        
           |  |  | 285 |   | 
        
           |  |  | 286 | 	private function creerFiltreIdZoneGeo($valeurMasque) {
 | 
        
           |  |  | 287 | 		$masque = '';
 | 
        
           |  |  | 288 | 		$dept = $valeurMasque;
 | 
        
           |  |  | 289 | 		if (is_numeric($dept)) {
 | 
        
           |  |  | 290 | 			$dept = sprintf('%02s', $dept);
 | 
        
           |  |  | 291 | 			$dept = sprintf("%-'_5s", $dept);
 | 
        
           |  |  | 292 | 			$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$dept);
 | 
        
           |  |  | 293 | 		} else {
 | 
        
           |  |  | 294 | 			$deptId = $this->conteneur->getParametre($dept);
 | 
        
           |  |  | 295 | 			if ($deptId != null) {
 | 
        
           |  |  | 296 | 				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$deptId.'%');
 | 
        
           |  |  | 297 | 			} else {
 | 
        
           |  |  | 298 | 				$id = $this->obtenirIdDepartement($valeurMasque);
 | 
        
           |  |  | 299 | 				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$id.'%');
 | 
        
           |  |  | 300 | 			}
 | 
        
           |  |  | 301 | 		}
 | 
        
           |  |  | 302 | 		return $masque;
 | 
        
           |  |  | 303 | 	}
 | 
        
           |  |  | 304 |   | 
        
           |  |  | 305 | 	private function creerFiltreDate($valeurMasque) {
 | 
        
           |  |  | 306 | 		//TODO: définir dans le fichier de config un tableau contenant plusieurs format de date
 | 
        
           |  |  | 307 | 		// autorisés pour la recherche, qui seraient ajoutés au OR
 | 
        
           |  |  | 308 | 		$masque = '(';
 | 
        
           |  |  | 309 | 		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
 | 
        
           |  |  | 310 | 		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '.
 | 
        
           |  |  | 311 | 			           ')';
 | 
        
           |  |  | 312 | 		return $masque;
 | 
        
           |  |  | 313 | 	}
 | 
        
           |  |  | 314 |   | 
        
           |  |  | 315 | 	private function creerFiltreMotsCles($valeurMasque) {
 | 
        
           |  |  | 316 | 		$mots_cles = explode(' ', $valeurMasque);
 | 
        
           |  |  | 317 | 		$requeteMotsClesImg = '';
 | 
        
           |  |  | 318 | 		$requeteMotsClesObs = '';
 | 
        
           |  |  | 319 | 		//TODO voir s'il existe un moyen plus simple que le foreach + rtrim
 | 
        
           |  |  | 320 | 		// comme avec implode (attention au fait que l'on concatène des % au début et à la fin)
 | 
        
           |  |  | 321 | 		foreach($mots_cles as $mot_cle) {
 | 
        
           |  |  | 322 | 			$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
 | 
        
           |  |  | 323 | 			$requeteMotsClesObs .= 'dob.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
 | 
        
           |  |  | 324 | 		}
 | 
        
           |  |  | 325 | 		$requeteMotsClesImg = rtrim($requeteMotsClesImg, ' AND ');
 | 
        
           |  |  | 326 | 		$requeteMotsClesObs = rtrim($requeteMotsClesObs, ' AND ');
 | 
        
           |  |  | 327 |   | 
        
           |  |  | 328 | 		$masque = '('.
 | 
        
           |  |  | 329 | 		          	'('.$requeteMotsClesImg.') OR '.
 | 
        
           |  |  | 330 | 		          	'('.$requeteMotsClesObs.') '.
 | 
        
           |  |  | 331 | 				  ') ';
 | 
        
           |  |  | 332 |   | 
        
           |  |  | 333 | 		return $masque;
 | 
        
           |  |  | 334 | 	}
 | 
        
           |  |  | 335 |   | 
        
           |  |  | 336 | 	/*-------------------------------------------------------------------------------
 | 
        
           |  |  | 337 | 								CHARGEMENT DES OBSERVATIONS
 | 
        
           |  |  | 338 | 	--------------------------------------------------------------------------------*/
 | 
        
           |  |  | 339 | 	/**
 | 
        
           |  |  | 340 | 	* Chargement depuis la bdd de toutes les liaisons entre images et observations
 | 
        
           |  |  | 341 | 	* */
 | 
        
           |  |  | 342 | 	private function chargerObservations() {
 | 
        
           | 987 | aurelien | 343 | 		/*$requete = 'SELECT DISTINCT id_observation '.
 | 
        
           | 985 | aurelien | 344 | 						'FROM '.$this->gestionBdd->formaterTable('del_obs_image', 'dob').
 | 
        
           |  |  | 345 | 						$this->chargerClauseWhere().
 | 
        
           |  |  | 346 | 						' GROUP BY id_observation'.
 | 
        
           |  |  | 347 | 						//' ORDER BY '.$this->tri.' '.$this->directionTri.' '.
 | 
        
           | 987 | aurelien | 348 | 						$this->gestionBdd->getLimitSql();*/
 | 
        
           |  |  | 349 |   | 
        
           |  |  | 350 | 		$requete = 'SELECT DISTINCT dob.id_observation '.
 | 
        
           |  |  | 351 | 								   'FROM '.$this->gestionBdd->formaterTable('del_observation', 'dob').
 | 
        
           |  |  | 352 | 								   'INNER JOIN '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
 | 
        
           |  |  | 353 | 								   'ON doi.id_observation = dob.id_observation '.
 | 
        
           |  |  | 354 | 							$this->chargerClauseWhere().
 | 
        
           |  |  | 355 | 							' ORDER BY '.$this->tri.' '.$this->directionTri.' '.
 | 
        
           |  |  | 356 | 							$this->gestionBdd->getLimitSql();
 | 
        
           |  |  | 357 |   | 
        
           | 985 | aurelien | 358 | 		return $this->bdd->recupererTous($requete);
 | 
        
           |  |  | 359 | 	}
 | 
        
           |  |  | 360 |   | 
        
           |  |  | 361 | 	/**
 | 
        
           |  |  | 362 | 	* Compter le nombre total d'images dans la base pour affichage dans entete.
 | 
        
           |  |  | 363 | 	* */
 | 
        
           |  |  | 364 | 	private function compterObservations() {
 | 
        
           |  |  | 365 | 		$requete = 'SELECT FOUND_ROWS() AS nbre ';
 | 
        
           |  |  | 366 | 		$resultats = $this->bdd->recuperer($requete);
 | 
        
           |  |  | 367 | 		return (int) $resultats['nbre'];
 | 
        
           |  |  | 368 | 	}
 | 
        
           |  |  | 369 |   | 
        
           |  |  | 370 | 	/**
 | 
        
           |  |  | 371 | 	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
 | 
        
           |  |  | 372 | 	* @param $liaisons les liaisons de la table del_obs_images
 | 
        
           |  |  | 373 | 	* */
 | 
        
           |  |  | 374 | 	private function formaterObservations($liaisons) {
 | 
        
           |  |  | 375 |   | 
        
           |  |  | 376 | 		$observations = array();
 | 
        
           |  |  | 377 | 		foreach ($liaisons as $liaison) {
 | 
        
           |  |  | 378 | 			$observations[] = $liaison['id_observation'];
 | 
        
           |  |  | 379 | 		}
 | 
        
           |  |  | 380 | 		return $observations;
 | 
        
           |  |  | 381 | 	}
 | 
        
           |  |  | 382 |   | 
        
           |  |  | 383 | 	/*-------------------------------------------------------------------------------
 | 
        
           |  |  | 384 | 								FORMATER ET METTRE EN FORME
 | 
        
           |  |  | 385 | 	--------------------------------------------------------------------------------*/
 | 
        
           |  |  | 386 | 	private function proteger($valeur) {
 | 
        
           |  |  | 387 | 		if (is_array($valeur)) {
 | 
        
           |  |  | 388 | 			return $this->bdd->protegerTableau($valeur);
 | 
        
           |  |  | 389 | 		} else {
 | 
        
           |  |  | 390 | 			return $this->bdd->proteger($valeur);
 | 
        
           |  |  | 391 | 		}
 | 
        
           |  |  | 392 | 	}
 | 
        
           |  |  | 393 | }
 | 
        
           |  |  | 394 | ?>
 |