Subversion Repositories eFlore/Applications.cel

Rev

Rev 2526 | Rev 2528 | Go to most recent revision | Details | Compare with Previous | 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);
1520 aurelien 17
		$this->reinitialiserTempsDerniereRequete();
1500 delphine 18
		return $resultat;
19
	}
2436 jpm 20
 
2527 aurelien 21
	public function rechercherCoordonneesSansCorrespondances() {
22
		$conditions = array(
23
						$this->getConditionCoordonneesValides(),
24
						$this->getConditionInfosGeoIncompletes(),
25
						$this->getConditionlimiteeALaFrance(),
26
						$this->getConditionModifObsRecente()
27
					);
28
 
29
		return $this->rechercherCoordonnees($conditions);
1517 aurelien 30
	}
2525 aurelien 31
 
32
	public function rechercherCoordonneesSansCorrespondanceDepuisLeDebut() {
2527 aurelien 33
		$conditions = array(
34
						$this->getConditionCoordonneesValides(),
35
						$this->getConditionInfosGeoIncompletes(),
36
						$this->getConditionlimiteeALaFrance()
37
					);
38
 
39
		return $this->rechercherCoordonnees($conditions);
2525 aurelien 40
	}
2527 aurelien 41
 
42
 
43
	private function getConditionModifObsRecente() {
44
		$condition = 'DATE_ADD(date_modification, INTERVAL 25 HOUR) >= CURDATE() ';
45
		return $condition;
46
	}
47
 
48
	private function getConditionInfosGeoIncompletes() {
49
		$condition = '('.
50
						'(ce_zone_geo IS NULL OR ce_zone_geo = "") AND '.
51
						'(zone_geo IS NULL OR zone_geo = "") '.
52
					 ') ';
53
		return $condition;
54
	}
55
 
56
	private function getConditionlimiteeALaFrance() {
57
		$condition = '('.
58
						'(latitude <= 51.071667 AND latitude >= 41.316667) AND '.
59
					 	'(longitude <= 9.513333 AND longitude >= -5.140278) '.
60
					 ') ';
61
		return $condition;
62
	}
63
 
64
	private function getConditionCoordonneesValides() {
65
		$condition = '(latitude IS NOT NULL AND longitude IS NOT NULL '.
66
					 ' AND latitude != 0 AND latitude != "" '.
67
					 ' AND longitude != 0 AND longitude != "" ) ';
68
		return $condition;
69
	}
2436 jpm 70
 
1523 aurelien 71
	public function creerColonneCodeInseeCalcule() {
72
		$create = 'ALTER TABLE cel_obs '.
73
			'ADD code_insee_calcule VARCHAR(5) NOT NULL ';
1500 delphine 74
		$this->requeter($create);
1520 aurelien 75
		$this->reinitialiserTempsDerniereRequete();
1500 delphine 76
	}
2436 jpm 77
 
1523 aurelien 78
	public function ajouterCodeInseeCalcule($latitude, $longitude, $code_insee) {
79
		$insert = 'UPDATE cel_obs '.
2527 aurelien 80
			"SET ".
81
			"code_insee_calcule = ".$this->proteger($code_insee)." ".
1523 aurelien 82
			"WHERE latitude = ".$this->proteger($latitude)." ".
83
			"	AND longitude = ".$this->proteger($longitude)." ";
1500 delphine 84
		$this->requeter($insert);
1520 aurelien 85
		$this->reinitialiserTempsDerniereRequete();
1500 delphine 86
	}
2436 jpm 87
 
1523 aurelien 88
	public function modifierCodeInseeEtZoneGeo($coordonnees) {
89
		$update = "UPDATE cel_obs ".
2527 aurelien 90
			"SET ".
91
				"code_insee_calcule = ".$this->proteger($coordonnees['code_insee']).", ".
92
				"ce_zone_geo = ".$this->proteger('INSEE-C:'.$coordonnees['code_insee']).", ".
1523 aurelien 93
		    	"zone_geo = ".$this->proteger($coordonnees['nom'])." ".
2527 aurelien 94
			"WHERE ".
95
			" latitude = ".$this->proteger($coordonnees['latitude'])." ".
96
			" AND longitude = ".$this->proteger($coordonnees['longitude'])." ";
1500 delphine 97
		$this->requeter($update);
1520 aurelien 98
		$this->reinitialiserTempsDerniereRequete();
1500 delphine 99
	}
2436 jpm 100
 
1520 aurelien 101
	// Il peut se passer assez de temps sans qu'aucune requete ne soit effectuée
102
	// (cas d'un grand nombre d'enregistrements à la suite pour lesquels on ne trouve
103
	// aucun département). Pour éviter cela on teste régulièrement la connection
104
	public function testerActiviteConnection() {
105
		$temps_courant = microtime(true);
106
		$temps_depuis_derniere_requete = $temps_courant - $this->temps_derniere_requete;
107
		if($temps_depuis_derniere_requete >= 18) {
108
			$this->ping();
109
			$this->reinitialiserTempsDerniereRequete();
110
		}
111
	}
2436 jpm 112
 
1520 aurelien 113
	private function reinitialiserTempsDerniereRequete() {
114
		$this->temps_derniere_requete = microtime(true);
115
	}
2436 jpm 116
}