Blame | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Le web service image récupère des listes de mots clés associés aux images** @category php 5.2* @package del* @subpackage motscles* @author Aurélien PERONNET <aurelien@tela-botanica.org>* @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*/class ListeMotsCles {private $conteneur;private $navigation;private $masque;private $gestionBdd;private $bdd;private $parametres = array();private $ressources = array();public function __construct(Conteneur $conteneur = null) {$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;$this->conteneur->chargerConfiguration('config_mots_cles.ini');$this->conteneur->chargerConfiguration('config_mapping_mots_cles.ini');$this->navigation = $conteneur->getNavigation();$this->masque = $conteneur->getMasque();$this->gestionBdd = $conteneur->getGestionBdd();$this->bdd = $this->gestionBdd->getBdd();}/*** Méthode principale de la classe.* Lance la récupération des images dans la base et les place dans un objet ResultatService* 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 consulter($ressources, $parametres) {$this->initialiserRessourcesEtParametres($ressources, $parametres);// Gestion des configuration du script$this->configurer();$this->verifierConfiguration();// Lancement du service$mots_cles = $this->chargerMotsCles();$mots_cles = $this->formaterMotsCles($mots_cles);$total = $this->compterMotsCles();$this->navigation->setTotal($total);$resultat = new ResultatService();$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $mots_cles);return $resultat;}private function initialiserRessourcesEtParametres($ressources, $parametres) {$this->ressources = $ressources;$this->parametres = $parametres;}/*-------------------------------------------------------------------------------CONFIGURATION DU SERVICE--------------------------------------------------------------------------------*//*** Configuration du service en fonction du fichier de config config_del.ini* */public function configurer() {$this->mappingMotsCles = $this->conteneur->getParametre('mapping_mots_cles');$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');}/*** Vérifier que le service est bien configuré* */public function verifierConfiguration() {$erreurs = array();$tableau_mots_cles = $this->conteneur->getParametre('motscles');if (empty($tableau_mots_cles)) {$erreurs[] = '- le fichier de configuration ne contient pas le tableau [motscles] ou celui-ci est vide ;';} else {if ($this->conteneur->getParametre('url_service') == null) {$erreurs[] = '- paramètre "url_service" manquant ;';}}if (empty($this->mappingFiltre)) {$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';}if (!empty($erreurs)) {$e = 'Erreur lors de la configuration : '."\n";$e .= implode("\n", $erreurs);throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);}}/*** Charger la clause WHERE en fonction des paramètres de masque* */private function chargerClauseWhere() {$where = array();$tableauMasque = $this->masque->getMasque();if (!empty($tableauMasque)) {foreach($tableauMasque as $idMasque => $valeurMasque) {//TODO: scinder ceci en fonctions réutilisables ?// voir si c'est interessant par rapport à la recherche générale$idMasque = str_replace('masque.', '', $idMasque);switch ($idMasque) {default:$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);break;}}}if (!empty($where)) {return ' WHERE '.implode('AND', $where);} else {return;}}/*-------------------------------------------------------------------------------CHARGEMENT DES MOTS CLES--------------------------------------------------------------------------------*//*** Chargement depuis la bdd de tous les mots clés* */private function chargerMotsCles() {$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * '.'FROM '.$this->gestionBdd->formaterTable('del_image_tag', 'dit');$requeteLiaisons .= $this->chargerClauseWhere();$requeteLiaisons .= $this->gestionBdd->getLimitSql();return $this->bdd->recupererTous($requeteLiaisons);}/*** Compter le nombre total de mots clés dans la base pour affichage dans en tete.* */private function compterMotsCles() {$requete = 'SELECT FOUND_ROWS() AS nbre ';$resultats = $this->bdd->recuperer($requete);return (int) $resultats['nbre'];}/*-------------------------------------------------------------------------------FORMATER ET METTRE EN FORME--------------------------------------------------------------------------------*//*** Formater les mots clés* @param $mots clés les mots clés à mettre à jour* @return $mots clés les mots clés mis à jour* */private function formaterMotsCles($mots_cles) {$retour = array();foreach ($mots_cles as $id => $mot_cle) {$mapping = array();foreach ($this->mappingMotsCles as $nomOriginal => $nomFinal) {$mapping[$nomFinal] = $mot_cle[$nomOriginal];}$retour[$mot_cle['id_tag']] = $mapping;}return $retour;}private function proteger($valeur) {if (is_array($valeur)) {return $this->bdd->protegerTableau($valeur);} else {return $this->bdd->proteger($valeur);}}}?>