* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org) * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL * @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL * @version $Id$ * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images */ require_once('MotClePictoflora.php'); class AjouterMotCle { private $conteneur; private $navigation; private $masque; private $gestionBdd; private $bdd; private $parametres = array(); private $ressources = array(); private $commentaire; public function __construct(Conteneur $conteneur = null) { $this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; $this->navigation = $conteneur->getNavigation(); $this->masque = $conteneur->getMasque(); $this->gestionBdd = $conteneur->getGestionBdd(); $this->bdd = $this->gestionBdd->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->initialiserRessourcesEtParametres($ressources, $parametres); // Gestion des configuration du script $this->verifierConfiguration(); $insertion = $this->insererMotCle($this->parametres); // Mettre en forme le résultat et l'envoyer pour affichage $resultat = new ResultatService(); $resultat->corps = array('id_mot_cle' => $insertion); return $resultat; } private function initialiserRessourcesEtParametres($ressources, $parametres) { $this->ressources = $ressources; $this->parametres = $parametres; } /*------------------------------------------------------------------------------- CONFIGURATION DU SERVICE --------------------------------------------------------------------------------*/ /** * Vérifier que le service est bien configuré * */ public function verifierConfiguration() { $erreurs = array(); if (!isset($this->parametres['image'])) { $erreurs[] = ' - impossible d\'ajouter un mot clé sans 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 auteur associé ;'; } if (!empty($erreurs)) { $e = 'Erreur de configuration :'; $e = implode("\n", $erreurs); echo var_dump($e); throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); } } /*------------------------------------------------------------------------------- INSERTION DES MOTS CLES --------------------------------------------------------------------------------*/ /** * Insère un mot clé dans la table * @param $mot_cle array la liste des paramètres * */ private function insererMotCle($mot_cle) { $id_image = intval($mot_cle['image']); $id_auteur = $mot_cle['auteur.id']; $mots_cles = explode(",", $mot_cle['mot_cle']); array_walk($mots_cles, create_function('&$val', '$val = trim($val);')); $valeurs_a_inserer = array(); foreach ($mots_cles as $mot_cle_a_inserer) { $mot_cle_normalise = MotClePictoflora::normaliserMotCle($mot_cle_a_inserer); $valeurs_a_inserer[] = sprintf('(%d, %s, %s, %s, NOW(), 1, NOW())', $id_image, $this->bdd->proteger($id_auteur), $this->bdd->proteger(trim($mot_cle_a_inserer)), $this->bdd->proteger($mot_cle_normalise)); } $retour = $this->bdd->requeter(sprintf( 'INSERT INTO del_image_tag (ce_image, ce_utilisateur, tag, tag_normalise, date, actif, date_modification) VALUES %s ', implode(",", $valeurs_a_inserer))); if ($retour == null) { $e = 'Erreur inopinée lors de l\insertion'; throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); } MotClePictoflora::updateStats($this->bdd, $mot_cle['image']); //TODO: voir si cela a vraiment du sens lors de l'ajout de plusieurs mots clés return null; } } ?>