Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2010 Rev 2143
Line 89... Line 89...
89
		return array('type' => 'png', 'img' => $img);
89
		return array('type' => 'png', 'img' => $img);
90
	}
90
	}
Line 91... Line 91...
91
 
91
 
Line 92... Line 92...
92
	public function getTout($params) {
92
	public function getTout($params) {
93
 
93
 
94
		$emplacements = null;		
94
		$emplacements = null;
95
		$concatenation_id = "CONCAT(IFNULL(latitude,''),IFNULL(longitude,''), IFNULL(wgs84_latitude,''),IFNULL(wgs84_longitude,'')) ";
95
		$concatenation_id = "CONCAT(IFNULL(latitude,''),IFNULL(longitude,''), IFNULL(wgs84_latitude,''),IFNULL(wgs84_longitude,'')) ";
96
		
96
 
97
		$requete =  'SELECT ce_zone_geo, zone_geo, station, '.
97
		$requete =  'SELECT ce_zone_geo, zone_geo, station, '.
98
								"mots_cles_texte, ".
98
								"mots_cles_texte, ".
99
								"latitude, ".
99
								"latitude, ".
Line 119... Line 119...
119
					$this->construireWherePhotosSeulement().
119
					$this->construireWherePhotosSeulement().
120
					$this->construireWhereProjet().
120
					$this->construireWhereProjet().
121
					$this->construireWhereTag().
121
					$this->construireWhereTag().
122
					$this->construireWhereNombreDeJours().
122
					$this->construireWhereNombreDeJours().
123
					' GROUP BY id_coord';
123
					' GROUP BY id_coord';
124
		
124
 
125
		$resultats_emplacements = Cel::db()->executerRequete($requete);
125
		$resultats_emplacements = Cel::db()->requeter($requete);
126
		$emplacements = $this->traiterEmplacements($resultats_emplacements, $this->compterObservations($params));
126
		$emplacements = $this->traiterEmplacements($resultats_emplacements, $this->compterObservations($params));
127
		return $emplacements;
127
		return $emplacements;
128
	}
128
	}
129
	
129
 
130
	private function afficherRequeteFormatee($requete) {
130
	private function afficherRequeteFormatee($requete) {
131
		$requete = str_replace(')',')<br />',$requete);
131
		$requete = str_replace(')',')<br />',$requete);
132
		$requete = str_replace('(','	<br />	(',$requete);
132
		$requete = str_replace('(','	<br />	(',$requete);
133
		echo '<pre>'.$requete.'</pre>';
133
		echo '<pre>'.$requete.'</pre>';
134
		exit;
134
		exit;
Line 156... Line 156...
156
					$this->construireWherePhotosSeulement().
156
					$this->construireWherePhotosSeulement().
157
					$this->construireWhereProjet().
157
					$this->construireWhereProjet().
158
					$this->construireWhereTag().
158
					$this->construireWhereTag().
159
					$this->construireWhereNombreDeJours();
159
					$this->construireWhereNombreDeJours();
Line 160... Line 160...
160
 
160
 
161
		$resultats_nb_obs = Cel::db()->executerRequete($requete);
161
		$resultats_nb_obs = Cel::db()->requeter($requete);
162
		return $resultats_nb_obs[0]['nb'];
162
		return $resultats_nb_obs[0]['nb'];
Line 163... Line 163...
163
	}
163
	}
164
 
164
 
Line 302... Line 302...
302
		if (stristr($tags, 'sensible') === FALSE) {
302
		if (stristr($tags, 'sensible') === FALSE) {
303
			$sensible = false;
303
			$sensible = false;
304
		}
304
		}
305
		return $sensible;
305
		return $sensible;
306
	}
306
	}
307
	
307
 
308
	private function communeEstDemandee() {
308
	private function communeEstDemandee() {
309
	    $station_infos = $this->decomposerParametreStation();
309
	    $station_infos = $this->decomposerParametreStation();
310
	    $commune_demandee = true;
310
	    $commune_demandee = true;
311
	    if($station_infos['type'] == self::MARQUEUR_STATION) {
311
	    if($station_infos['type'] == self::MARQUEUR_STATION) {
312
			$commune_demandee = false;
312
			$commune_demandee = false;
Line 436... Line 436...
436
				$observations['observations'][$id] = $infos;
436
				$observations['observations'][$id] = $infos;
437
			}
437
			}
438
		}
438
		}
