Rev 255 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
class OdsStation extends OdsTriple {
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
if(isset($param[0]) && isset($param[1])) {
$id_participant = $param[0];
} else {
return;
}
if($param[1] == "*") {
$info = $this->obtenirListeStationPourParticipant($id_participant);
} else if(is_numeric($param[1])) {
$id_station = $param[1];
$info = $this->obtenirInformationsStation($id_station);
}
$this->envoyer($info);
}
/**
* Méthode appelée pour ajouter un élément.
*/
public function createElement($params) {
$elements_requis = array('id_participant','station_nom', 'station_commune', 'station_lat', 'station_lon','station_milieu','station_alt');
$erreurs = array();
foreach($elements_requis as $requis) {
if(!isset($params[$requis])) {
//$erreurs[$requis] = 'erreur ';
}
}
if(!empty($erreurs)) {
$this->envoyer($erreurs);
}
$id_participant = $params['id_participant'];
$commune = $this->traiterParametreCommune($params);
// description n'est pas obligatoire, et également pour le moment inutilisé
$params['station_description'] = isset($params['station_description']) ? $params['station_description'] : '';
$requete_creation_station = 'INSERT INTO ods_stations '.
'(os_ce_participant, os_nom, os_ce_commune, os_latitude, os_longitude, os_altitude, os_ce_environnement, os_commentaire) '.
'VALUES ('.
$this->proteger($id_participant).','.
$this->proteger($params['station_nom']).','.
$this->proteger($commune).','.
$this->proteger($params['station_lat']).','.
$this->proteger($params['station_lon']).','.
$this->proteger($params['station_alt']).','.
$this->proteger($params['station_milieu']).','.
$this->proteger($params['station_description']).')';
$creation_station = $this->executerRequeteSimple($requete_creation_station);
if(!$creation_station) {
$retour['erreurs'] = 'erreur d\'insertion';
} else {
$retour['id_nouvelle_station'] = $this->renvoyerDernierIdInsere();
}
$this->envoyer($retour);
}
/**
* Méthode appelée pour mettre à jour un élément
*/
public function updateElement($uid, $params) {
$elements_requis = array('id_participant','station_nom', 'station_commune', 'station_lat', 'station_lon','station_milieu','station_alt');
$erreurs = array();
foreach($elements_requis as $requis) {
if(!isset($params[$requis])) {
$erreurs[$requis] = 'erreur ';
}
}
if(!empty($erreurs)) {
$this->envoyer($erreurs);
}
$id_participant = $params['id_participant'];
if(!isset($uid[0])) {
return;
} else {
$id_station = $uid[0];
}
$commune = $this->traiterParametreCommune($params);
$requete_modification_station = 'UPDATE ods_stations '.
'SET '.
'os_nom ='.$this->proteger($params['station_nom']).','.
'os_ce_commune ='.$this->proteger($commune).','.
'os_latitude ='.$this->proteger($params['station_lat']).','.
'os_longitude ='.$this->proteger($params['station_lon']).','.
'os_altitude ='.$this->proteger($params['station_alt']).','.
'os_ce_environnement ='.$this->proteger($params['station_milieu']).','.
'os_commentaire ='.$this->proteger($params['station_description']).' '.
'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
'AND os_id_station = '.$this->proteger($id_station);
$modification_station = $this->executerRequeteSimple($requete_modification_station);
$retour = array();
if(!$modification_station) {
$retour['erreurs'] = 'Erreur lors de la modification de la station';
} else {
$retour['reponse'] = 'OK';
}
$this->envoyer($retour);
}
private function traiterParametreCommune($params) {
// Si on a pas de code INSEE on mettra la valeur brute que
// l'utilisateur a saisi afin de ne pas perdre d'infos
$commune = $params['station_commune'];
// Si un code INSEE semble présent
if(isset($params['station_code_insee']) && trim($params['station_code_insee']) != '') {
// Si c'est le cas affectation directe
if($this->estUnCodeInsee($params)) {
$commune = $params['station_code_insee'];
// Cas du code saisi sans le 0 de gauche
$commune = (strlen($commune) == 4) ? '0'.$commune : $commune;
} elseif($this->estUnCommunePlusDepartement($params)) {
// Cas du département sur un ou deux chiffres + une commune
// tentative de retrouve le code INSEE complet
$params['station_code_insee'] = (strlen($params['station_code_insee']) == 1) ? '0'.$params['station_code_insee'] : $params['station_code_insee'];
$infos = $this->obtenirInformationsCommuneParNomEtDepartement($params['station_commune'], $params['station_code_insee']);
$commune = ($infos != null) ? $infos['oc_code_insee'] : $commune;
//TODO: quoi faire si on a 3 chiffres par exemple ou plus de 5 chiffres ?
}
}
return $commune;
}
private function estUnCodeInsee($params) {
return is_numeric($params['station_code_insee']) &&
(strlen($params['station_code_insee']) == 5 ||
strlen($params['station_code_insee']) == 4);
}
private function estUnCommunePlusDepartement($params) {
return is_numeric($params['station_code_insee']) &&
(strlen($params['station_code_insee']) == 2 ||
strlen($params['station_code_insee']) == 1) &&
isset($params['station_commune']) &&
trim($params['station_commune']) != "";
}
/**
* Méthode appelée pour supprimer un élément
*/
public function deleteElement($uid) {
if(isset($uid[0])) {
$id_participant = $uid[0];
} else {
return;
}
if(isset($uid[1])) {
$id_station = $uid[1];
} else {
return;
}
$requete_suppression_station = 'DELETE FROM ods_stations '.
'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
'AND os_id_station = '.$this->proteger($id_station);
$suppression_station = $this->executerRequeteSimple($requete_suppression_station);
if(!$suppression_station) {
// TODO: comment gère t'on les erreurs ?
}
$this->envoyer();
}
private function obtenirListeStationPourParticipant($id_participant) {
$requete_liste_station = 'SELECT * FROM ods_stations WHERE os_ce_participant = '.$this->proteger($id_participant);
$liste_station = $this->executerRequete($requete_liste_station);
$liste_station_formatees = array();
foreach($liste_station as $indice => $station) {
$station_champs_formates = $this->formaterChampsStationPourEnvoi($station);
$liste_station_formatees[$station['os_id_station']] = $station_champs_formates;
}
return $liste_station_formatees;
}
private function obtenirInformationsStation($id_station) {
$requete_infos_station = 'SELECT * FROM ods_stations WHERE os_id_station = '.$this->proteger($id_station);
$infos_station = $this->executerRequete($requete_infos_station);
$infos_station_formatees = array();
if(!empty($infos_station)) {
$infos_station = $infos_station[0];
$infos_station_formatees = $this->formaterChampsStationPourEnvoi($infos_station);
}
return $infos_station_formatees;
}
private function formaterChampsStationPourEnvoi($station) {
if(is_numeric($station['os_ce_commune'])) {
$commune = $this->obtenirInformationsCommuneParCodeInsee($station['os_ce_commune']);
} else {
$commune = $station['os_ce_commune'];
}
$station_champs_formates = array(
'id' => $station['os_id_station'],
'nom' => $station['os_nom'],
'code_insee' => $station['os_ce_commune'],
'commune' => $commune,
'id_milieu' => $station['os_ce_environnement'],
'milieu' => $this->obtenirInformationsMilieuParId($station['os_ce_environnement']),
'latitude' => $station['os_latitude'],
'longitude' => $station['os_longitude'],
'altitude' => $station['os_altitude'],
'description' => $station['os_commentaire']
);
return $station_champs_formates;
}
private function obtenirInformationsCommuneParCodeInsee($code_insee_commune) {
$requete_infos_commune = 'SELECT * FROM ods_communes WHERE oc_code_insee = '.$this->proteger($code_insee_commune);
$infos_commune = $this->executerRequete($requete_infos_commune);
return $infos_commune[0]['oc_nom'];
}
private function obtenirInformationsCommuneParNomEtDepartement($nom, $departement) {
// un remplacement par des underscores permet de s'affranchir des problèmes de saisie
// des communes avec des tirets espaces etc...
$nom = str_replace(array("'","-",'"',' ') ,'_', $nom);
$requete_infos_commune = 'SELECT oc_nom, oc_code_insee FROM ods_communes '.
'WHERE oc_code_insee LIKE '.$this->proteger($departement.'%').' AND '.
'oc_nom LIKE '.$this->proteger($nom);
$infos_commune = $this->executerRequete($requete_infos_commune);
$retour = null;
if($infos_commune && isset($infos_commune[0])) {
$retour = $infos_commune[0];
}
return $retour;
}
private function obtenirInformationsMilieuParId($id_milieu) {
$informations_milieu = $this->obtenirValeurTripleParId($id_milieu);
return $informations_milieu;
}
}
?>