Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1149 Rev 1152
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Ajoute un mot clé en l'associant à un identifiant d'image
4
 * Ajoute un mot clé en l'associant à un identifiant d'image
5
 *
5
 *
6
 * @category	php 5.2
6
 * @category	php 5.2
7
 * @package	del
7
 * @package	del
8
 * @subpackage images
8
 * @subpackage images
9
 * @author		Aurélien PERONNET <aurelien@tela-botanica.org>
9
 * @author		Aurélien PERONNET <aurelien@tela-botanica.org>
10
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
10
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
11
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
12
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
13
 * @version	$Id$
13
 * @version	$Id$
14
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
14
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
15
 */
15
 */
16
 
16
 
17
class AjouterMotCle {
17
class AjouterMotCle {
18
	
18
	
19
	private $conteneur;
19
	private $conteneur;
20
	private $navigation;
20
	private $navigation;
21
	private $masque;
21
	private $masque;
22
	private $gestionBdd;
22
	private $gestionBdd;
23
	private $bdd;
23
	private $bdd;
24
	private $parametres = array();
24
	private $parametres = array();
25
	private $ressources = array();
25
	private $ressources = array();
26
	
26
	
27
	private $commentaire;
27
	private $commentaire;
28
 
28
 
29
	public function __construct(Conteneur $conteneur = null) {
29
	public function __construct(Conteneur $conteneur = null) {
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
31
		$this->navigation = $conteneur->getNavigation();
31
		$this->navigation = $conteneur->getNavigation();
32
		$this->masque = $conteneur->getMasque();
32
		$this->masque = $conteneur->getMasque();
33
		$this->gestionBdd = $conteneur->getGestionBdd();
33
		$this->gestionBdd = $conteneur->getGestionBdd();
34
		$this->bdd = $this->gestionBdd->getBdd();
34
		$this->bdd = $this->gestionBdd->getBdd();
35
		
35
		
36
	}
36
	}
37
	
37
	
38
	/**
38
	/**
39
	 * Ajoute un mot-clé si les objets fournis en paramètres sont valides
39
	 * Ajoute un mot-clé si les objets fournis en paramètres sont valides
40
	 * pour l'afficher.
40
	 * pour l'afficher.
41
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
41
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
42
	 * @param array $parametres les paramètres situés après le ? dans l'url
42
	 * @param array $parametres les paramètres situés après le ? dans l'url
43
	 * */
43
	 * */
44
	public function ajouter($ressources, $parametres) {
44
	public function ajouter($ressources, $parametres) {
45
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
45
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
46
		
46
		
47
		// Gestion des configuration du script
47
		// Gestion des configuration du script
48
		$this->verifierConfiguration();
48
		$this->verifierConfiguration();
49
		$insertion = $this->insererMotCle($this->parametres);
49
		$insertion = $this->insererMotCle($this->parametres);
50
		
50
		
51
		// Mettre en forme le résultat et l'envoyer pour affichage
51
		// Mettre en forme le résultat et l'envoyer pour affichage
52
		$resultat = new ResultatService();
52
		$resultat = new ResultatService();
53
		$resultat->corps = array('id_mot_cle' => $insertion);
53
		$resultat->corps = array('id_mot_cle' => $insertion);
54
		
54
		
55
		return $resultat;
55
		return $resultat;
56
	}
56
	}
57
	
57
	
58
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
58
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
59
		$this->ressources = $ressources;
59
		$this->ressources = $ressources;
60
		$this->parametres = $parametres;	
60
		$this->parametres = $parametres;	
61
	}
61
	}
62
	
62
	
63
	/*-------------------------------------------------------------------------------
63
	/*-------------------------------------------------------------------------------
64
	 							CONFIGURATION DU SERVICE
64
	 							CONFIGURATION DU SERVICE
65
	 --------------------------------------------------------------------------------*/	
65
	 --------------------------------------------------------------------------------*/	
66
	/**
66
	/**
67
	 * Vérifier que le service est bien configuré 
67
	 * Vérifier que le service est bien configuré 
68
	 * */
68
	 * */
69
	public function verifierConfiguration() {
69
	public function verifierConfiguration() {
70
		$erreurs = array();
70
		$erreurs = array();
71
		
71
		
72
		if (!isset($this->parametres['image'])) {
72
		if (!isset($this->parametres['image'])) {
73
			$erreurs[] = ' - impossible d\'ajouter un mot clé sans image associée ;';
73
			$erreurs[] = ' - impossible d\'ajouter un mot clé sans image associée ;';
74
		} else if(!is_numeric($this->parametres['image'])) {
74
		} else if(!is_numeric($this->parametres['image'])) {
75
			$erreurs[] = ' - l\'identifiant d\'image doit être un entier ;';
75
			$erreurs[] = ' - l\'identifiant d\'image doit être un entier ;';
76
		}
76
		}
77
		
77
		
78
		if (!isset($this->parametres['mot_cle'])) {
78
		if (!isset($this->parametres['mot_cle'])) {
79
			$erreurs[] = ' - impossible d\'ajouter un mot clé sans le mot clé ;';
79
			$erreurs[] = ' - impossible d\'ajouter un mot clé sans le mot clé ;';
80
		}
80
		}
81
		
81
		
82
		if (!isset($this->parametres['auteur.id'])) {
82
		if (!isset($this->parametres['auteur.id'])) {
83
			$erreurs[] = ' - impossible d\'ajouter un mot clé sans auteur associé ;';
83
			$erreurs[] = ' - impossible d\'ajouter un mot clé sans auteur associé ;';
84
		}
84
		}
85
		
85
		
86
		if (!empty($erreurs)) {
86
		if (!empty($erreurs)) {
87
			$e = 'Erreur de configuration :';
87
			$e = 'Erreur de configuration :';
88
			$e = implode("\n", $erreurs);
88
			$e = implode("\n", $erreurs);
89
			echo var_dump($e);
89
			echo var_dump($e);
90
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
90
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
91
		}
91
		}
92
	}
92
	}