439
		return $observations;
439
		return $observations;
440
	}
440
	}
441
	
441
 
442
	private function ajouterAuteursAuxObs($observations) {
442
	private function ajouterAuteursAuxObs($observations) {
443
		$observateurs = $this->recupererUtilisateursIdentite(array_keys($observations['observateurs']));
443
		$observateurs = $this->recupererUtilisateursIdentite(array_keys($observations['observateurs']));
444
		unset($observations['observateurs']);
444
		unset($observations['observateurs']);
445
		foreach ($observations['observations'] as $id => $infos) {
445
		foreach ($observations['observations'] as $id => $infos) {
446
			$courriel = strtolower($infos['observateur']);
446
			$courriel = strtolower($infos['observateur']);
Line 534... Line 534...
534
				$sql = " AND (latitude LIKE $lat AND longitude LIKE $lng) ";
534
				$sql = " AND (latitude LIKE $lat AND longitude LIKE $lng) ";
535
			}
535
			}
536
		}
536
		}
537
		return $sql;
537
		return $sql;
538
	}
538
	}
539
	
539
 
540
	private function construireWhereCoordonneesSansSensibles() {
540
	private function construireWhereCoordonneesSansSensibles() {
541
		$sql = '(';
541
		$sql = '(';
542
		// Récupération des coordonnées depuis l'id station
542
		// Récupération des coordonnées depuis l'id station
543
		extract($this->decomposerParametreStation());
543
		extract($this->decomposerParametreStation());
544
		if (isset($type)) {
544
		if (isset($type)) {
Line 608... Line 608...
608
					$sql = " AND nom_ret LIKE $nom ";
608
					$sql = " AND nom_ret LIKE $nom ";
609
			}
609
			}
610
		}
610
		}
611
		return $sql;
611
		return $sql;
612
	}
612
	}
613
	
613
 
