Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 284 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

class OdsEspece extends OdsTriple {

        const PREFIXE = 'get';
        const ABBR_LISTE_TYPE_ESPECE = 'type_espece';
        
        /**
     * Méthode appelée avec une requête de type GET.
     *
     */
    function getElement($param = array()) {
                        
        $type = $param[0];
        
        if ($type == '*' || is_numeric($type)) {
            $info = $this->getElementParDefaut($param);
        } else {
            $methode = self::PREFIXE.$type;
            if (method_exists($this, $methode)) {
                array_shift($param);
                $info = $this->$methode($param);
            } else {
                $this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
            }
        }
       
        // Envoi sur la sortie standard
        $this->envoyer($info);
    }
   
    /**
     * Méthode appelée pour ajouter un élément.
     */
    public function createElement($params) {  
                // fonction devant uniquement être appelée depuis le serveur
        // lui-même, cad par l'application de saisie
        $controle = new ControleUtilisateur($this->config);
        $controle->controleAppelIpAutorisee();

        $requete = 'INSERT INTO ods_especes ';
        $champs = array('oe_id_espece');
        $valeurs = array("''");
        foreach($params as $param => $valeur) {
                $champs[] = 'oe_'.$param;
                $valeurs[] = $this->proteger($valeur);
        }
        $champs[] = 'oe_ce_climat';
        $valeurs[] = $this->proteger(0);
        $requete .= '('.implode(', ', $champs).') VALUES ('.implode(', ', $valeurs).')';
        
        $ajout_espece = $this->executerRequeteSimple($requete);
         
        if(!$ajout_espece) {
                $retour['erreurs'] = 'erreur d\'ajout';
        } else {
                $retour = 'ok';
        }
         
        $this->envoyer($retour);
    }
   
    /**
     * Méthode appelée pour mettre à jour un élément
     */
    public function updateElement($uid, $params)    {   
        // fonction devant uniquement être appelée depuis le serveur
        // lui-même, cad par l'application de saisie
        $controle = new ControleUtilisateur($this->config);
        $controle->controleAppelIpAutorisee();

        $requete = 'UPDATE ods_especes SET ';   
        foreach($params as $param => $valeur) {
                $requete .= 'oe_'.$param.' = '.$this->proteger($valeur).', ';
        }
        $requete = rtrim ($requete, ', ');
        $requete .= ' WHERE oe_id_espece = '.$this->proteger($uid[0]);
        
        $modification_espece = $this->executerRequeteSimple($requete);
         
        if(!$modification_espece) {
                $retour['erreurs'] = 'erreur de modification';
        } else {
                $retour = 'ok';
        }
         
        $this->envoyer($retour);
    }
   
    /**
     * Méthode appelée pour supprimer un élément
     */
    public function deleteElement($uid) {

        //TODO: méthode de suppression d'espèce spéciale aux admins
    }
    
/** ======================= Methodes d'accès au informations ================================ */   
    
    private function getElementParDefaut() {
        return $this->getEspecesParType();
    }
    
    private function getEspece($params) {
        
        $id_espece = $params[0];
        
        $requete_informations_espece = 'SELECT * FROM ods_especes '.
                                                                   'WHERE oe_id_espece = '.$this->proteger($id_espece);
        
        $informations_espece = $this->executerRequete($requete_informations_espece);
        
        $informations_espece_formatees = array();
        
        if(!empty($informations_espece)) {
                $informations_espece_formatees = $this->formaterTableauEspecePourEnvoi($informations_espece[0]);
        }
        
        return $informations_espece_formatees;
    }

    private function getEspecesPourStation($params) {
        
        $id_station = $params[0];
        
        $requete_especes_pour_station = 'SELECT * FROM ods_especes '.
                                                                    'WHERE oe_id_espece IN '.
                                                                        '( '.
                                                                                        'SELECT oi_ce_espece FROM ods_individus '. 
                                                                                                'WHERE oi_ce_station = '.$this->proteger($id_station).
                                                                                ') '.
                                                                        ' AND oe_espece_active = 1 '.   
                                                                        'ORDER BY oe_ce_type, oe_nom_vernaculaire';

                
        $especes_pour_station = $this->executerRequete($requete_especes_pour_station);
        
        foreach($especes_pour_station as &$espece_dans_station) {
                
                $espece_dans_station = $this->formaterTableauEspecePourEnvoi($espece_dans_station);             
        }
        
            return $especes_pour_station;
    }
    
    private function getEspecesActivesParType() {
        return $this->getEspecesParType(true);
    }
    
    private function getEspecesParType() {
        return $this->obtenirEspecesParType(false);
    }
    
    private function getEspecesParTypeAdmin() {  
        return $this->obtenirEspecesParType(true);
    }
    
    private function obtenirEspecesParType($toutes_les_especes = false) {
        
        $requete_toute_espece = 'SELECT * FROM ods_especes '.
                                                        ($toutes_les_especes ? '' : ' WHERE oe_espece_active = 1 ').
                                'ORDER BY oe_ce_type, oe_nom_vernaculaire';
        $liste_espece = $this->executerRequete($requete_toute_espece);
         
        $liste_type_espece = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_TYPE_ESPECE);
         
        $especes_par_type = array();
         
        foreach($liste_espece as $espece) {
        
                $espece = $this->formaterTableauEspecePourEnvoi($espece);
        
                $type = $espece['type'];
                $nom_type = $liste_type_espece[$type]['ot_valeur'];
        
                if(!isset($especes_par_type[$type])) {
                        $especes_par_type[$type] = array(
                                        'nom' => $nom_type,
                                        'especes' => array()
                        );
                }
        
                $especes_par_type[$type]['especes'][$espece['id_espece']] = $espece;
        }
         
        return $especes_par_type;
    }
    
        public function getToutesEspeces() {
        
        $requete_toute_espece = 'SELECT * FROM ods_especes WHERE oe_espece_active = 1 ORDER BY oe_nom_vernaculaire ';
        $liste_espece = $this->executerRequete($requete_toute_espece);
         
        $liste_type_espece = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_TYPE_ESPECE);    
        
        $especes_par_id = array();

        foreach($liste_espece as $espece) {
                
                $espece = $this->formaterTableauEspecePourEnvoi($espece);
                $especes_par_id[$espece['id_espece']] = $espece;                
        }

            return $especes_par_id;
    }
    
    private function formaterTableauEspecePourEnvoi($espece) {
        
        return array( 
            'id_espece' => $espece['oe_id_espece'],
            'nom_vernaculaire' => $espece['oe_nom_vernaculaire'],
            'nom_scientifique' => $espece['oe_nom_scientifique'],
            'espece_ecole' => $espece['oe_espece_ecole'],
            'description' => $espece['oe_description'],
            'climat' => $espece['oe_ce_climat'],
            'evenements' => $espece['oe_ce_evenements'],
            'type' => $espece['oe_ce_type'],
                'active' => $espece['oe_espece_active']
        );      
    }
}
?>