Rev 2559 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass Dao extends Bdd {private $temps_derniere_requete = 0;public function rechercherCoordonnees($conditions = array()) {if(!empty($conditions)) {$where = 'WHERE '.implode(' AND ', $conditions);}$requete = "SELECT longitude, latitude "."FROM cel_obs ".$where."GROUP BY longitude , latitude ";$resultat = $this->recupererTous($requete);$this->reinitialiserTempsDerniereRequete();return $resultat;}public function rechercherCoordonneesFrancaisesSansCorrespondances() {$conditions = array($this->getConditionCoordonneesValides(),$this->getConditionInfosGeoIncompletes(),$this->getConditionlimiteeALaFrance(),$this->getConditionModifObsRecente());return $this->rechercherCoordonnees($conditions);}public function rechercherCoordonneesFrancaisesSansCorrespondanceDepuisLeDebut() {$conditions = array($this->getConditionCoordonneesValides(),$this->getConditionInfosGeoIncompletes(),$this->getConditionlimiteeALaFrance());return $this->rechercherCoordonnees($conditions);}public function rechercherPaysSansCorrespondance() {$conditions = array($this->getConditionCoordonneesValides(),$this->getConditionSansPays(),$this->getConditionModifObsRecente());return $this->rechercherCoordonnees($conditions);}public function rechercherPaysSansCorrespondanceDepuisLeDebut() {$conditions = array($this->getConditionCoordonneesValides(),$this->getConditionSansPays());return $this->rechercherCoordonnees($conditions);}public function rechercherToutSansCorrespondance() {$conditions = array($this->getConditionCoordonneesValides(),'('.$this->getConditionInfosGeoIncompletes().' OR '.$this->getConditionSansPays().') ',$this->getConditionModifObsRecente());return $this->rechercherCoordonnees($conditions);}public function rechercherSansCorrespondanceDepuisLeDebut() {$conditions = array($this->getConditionCoordonneesValides(),'('.$this->getConditionInfosGeoIncompletes().' OR '.$this->getConditionSansPays().') ');return $this->rechercherCoordonnees($conditions);}private function getConditionModifObsRecente() {$condition = 'DATE_ADD(date_modification, INTERVAL 25 HOUR) >= CURDATE() ';return $condition;}private function getConditionInfosGeoIncompletes() {$condition = '('.'ce_zone_geo IS NULL OR ce_zone_geo = "" OR '.'zone_geo IS NULL OR zone_geo = "" '.') ';return $condition;}private function getConditionlimiteeALaFrance() {$condition = '('.'(latitude <= 51.071667 AND latitude >= 41.316667) AND '.'(longitude <= 9.513333 AND longitude >= -5.140278) '.') ';return $condition;}private function getConditionSansPays() {$condition = '(pays IS NULL OR pays = "XX" OR pays = "")';return $condition;}private function getConditionCoordonneesValides() {$condition = '(latitude IS NOT NULL AND longitude IS NOT NULL '.' AND latitude != 0 AND latitude != "" '.' AND longitude != 0 AND longitude != "" '.' AND latitude >= -90 AND latitude <= 90 '.' AND longitude >= -180 AND longitude <= 180) ';return $condition;}public function creerColonneCodeInseeCalcule() {$create = 'ALTER TABLE cel_obs '.'ADD code_insee_calcule VARCHAR(5) NOT NULL ';$this->requeter($create);$this->reinitialiserTempsDerniereRequete();}public function ajouterCodeInseeCalcule($latitude, $longitude, $code_insee) {$insert = 'UPDATE cel_obs '."SET "."code_insee_calcule = ".$this->proteger($code_insee)." "."WHERE latitude = ".$this->proteger($latitude)." "." AND longitude = ".$this->proteger($longitude)." ";$this->requeter($insert);$this->reinitialiserTempsDerniereRequete();}public function affecterPaysFranceAuxCommunesRenseignees() {$update = "UPDATE cel_obs SET pays = 'FR' "."WHERE "."ce_zone_geo LIKE 'INSEE-C:_____' AND "."zone_geo != '' AND "."zone_geo IS NOT NULL AND "."(pays IS NULL OR pays = '') ";return $this->executer($update);}public function modifierCodeInseeEtZoneGeo($coordonnees) {$codeP = $this->proteger($coordonnees['code_insee']);$codeInseeP = $this->proteger('INSEE-C:'.$coordonnees['code_insee']);$nomP = $this->proteger($coordonnees['nom']);$update = "UPDATE cel_obs "."SET "."pays = 'FR', "."code_insee_calcule = ".$codeP.", "."ce_zone_geo = ".$codeInseeP.", "."zone_geo = IF(zone_geo = '' OR zone_geo = NULL, ".$nomP.", zone_geo) "."WHERE "." latitude = ".$this->proteger($coordonnees['latitude'])." "." AND longitude = ".$this->proteger($coordonnees['longitude'])." ";$this->requeter($update);$this->reinitialiserTempsDerniereRequete();}public function modifierPays($coordonnees) {$codePaysP = $this->proteger($coordonnees['code_pays']);$nomP = $this->proteger($coordonnees['nom']);$update = "UPDATE cel_obs "."SET "."pays = ".$codePaysP.", "."zone_geo = IF(zone_geo = '' OR zone_geo = NULL, ".$nomP.", zone_geo) "."WHERE "." latitude = ".$this->proteger($coordonnees['latitude'])." "." AND longitude = ".$this->proteger($coordonnees['longitude'])." ";$this->requeter($update);$this->reinitialiserTempsDerniereRequete();}// Il peut se passer assez de temps sans qu'aucune requete ne soit effectuée// (cas d'un grand nombre d'enregistrements à la suite pour lesquels on ne trouve// aucun département). Pour éviter cela on teste régulièrement la connectionpublic function testerActiviteConnection() {$temps_courant = microtime(true);$temps_depuis_derniere_requete = $temps_courant - $this->temps_derniere_requete;if($temps_depuis_derniere_requete >= 18) {$this->ping();$this->reinitialiserTempsDerniereRequete();}}private function reinitialiserTempsDerniereRequete() {$this->temps_derniere_requete = microtime(true);}}