Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1335 → Rev 1336

/branches/v1.5-cisaille/jrest/services/CelSyndicationObservation.php
10,11 → 10,11
* /CelSyndicationObservation/pour-admin/(rss1|rss2|atom)?start=0&limit=150
* /CelSyndicationObservation/par-mots-cles/(rss1|rss2|atom)/mot-cle?start=0&limit=150
* /CelSyndicationObservation/par-commune/(rss1|rss2|atom)/nom-commune?start=0&limit=150
*
*
* Les paramêtres :
* - "start" indique le numéro du premier item à afficher
* - "limit" nombre d'items à afficher
*
*
* @author Jean-Pascal MILCENT <jpm@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>
22,7 → 22,7
* @copyright 2010
*/
class CelSyndicationObservation extends Cel {
 
private $parametres_origines = null;
private $format = null;
private $service = null;
31,14 → 31,14
private $auteurs = array();
private $flux = array();
private $criteres = array(
'utilisateur' => 'identifiant',
'commune' => 'location',
'utilisateur' => 'identifiant',
'commune' => 'location',
'dept' => 'id_location',
'taxon' => 'nom_ret',
'commentaire' => 'commentaire',
'date' => 'date_observation',
'projet' => 'mots-cles');
 
/**
* Méthode appelée avec une requête de type GET.
*/
47,7 → 47,7
$this->parametres_origines = $params;
$info = array();
$contenu = '';
 
if (! $this->etreFluxAdmin() || $this->authentifierAdmin()) {
// Pré traitement des paramêtres
$pour_bdd = false;
55,10 → 55,10
extract($p);
$this->parametres = $params;
$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
 
// Récupération de la liste des flux
$this->chargerListeDesFlux();
 
// Chargement du bon type de service demandé
if (isset($service)) {
$this->service = $this->traiterNomService($service);
73,12 → 73,12
$this->format = '';
$this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
}
 
if (!isset($this->flux[$this->service]) || isset($this->format)) {
// Suppression des paramêtres inutile pour le reste des méthodes
array_shift($this->parametres);
array_shift($this->parametres);
 
// Récupération du contenu à renvoyer
$contenu = $this->$methode();
}
89,7 → 89,7
$this->messages[] = "Le service CEL Syndication Observation nécessite d'indiquer en premier paramètre le type d'information demandé.";
}
}
 
// Envoie sur la sortie standard
$encodage = 'utf-8';
$mime = $this->getTypeMime();
96,22 → 96,22
$formatage_json = $this->getFormatageJson();
$this->envoyer($contenu, $mime, $encodage, $formatage_json);
}
 
private function getUrlBase() {
$url_base = sprintf($this->config['settings']['baseURLAbsolu'], get_class($this).'/');
return $url_base;
}
 
private function getUrlServiceBase() {
$url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
return $url_service;
}
 
private function traiterNomService($nom) {
$nom = strtolower($nom);
return $nom;
}
 
private function getNomMethodeService() {
$methode = '';
$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
118,10 → 118,10
$methode = 'getService'.$service_formate;
return $methode;
}
 
private function getTypeMime() {
$mime = '';
$test = isset($this->format) ? $this->format : $this->service;
$test = isset($this->format) ? $this->format : $this->service;
switch ($test) {
case 'atom' :
$mime = 'application/atom+xml';
138,7 → 138,7
}
return $mime;
}
 
private function getFormatageJson() {
$json = false;
switch ($this->service) {
150,7 → 150,7
}
return $json;
}
 
private function getFlux($nom) {
return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
}
165,9 → 165,9
}
$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
}
 
private function chargerListeDesFlux() {
$this->setFlux('par-defaut', 'Flux de syndication des observations publiques du CEL',
$this->setFlux('par-defaut', 'Flux de syndication des observations publiques du CEL',
'Ce flux fournit des informations sur les observations du CEL.');
$this->setFlux('par-mots-cles', 'Flux de syndication obsolète',
"Ce flux est désormais accessible via le flux multicriteres/atom/M?tag='mot-cle'.");
179,11 → 179,11
"auteur (mail), commune (nom), departement (code postal), taxon (nom scientifique), commentaire, projet ".
"et/ou date.");
}
 
