Subversion Repositories eFlore/Applications.del

Rev

Rev 1794 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1794 Rev 1795
Line 1... Line 1...
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Ajoute un mot clé en l'associant à un identifiant d'image
4
 * Ajoute un ou plusieurs mots-clés en les associant à un identifiant d'image
5
 *
5
 *
6
 * @category	php 5.2
6
 * @category   DEL
7
 * @package	del
7
 * @package    Services
8
 * @subpackage images
8
 * @subpackage MotsCles
-
 
9
 * @version    0.1
9
 * @author		Aurélien PERONNET <aurelien@tela-botanica.org>
10
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
10
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
11
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
12
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
13
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
13
 * @version	$Id$
14
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
14
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
15
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
15
 */
16
 */
Line 16... Line -...
16
 
-
 
17
require_once('MotClePictoflora.php');
-
 
18
 
17
 
Line 19... Line 18...
19
class AjouterMotCle {
18
class AjouterMotCle {
20
 
-
 
21
	private $conteneur;
19
 
22
	private $navigation;
20
	private $conteneur;
23
	private $bdd;
21
	private $bdd;
24
	private $parametres = array();
-
 
25
	private $ressources = array();
22
	private $parametres = array();
Line 26... Line 23...
26
 
23
	private $idDernierAjout = null;
27
	private $commentaire;
24
	private $nbreMotsClesAjoutes = null;
28
 
-
 
29
	public function __construct(Conteneur $conteneur = null) {
25
 
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
26
	public function __construct(Conteneur $conteneur = null) {
Line 31... Line 27...
31
		$this->navigation = $conteneur->getNavigation();
27
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
32
		$this->bdd = $this->conteneur->getBdd();
28
		$this->bdd = $this->conteneur->getBdd();
33
	}
29
	}
34
 
30
 
35
	/**
31
	/**
36
	 * Ajoute un mot-clé si les objets fournis en paramètres sont valides
32
	 * Ajoute un mot-clé si les objets fournis en paramètres sont valides
37
	 * pour l'afficher.
33
	 * pour l'afficher.
38
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
34
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
Line 39... Line 35...
39
	 * @param array $parametres les paramètres situés après le ? dans l'url
35
	 * @param array $parametres les paramètres situés après le ? dans l'url
40
	 * */
36
	 * */
41
	public function ajouter($ressources, $parametres) {
37
	public function ajouter($ressources, $parametres) {
-
 
38
		$this->parametres = $parametres;
Line 42... Line 39...
42
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
39
 
43
 
40
		// Gestion des configuration du script
44
		// Gestion des configuration du script
41
		$this->verifierParametres();
Line 45... Line 42...
45
		$this->verifierConfiguration();
42
		$this->insererMotCle();
46
		$insertion = $this->insererMotCle($this->parametres);
43
		TelaBotanica\Del\Commun\MotsClesImage::updateStats($this->bdd, $this->parametres['image']);
Line 47... Line -...
47
 
-
 
48
		// Mettre en forme le résultat et l'envoyer pour affichage
-
 
49
		$resultat = new ResultatService();
-
 
50
		$resultat->corps = array('id_mot_cle' => $insertion);
-
 
51
 
-
 
52
		return $resultat;
-
 
53
	}
-
 
54
 
-
 
55
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
-
 
56
		$this->ressources = $ressources;
-
 
57
		$this->parametres = $parametres;
-
 
58
	}
44
 
59
 
45
		// Mettre en forme le résultat et l'envoyer pour affichage
Line 60... Line 46...
60
	/*-------------------------------------------------------------------------------
46
		$resultat = new ResultatService();
61
	 							CONFIGURATION DU SERVICE
47
		$resultat->corps = array('nbre' => $this->nbreMotsClesAjoutes, 'id' => $this->idDernierAjout);
62
	 --------------------------------------------------------------------------------*/
48
 
63
	/**
49
		return $resultat;
64
	 * Vérifier que le service est bien configuré
50
	}
Line 65... Line 51...
65
	 * */
51
 
66
	public function verifierConfiguration() {
52
	public function verifierParametres() {
67
		$erreurs = array();
53
		$erreurs = array();
Line 68... Line 54...
68
 
54
 
69
		if (!isset($this->parametres['image'])) {
55
		if (!isset($this->parametres['image'])) {
70
			$erreurs[] = ' - impossible d\'ajouter un mot clé sans image associée ;';
56
			$erreurs[] = " - impossible d'ajouter un mot clé sans l'indication de l'identifiant de l'image associée";
Line 71... Line 57...
71
		} else if(!is_numeric($this->parametres['image'])) {
57
		} else if(!is_numeric($this->parametres['image'])) {
72
			$erreurs[] = ' - l\'identifiant d\'image doit être un entier ;';
58
			$erreurs[] = " - l'identifiant d'image doit être un entier";
73
		}
-
 
74
 
-
 
75
		if (!isset($this->parametres['mot_cle'])) {
59
		}
76
			$erreurs[] = ' - impossible d\'ajouter un mot clé sans le mot clé ;';
60
 
77
		}
61
		if (!isset($this->parametres['mot_cle'])) {
Line 78... Line -...
78
 
-
 
79
		if (!isset($this->parametres['auteur.id'])) {
-
 
80
			$erreurs[] = ' - impossible d\'ajouter un mot clé sans auteur associé ;';
-
 
81
		}
62
			$erreurs[] = " - impossible d'ajouter un mot clé sans le mot clé";
82
 
63
		}
83
		if (!empty($erreurs)) {
-
 
84
			$e = 'Erreur de configuration :';
64
 
85
			$e = implode("\n", $erreurs);
65
		if (!isset($this->parametres['auteur.id'])) {
86
			echo var_dump($e);
-
 
87
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
66
			$erreurs[] = " - impossible d'ajouter un mot clé sans l'identifiant de l'auteur associé";
88
		}
67
		}
89
	}
68
 
90
 
-
 
91
	/*-------------------------------------------------------------------------------
69
		if (!empty($erreurs)) {
92
							   INSERTION DES MOTS CLES
70
			$msg = "Erreur de configuration :\n".implode("\n", $erreurs);
93
	--------------------------------------------------------------------------------*/
71
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
94
	/**
72
		}
95
	 * Insère un mot clé dans la table
73
	}
96
	 * @param $mot_cle array la liste des paramètres
74
 
97
	 * */
75
	/**
98
	private function insererMotCle($mot_cle) {
76
	 * Insère un mot clé dans la table
99
		$id_image = intval($mot_cle['image']);
77
	 * */
100
		$id_auteur = $mot_cle['auteur.id'];
-
 
101
		$mots_cles = explode(",", $mot_cle['mot_cle']);
78
	private function insererMotCle() {
102
		array_walk($mots_cles, create_function('&$val', '$val = trim($val);'));
-
 
103
 
79
		$clauseValues = $this->creerClauseValues();
-
 
80
		$requete = 'INSERT INTO del_image_tag '.
104
		$valeurs_a_inserer = array();
81
			'(ce_image, ce_utilisateur, tag, tag_normalise, date, actif, date_modification) '.
-
 
82
			"VALUES $clauseValues ".
105
		foreach ($mots_cles as $mot_cle_a_inserer) {
83
			' -- '.__FILE__.' : '.__LINE__;
106
			$mot_cle_normalise = MotClePictoflora::normaliserMotCle($mot_cle_a_inserer);
84
		$nbreInsertion = $this->bdd->executer($requete);
107
			$valeurs_a_inserer[] = sprintf('(%d, %s, %s, %s, NOW(), 1, NOW())',
85
		$idDernierAjout = $this->bdd->recupererIdDernierAjout();
108
										   $id_image,
86
		if ($nbreInsertion == null) {
109
										   $this->bdd->proteger($id_auteur),
-
 
110
										   $this->bdd->proteger(trim($mot_cle_a_inserer)),
-
 
111
										   $this->bdd->proteger($mot_cle_normalise));
-
 
112
		}
-
 
113
 
87
			$msgTpl = "Erreur lors de l'insertion d'un des tags «%s» pour l'image «%s» de l'auteur «%s»";
Line 114... Line -...
114
		$retour = $this->bdd->requeter(sprintf(
-
 
115
			'INSERT INTO del_image_tag (ce_image, ce_utilisateur, tag, tag_normalise, date, actif, date_modification) VALUES %s ',
-
 
116
			implode(",", $valeurs_a_inserer)));
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']);
117
 
108