Subversion Repositories eFlore/Applications.del

Rev

Rev 1795 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1149 aurelien 1
<?php
2
// declare(encoding='UTF-8');
3
/**
1795 jpm 4
 * Ajoute un ou plusieurs mots-clés en les associant à un identifiant d'image
1149 aurelien 5
 *
1795 jpm 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>
1149 aurelien 16
 */
17
 
18
class AjouterMotCle {
1793 jpm 19
 
1149 aurelien 20
	private $conteneur;
21
	private $bdd;
22
	private $parametres = array();
1795 jpm 23
	private $idDernierAjout = null;
24
	private $nbreMotsClesAjoutes = null;
1793 jpm 25
 
1149 aurelien 26
	public function __construct(Conteneur $conteneur = null) {
27
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
1793 jpm 28
		$this->bdd = $this->conteneur->getBdd();
1149 aurelien 29
	}
1793 jpm 30
 
1149 aurelien 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) {
1795 jpm 38
		$this->parametres = $parametres;
1793 jpm 39
 
1149 aurelien 40
		// Gestion des configuration du script
1795 jpm 41
		$this->verifierParametres();
42
		$this->insererMotCle();
43
		TelaBotanica\Del\Commun\MotsClesImage::updateStats($this->bdd, $this->parametres['image']);
1793 jpm 44
 
1149 aurelien 45
		// Mettre en forme le résultat et l'envoyer pour affichage
46
		$resultat = new ResultatService();
1795 jpm 47
		$resultat->corps = array('nbre' => $this->nbreMotsClesAjoutes, 'id' => $this->idDernierAjout);
1793 jpm 48
 
1149 aurelien 49
		return $resultat;
50
	}
1793 jpm 51
 
1795 jpm 52
	public function verifierParametres() {
1149 aurelien 53
		$erreurs = array();
1793 jpm 54
 
1149 aurelien 55
		if (!isset($this->parametres['image'])) {
1795 jpm 56
			$erreurs[] = " - impossible d'ajouter un mot clé sans l'indication de l'identifiant de l'image associée";
1149 aurelien 57
		} else if(!is_numeric($this->parametres['image'])) {
1795 jpm 58
			$erreurs[] = " - l'identifiant d'image doit être un entier";
1149 aurelien 59
		}
1793 jpm 60
 
1149 aurelien 61
		if (!isset($this->parametres['mot_cle'])) {
1795 jpm 62
			$erreurs[] = " - impossible d'ajouter un mot clé sans le mot clé";
1149 aurelien 63
		}
1793 jpm 64
 
1149 aurelien 65
		if (!isset($this->parametres['auteur.id'])) {
1795 jpm 66
			$erreurs[] = " - impossible d'ajouter un mot clé sans l'identifiant de l'auteur associé";
1149 aurelien 67
		}
1793 jpm 68
 
1149 aurelien 69
		if (!empty($erreurs)) {
1795 jpm 70
			$msg = "Erreur de configuration :\n".implode("\n", $erreurs);
71
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
1149 aurelien 72
		}
73
	}
1793 jpm 74
 
1149 aurelien 75
	/**
76
	 * Insère un mot clé dans la table
77
	 * */
1795 jpm 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
	}
1436 raphael 94
 
1795 jpm 95
	private function listerIdAjoutes($dernierId, $nbreInsertion) {
96
		$this->idDernierAjout[] = $dernierId;
97
		for ($i = 1 ; $i <= ($nbreInsertion - 1); $i++ ) {
98
			$this->idDernierAjout[] = ++$dernierId;
1152 aurelien 99
		}
1795 jpm 100
	}
1149 aurelien 101
 
1795 jpm 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']);
1436 raphael 108
 
1795 jpm 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())";
1149 aurelien 116
		}
1795 jpm 117
		$clauseValues = implode(',', $values);
118
		return $clauseValues;
1149 aurelien 119
	}
1795 jpm 120
}