private function getServiceListeDesFlux() {
return $this->flux;
}
 
private function getServiceOpml() {
$donnees = array();
$id = 1;
197,12 → 197,12
$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
$donnees['liste_flux'][] = $info;
}
 
$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
return $contenu;
}
 
private function getServiceParDefaut() {
// Construction de la requête
$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
210,14 → 210,14
(($this->etreFluxAdmin()) ? '' : 'WHERE transmission = 1 ').
'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby : 'date_modification DESC').' '.
"LIMIT $this->start,$this->limit ";
 
$elements = $this->executerRequete($requete);
 
// Création du contenu
$contenu = $this->executerService($elements);
return $contenu;
}
 
private function getServiceParMotsCles() {
$infos=array();
$infos[0]['num_nom_sel'] = '';
229,13 → 229,13
if (isset($this->parametres[0])) {
$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
} else {
$donnees['items'][0]['description'] .= '</b>';
$donnees['items'][0]['description'] .= '</b>';
}
$donnees['items'][0]['titre'] = '';
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
return $contenu;
}
 
private function getServiceParCommune() {
$infos=array();
$infos[0]['num_nom_sel'] = '';
247,24 → 247,24
if (isset($this->parametres[0])) {
$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
} else {
$donnees['items'][0]['description'] .= '</b>';
$donnees['items'][0]['description'] .= '</b>';
}
$donnees['items'][0]['titre'] = '';
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
return $contenu;
}
 
private function getServiceMultiCriteres() {
$contenu = '';
if (isset($_GET['debut'])) $this->start = $_GET['debut'];
if (isset($_GET['debut'])) $this->start = $_GET['debut'];
if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
 
// Construction de la requête
$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
'FROM cel_inventory '.
'WHERE transmission = 1 '.
' AND ';
 
if ($this->estUneRechercheGenerale()) {
$chaine_requete = $_GET['recherche'];
$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
272,13 → 272,13
$criteres = $this->traiterCriteresMultiples($_GET) ;
if (!empty($criteres)) {
$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
}
}
}
$requete = rtrim($requete, 'AND ');
$requete .= 'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby :
$requete .= 'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby :
'date_modification DESC, location ASC').' '.
"LIMIT $this->start,$this->limit ";
 
$elements = $this->executerRequete($requete);//echo $requete;
 
// Création du contenu
287,10 → 287,10
} else {
$this->messages[] = "Aucune observation disponible.";
}
 
return $contenu;
}
 
private function creerSousRequeteRechercheParCriteres($criteres) {
$requete = '';
foreach ($criteres as $pair) {
304,17 → 304,17
$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
}
break;
case "date_observation" :
case "date_observation" :
$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
}
$requete .= $nom_valeur[0].'='.$this->bdd->quote($nom_valeur[1]).' AND '; break;
case "nom_ret" :
if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
case "nom_ret" :
if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR nom_sel LIKE "%'.
$nom_valeur[1].'%") AND '; break;
case "mots-cles" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]); break;
case "mots-cles" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]); break;
default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
}
}
322,7 → 322,7
$requete = rtrim($requete,' AND ');
return $requete;
}
 
