Subversion Repositories eFlore/Applications.del

Rev

Rev 1456 | Rev 1601 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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