Subversion Repositories eFlore/Applications.del

Rev

Rev 2210 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2210 Rev 2213
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Permet d'ajouter un commentaire.
4
 * Permet d'ajouter un commentaire.
5
 *
5
 *
6
 * @category   DEL
6
 * @category   DEL
7
 * @package    Services
7
 * @package    Services
8
 * @subpackage Commentaires
8
 * @subpackage Commentaires
9
 * @version    0.1
9
 * @version    0.1
10
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
10
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
11
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
12
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
13
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
13
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
14
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
14
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
15
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
15
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
16
 */
16
 */
17
 
17
 
18
class AjouterCommentaire {
18
class AjouterCommentaire {
19
 
19
 
20
	private $conteneur;
20
	private $conteneur;
21
	private $navigation;
21
	private $navigation;
22
	private $bdd;
22
	private $bdd;
23
	private $parametres = array();
23
	private $parametres = array();
24
 
24
 
25
	private $mapping = array();
25
	private $mapping = array();
26
	private $erreurs = array();
26
	private $erreurs = array();
27
 
27
 
28
	public function __construct(Conteneur $conteneur) {
28
	public function __construct(Conteneur $conteneur) {
29
		$this->conteneur = $conteneur;
29
		$this->conteneur = $conteneur;
30
		$this->navigation =  $this->conteneur->getNavigation();
30
		$this->navigation =  $this->conteneur->getNavigation();
31
		$this->bdd = $this->conteneur->getBdd();
31
		$this->bdd = $this->conteneur->getBdd();
32
 
32
 
33
		$this->mapping = $this->conteneur->getParametreTableau('commentaires.mapping');
33
		$this->mapping = $this->conteneur->getParametreTableau('commentaires.mapping');
34
	}
34
	}
35
 
35
 
36
	public function ajouter($parametres) {
36
	public function ajouter($parametres) {
37
		$this->parametres = $parametres;
37
		$this->parametres = $parametres;
38
		$this->verifierParametres();
38
		$this->verifierParametres();
39
 
39
 
40
		$this->completerParametresUtilisateur();
40
		$this->completerParametresUtilisateur();
41
		$this->gererPropositionInitiale();
41
		$this->gererPropositionInitiale();
42
		// Dernière chance de rattachement au référentiel d'un nom 
42
		// Dernière chance de rattachement au référentiel d'un nom 
43
		// sans nn (cas du copier-coller ou bien de l'appli tierce
43
		// sans nn (cas du copier-coller ou bien de l'appli tierce
44
		// qui envoie des infos incomplètes)
44
		// qui envoie des infos incomplètes)
45
		$this->tenterEnrichissementTaxonomique();
45
		$this->tenterEnrichissementTaxonomique();
46
		$idCommentaireAjoute = $this->insererCommentaire();
46
		$idCommentaireAjoute = $this->insererCommentaire();
47
 
47
 
48
		// Mettre en forme le résultat et l'envoyer pour affichage
48
		// Mettre en forme le résultat et l'envoyer pour affichage
49
		$resultat = new ResultatService();
49
		$resultat = new ResultatService();
50
		$resultat->corps = array('id_commentaire' => $idCommentaireAjoute);
50
		$resultat->corps = array('id_commentaire' => $idCommentaireAjoute);
51
 
51
 
52
		return $resultat;
52
		return $resultat;
53
	}
53
	}
54
 
54
 
55
	/**
55
	/**
56
	 * Vérifie notamment que l'auteur du vote est désigné soit par un ID, soit
56
	 * Vérifie notamment que l'auteur du vote est désigné soit par un ID, soit
57
	 * par un triplet (nom, prénom, adresse courriel)
57
	 * par un triplet (nom, prénom, adresse courriel)
58
	 */
58
	 */
59
	private function verifierParametres() {
59
	private function verifierParametres() {
60
		if (!isset($this->parametres['observation'])) {
60
		if (!isset($this->parametres['observation'])) {
61
			$this->erreurs[] = "Impossible d'ajouter un commentaire sans identifiant d'observation (paramètre 'observation').";
61
			$this->erreurs[] = "Impossible d'ajouter un commentaire sans identifiant d'observation (paramètre 'observation').";
62
		}
62
		}
63
 
63
 
64
		if (!isset($this->parametres['auteur.id'])) {
64
		if (!isset($this->parametres['auteur.id'])) {
65
			$this->verifierParamsAuteurAnonyme();
65
			$this->verifierParamsAuteurAnonyme();
66
		}
66
		}
67
 
67
 
68
		$this->verifierParamsNonVide();
68
		$this->verifierParamsNonVide();
69
 
69
 
70
		if (isset($this->parametres['nom_sel_nn']) && !isset($this->parametres['nom_referentiel'])) {
70
		if (isset($this->parametres['nom_sel_nn']) && !isset($this->parametres['nom_referentiel'])) {
71
			$this->erreurs[] = "Si le paramètre «nom_sel_nn» est présent, le paramètre «nom_referentiel» doit l'être aussi.";
71
			$this->erreurs[] = "Si le paramètre «nom_sel_nn» est présent, le paramètre «nom_referentiel» doit l'être aussi.";
72
		}
72
		}
73
 
73
 
74
		if (!empty($this->erreurs)) {
74
		if (!empty($this->erreurs)) {
75
			$msg = "Erreur de configuration :\n".implode("\n\n", $this->erreurs);
75
			$msg = "Erreur de configuration :\n".implode("\n\n", $this->erreurs);
76
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
76
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
77
		}
77
		}
78
	}
78
	}
79
 
79
 
80
	private function verifierParamsAuteurAnonyme() {
80
	private function verifierParamsAuteurAnonyme() {
81
		$paramsAuteur = array('auteur.nom', 'auteur.prenom', 'auteur.courriel');
81
		$paramsAuteur = array('auteur.nom', 'auteur.prenom', 'auteur.courriel');
82
		$paramsAuteurManquant = array();
82
		$paramsAuteurManquant = array();
83
		foreach ($paramsAuteur as $param) {
83
		foreach ($paramsAuteur as $param) {
84
			if (!isset($this->parametres[$param])) {
84
			if (!isset($this->parametres[$param])) {
85
				$paramsAuteurManquant[] = $param;
85
				$paramsAuteurManquant[] = $param;
86
			}
86
			}
87
		}
87
		}
88
 
88
 
89
		if (!empty($paramsAuteurManquant)) {
89
		if (!empty($paramsAuteurManquant)) {
90
			$msgAuteurTpl = "Si le parametre 'auteur.id' n'est pas utilisé, il est nécessaire d'indiquer les ".
90
			$msgAuteurTpl = "Si le parametre 'auteur.id' n'est pas utilisé, il est nécessaire d'indiquer les ".
91
			"nom (paramètre 'auteur.nom'), prénom (paramètre 'auteur.prenom') et courriel ".
91
			"nom (paramètre 'auteur.nom'), prénom (paramètre 'auteur.prenom') et courriel ".
92
			"(paramètre 'auteur.courriel') de l'auteur.\nLes paramètres suivant sont abscents : %s\n";
92
			"(paramètre 'auteur.courriel') de l'auteur.\nLes paramètres suivant sont abscents : %s\n";
93
			$this->erreurs[] = sprintf($msgAuteurTpl, implode(', ', $paramsAuteurManquant));
93
			$this->erreurs[] = sprintf($msgAuteurTpl, implode(', ', $paramsAuteurManquant));
94
		}
94
		}
95
	}
95
	}
96
 
96
 
97
	private function verifierParamsNonVide() {
97
	private function verifierParamsNonVide() {
98
		$paramsNonVide = array('nom_sel', 'nom_referentiel', 'nom_sel_nn');
98
		$paramsNonVide = array('nom_sel', 'nom_referentiel', 'nom_sel_nn');
99
		foreach ($paramsNonVide as $param) {
99
		foreach ($paramsNonVide as $param) {
100
			if (isset($this->parametres[$param]) && trim($this->parametres[$param]) == '' ) {
100
			if (isset($this->parametres[$param]) && trim($this->parametres[$param]) == '' ) {
101
				$this->erreurs[] = "S'il est présent le paramètre «$param» ne peut pas être vide.";
101
				$this->erreurs[] = "S'il est présent le paramètre «$param» ne peut pas être vide.";
102
			}
102
			}
103
		}
103
		}
104
	}
104
	}
105
 
105
 
106
	/**
106
	/**
107
	 * Si l'auteur du vote est désigné par un ID, va chercher ses nom, prénom, courriel;
107
	 * Si l'auteur du vote est désigné par un ID, va chercher ses nom, prénom, courriel;
108
	 * s'il est désigné par un triplet (nom, prénom, adresse courriel), va chercher son ID
108
	 * s'il est désigné par un triplet (nom, prénom, adresse courriel), va chercher son ID
109
	 */
109
	 */
110
	private function completerParametresUtilisateur() {
110
	private function completerParametresUtilisateur() {
111
		$utilisateur =  (isset($this->parametres['auteur.id'])) ? $this->obtenirUtilisateurAvecId() : $this->obtenirUtilisateurSansId();
111
		$utilisateur =  (isset($this->parametres['auteur.id'])) ? $this->obtenirUtilisateurAvecId() : $this->obtenirUtilisateurSansId();
112
		if ($utilisateur != false) {
112
		if ($utilisateur != false) {
113
			foreach ($utilisateur as $param => $valeur) {
113
			foreach ($utilisateur as $param => $valeur) {
114
				$this->parametres[$param] = $valeur;
114
				$this->parametres[$param] = $valeur;
115
			}
115
			}
116
		}
116
		}
117
	}
117
	}
118
 
118
 
119
	/**
119
	/**
120
	 * On suppose que si l'utilisateur envoie sa proposition avec un ID, c'est
120
	 * On suppose que si l'utilisateur envoie sa proposition avec un ID, c'est
121
	 * qu'il est connu d'IP, donc qu'on trouvera ses coordonnées dans
121
	 * qu'il est connu d'IP, donc qu'on trouvera ses coordonnées dans
122
	 * del_utilisateur_infos
122
	 * del_utilisateur_infos
123
	 * 
123
	 * 
124
	 * @TODO valider cette hypothèse
124
	 * @TODO valider cette hypothèse
125
	 */
125
	 */
126
	private function obtenirUtilisateurAvecId() {
126
	private function obtenirUtilisateurAvecId() {
127
		$auteurIdP = $this->bdd->proteger($this->parametres['auteur.id']);
127
		$auteurIdP = $this->bdd->proteger($this->parametres['auteur.id']);
128
		$requete = "SELECT id_utilisateur AS 'auteur.id', nom AS 'auteur.nom', prenom AS 'auteur.prenom', courriel AS 'auteur.courriel' ".
128
		$requete = "SELECT id_utilisateur AS 'auteur.id', nom AS 'auteur.nom', prenom AS 'auteur.prenom', courriel AS 'auteur.courriel' ".
129
			'FROM del_utilisateur_infos '.
129
			'FROM del_utilisateur_infos '.
130
			"WHERE id_utilisateur = $auteurIdP ".
130
			"WHERE id_utilisateur = $auteurIdP ".
131
			' -- '.__FILE__.' : '.__LINE__;
131
			' -- '.__FILE__.' : '.__LINE__;
132
		$utilisateur = $this->bdd->recuperer($requete);
132
		$utilisateur = $this->bdd->recuperer($requete);
133
		return $utilisateur;
133
		return $utilisateur;
134
	}
134
	}
135
 
135
 
136
	/**
136
	/**
137
	 * Pour un utilisateur désigné par un triplet (nom, prenom, adresse courriel), demande
137
	 * Pour un utilisateur désigné par un triplet (nom, prenom, adresse courriel), demande
138
	 * son ID à l'annuaire - vue la base de données (2017-03-24), aucun tuple ne contient
138
	 * son ID à l'annuaire - vue la base de données (2017-03-24), aucun tuple ne contient
139
	 * une adresse courriel sans contenir d'ID, mais beaucoup ne contiennent ni l'un ni
139
	 * une adresse courriel sans contenir d'ID, mais beaucoup ne contiennent ni l'un ni
140
	 * l'autre (code stupide, tentative de correction ajd)
140
	 * l'autre (code stupide, tentative de correction ajd)
141
	 */
141
	 */
142
	private function obtenirUtilisateurSansId() {
142
	private function obtenirUtilisateurSansId() {
143
		$nomP = $this->bdd->proteger($this->parametres['auteur.nom']);
143
		$nomP = $this->bdd->proteger($this->parametres['auteur.nom']);
144
		$prenomP = $this->bdd->proteger($this->parametres['auteur.prenom']);
144
		$prenomP = $this->bdd->proteger($this->parametres['auteur.prenom']);
145
		$courrielP = $this->bdd->proteger($this->parametres['auteur.courriel']);
145
		$courrielP = $this->bdd->proteger($this->parametres['auteur.courriel']);
146
 
146
 
147
		// Si l'utilisateur s'est déjà connecté à DeL au moins une fois, on récupère ses
147
		// Si l'utilisateur s'est déjà connecté à DeL au moins une fois, on récupère ses
148
		// nom et prénom connus dans la base; on lui interdit d'usurper sa propre identité
148
		// nom et prénom connus dans la base; on lui interdit d'usurper sa propre identité
149
		$requete = "SELECT id_utilisateur AS 'auteur.id', nom AS 'auteur.nom', prenom AS 'auteur.prenom', ".
149
		$requete = "SELECT id_utilisateur AS 'auteur.id', nom AS 'auteur.nom', prenom AS 'auteur.prenom', ".
150
			"courriel AS 'auteur.courriel' ".
150
			"courriel AS 'auteur.courriel' ".
151
			'FROM del_utilisateur_infos '.
151
			'FROM del_utilisateur_infos '.
152
			"WHERE courriel = $courrielP ".
152
			"WHERE courriel = $courrielP ".
153
			' -- '.__FILE__.' : '.__LINE__;
153
			' -- '.__FILE__.' : '.__LINE__;
154
		$utilisateur = $this->bdd->recuperer($requete);
154
		$utilisateur = $this->bdd->recuperer($requete);
155
 
155
 
156
		// si l'utilisateur n'a pas été trouvé, on devrait aller le chercher dans
156
		// si l'utilisateur n'a pas été trouvé, on devrait aller le chercher dans
157
		// l'annuaire, au cas où il soit inscrit à TB mais ne se soit pas connecté
157
		// l'annuaire, au cas où il soit inscrit à TB mais ne se soit pas connecté
158
		// @TODO faire un appel au service annuaire/identite-par-courriel
158
		// @TODO faire un appel au service annuaire/identite-par-courriel
159
 
159
 
160
		return $utilisateur;
160
		return $utilisateur;
161
	}
161
	}
162
 
162
 
163
	private function gererPropositionInitiale() {
163
	private function gererPropositionInitiale() {
164
		if ($this->verifierExistencePropositionInitiale() === false) {
164
		if ($this->verifierExistencePropositionInitiale() === false) {
165
			$this->creerPropositionInitiale();
165
			$this->creerPropositionInitiale();
166
			// TODO : en cas d'échec de la création de la proposition ajouter un log...
166
			// TODO : en cas d'échec de la création de la proposition ajouter un log...
167
		}
167
		}
168
	}
168
	}
169
 
169
 
170
	private function verifierExistencePropositionInitiale() {
170
	private function verifierExistencePropositionInitiale() {
171
		$idObsP =  $this->bdd->proteger($this->parametres['observation']);
171
		$idObsP =  $this->bdd->proteger($this->parametres['observation']);
172
		$requete = 'SELECT COUNT(*) >= 1 AS existe '.
172
		$requete = 'SELECT COUNT(*) >= 1 AS existe '.
173
			'FROM del_commentaire '.
173
			'FROM del_commentaire '.
174
			"WHERE ce_observation = $idObsP ".
174
			"WHERE ce_observation = $idObsP ".
175
			'	AND proposition_initiale = 1 '.
175
			'	AND proposition_initiale = 1 '.
176
			' -- '.__FILE__.' : '.__LINE__;
176
			' -- '.__FILE__.' : '.__LINE__;
177
		$resultat = $this->bdd->recuperer($requete);
177
		$resultat = $this->bdd->recuperer($requete);
178
		return $resultat['existe'] == 1;
178
		return $resultat['existe'] == 1;
179
	}
179
	}
180
 
180
 
181
	private function creerPropositionInitiale() {
181
	private function creerPropositionInitiale() {
182
		$idObsP =  $this->bdd->proteger($this->parametres['observation']);
182
		$idObsP =  $this->bdd->proteger($this->parametres['observation']);
183
 
183
 
184
		$requete = 'INSERT IGNORE INTO del_commentaire '.
184
		$requete = 'INSERT IGNORE INTO del_commentaire '.
185
			'(ce_observation, ce_utilisateur, utilisateur_prenom, utilisateur_nom, utilisateur_courriel, '.
185
			'(ce_observation, ce_utilisateur, utilisateur_prenom, utilisateur_nom, utilisateur_courriel, '.
186
			'nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, nom_referentiel, date, proposition_initiale) '.
186
			'nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, nom_referentiel, date, proposition_initiale) '.
187
			'SELECT id_observation, ce_utilisateur, prenom_utilisateur, nom_utilisateur, courriel_utilisateur, nom_sel, '.
187
			'SELECT id_observation, ce_utilisateur, prenom_utilisateur, nom_utilisateur, courriel_utilisateur, nom_sel, '.
188
			"IF(nom_sel_nn = 0, NULL, nom_sel_nn), IF(nom_ret = '', NULL, nom_ret), IF(nom_ret_nn = 0, NULL, nom_ret_nn), ".
188
			"IF(nom_sel_nn = 0, NULL, nom_sel_nn), IF(nom_ret = '', NULL, nom_ret), IF(nom_ret_nn = 0, NULL, nom_ret_nn), ".
189
			"IF(nt = 0, NULL, nt), IF(famille = '', NULL, famille), IF(nom_sel_nn = 0, NULL, nom_referentiel), NOW(), '1' ".
189
			"IF(nt = 0, NULL, nt), IF(famille = '', NULL, famille), IF(nom_sel_nn = 0, NULL, nom_referentiel), NOW(), '1' ".
190
			'FROM del_observation AS do '.
190
			'FROM del_observation AS do '.
191
			"WHERE id_observation = $idObsP ".
191
			"WHERE id_observation = $idObsP ".
192
			' -- '.__FILE__.' : '.__LINE__;
192
			' -- '.__FILE__.' : '.__LINE__;
193
 
193
 
194
		$resultat = $this->bdd->executer($requete);
194
		$resultat = $this->bdd->executer($requete);
195
 
195
 
196
		return $resultat;
196
		return $resultat;
197
	}
197
	}
198
 
198
 
199
	private function insererCommentaire() {
199
	private function insererCommentaire() {
200
		$champs = $this->creerEnteteChamps();
200
		$champs = $this->creerEnteteChamps();
201
		$values = $this->creerClauseValues();
201
		$values = $this->creerClauseValues();
202
		$requete = "INSERT INTO del_commentaire (date, $champs) VALUES (NOW(), $values) ".
202
		$requete = "INSERT INTO del_commentaire (date, $champs) VALUES (NOW(), $values) ".
203
			' -- '.__FILE__.' : '.__LINE__;
203
			' -- '.__FILE__.' : '.__LINE__;
204
 
204
 
205
		$retour = $this->bdd->executer($requete);
205
		$retour = $this->bdd->executer($requete);
206
		if ($retour == null) {
206
		if ($retour == null) {
207
			$msgTpl = "Erreur inopinée lors de l'insertion du commentaire lié à l'observation «%s».";
207
			$msgTpl = "Erreur inopinée lors de l'insertion du commentaire lié à l'observation «%s».";
208
			$msg = sprintf($msgTpl, $this->parametres['observation']);
208
			$msg = sprintf($msgTpl, $this->parametres['observation']);
209
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
209
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
210
		}
210
		}
211
 
211
 
212
		$idCommentaire = $this->bdd->recupererIdDernierAjout();
212
		$idCommentaire = $this->bdd->recupererIdDernierAjout();
213
		return $idCommentaire;
213
		return $idCommentaire;
214
	}
214
	}
215
 
215
 
216
	private function creerEnteteChamps() {
216
	private function creerEnteteChamps() {
217
		return $this->creerSuiteChampsOuValeurs('champs');
217
		return $this->creerSuiteChampsOuValeurs('champs');
218
	}
218
	}
219
 
219
 
220
	private function creerClauseValues() {
220
	private function creerClauseValues() {
221
		return $this->creerSuiteChampsOuValeurs('valeurs');
221
		return $this->creerSuiteChampsOuValeurs('valeurs');
222
	}
222
	}
223
 
223
 
224
	private function creerSuiteChampsOuValeurs($mode) {
224
	private function creerSuiteChampsOuValeurs($mode) {
225
		$suite = array();
225
		$suite = array();
226
		foreach ($this->mapping as $nomChampBdd => $nomAttributSortie) {
226
		foreach ($this->mapping as $nomChampBdd => $nomAttributSortie) {
227
			if (isset($this->parametres[$nomAttributSortie]) && $this->parametres[$nomAttributSortie] != null) {
227
			if (isset($this->parametres[$nomAttributSortie]) && $this->parametres[$nomAttributSortie] != null) {
228
				if ($mode == 'valeurs') {
228
				if ($mode == 'valeurs') {
229
					$suite[] = $this->bdd->proteger($this->parametres[$nomAttributSortie]);
229
					$suite[] = $this->bdd->proteger($this->parametres[$nomAttributSortie]);
230
				} else if ($mode == 'champs') {
230
				} else if ($mode == 'champs') {
231
					$suite[] = $nomChampBdd;
231
					$suite[] = $nomChampBdd;
232
				} else {
232
				} else {
233
					$msg = "Erreur interne : mauvais paramètre passé à la méthode 'creerSuiteChampsOuValeurs'";
233
					$msg = "Erreur interne : mauvais paramètre passé à la méthode 'creerSuiteChampsOuValeurs'";
234
					throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
234
					throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
235
				}
235
				}
236
			}
236
			}
237
		}
237
		}
238
		return implode(', ', $suite);
238
		return implode(', ', $suite);
239
	}
239
	}
240
	
240
	
241
	private function tenterEnrichissementTaxonomique() {
241
	private function tenterEnrichissementTaxonomique() {
242
		if($this->commentaireEstPropositionSansNn()) {
242
		if($this->commentaireEstPropositionSansNn()) {
243
			// TODO: utiliser le référentiel de l'obs si celui-ci 
243
			// TODO: utiliser le référentiel de l'obs si celui-ci 
244
			// n'est pas fourni dans le commentaire et prendre le résultat
244
			// n'est pas fourni dans le commentaire et prendre le résultat
245
			// si celui-ci est unique
245
			// si celui-ci est unique
246
			$referentiel = $this->parametres['nom_referentiel'];
246
			$referentiel = $this->parametres['nom_referentiel'];
247
			$requete = urlencode($this->parametres['nom_sel']);
247
			$requete = urlencode($this->parametres['nom_sel']);
248
			
248
			
249
			$url = sprintf($this->conteneur->getParametre('nomstaxons.url_autocompletion_tpl'), $referentiel, $requete);
249
			$url = sprintf($this->conteneur->getParametre('nomstaxons.url_autocompletion_tpl'), $referentiel, $requete);
250
			$restClient = $this->conteneur->getRestClient();
250
			$restClient = $this->conteneur->getRestClient();
251
			// Un retour vide est possible (un cas normal où il n'y a pas de résultat)
251
			// Un retour vide est possible (un cas normal où il n'y a pas de résultat)
252
			// mais il fait planter le retour du service si on active l'affichage des erreurs
252
			// mais il fait planter le retour du service si on active l'affichage des erreurs
253
			// donc on passe sciemment les erreurs sous silence (car cette erreur n'en est pas une)
253
			// donc on passe sciemment les erreurs sous silence (car cette erreur n'en est pas une)
254
			$resultatJson = @$restClient->consulter($url);
254
			$resultatJson = @$restClient->consulter($url);
255
			$resultats = json_decode($resultatJson, true);
255
			$resultats = json_decode($resultatJson, true);
256
 
256
 
257
			// On ne fait l'affectation que si l'on est sur (donc si un seul résultat)
257
			// On ne fait l'affectation que si l'on est sur (donc si un seul résultat)
258
			if (isset($resultats['resultat']) && count($resultats['resultat']) == 1) {
258
			if (isset($resultats['resultat']) && count($resultats['resultat']) == 1) {
259
				$info = array_pop($resultats['resultat']);
259
				$info = array_pop($resultats['resultat']);
260
				$this->parametres['nom_sel_nn'] = $info['num_nom'];
260
				$this->parametres['nom_sel_nn'] = $info['num_nom'];
261
			}
261
			}
262
		}
262
		}
263
	}
263
	}
264
	
264
	
265
	private function commentaireEstPropositionSansNn() {
265
	private function commentaireEstPropositionSansNn() {
266
		// Pas besoin de tester si c'est vide, normalement verifierParametres 
266
		// Pas besoin de tester si c'est vide, normalement verifierParametres 
267
		// l'a déjà fait au-dessus
267
		// l'a déjà fait au-dessus
268
		return isset($this->parametres['nom_sel']) 
268
		return isset($this->parametres['nom_sel']) 
269
				&& isset($this->parametres['nom_referentiel']) 
269
				&& isset($this->parametres['nom_referentiel']) 
270
						&& !isset($this->parametres['nom_sel_nn']);
270
						&& !isset($this->parametres['nom_sel_nn']);
271
	}
271
	}
272
}
272
}