93
	
93
	
94
	/*-------------------------------------------------------------------------------
94
	/*-------------------------------------------------------------------------------
95
							   INSERTION DES MOTS CLES 
95
							   INSERTION DES MOTS CLES 
96
	--------------------------------------------------------------------------------*/	
96
	--------------------------------------------------------------------------------*/	
97
	/**
97
	/**
98
	 * Insère un mot clé dans la table
98
	 * Insère un mot clé dans la table
99
	 * @param $mot_cle array la liste des paramètres
99
	 * @param $mot_cle array la liste des paramètres
100
	 * */
100
	 * */
101
	private function insererMotCle($mot_cle) {
101
	private function insererMotCle($mot_cle) {
-
 
102
		
102
		
103
		$valeurs_a_inserer = '';
103
		$mot_cle_normalise = $this->normaliserMotCle($mot_cle['mot_cle']);
104
		$mots_cles = $this->traiterMotsClesMultiples($mot_cle['mot_cle']);
104
		
105
		
105
		$requete = 'INSERT INTO del_image_tag '.
106
		foreach ($mots_cles as $mot_cle_a_inserer) {
106
					'(ce_image, ce_utilisateur, tag, tag_normalise, date) '.
107
			$mot_cle_normalise = $this->normaliserMotCle($mot_cle_a_inserer);
107
					'VALUES ('.$this->bdd->proteger($mot_cle['image']).','.
108
			$valeurs_a_inserer .= '('.$this->bdd->proteger($mot_cle['image']).','.
108
							$this->bdd->proteger($mot_cle['auteur.id']).', '.
109
							$this->bdd->proteger($mot_cle['auteur.id']).', '.
109
							$this->bdd->proteger($mot_cle['mot_cle']).', '.
110
							$this->bdd->proteger(trim($mot_cle_a_inserer)).', '.
110
							$this->bdd->proteger($mot_cle_normalise).', '.
111
							$this->bdd->proteger($mot_cle_normalise).', '.
-
 
112
							'NOW() '.
-
 
113
					'), ';
-
 
114
		}
-
 
115
		$valeurs_a_inserer = rtrim($valeurs_a_inserer,', ');
-
 
116
		
-
 
117
		$requete = 'INSERT INTO del_image_tag '.
111
							'NOW() '.
118
					'(ce_image, ce_utilisateur, tag, tag_normalise, date) '.
112
					')';
119
					'VALUES '.$valeurs_a_inserer;
113
 
120
 
114
		$retour = $this->bdd->requeter($requete);
121
		$retour = $this->bdd->requeter($requete);
115
		if ($retour == null) {
122
		if ($retour == null) {
116
			$e = 'Erreur inopinée lors de l\insertion';
123
			$e = 'Erreur inopinée lors de l\insertion';
117
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
124
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
118
		}
125
		}
-
 
126
		
-
 
127
		//TODO: voir si cela a vraiment du sens lors de l'ajout de plusieurs mots clés
-
 
128
		return null;
-
 
129
	}
-
 
130
	
119
		
131
	function traiterMotsClesMultiples($valeur_mot_cles) {
120
		$retour = $this->bdd->recupererIdDernierAjout();		
132
		$tab_mots_cles = explode(",", $valeur_mot_cles);
121
		return $retour;
133
		return $tab_mots_cles;
122
	}
134
	}
123
	
135
	
124
	private function normaliserMotCle($mot_cle) {
136
	private function normaliserMotCle($mot_cle) {
125
		return mb_strtolower($this->supprimerAccents($mot_cle));
137
		return mb_strtolower($this->supprimerAccents($mot_cle));
126
	}
138
	}
127
	
139
	
128
	//TODO: déplacer les fonctions ci dessus et dessous dans une classe
140
	//TODO: déplacer les fonctions ci dessus et dessous dans une classe
129
	// utilitaire
141
	// utilitaire
130
	private function supprimerAccents($str, $charset='utf-8')
142
	private function supprimerAccents($str, $charset='utf-8')
131
	{
143
	{
132
		$str = htmlentities($str, ENT_NOQUOTES, $charset);
144
		$str = htmlentities($str, ENT_NOQUOTES, $charset);
133
	
145
	
134
		$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
146
		$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
135
		$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
147
		$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
136
		$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
148
		$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
137
	
149
	
138
		return $str;
150
		return $str;
139
	}
151
	}
140
}
152
}
141
?>
153
?>