private function creerSousRequeteMotsCles($mot_cle) {
$requete = 'mots_cles like "inexistant" OR';
if (preg_match('/.*OU.*/', $mot_cle)) {
329,17 → 329,17
$requete = $this->creerSousRequeteMotsClesOu($mot_cle);
} else if (preg_match('/.*ET.*/', $mot_cle)) {
$requete = $this->creerSousRequeteMotsClesEt($mot_cle);
} else {
} else {
// Construction de la requête
$prerequete = 'SELECT * '.
'FROM cel_mots_cles_obs '.
'WHERE cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle));
'WHERE cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle));
$elements = $this->executerRequete($prerequete);
if ($elements != false && count($elements) > 0) {
$requete = '';
foreach ($elements as $occurence) {
$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
}
}
}
346,9 → 346,9
$requete = rtrim($requete,' OR ').' AND ';
return $requete;
}
private function creerSousRequeteMotsClesOu($mot_cle) {
$requete = 'mots_cles like "inexistant" OR';
 
private function creerSousRequeteMotsClesOu($mot_cle) {
$requete = 'mots_cles like "inexistant" OR';
$tab_mots_cles = explode('OU', $mot_cle);
$where = '';
foreach ($tab_mots_cles as $mot) {
355,9 → 355,9
$where .= 'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle(trim($mot))).' OR ';
}
$where = rtrim($where,' OR ');
 
// Construction de la requête
$prerequete = "SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_obs WHERE $where ";
$prerequete = "SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_obs WHERE $where ";
$elements = $this->executerRequete($prerequete);//print_r($elements);
if ($elements != false && count($elements) > 0) {
$requete = '';
368,7 → 368,7
}
return $requete;
}
 
private function creerSousRequeteMotsClesEt($mot_cle) {
$requete = 'mots_cles like "inexistant" OR';
$where = '';
375,8 → 375,8
$champs = 'a.cmc_id_proprietaire , ';
$table = '';
$i = "a"; $j = "a";
$tab_mots_cles = explode("ET", $mot_cle);
 
$tab_mots_cles = explode("ET", $mot_cle);
foreach ($tab_mots_cles as $mot) {
$champs .= "$i.cmc_id_mot_cle_utilisateur as $i , ";
$table .= "cel_mots_cles_obs $i , ";
388,9 → 388,9
$i++;
}
$where = rtrim($where,' AND '); $champs = rtrim($champs,' , '); $table = rtrim($table,' , ');
 
// Construction de la requête
$prerequete = "SELECT $champs FROM $table WHERE $where ";
$prerequete = "SELECT $champs FROM $table WHERE $where ";
$elements = $this->executerRequete($prerequete);//print_r($elements);
if ($elements != false && count($elements) > 0) {
$requete = '';
403,11 → 403,11
}
}
return $requete;
}
}
 
private function traiterCriteresMultiples($tableau_criteres) {
$tableau_criteres_pour_bdd = array();
 
foreach($tableau_criteres as $nom_critere => $valeur_critere) {
if (isset($this->criteres[$nom_critere])) {
$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
415,10 → 415,10
}
return $tableau_criteres_pour_bdd;
}
 
private function creerSousRequeteRechercheGenerale($chaine_requete) {
$requete = '';
if (trim($chaine_requete) != '') {
if (trim($chaine_requete) != '') {
$chaine_requete = strtolower($chaine_requete);
$chaine_requete = str_replace(' ', '_', $chaine_requete);
$requete = ' ('.
435,11 → 435,11
}
return $requete;
}
 
private function estUneRechercheGenerale() {
return isset($_GET['recherche']);
}
 
private function executerService($elements) {
$contenu = '';
if (is_array($elements)) {
452,15 → 452,15
foreach ($elements as $element) {
$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
}
 
// Création du contenu à partir d'un template PHP
if (isset($this->squelette)) {
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
}
}
}
return $contenu;
}
 
private function construireDonneesCommunesAuFlux($observations) {
$donnees = $this->getFlux($this->service);
$donnees['guid'] = $this->getUrlServiceBase();
476,9 → 476,9
$donnees['annee_courante'] = date('Y');
$donnees['generateur'] = 'CEL - Jrest - CelSyndicationObservation';
$donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ? $match[1] : '0';
return $donnees;
return $donnees;
}
 
private function construireDonneesCommunesAuxItems($observation) {
$item = array();
$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($observation['date_modification']);
493,26 → 493,26
$item['categorie'] = $this->creerCategorie($item);
$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($observation), $item);
$item['description_encodee'] = htmlspecialchars($this->creerDescription($observation, $item));
$item['modifier_par'] = $this->auteurs[$observation['identifiant']];
$item['modifier_par'] = $this->getIntituleAuteur($observation['identifiant']);
return $item;
}
 
private function creerTitre($obs) {
$date = $obs['date_observation'];
$date = date("d/m/Y", strtotime($date));
$nom_plante = $obs['nom_sel'].' [nn'.$obs['num_nom_sel'].']';
$lieu = $obs['location'].' ('.$obs['id_location'].')';
$utilisateur = $this->auteurs[$obs['identifiant']];
$utilisateur = $this->getIntituleAuteur($obs['identifiant']);
$titre = "$nom_plante à $lieu par $utilisateur le $date";
$titre = $this->nettoyerTexte($titre);
return $titre;
}
 
