Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 284 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

class OdsIndividu extends JRestService {

        const PREFIXE = 'get';

        /**
     * 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) {

      $elements_requis = array('id_participant','id_espece','id_station','individu_nom');

        foreach($elements_requis as $requis) {
                if(!isset($params[$requis])) {
                                        //TODO: pourquoi est-ce que c'est commenté ça ?
                        //$erreurs[$requis] = 'erreur ';
                }
        }

        if(!empty($erreurs)) {
                $this->envoyer($erreurs);
        }

                        // commentaire optionnel
                        $commentaire = !empty($params['individu_commentaire']) ? $params['individu_commentaire'] : '';
                        // limité à 1000 caractères (pas besoin de renvoyer une erreur ici car c'est un cas très peu fréquent)
                        $commentaire = substr($commentaire, 0, 1000);

        $requete_creation_individu = 'INSERT INTO ods_individus '.
                                        '(oi_ce_espece, oi_ce_station, oi_nom, oi_commentaire) '.
                                        'VALUES ('.
                                                        $this->proteger($params['id_espece']).','.
                                                        $this->proteger($params['id_station']).','.
                                                        $this->proteger($params['individu_nom']).','.
                                                        $this->proteger($commentaire).')';
                        $creation_individu = $this->executerRequeteSimple($requete_creation_individu);


        if(!$creation_individu) {
                $retour['erreurs'] = 'erreur d\'insertion';
        } else {
                $retour['id_nouvel_individu'] = $this->renvoyerDernierIdInsere();
        }

        $this->envoyer($retour);
    }

    /**
     * Méthode appelée pour mettre à jour un élément
     */
    public function updateElement($uid, $params)    {

      if(isset($uid[0])) {
                $id_individu = $uid[0];
        } else {
                return;
        }

                        // commentaire optionnel
                        $commentaire = !empty($params['individu_commentaire']) ? $params['individu_commentaire'] : '';
                        // limité à 1000 caractères (pas besoin de renvoyer une erreur ici car c'est un cas très peu fréquent)
                        $commentaire = substr($commentaire, 0, 1000);

      $requete_modification_individu = 'UPDATE ods_individus '.
                        'SET oi_nom = '.$this->proteger($params['individu_nom']).' ';

                        // mise à jour éventuelle du commentaire optionnel
                        if(!empty($params['individu_commentaire'])) {
                                $requete_modification_individu .= ', oi_commentaire = '.$this->proteger($params['individu_commentaire']).' ';
                        }
      $requete_modification_individu .= 'WHERE oi_id_individu = '.$this->proteger($id_individu);
                        $modification_individu = $this->executerRequeteSimple($requete_modification_individu);

      $this->envoyer();
    }

    /**
     * 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_individu = $uid[1];
        } else {
                return;
        }

        $requete_suppression_individu = 'DELETE FROM ods_individus '.
                'WHERE oi_id_individu = '.$this->proteger($id_individu).' '.
                'AND oi_ce_station IN '.
                        '(SELECT os_id_station FROM ods_stations '.
                                'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
                        ')';

        $suppression_individu = $this->executerRequeteSimple($requete_suppression_individu);

        if(!$suppression_individu) {
                // TODO: comment gère t'on les erreurs ?
        }

        // Envoie sur la sortie standard
        $this->envoyer();
    }

    private function getElementParDefaut($params) {
        return $this->getInformationsIndividu($params);
    }

    private function getInformationsIndividu($params) {

        $id_individu = $params[0];

        $requete_informations_individu = 'SELECT * FROM ods_individus '.
                                                                'WHERE oi_id_individu = '.$this->proteger($id_individu);

        $informations_individu = $this->executerRequete($requete_informations_individu);

        if(!empty($informations_individu)) {
                $informations_individu_formatees = $this->formaterTableauIndividuPourEnvoi($informations_individu[0]);
        }

        return $informations_individu_formatees;

    }

    private function getIndividusPourStation($params) {

        $id_station = $params[0];

                $requete_individus_station = 'SELECT oi.* FROM ods_individus oi '.
                                             'INNER JOIN ods_especes oe '.
                                             'ON oi.oi_ce_espece = oe.oe_id_espece '.
                                             'AND oe.oe_espece_active = 1 '.
                                                                         'WHERE oi_ce_station = '.$this->proteger($id_station);
        $liste_individus_pour_station = $this->executerRequete($requete_individus_station);

        foreach($liste_individus_pour_station as &$individu_pour_station) {

                $individu_pour_station = $this->formaterTableauIndividuPourEnvoi($individu_pour_station);
        }

        return $liste_individus_pour_station;
    }

        private function getIndividusPourStationPourEspece($params) {

        $id_station = $params[0];
        $id_espece = $params[1];

                $requete_individus_station_espece = 'SELECT * FROM ods_individus '.
                                                                         'WHERE oi_ce_station = '.$this->proteger($id_station).' '.
                                                                         'AND oi_ce_espece ='.$this->proteger($id_espece);

        $liste_individus_pour_station_pour_espece = $this->executerRequete($requete_individus_station_espece);

                foreach($liste_individus_pour_station_pour_espece as &$individu_pour_station_pour_espece) {

                $individu_pour_station_pour_espece = $this->formaterTableauIndividuPourEnvoi($individu_pour_station_pour_espece);
        }

        return $liste_individus_pour_station_pour_espece;
    }

        private function formaterTableauIndividuPourEnvoi($individu) {

        return array(
            'id_individu' => $individu['oi_id_individu'],
          'id_espece' => $individu['oi_ce_espece'],
          'id_station' => $individu['oi_ce_station'],
                'nom' => $individu['oi_nom'],
                                        'commentaire' => $individu['oi_commentaire'],
      );

    }
}
?>