New file |
0,0 → 1,120 |
<?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); |
} |
} |
|
} |