New file |
0,0 → 1,120 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Ajoute un ou plusieurs mots-clés en les associant à un identifiant d'image |
* |
* @category DEL |
* @package Services |
* @subpackage MotsCles |
* @version 0.1 |
* @author Mathias CHOUET <mathias@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Aurelien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
|
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; |
} |
} |