* @author Jean-Pascal MILCENT * @author Aurelien PERONNET * @license GPL v3 * @license CECILL v2 * @copyright 1999-2014 Tela Botanica */ class AjouterMotCle { private $conteneur; private $bdd; private $parametres = array(); private $idDernierAjout = null; private $nbreMotsClesAjoutes = null; public function __construct(Conteneur $conteneur = null) { $this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; $this->bdd = $this->conteneur->getBdd(); } /** * Ajoute un mot-clé si les objets fournis en paramètres sont valides * pour l'afficher. * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2) * @param array $parametres les paramètres situés après le ? dans l'url * */ public function ajouter($ressources, $parametres) { $this->parametres = $parametres; // Gestion des configuration du script $this->verifierParametres(); $this->insererMotCle(); TelaBotanica\Del\Commun\MotsClesImage::updateStats($this->bdd, $this->parametres['image']); // Mettre en forme le résultat et l'envoyer pour affichage $resultat = new ResultatService(); $resultat->corps = array('nbre' => $this->nbreMotsClesAjoutes, 'id' => $this->idDernierAjout); return $resultat; } public function verifierParametres() { $erreurs = array(); if (!isset($this->parametres['image'])) { $erreurs[] = " - impossible d'ajouter un mot clé sans l'indication de l'identifiant de l'image associée"; } else if(!is_numeric($this->parametres['image'])) { $erreurs[] = " - l'identifiant d'image doit être un entier"; } if (!isset($this->parametres['mot_cle'])) { $erreurs[] = " - impossible d'ajouter un mot clé sans le mot clé"; } if (!isset($this->parametres['auteur.id'])) { $erreurs[] = " - impossible d'ajouter un mot clé sans l'identifiant de l'auteur associé"; } if (!empty($erreurs)) { $msg = "Erreur de configuration :\n".implode("\n", $erreurs); throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); } } /** * Insère un mot clé dans la table * */ private function insererMotCle() { $clauseValues = $this->creerClauseValues(); $requete = 'INSERT INTO del_image_tag '. '(ce_image, ce_utilisateur, tag, tag_normalise, date, actif, date_modification) '. "VALUES $clauseValues ". ' -- '.__FILE__.' : '.__LINE__; $nbreInsertion = $this->bdd->executer($requete); $idDernierAjout = $this->bdd->recupererIdDernierAjout(); if ($nbreInsertion == null) { $msgTpl = "Erreur lors de l'insertion d'un des tags «%s» pour l'image «%s» de l'auteur «%s»"; $msg = sprintf($msgTpl, $this->parametres['mot_cle'], $this->parametres['image'], $this->parametres['auteur.id']); throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR); } $this->nbreMotsClesAjoutes = $nbreInsertion; $this->listerIdAjoutes($idDernierAjout, $nbreInsertion); } private function listerIdAjoutes($dernierId, $nbreInsertion) { $this->idDernierAjout[] = $dernierId; for ($i = 1 ; $i <= ($nbreInsertion - 1); $i++ ) { $this->idDernierAjout[] = ++$dernierId; } } private function creerClauseValues() { $id_image = intval($this->parametres['image']); $idImageP = $this->bdd->proteger($id_image); $id_auteur = $this->parametres['auteur.id']; $idAuteurP = $this->bdd->proteger($id_auteur); $mots_cles = explode(',', $this->parametres['mot_cle']); $values = array(); foreach ($mots_cles as $mot_cle) { $motCleP = $this->bdd->proteger(trim($mot_cle)); $mot_cle_normalise = TelaBotanica\Del\Commun\MotsClesImage::normaliserMotCle($mot_cle); $motCleNormaliseP = $this->bdd->proteger($mot_cle_normalise); $values[] = "($idImageP, $idAuteurP, $motCleP, $motCleNormaliseP, NOW(), 1, NOW())"; } $clauseValues = implode(',', $values); return $clauseValues; } }