614
	private function construireWhereReferentiel() {
614
	private function construireWhereReferentiel() {
615
		$sql = '';
615
		$sql = '';
616
		extract($this->parametres);
616
		extract($this->parametres);
617
		if (isset($referentiel) && !$this->etreNull($referentiel)) {
617
		if (isset($referentiel) && !$this->etreNull($referentiel)) {
618
			$referentiel = Cel::db()->proteger($referentiel.'%');
618
			$referentiel = Cel::db()->proteger($referentiel.'%');
Line 752... Line 752...
752
			$this->construireWhereProjet().
752
			$this->construireWhereProjet().
753
			$this->construireWhereTag().
753
			$this->construireWhereTag().
754
			'ORDER BY utilisateur ASC, ordre ASC';
754
			'ORDER BY utilisateur ASC, ordre ASC';
755
		//$this->debug[] = $requete;
755
		//$this->debug[] = $requete;
756
		//die($requete);
756
		//die($requete);
757
		$resultats = Cel::db()->executerRequete($requete);
757
		$resultats = Cel::db()->requeter($requete);
Line 758... Line 758...
758
 
758
 
759
		$observations = null;
759
		$observations = null;
760
		if ($resultats != false) {
760
		if ($resultats != false) {
761
			$observations = array();
761
			$observations = array();
Line 827... Line 827...
827
			$lngMax = $ne['lng'];
827
			$lngMax = $ne['lng'];
Line 828... Line 828...
828
 
828
 
829
			$sql = "( (latitude != 0 AND longitude != 0) ".
829
			$sql = "( (latitude != 0 AND longitude != 0) ".
830
				" AND latitude BETWEEN $latMin AND $latMax ".
830
				" AND latitude BETWEEN $latMin AND $latMax ".
831
				" AND longitude BETWEEN $lngMin AND $lngMax )";
831
				" AND longitude BETWEEN $lngMin AND $lngMax )";
832
			
832
 
833
			/*$sql = " MBRWithin(mon_point, GeomFromText('POLYGON((".$latMin.' '.$lngMin.','.
833
			/*$sql = " MBRWithin(mon_point, GeomFromText('POLYGON((".$latMin.' '.$lngMin.','.
834
			$latMax.' '.$lngMin.','.
834
			$latMax.' '.$lngMin.','.
835
			$latMax.' '.$lngMax.','.
835
			$latMax.' '.$lngMax.','.
836
			$latMax.' '.$lngMin.','.
836
			$latMax.' '.$lngMin.','.
837
			$latMin.' '.$lngMin."))')) ";		*/	
837
			$latMin.' '.$lngMin."))')) ";		*/
838
		}
838
		}
839
		return $sql;
839
		return $sql;
Line 840... Line 840...
840
	}
840
	}
Line 871... Line 871...
871
			$lngMax = $ne['lng'];
871
			$lngMax = $ne['lng'];
Line 872... Line 872...
872
 
872
 
873
			$sql = "( wgs84_longitude != 0 AND wgs84_latitude != 0 ".
873
			$sql = "( wgs84_longitude != 0 AND wgs84_latitude != 0 ".
874
				" AND wgs84_latitude BETWEEN $latMin AND $latMax ".
874
				" AND wgs84_latitude BETWEEN $latMin AND $latMax ".
875
				" AND wgs84_longitude BETWEEN $lngMin AND $lngMax )";
875
				" AND wgs84_longitude BETWEEN $lngMin AND $lngMax )";
876
			
876
 
877
			/*$sql = " MBRWithin(point_commune, GeomFromText('POLYGON((".$latMin.' '.$lngMin.','.
877
			/*$sql = " MBRWithin(point_commune, GeomFromText('POLYGON((".$latMin.' '.$lngMin.','.
878
			$latMax.' '.$lngMin.','.
878
			$latMax.' '.$lngMin.','.
879
			$latMax.' '.$lngMax.','.
879
			$latMax.' '.$lngMax.','.
880
			$latMax.' '.$lngMin.','.
880
			$latMax.' '.$lngMin.','.
Line 921... Line 921...
921
			           			(latitude = '000null' OR latitude = '' OR latitude = 0 OR latitude IS NULL) ".
921
			           			(latitude = '000null' OR latitude = '' OR latitude = 0 OR latitude IS NULL) ".
922
								" AND (longitude = '000null' OR longitude = '' OR longitude = 0 OR longitude IS NULL)".
922
								" AND (longitude = '000null' OR longitude = '' OR longitude = 0 OR longitude IS NULL)".
923
							')'.
923
							')'.
924
							' OR mots_cles_texte LIKE "%sensible%"'.
924
							' OR mots_cles_texte LIKE "%sensible%"'.
925
						') ';
925
						') ';
926
			
926
 
927
		}
927
		}
928
		return $sql;
928
		return $sql;
929
	}
929
	}
930
	
930
 
931
	
931
 
932
	private function construireWherePhotosSeulement() {
932
	private function construireWherePhotosSeulement() {
933
		$sql = '';
933
		$sql = '';
934
		if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) {
934
		if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) {
935
			$sql = 'AND co.id_observation IN (SELECT DISTINCT id_observation FROM cel_obs_images) ';
935
			$sql = 'AND co.id_observation IN (SELECT DISTINCT id_observation FROM cel_obs_images) ';
936
		}
936
		}
Line 946... Line 946...
946
			$utilisateur = Cel::db()->proteger($utilisateur);
946
			$utilisateur = Cel::db()->proteger($utilisateur);
947
			$sql = " AND co.courriel_utilisateur = $utilisateur ";
947
			$sql = " AND co.courriel_utilisateur = $utilisateur ";
948
		}
948
		}
949
		return $sql;
949
		return $sql;
950
	}
950
	}
951
	
951
 
952
	
952
 
953
	private function construireWhereNumTaxon() {
953
	private function construireWhereNumTaxon() {
954
		$sql = '';
954
		$sql = '';
955
		// Récupération des coordonnées depuis l'id station
955
		// Récupération des coordonnées depuis l'id station
956
		extract($this->parametres);
956
		extract($this->parametres);
957
		if (isset($this->parametres['num_taxon']) && !$this->etreNull($num_taxon)) {
957
		if (isset($this->parametres['num_taxon']) && !$this->etreNull($num_taxon)) {
958
		$num_taxon = Cel::db()->proteger($num_taxon);
958
		$num_taxon = Cel::db()->proteger($num_taxon);
959
		$sql = " AND nt = $num_taxon ";
959
		$sql = " AND nt = $num_taxon ";
960
		}
960
		}
961
		return $sql;
961
		return $sql;
962
	}
962
	}
963
	
963
 
964
	private function construireWhereNumTaxonAvecSousTaxons() {
964
	private function construireWhereNumTaxonAvecSousTaxons() {
965
		$sql = '';
965
		$sql = '';
966
		// Récupération des coordonnées depuis l'id station
966
		// Récupération des coordonnées depuis l'id station
967
		extract($this->parametres);
967
		extract($this->parametres);
968
		if (isset($this->parametres['num_taxon']) && !$this->etreNull($num_taxon)) {
968
		if (isset($this->parametres['num_taxon']) && !$this->etreNull($num_taxon)) {
Line 979... Line 979...
979
				$sql = " AND nt = $num_taxon ";
979
				$sql = " AND nt = $num_taxon ";
980
			}
980
			}
981
		}
981
		}
982
		return $sql;
982
		return $sql;
983
	}
983
	}
984
	
984
 
985
	private function obtenirSousTaxons($nt) {
985
	private function obtenirSousTaxons($nt) {
986
		$referentiel = 'bdtfx';
986
		$referentiel = 'bdtfx';
987
		if(isset($this->parametres['referentiel']) && $this->parametres['referentiel'] != "" && $this->parametres['referentiel'] != '*') {
987
		if(isset($this->parametres['referentiel']) && $this->parametres['referentiel'] != "" && $this->parametres['referentiel'] != '*') {
988
			$referentiel = $this->parametres['referentiel'];
988
			$referentiel = $this->parametres['referentiel'];
989
		}
989
		}
Line 1003... Line 1003...
1003
		if (!$this->etreNull($projet_sql)) {
1003
		if (!$this->etreNull($projet_sql)) {
1004
			$sql = " AND ($projet_sql) ";
1004
			$sql = " AND ($projet_sql) ";
1005
		}
1005
		}
1006
		return $sql;
1006
		return $sql;
1007
	}
1007
	}
1008
	
1008
 
1009
	/**
1009
	/**
1010
	 * Traitement de $projet pour construction du filtre dans la requête
1010
	 * Traitement de $projet pour construction du filtre dans la requête
1011
	 */
1011
	 */
1012
	private function getSqlWhereProjet($projet) {
1012
	private function getSqlWhereProjet($projet) {
1013
		$sql = null;
1013
		$sql = null;
1014
		if (isset($projet) && !$this->etreNull($projet)) {
1014
		if (isset($projet) && !$this->etreNull($projet)) {
1015
			$sql = 'co.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$projet.'%');
1015
			$sql = 'co.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$projet.'%');
1016
		}
1016
		}
1017
		return $sql;
1017
		return $sql;
1018
	}
1018
	}
1019
	
1019
 
1020
	private function construireWhereTag() {
1020
	private function construireWhereTag() {
1021
		$sql = '';
1021
		$sql = '';
1022
		extract($this->parametres);
1022
		extract($this->parametres);
1023
		$tag_sql = isset($tag) ? $this->getSqlWhereObsAvecImagesTaguees($tag) : null;
1023
		$tag_sql = isset($tag) ? $this->getSqlWhereObsAvecImagesTaguees($tag) : null;
1024
		if (!$this->etreNull($tag_sql)) {
1024
		if (!$this->etreNull($tag_sql)) {
1025
			$sql = " AND ($tag_sql) ";
1025
			$sql = " AND ($tag_sql) ";
1026
		}
1026
		}
1027
		return $sql;
1027
		return $sql;
1028
	}
1028
	}
1029
	
1029
 
1030
	private function construireWhereNombreDeJours() {
1030
	private function construireWhereNombreDeJours() {
1031
		$sql = null;
1031
		$sql = null;
1032
		extract($this->parametres);
1032
		extract($this->parametres);
1033
		if (isset($nbjours) && !$this->etreNull($nbjours)) {
1033
		if (isset($nbjours) && !$this->etreNull($nbjours)) {
1034
			$sql = ' AND DATEDIFF(CURDATE(),co.date_creation) <= '.Cel::db()->proteger($nbjours).' ';
1034
			$sql = ' AND DATEDIFF(CURDATE(),co.date_creation) <= '.Cel::db()->proteger($nbjours).' ';
1035
		}
1035
		}
1036
		return $sql;
1036
		return $sql;
1037
	}
1037
	}
1038
	
1038
 
1039
	/**
1039
	/**
1040
	 * Traitement de $tag pour construction du filtre dans la requête
1040
	 * Traitement de $tag pour construction du filtre dans la requête
1041
	 */
1041
	 */
1042
	private function getSqlWhereObsAvecImagesTaguees($tag) {
1042
	private function getSqlWhereObsAvecImagesTaguees($tag) {
1043
		$sql = null;
1043
		$sql = null;
Line 1061... Line 1061...
1061
						$this->construireWhereProjet().
1061
						$this->construireWhereProjet().
1062
						(!$this->etreNull($tag_sql) ? "AND ($tag_sql) " : '').
1062
						(!$this->etreNull($tag_sql) ? "AND ($tag_sql) " : '').
1063
						'ORDER BY utilisateur ASC, ci.ordre ASC';
1063
						'ORDER BY utilisateur ASC, ci.ordre ASC';
1064
			//$this->debug[] = $requete;
1064
			//$this->debug[] = $requete;
1065
			//die($requete);
1065
			//die($requete);
1066
			$elements_tag = Cel::db()->executerRequete($requete);
1066
			$elements_tag = Cel::db()->requeter($requete);
1067
			
1067
 
1068
			$requete_tag = array();
1068
			$requete_tag = array();
1069
			if ($elements_tag != false && count($elements_tag) > 0) {
1069
			if ($elements_tag != false && count($elements_tag) > 0) {
1070
				
1070
 
1071
				$filtres = array();
1071
				$filtres = array();
1072
				foreach ($elements_tag as $occurence) {
1072
				foreach ($elements_tag as $occurence) {
1073
					$utilisateur = $occurence['utilisateur'];
1073
					$utilisateur = $occurence['utilisateur'];
1074
					$id_obs = $occurence['id_obs'];
1074
					$id_obs = $occurence['id_obs'];
1075
					if (!array_key_exists($utilisateur, $filtres)) {
1075
					if (!array_key_exists($utilisateur, $filtres)) {
Line 1077... Line 1077...
1077
					}
1077
					}
1078
					if (!array_key_exists($id_obs, $filtres[$utilisateur])) {
1078
					if (!array_key_exists($id_obs, $filtres[$utilisateur])) {
1079
						$filtres[$utilisateur][$id_obs] = $id_obs;
1079
						$filtres[$utilisateur][$id_obs] = $id_obs;
1080
					}
1080
					}
1081
				}
1081
				}
1082
				
1082
 
1083
				// Pré-construction du where de la requête
1083
				// Pré-construction du where de la requête
1084
				$tpl_where = "(id_observation IN (%s))";
1084
				$tpl_where = "(id_observation IN (%s))";
1085
				foreach ($filtres as $utilisateur => $id_obs) {
1085
				foreach ($filtres as $utilisateur => $id_obs) {
1086
					$requete_tag[] = sprintf($tpl_where, implode(',', $id_obs));
1086
					$requete_tag[] = sprintf($tpl_where, implode(',', $id_obs));
1087
				}
1087
				}
1088
				
1088
 
1089
			} else {
1089
			} else {
1090
				$this->messages[] = "Aucune observation ne possède d'images avec ce mot-clé.";
1090
				$this->messages[] = "Aucune observation ne possède d'images avec ce mot-clé.";
1091
			}
1091
			}
1092
			if (count($requete_tag) > 0) {
1092
			if (count($requete_tag) > 0) {
1093
				$sql = implode(" \nOR ", $requete_tag);
1093
				$sql = implode(" \nOR ", $requete_tag);
1094
			}
1094
			}
1095
		}
1095
		}
1096
		return $sql;
1096
		return $sql;
1097
	}
1097
	}
