Subversion Repositories eFlore/Applications.cel

Rev

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

<?php
// declare(encoding='UTF-8');
/**
 * Cas d'utilisation :
 * GET : Service recherche d'observations a partir de divers critères
 *  a: Le service recherche les observations correspondant aux critères demandés
 *  b: Le service renvoie la liste des observations correspondantes
 *
 * POST : Service modification en masse d'observations
 *  a: Le service recherche les observations correspondant aux identifiants donnés
 *  b: Le service modifie les observations correspondantes avec les infos données en paramètres
 *
 * DELETE : Service de suppression d'observations en masse
 *  a: Le service recherche les observations correspondant aux critères demandés
 *  b: Le service supprime la liste des observations correspondantes
 *
 * @internal   Mininum PHP version : 5.2
 * @category   CEL
 * @package    Services
 * @subpackage Mots-clés
 * @version    0.1
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
 * @author    Raphaël Droz <raphael@tela-botanica.org>
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
 */
class InventoryObservationList extends Cel {

        /**
         * Renvoie les observations correspondant au critères de filtrage
         *
         * uid[0] : utilisateur obligatoire
         * uid[1] : criteres de filtrage de la forme critere1=valeur1&critere2=valeur2
         */
        public function getElement($uid) {
                // Controle detournement utilisateur
                $this->controleUtilisateur($uid[0]);

                $chercheur_observations = new RechercheObservation($this->config);

                $numero_page = 0;
                $taille_page = 50;
                $criteres = array();

                $criteres = $_GET ;
                if (isset($criteres['numero_page']) && isset($criteres['limite'])) {
                        $numero_page = $criteres['numero_page'];
                        unset($criteres['numero_page']);
                        $taille_page = $criteres['limite'];
                        unset($criteres['limite']);
                }

                $debut = $taille_page*$numero_page ;

                $retour = $chercheur_observations->rechercherObservations($uid[0], $criteres, $debut, $taille_page)->get();
                $retour_formate = $chercheur_observations->formaterPourEnvoiCel($retour);

                $this->envoyerJson($retour_formate);
                return true;
        }

        /**
         * met à jour les métadonnées d'une liste d'observations
         *
         * uid[0] : utilisateur obligatoire
         * uid[1] : ordres des observations à modifier séparés par des virgules
         * pairs : données à mettre à jour sous la forme de clés => valeurs
         */
        public function updateElement($uid,$pairs) {
                // Controle detournement utilisateur
                $this->controleUtilisateur($uid[0]);

                if (!isset($uid[1])) {
                        //TODO: envoyer un message d'erreur
                        return;
                }

                $obs = array_filter(explode(',', $uid[1]), 'is_numeric');
                if (count($obs) == 0) {
                        return;
                }

                $gestionnaire_observation = new GestionObservation($this->config);
                if (count($obs) == 1) {
                        return $gestionnaire_observation->modifierObservation($uid[0], $obs[0], $pairs);
                }

                // cas de mise à jour de multiples observations:
                $ret = GestionObservation::modifierMultiplesObservation($uid[0], $obs, $pairs);
                if ($ret === false) {
                        return false; // JRest::badRequest();
                }
                if ($ret === 0) {
                        header('HTTP/1.0 304 Not Modified');
                } else {
                        header('HTTP/1.0 200 OK'); // et non pas une 201 !
                }
                die();
        }

        /**
        * Supprime une liste d'observations
        *
        * uid[0] : utilisateur obligatoire
        * uid[1] : ordres des observations à supprimer séparés par des virgules
        */
        public function deleteElement($uid) {
                // Controle detournement utilisateur
                $this->controleUtilisateur($uid[0]);

                if (!isset($uid[1])) {
                        //TODO: envoyer un message d'erreur
                        return;
                }
                $uid[1] = rtrim($uid[1], ',');

                $gestionnaireObs = new GestionObservation($this->config);
                $tableau_ordres = explode(',', $uid[1]);
                foreach ($tableau_ordres as $ordre) {
                        $ids_obs[] = $gestionnaireObs->renvoyerIdPourOrdre($uid[0], $ordre);
                }

                $suppression_observations = $gestionnaireObs->supprimerObservation($uid[0], $uid[1]);

                $gestionnaireChampsEtendus = new GestionChampsEtendus($this->config, 'obs');
                $gestionnaireChampsEtendus->viderParLots($ids_obs);

                if ($suppression_observations) {
                        echo 'OK';
                }
                exit() ;
        }
}