Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1500 delphine 1
<?php
2
class Dao extends Bdd {
2436 jpm 3
 
1520 aurelien 4
	private $temps_derniere_requete = 0;
2436 jpm 5
 
2527 aurelien 6
	public function rechercherCoordonnees($conditions = array()) {
7
		if(!empty($conditions)) {
8
			$where = 'WHERE '.implode(' AND ', $conditions);
9
		}
10
 
1523 aurelien 11
		$requete = "SELECT longitude, latitude ".
12
			"FROM cel_obs ".
2527 aurelien 13
			$where.
1523 aurelien 14
			"GROUP BY longitude , latitude ";
2527 aurelien 15
 
1500 delphine 16
		$resultat = $this->recupererTous($requete);
2541 aurelien 17
		echo $requete;exit;
1520 aurelien 18
		$this->reinitialiserTempsDerniereRequete();
1500 delphine 19
		return $resultat;
20
	}
2436 jpm 21
 
2533 aurelien 22
	public function rechercherCoordonneesFrancaisesSansCorrespondances() {
2527 aurelien 23
		$conditions = array(
24
						$this->getConditionCoordonneesValides(),
25
						$this->getConditionInfosGeoIncompletes(),
26
						$this->getConditionlimiteeALaFrance(),
27
						$this->getConditionModifObsRecente()
28
					);
29
 
30
		return $this->rechercherCoordonnees($conditions);
1517 aurelien 31
	}
2525 aurelien 32
 
2533 aurelien 33
	public function rechercherCoordonneesFrancaisesSansCorrespondanceDepuisLeDebut() {
2527 aurelien 34
		$conditions = array(
35
						$this->getConditionCoordonneesValides(),
36
						$this->getConditionInfosGeoIncompletes(),
37
						$this->getConditionlimiteeALaFrance()
38
					);
39
 
40
		return $this->rechercherCoordonnees($conditions);
2525 aurelien 41
	}
2527 aurelien 42
 
2533 aurelien 43
	public function rechercherPaysSansCorrespondance() {
44
		$conditions = array(
45
				$this->getConditionCoordonneesValides(),
46
				$this->getConditionSansPays(),
47
				$this->getConditionModifObsRecente()
48
		);
49
 
50
		return $this->rechercherCoordonnees($conditions);
51
	}
2527 aurelien 52
 
2533 aurelien 53
	public function rechercherPaysSansCorrespondanceDepuisLeDebut() {
54
		$conditions = array(
55
				$this->getConditionCoordonneesValides(),
56
				$this->getConditionSansPays()
57
		);
58
 
59
		return $this->rechercherCoordonnees($conditions);
60
	}
61
 
62
	public function rechercherToutSansCorrespondance() {
63
		$conditions = array(
64
				$this->getConditionCoordonneesValides(),
65
				'('.
66
					$this->getConditionInfosGeoIncompletes().' OR '.
67
					$this->getConditionSansPays().
68
				') ',
69
				$this->getConditionModifObsRecente()
70
		);
71
 
72
		return $this->rechercherCoordonnees($conditions);
73
	}
74
 
75
	public function rechercherSansCorrespondanceDepuisLeDebut() {
76
		$conditions = array(
77
				$this->getConditionCoordonneesValides(),
78
				'('.
79
				$this->getConditionInfosGeoIncompletes().' OR '.
80
				$this->getConditionSansPays().
81
				') '
82
		);
83
		return $this->rechercherCoordonnees($conditions);
84
	}
85
 
86
 
2527 aurelien 87
	private function getConditionModifObsRecente() {
88
		$condition = 'DATE_ADD(date_modification, INTERVAL 25 HOUR) >= CURDATE() ';
89
		return $condition;
90
	}
91
 
92
	private function getConditionInfosGeoIncompletes() {
93
		$condition = '('.
2528 aurelien 94
						'ce_zone_geo IS NULL OR ce_zone_geo = "" OR '.
95
						'zone_geo IS NULL OR zone_geo = "" '.
2527 aurelien 96
					 ') ';
97
		return $condition;
98
	}
99
 
100
	private function getConditionlimiteeALaFrance() {
101
		$condition = '('.
102
						'(latitude <= 51.071667 AND latitude >= 41.316667) AND '.
103
					 	'(longitude <= 9.513333 AND longitude >= -5.140278) '.
104
					 ') ';
105
		return $condition;
106
	}
2533 aurelien 107
 
108
	private function getConditionSansPays() {
109
		$condition = '(pays IS NULL OR pays = "XX" OR pays = "")';
110
		return $condition;
111
	}
2527 aurelien 112
 
113
	private function getConditionCoordonneesValides() {
114
		$condition = '(latitude IS NOT NULL AND longitude IS NOT NULL '.
115
					 ' AND latitude != 0 AND latitude != "" '.
2541 aurelien 116
					 ' AND longitude != 0 AND longitude != "" '.
117
					 ' AND latitude >= -90 AND latitude <= 90 '.
118
					 ' AND longitude >= -180 AND longitude <= 180) ';
2527 aurelien 119
		return $condition;
120
	}
2436 jpm 121
 
1523 aurelien 122
	public function creerColonneCodeInseeCalcule() {
123
		$create = 'ALTER TABLE cel_obs '.
124
			'ADD code_insee_calcule VARCHAR(5) NOT NULL ';
1500 delphine 125
		$this->requeter($create);
1520 aurelien 126
		$this->reinitialiserTempsDerniereRequete();
1500 delphine 127
	}
2436 jpm 128
 
1523 aurelien 129
	public function ajouterCodeInseeCalcule($latitude, $longitude, $code_insee) {
130
		$insert = 'UPDATE cel_obs '.
2527 aurelien 131
			"SET ".
132
			"code_insee_calcule = ".$this->proteger($code_insee)." ".
1523 aurelien 133
			"WHERE latitude = ".$this->proteger($latitude)." ".
134
			"	AND longitude = ".$this->proteger($longitude)." ";
1500 delphine 135
		$this->requeter($insert);
1520 aurelien 136
		$this->reinitialiserTempsDerniereRequete();
1500 delphine 137
	}
2436 jpm 138
 
1523 aurelien 139
	public function modifierCodeInseeEtZoneGeo($coordonnees) {
2528 aurelien 140
 
141
		$codeP = $this->proteger($coordonnees['code_insee']);
142
		$codeInseeP = $this->proteger('INSEE-C:'.$coordonnees['code_insee']);
143
		$nomP = $this->proteger($coordonnees['nom']);
144
 
1523 aurelien 145
		$update = "UPDATE cel_obs ".
2527 aurelien 146
			"SET ".
2533 aurelien 147
				"pays = 'FR', ".
2528 aurelien 148
				"code_insee_calcule = ".$codeP.", ".
149
				"ce_zone_geo = ".$codeInseeP.", ".
150
		    	"zone_geo = IF(zone_geo = '' OR zone_geo = NULL, ".$nomP.", zone_geo) ".
2527 aurelien 151
			"WHERE ".
152
			" latitude = ".$this->proteger($coordonnees['latitude'])." ".
153
			" AND longitude = ".$this->proteger($coordonnees['longitude'])." ";
1500 delphine 154
		$this->requeter($update);
1520 aurelien 155
		$this->reinitialiserTempsDerniereRequete();
1500 delphine 156
	}
2533 aurelien 157
 
158
	public function modifierPays($coordonnees) {
159
		$codePaysP = $this->proteger($coordonnees['code_pays']);
160
		$nomP = $this->proteger($coordonnees['nom']);
161
 
162
		$update = "UPDATE cel_obs ".
163
				"SET ".
164
				"pays = ".$codePaysP.", ".
165
				"zone_geo = IF(zone_geo = '' OR zone_geo = NULL, ".$nomP.", zone_geo) ".
166
				"WHERE ".
167
				" latitude = ".$this->proteger($coordonnees['latitude'])." ".
168
				" AND longitude = ".$this->proteger($coordonnees['longitude'])." ";
169
		$this->requeter($update);
170
		$this->reinitialiserTempsDerniereRequete();
171
	}
2436 jpm 172
 
1520 aurelien 173
	// Il peut se passer assez de temps sans qu'aucune requete ne soit effectuée
174
	// (cas d'un grand nombre d'enregistrements à la suite pour lesquels on ne trouve
175
	// aucun département). Pour éviter cela on teste régulièrement la connection
176
	public function testerActiviteConnection() {
177
		$temps_courant = microtime(true);
178
		$temps_depuis_derniere_requete = $temps_courant - $this->temps_derniere_requete;
179
		if($temps_depuis_derniere_requete >= 18) {
180
			$this->ping();
181
			$this->reinitialiserTempsDerniereRequete();
182
		}
183
	}
2436 jpm 184
 
1520 aurelien 185
	private function reinitialiserTempsDerniereRequete() {
186
		$this->temps_derniere_requete = microtime(true);
187
	}
2436 jpm 188
}