1098
	
1098
 
1099
	/**
1099
	/**
1100
	 * Traitement de $tag pour construction du filtre dans la requête
1100
	 * Traitement de $tag pour construction du filtre dans la requête
1101
	 */
1101
	 */
1102
	private function getSqlWhereMotsCles($tag) {
1102
	private function getSqlWhereMotsCles($tag) {
1103
		$sql = null;
1103
		$sql = null;
Line 1105... Line 1105...
1105
		$requete_projet = $this->getSqlWhereMotsClesImages($mots_cles);
1105
		$requete_projet = $this->getSqlWhereMotsClesImages($mots_cles);
1106
		$sql = $requete_projet;
1106
		$sql = $requete_projet;
1107
		//$this->debug[] = $sql;
1107
		//$this->debug[] = $sql;
1108
		return $sql;
1108
		return $sql;
1109
	}
1109
	}
1110
	
1110
 
1111
	/**
1111
	/**
1112
	 * Traitement de $tag pour construction du filtre dans la requête
1112
	 * Traitement de $tag pour construction du filtre dans la requête
1113
	 */
1113
	 */
1114
	private function getSqlWhereMotsClesImages($mots_cles_encodes) {
1114
	private function getSqlWhereMotsClesImages($mots_cles_encodes) {
1115
		$where_mots_cles_images = array();
1115
		$where_mots_cles_images = array();
Line 1117... Line 1117...
1117
			$where_mots_cles_images[] = "ci.mots_cles_texte LIKE $mot_cle_encode";
1117
			$where_mots_cles_images[] = "ci.mots_cles_texte LIKE $mot_cle_encode";
1118
		}
1118
		}
