Subversion Repositories eFlore/Applications.del

Rev

Rev 1440 | Rev 1450 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1252 aurelien 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Le web service récupére un identifiant de proposition et appelle un service web externe
5
 * (du cel) afin de modifier le nom de l'observation associée par celui de la proposition
6
 *
7
 * @category	php 5.2
8
 * @package	del
9
 * @subpackage images
10
 * @author		Aurélien Peronnet <aurelien@tela-botanica.org>
11
 * @copyright	Copyright (c) 2013, Tela Botanica (accueil@tela-botanica.org)
12
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
13
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
14
 * @version	$Id$
15
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
16
 */
17
 
18
class ValiderDetermination {
19
 
20
	private $conteneur;
21
	private $navigation;
22
	private $masque;
23
	private $gestionBdd;
24
	private $bdd;
25
	private $parametres = array();
26
	private $ressources = array();
27
 
28
	public function __construct(Conteneur $conteneur = null) {
29
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
30
		$this->conteneur->chargerConfiguration('config_determinations.ini');
31
		$this->gestionBdd = $conteneur->getGestionBdd();
32
		$this->bdd = $this->gestionBdd->getBdd();
33
	}
34
 
35
	public function modifier($ressources, $parametres) {
36
		$this->verifierParametres($ressources, $parametres);
37
		$id_proposition = $ressources[1];
38
 
1444 raphael 39
		if(!$this->modifierObservationParDetermination($id_proposition, $parametres))
1252 aurelien 40
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
1444 raphael 41
 
42
		RestServeur::envoyerEnteteStatutHttp(RestServeur::HTTP_CODE_OK);
1252 aurelien 43
	}
44
 
45
	public function verifierParametres($ressources, $parametres) {
46
		$erreurs = array();
47
		if (!is_numeric($ressources[1])) {
48
			$erreurs[] = '- le paramètre indiquant l\'identifiant de la proposition doit être numérique ;';
49
		}
50
 
51
		//Le paramètre auteur.id (id de l'auteur de la détermination)
52
		// est là pour éviter que le $_POST ne soit vide
53
		if (!isset($parametres['auteur.id'])) {
54
			$erreurs[] = '- paramètre "auteur.id" manquant ;';
55
		}
56
 
1440 raphael 57
		if ($erreurs) {
58
			throw new Exception("Erreur lors de la configuration :\n" . implode("\n", $erreurs),
59
								RestServeur::HTTP_CODE_ERREUR);
1252 aurelien 60
		}
61
	}
62
 
63
 
64
	private function modifierObservationParDetermination($id_proposition, $parametres) {
1440 raphael 65
		$informations_proposition = self::obtenirInformationDetermination($this->bdd, $id_proposition, $parametres['auteur.id']);
1444 raphael 66
		if(! $informations_proposition) {
67
			throw new Exception("Cette proposition est invalide.", RestServeur::HTTP_CODE_ERREUR);
68
		}
69
 
1252 aurelien 70
		$id_observation = $informations_proposition['ce_observation'];
1440 raphael 71
		// obtenirInformationsObservation()
72
		$informations_observation = $this->bdd->recuperer(sprintf('SELECT * FROM del_observation WHERE id_observation = %d',
73
																  intval($id_observation)));
74
		$est_autorise = $this->comparerAuteurObservationUtilisateurIdentifie($informations_observation['ce_utilisateur']);
75
		if(! $est_autorise) {
76
			throw new Exception("Seul l'utilisateur ayant saisi l'observation peut la valider : veuillez vous identifier.\n",
77
								RestServeur::HTTP_CODE_ERREUR);
78
		}
79
 
1260 aurelien 80
		$informations_proposition['ce_utilisateur'] = $informations_observation['ce_utilisateur'];
1444 raphael 81
 
82
		$ret = $this->envoyerRequeteModificationObservation($id_observation, $informations_proposition);
83
		// cf cel/jrest/services/CelValidationObservation.php::updateElement()
84
		// TODO: check sur HTTP code == 200, plutôt que sur texte
85
		if($ret == 'ok' || $ret == 'OK') {
86
			// remet à 0 le status "proposition_retenue" pour toutes les propositions faites sur cette
87
			// observation à l'exception de celle désormais validée
88
			$this->bdd->requeter(sprintf('UPDATE del_commentaire SET proposition_retenue = IF(id_commentaire = %d, 1, 0)' .
89
										 ' WHERE ce_observation = %d -- %s',
90
										 $informations_proposition['id_commentaire'], $id_observation, __FILE__ . ':' . __LINE__));
91
		}
92
		return $ret;
1252 aurelien 93
	}
94
 
1440 raphael 95
	private function comparerAuteurObservationUtilisateurIdentifie($ce_utilisateur) {
1252 aurelien 96
		$controle_utilisateur = new ControleAcces($this->conteneur);
97
		$utilisateur_connecte = $controle_utilisateur->getInfosUtilisateurConnecte();
1440 raphael 98
		return $ce_utilisateur == $utilisateur_connecte['id_utilisateur'];
1252 aurelien 99
	}
1440 raphael 100
 
101
	// pourrait servir de manière commune
102
	static function obtenirInformationDetermination($db, $id_proposition, $id_utilisateur) {
103
		$requete = "SELECT * FROM del_commentaire WHERE id_commentaire = ". intval($id_proposition)." ";
1260 aurelien 104
		if($id_utilisateur != 0 && $id_utilisateur != '') {
1440 raphael 105
		    $requete .= "AND ce_utilisateur = ".$db->proteger($id_utilisateur);
1260 aurelien 106
		}
1440 raphael 107
		// TODO: else { LIMIT 1 ? }
108
		return $db->recuperer($requete);
1252 aurelien 109
	}
110
 
111
	private function envoyerRequeteModificationObservation($id_observation, $parametres) {
1440 raphael 112
		$url_requete = $this->conteneur->getParametre('url_service_validation_base') . $id_observation;
1252 aurelien 113
		$requeteur = $this->conteneur->getRestClient();
1440 raphael 114
		$parametres_formates = array('id_observation' => $id_observation,
115
									 'ce_utilisateur' => $parametres['ce_utilisateur'],
116
									 'nom_sel' => $parametres['nom_sel'],
117
									 'nom_sel_nn' => $parametres['nom_sel_nn'],
118
									 'nom_ret' => $parametres['nom_ret'],
119
									 'nom_ret_nn' => $parametres['nom_ret_nn'],
120
									 'nom_referentiel' => $parametres['nom_referentiel']);
121
		return $requeteur->modifier($url_requete, $parametres_formates);
1252 aurelien 122
	}
123
}