private function creerGuidItem($element) {
$guid = sprintf($this->config['settings']['guidObsTpl'], 'obs'.$element['id']);
return $guid;
}
 
private function creerLienItem($element) {
$lien = null;
if ($element['num_nom_sel'] != 0) {
520,13 → 520,13
}
return $lien;
}
 
private function creerDescription($obs, $item) {
$id_obs = $obs['id'];
$famille = $obs['famille'];
$nom_saisi = $obs['nom_sel'];
$nom_retenu = $obs['nom_ret'];
$auteur = $this->auteurs[$obs['identifiant']];
$auteur = $this->getIntituleAuteur($obs['identifiant']);
$mots_cles_obs = $this->decoderMotsClesObs($obs['identifiant'], $obs['mots_cles']);
$lien_correction = sprintf($this->config['settings']['phpEditUrlTpl'], $obs['id']);
$lieu = $obs['location'].' ('.$obs['id_location'].') > '.$obs['lieudit'].' > '.$obs['station'];
538,7 → 538,7
$date_modification = $this->formaterDate($obs['date_modification']);
$date_creation = $this->formaterDate($obs['date_creation']);
$transmission = $obs['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
 
$description = '<h2>'."Observation #$id_obs de $nom_saisi".'</h2>'.
'<ul>'.
'<li>'.'Famille : '.$famille.'</li>'.
558,7 → 558,7
$description = $this->nettoyerTexte($description);
return $description;
}
 
private function creerCategorie($element) {
$categorie = '';
$categorie = 'Observation';
565,11 → 565,11
$categorie = $this->nettoyerTexte($categorie);
return $categorie;
}
 
private function etreFluxAdmin() {
return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
}
 
private function creerUrlService() {
$url_service = $this->getUrlServiceBase();
if (count($_GET) > 0) {
581,4 → 581,10
}
return $url_service;
}
}
 
private function getIntituleAuteur($courriel) {
$courriel = strtolower($courriel);
$intitule = $this->auteurs[$courriel];
return $intitule;
}
}
/branches/v1.5-cisaille/jrest/services/CelSyndicationImage.php
258,7 → 258,7
$item['categorie'] = $this->creerCategorie($item);
$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($info), $item);
$item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
$item['modifier_par'] = $this->auteurs[$info['ci_ce_utilisateur']];
$item['modifier_par'] = $this->getIntituleAuteur($info['ci_ce_utilisateur']);
return $item;
}
 
346,9 → 346,9
$date = $element['date_observation'];
$date = date("d/m/Y", strtotime($date));
if ($this->etreNull($element['nom_sel']) && $this->etreNull($element['num_nom_sel'])) {
$titre = "Ajout d'une photo par ".$this->auteurs[$element['ci_ce_utilisateur']].' le '.$date;
$titre = "Ajout d'une photo par ".$this->getIntituleAuteur($element['ci_ce_utilisateur']).' le '.$date;
} else {
$titre = $element['nom_sel'].' [nn'.$element['num_nom_sel'].'] par '.$this->auteurs[$element['ci_ce_utilisateur']].' le '.$date;
$titre = $element['nom_sel'].' [nn'.$element['num_nom_sel'].'] par '.$this->getIntituleAuteur($element['ci_ce_utilisateur']).' le '.$date;
}
return $titre;
}
668,7 → 668,7
}
 
private function creerDescriptionComplet($donnees, $item) {
$auteur = $this->auteurs[$donnees['ci_ce_utilisateur']];
$auteur = $this->getIntituleAuteur($donnees['ci_ce_utilisateur']);
$auteur_mail = $donnees['ci_ce_utilisateur'];
 
$id_img = $donnees['ci_id_image'];
771,4 → 771,10
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
return $contenu;
}
 
private function getIntituleAuteur($courriel) {
$courriel = strtolower($courriel);
$intitule = $this->auteurs[$courriel];
return $intitule;
}
}