* @author Jean-Pascal MILCENT * @author Aurelien PERONNET * @license GPL v3 * @license CECILL v2 * @copyright 1999-2014 Tela Botanica */ 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); } } }