Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2212 arthur 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Ajoute un ou plusieurs mots-clés en les associant à un identifiant d'image
5
 *
6
 * @category   DEL
7
 * @package    Services
8
 * @subpackage MotsCles
9
 * @version    0.1
10
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
11
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
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>
15
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
16
 */
17
 
18
class AjouterMotCle {
19
 
20
	private $conteneur;
21
	private $bdd;
22
	private $parametres = array();
23
	private $idDernierAjout = null;
24
	private $nbreMotsClesAjoutes = null;
25
 
26
	public function __construct(Conteneur $conteneur = null) {
27
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
28
		$this->bdd = $this->conteneur->getBdd();
29
	}
30
 
31
	/**
32
	 * Ajoute un mot-clé si les objets fournis en paramètres sont valides
33
	 * pour l'afficher.
34
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
35
	 * @param array $parametres les paramètres situés après le ? dans l'url
36
	 * */
37
	public function ajouter($ressources, $parametres) {
38
		$this->parametres = $parametres;
39
 
40
		// Gestion des configuration du script
41
		$this->verifierParametres();
42
		$this->insererMotCle();
43
		TelaBotanica\Del\Commun\MotsClesImage::updateStats($this->bdd, $this->parametres['image']);
44
 
45
		// Mettre en forme le résultat et l'envoyer pour affichage
46
		$resultat = new ResultatService();
47
		$resultat->corps = array('nbre' => $this->nbreMotsClesAjoutes, 'id' => $this->idDernierAjout);
48
 
49
		return $resultat;
50
	}
51
 
52
	public function verifierParametres() {
53
		$erreurs = array();
54
 
55
		if (!isset($this->parametres['image'])) {
56
			$erreurs[] = " - impossible d'ajouter un mot clé sans l'indication de l'identifiant de l'image associée";
57
		} else if(!is_numeric($this->parametres['image'])) {
58
			$erreurs[] = " - l'identifiant d'image doit être un entier";
59
		}
60
 
61
		if (!isset($this->parametres['mot_cle'])) {
62
			$erreurs[] = " - impossible d'ajouter un mot clé sans le mot clé";
63
		}
64
 
65
		if (!isset($this->parametres['auteur.id'])) {
66
			$erreurs[] = " - impossible d'ajouter un mot clé sans l'identifiant de l'auteur associé";
67
		}
68
 
69
		if (!empty($erreurs)) {
70
			$msg = "Erreur de configuration :\n".implode("\n", $erreurs);
71
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
72
		}
73
	}
74
 
75
	/**
76
	 * Insère un mot clé dans la table
77
	 * */
78
	private function insererMotCle() {
79
		$clauseValues = $this->creerClauseValues();
80
		$requete = 'INSERT INTO del_image_tag '.
81
			'(ce_image, ce_utilisateur, tag, tag_normalise, date, actif, date_modification) '.
82
			"VALUES $clauseValues ".
83
			' -- '.__FILE__.' : '.__LINE__;
84
		$nbreInsertion = $this->bdd->executer($requete);
85
		$idDernierAjout = $this->bdd->recupererIdDernierAjout();
86
		if ($nbreInsertion == null) {
87
			$msgTpl = "Erreur lors de l'insertion d'un des tags «%s» pour l'image «%s» de l'auteur «%s»";
88
			$msg = sprintf($msgTpl, $this->parametres['mot_cle'], $this->parametres['image'], $this->parametres['auteur.id']);
89
			throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);
90
		}
91
		$this->nbreMotsClesAjoutes = $nbreInsertion;
92
		$this->listerIdAjoutes($idDernierAjout, $nbreInsertion);
93
	}
94
 
95
	private function listerIdAjoutes($dernierId, $nbreInsertion) {
96
		$this->idDernierAjout[] = $dernierId;
97
		for ($i = 1 ; $i <= ($nbreInsertion - 1); $i++ ) {
98
			$this->idDernierAjout[] = ++$dernierId;
99
		}
100
	}
101
 
102
	private function creerClauseValues() {
103
		$id_image = intval($this->parametres['image']);
104
		$idImageP = $this->bdd->proteger($id_image);
105
		$id_auteur = $this->parametres['auteur.id'];
106
		$idAuteurP = $this->bdd->proteger($id_auteur);
107
		$mots_cles = explode(',', $this->parametres['mot_cle']);
108
 
109
		$values = array();
110
		foreach ($mots_cles as $mot_cle) {
111
			$motCleP = $this->bdd->proteger(trim($mot_cle));
112
			$mot_cle_normalise = TelaBotanica\Del\Commun\MotsClesImage::normaliserMotCle($mot_cle);
113
			$motCleNormaliseP = $this->bdd->proteger($mot_cle_normalise);
114
 
115
			$values[] = "($idImageP, $idAuteurP, $motCleP, $motCleNormaliseP, NOW(), 1, NOW())";
116
		}
117
		$clauseValues = implode(',', $values);
118
		return $clauseValues;
119
	}
120
}