Rev 1503 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Le web service image récupère toutes les données de la table del_obs_images* pour retourner une liste d'images associée à une observation** @category php 5.2* @package del* @subpackage images* @author Jean-Pascal MILCENT <jpm@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: Bdd.php 403 2012-02-22 14:35:20Z gduche $* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images*/class ListeCommentaires {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_commentaires.ini');$this->conteneur->chargerConfiguration('config_mapping_commentaires.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$commentaires = $this->chargerCommentaires();$commentaires = $this->formaterCommentaires($commentaires);$total = $this->compterCommentaires();$this->navigation->setTotal($total);$resultat = new ResultatService();$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $commentaires);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->mappingFiltre = $this->conteneur->getParametre('mapping_masque');$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire');}/*** Vérifier que le service est bien configuré* */public function verifierConfiguration() {$erreurs = array();$tableauCommentaires = $this->conteneur->getParametre('commentaires');if (empty($tableauCommentaires)) {$erreurs[] = '- le fichier de configuration ne contient pas le tableau [commentaires] ou celui-ci est vide ;';} else {if ($this->conteneur->getParametre('url_service') == null) {$erreurs[] = '- paramètre "url_service" manquant ;';}}if (empty($this->mappingCommentaire)) {$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_commentaire] ou celui-ci est vide ;';} else {$champsMappingCom = array('id_commentaire', 'texte', 'ce_utilisateur', 'utilisateur_nom', 'utilisateur_prenom', 'utilisateur_courriel', 'date');foreach ($champsMappingCom as $champ) {if (!isset($this->mappingCommentaire[$champ])) {$erreurs[] = '- le mapping du champ "'.$champ.'" pour le commentaire est manquant ;';}}}if (empty($this->mappingFiltre)) {$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';} else {$champsMappingFiltre = array('observation');foreach ($champsMappingFiltre as $champ) {if (!isset($this->mappingFiltre[$champ])) {$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';}}}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 COMMENTAIRES--------------------------------------------------------------------------------*//*** Chargement depuis la bdd de tous les commentaires* */private function chargerCommentaires() {$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * '.'FROM '.$this->gestionBdd->formaterTable('del_commentaire', 'dc');$requeteLiaisons .= $this->chargerClauseWhere();$requeteLiaisons .= $this->gestionBdd->getLimitSql();return $this->bdd->recupererTous($requeteLiaisons);}/*** Compter le nombre total de commentaires dans la base pour affichage dans entete.* */private function compterCommentaires() {$requete = 'SELECT FOUND_ROWS() AS nbre ';$resultats = $this->bdd->recuperer($requete);return (int) $resultats['nbre'];}/*-------------------------------------------------------------------------------FORMATER ET METTRE EN FORME--------------------------------------------------------------------------------*//*** Formater les commentaires* @param $commentaires les commentaires à mettre à jour* @return $commentaires les commentaires mis à jour* */private function formaterCommentaires($commentaires) {$retourCommentaires = array();foreach ($commentaires as $id => $commentaire) {$nouveauCommentaire = array();foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {$nouveauCommentaire[$nomFinal] = $commentaire[$nomOriginal];}$retourCommentaires[$nouveauCommentaire['id_commentaire']] = $nouveauCommentaire;}return $retourCommentaires;}private function proteger($valeur) {if (is_array($valeur)) {return $this->bdd->protegerTableau($valeur);} else {return $this->bdd->proteger($valeur);}}}?>