1119
		$where_mots_cles_images = implode(' '.$mots_cles_encodes['type'].' ', $where_mots_cles_images);
1119
		$where_mots_cles_images = implode(' '.$mots_cles_encodes['type'].' ', $where_mots_cles_images);
1120
		return $where_mots_cles_images;
1120
		return $where_mots_cles_images;
1121
	}
1121
	}
1122
	
1122
 
1123
	private function decomposerParametreTag($tags) {
1123
	private function decomposerParametreTag($tags) {
1124
		
1124
 
1125
		$mots_cles = array('type' => null, 'motsCles' => null, 'motsClesEncodesProteges' => null);
1125
		$mots_cles = array('type' => null, 'motsCles' => null, 'motsClesEncodesProteges' => null);
1126
		if (preg_match('/.+OU.+/', $tags)) {
1126
		if (preg_match('/.+OU.+/', $tags)) {
1127
			$mots_cles['type'] = 'OR';
1127
			$mots_cles['type'] = 'OR';
1128
			$mots_cles['motsCles'] = explode('OU', $tags);
1128
			$mots_cles['motsCles'] = explode('OU', $tags);
1129
		} else if (preg_match('/.+ET.+/', $tags)) {
1129
		} else if (preg_match('/.+ET.+/', $tags)) {
1130
			$mots_cles['type'] = 'AND';
1130
			$mots_cles['type'] = 'AND';
1131
			$mots_cles['motsCles'] = explode('ET', $tags);
1131
			$mots_cles['motsCles'] = explode('ET', $tags);
1132
		} else {
1132
		} else {
1133
			$mots_cles['motsCles'][] = $tags;
1133
			$mots_cles['motsCles'][] = $tags;
1134
		}
1134
		}
1135
		
1135
 
1136
		foreach ($mots_cles['motsCles'] as $mot) {
1136
		foreach ($mots_cles['motsCles'] as $mot) {
1137
			$mots_cles['motsClesEncodesProteges'][] = Cel::db()->quote('%'.$mot.'%');
1137
			$mots_cles['motsClesEncodesProteges'][] = Cel::db()->quote('%'.$mot.'%');
1138
		}
1138
		}
1139
		$this->debug[] = $mots_cles;
1139
		$this->debug[] = $mots_cles;
1140
		return $mots_cles;
1140
		return $mots_cles;