Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1048 → Rev 1049

/trunk/services/configurations/config_syndication.ini
6,7 → 6,7
guidObsTpl = "urn:lsid:tela-botanica.org:del:%s";
 
; Lien de base vers l'appli DEL
delAppliLien = "http://www.tela-botanica.org/eflore-test/del/del.html";
delAppliLien = "http://localhost/del/war/del.html";
 
; Lien de base vers la fiche de l'observation dans DEL
delFicheObsTpl = "{ref:delAppliLien}#page_validation~%s";
/trunk/services/configurations/config_syndication_commentaires.ini
New file
0,0 → 1,6
masques_possibles = "espece,auteur,observation";
 
; +------------------------------------------------------------------------------------------------------+
[mapping_masque]
espece = "nom_sel";
observation = "ce_observation";
/trunk/services/modules/0.1/Syndication.php
22,7 → 22,8
private $serviceNom = array();
private $cheminCourant = null;
private $squelette_dossier = null;
private $format = null;
// TODO: si dans 1000 ans un nouveau format de flux apparaît, il faudra mettre ceci dans le fichier de config
private $formats_autorises = array('rss1','rss2','atom');
 
private $conteneur;
58,8 → 59,8
}
private function verifierRessourcesEtParametres() {
if (!isset($this->ressources[1])) {
$message = "Vous devez indiquer un format de flux";
if (!isset($this->ressources[1]) || !in_array($this->ressources[1], $this->formats_autorises)) {
$message = "Vous devez indiquer un format de flux valide, les formats acceptés sont ".implode(', ',$this->formats_autorises);
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
} else {
/trunk/services/modules/0.1/syndication/SyndicationCommentaires.php
18,24 → 18,53
private $service = null;
private $squelette = null;
private $squelette_dossier = null;
private $auteurs = array();
private $flux = array();
private $masque = array();
private $mappingFiltre = array();
private $conteneur = null;
private $gestionBdd = null;
public function __construct(Conteneur $conteneur = null) {
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
$this->conteneur->chargerConfiguration('config_syndication_commentaires.ini');
$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');
$this->masque = $conteneur->getMasque();
$this->gestionBdd = $conteneur->getGestionBdd();
}
public function consulter($params = array()) {
public function consulter($params = array()) {
$this->verifierConfiguration();
$donnees_brutes = $this->getDerniersCommentaires();
$commentaires_formates = $this->formaterPourRss($donnees_brutes) ;
return $commentaires_formates;
}
/**
* Vérifier que le service est bien configuré
* */
public function verifierConfiguration() {
$erreurs = array();
$tableauImages = $this->conteneur->getParametre('mapping_masque');
if (empty($this->mappingFiltre)) {
$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
} else {
$champsMappingFiltre = array('espece', 'observation');
foreach ($champsMappingFiltre as $champ) {
if (!isset($this->mappingFiltre[$champ])) {
$erreurs[] = '- le mapping du champ "'.$champ.'" pour le commentaire est manquant ;';
}
}
}
if (!empty($erreurs)) {
$e = 'Erreur lors de la configuration : '."\n";
$e .= implode("\n", $erreurs);
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
}
}
private function formaterPourRss($elements) {
// Prétraitement des données
$donnees = $this->construireDonneesCommunesAuFlux($elements);
foreach ($elements as $element) {
$identifiants[$element['id_commentaire']] = $element['id_commentaire'];
140,8 → 169,9
"FROM del_commentaire dc ".
"INNER JOIN del_observation dob ".
"ON dob.id_observation = dc.ce_observation ".
"WHERE (dob.ce_utilisateur = dc.ce_utilisateur AND dob.nom_sel != dc.nom_sel) ".
" OR (dob.ce_utilisateur != dc.ce_utilisateur) ".
"WHERE ((dob.ce_utilisateur = dc.ce_utilisateur AND dob.nom_sel != dc.nom_sel) ".
" OR (dob.ce_utilisateur != dc.ce_utilisateur)) ".
$this->chargerClauseWhere()." ".
"ORDER BY dc.date DESC ".
"LIMIT 0,50 ";
 
148,4 → 178,63
$elements = $this->gestionBdd->getBdd()->recupererTous($requete);
return $elements;
}
/**
* 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) {
$idMasque = str_replace('masque.', '', $idMasque);
switch ($idMasque) {
case 'espece':
$where[] = ' dob.'.$this->mappingFiltre[$idMasque].' LIKE '.$this->gestionBdd->getBdd()->proteger($valeurMasque.'%').' '.
' OR '.' dc.'.$this->mappingFiltre[$idMasque].' LIKE '.$this->gestionBdd->getBdd()->proteger($valeurMasque.'%').' ';
break;
case 'auteur':
$where[] = $this->creerFiltreAuteur($valeurMasque).' ';
break;
default:
$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->gestionBdd->getBdd()->proteger($valeurMasque);
break;
}
}
}
if (!empty($where)) {
return ' AND '.implode('AND', $where);
} else {
return;
}
}
private function creerFiltreAuteur($valeurMasque) {
$masque = '';
$auteurId = $valeurMasque;
if (is_numeric($auteurId)) {
$masque = ' dc.ce_utilisateur = '.$auteurId;
} else {
if (strpos($auteurId, '@') === false) {
$tableauNomPrenom = explode(' ',$auteurId, 2);
if(count($tableauNomPrenom) == 2) {
// on teste potentiellement un nom prenom ou bien un prénom nom
$masque = '('.
'(dc.utilisateur_nom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[0].'%').' AND '.
'dc.utilisateur_prenom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[1].'%').') OR '.
'(dc.utilisateur_nom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[1].'%').' AND '.
'dc.utilisateur_prenom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[0].'%').')'.
')';
} else {
$masque = '(
(dc.utilisateur_nom LIKE '.$this->gestionBdd->getBdd()->proteger($auteurId.'%').' OR '.
'dc.utilisateur_prenom LIKE '.$this->gestionBdd->getBdd()->proteger($auteurId.'%').')'.
')';
}
} else {
$masque = " dob.utilisateur_courriel LIKE ".$this->gestionBdd->getBdd()->proteger($valeurMasque.'%')." ";
}
}
return $masque;
}
}