Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 297 | 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);
        $params['station_description'] = empty($params['station_description']) ? '' : $params['station_description'];
        
        $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;
        
    }
}
?>