Subversion Repositories eFlore/Applications.del

Rev

Blame | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Le web service image récupère toutes les données de la table del_obs_images
 * pour retourner une liste d'images associée à une observation
 *
 * @category   DEL
 * @package    Services
 * @subpackage Images
 * @version    0.1
 * @author     Mathias CHOUET <mathias@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 VotesImage {

        private $conteneur;
        private $navigation;
        private $bdd;
        private $mapping = array();
        private $ressources;
        private $parametres;

        public function __construct(Conteneur $conteneur) {
                $this->conteneur = $conteneur;
                $this->navigation = $conteneur->getNavigation();
                $this->bdd = $this->conteneur->getBdd();

                $this->mapping = $this->conteneur->getParametreTableau('votes.tepik');
        }

        /**
         * Méthode principale de la classe.
         * Lance la récupération des images dans la base et les place dans un objet ResultatService
         * pour l'afficher.
         * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
         * @param array $parametres les paramètres situés après le ? dans l'url
         * */
        public function consulter($ressources, $parametres) {
                $this->ressources = $ressources;
                $this->parametres = $parametres;

                // Lancement du service
                $votes = $this->chargerVotes();
                $total = $this->compterVotes();
                $this->navigation->setTotal($total);

                // Mettre en forme le résultat et l'envoyer pour affichage
                $resultat = new ResultatService();
                $resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => $votes);
                return $resultat;
        }

        private function chargerVotes() {
                $idImgP = $this->bdd->proteger($this->ressources[0]);
                $idProtocoleP = isset($this->parametres['protocole']) ? $this->bdd->proteger($this->parametres['protocole']) : null;
                $requete = 'SELECT * FROM del_image_vote '.
                        "WHERE ce_image = $idImgP ".
                        ($idProtocoleP != null ? "AND ce_protocole = $idProtocoleP " : '').
                        ' -- '.__FILE__.' : '.__LINE__;
                $resultats = $this->bdd->recupererTous($requete);
                return $this->formaterVotes($resultats);
        }

        private function compterVotes() {
                $requete = 'SELECT FOUND_ROWS() AS nbre -- '.__FILE__.' : '.__LINE__;
                $resultats = $this->bdd->recuperer($requete);
                return (int) $resultats['nbre'];
        }

        private function formaterVotes($votes) {
                $retour = array();
                foreach ($votes as $vote) {
                        foreach ($vote as $champ => $valeur) {
                                $attribut = $this->mapping[$champ];
                                $retour[$vote['id_vote']][$attribut] = $valeur;
                        }
                }
                return $retour;
        }

        
        
        private function verifierAutorisationProtocoleIdentifie($idProtocole, $idUtilisateur) {
        
                $idProtocoleP = $this->bdd->proteger($idProtocole);
        
                $gestion_utilisateur = $this->conteneur->getUtilisateur();
                $utilisateur = $gestion_utilisateur->getUtilisateur();
                
                $utilisateurAComparer = $gestion_utilisateur->getIdAnonymeTemporaire();
                
                // Si l'utilisateur n'est pas identifié on vérifie que le protocole n'impose
                // pas d'être connecté pour voter, et le cas échéant, on refuse le vote
                if(!$utilisateur['connecte']) {
                        $requete_proto_identifie = 'SELECT identifie FROM del_image_protocole '.
                                        'WHERE id_protocole = '.$idProtocoleP;
                        $proto_identifie = $this->bdd->recuperer($requete_proto_identifie);
        
                        if($proto_identifie['identifie'] == 1) {
                                $msg = "Ce protocole nécéssite d'être identifié pour voter.";
                                throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
                        }                       
                } else {
                        $utilisateurAComparer = $utilisateur['id_utilisateur'];
                }
                
                // Sinon on vérifie tout de même que la personne identifiée est bien celle
                // associée aux votes dans les paramètres
                if($utilisateurAComparer != $idUtilisateur) {
                        $msg = "L'utilisateur identifié et l'utilisateur du vote ne correspondent pas.";
                        throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
                }
        }

}