Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 738 → Rev 739

/trunk/widget/modules/observation/config.defaut.ini
New file
0,0 → 1,18
[photo]
; Chemin pour l'autoload à ajouter
autoload = "bibliotheque/;bibliotheque/xml_feed_parser/1.0.4/;bibliotheque/xml_feed_parser/1.0.4/parsers/"
; URL ou chemin du flux RSS contenant les liens vers les photos
fluxRssUrl = "http://www.tela-botanica.org/service:cel:CelSyndicationObservation/multicriteres/atom"
; Squelette d'url pour accéder à la fiche eFlore
efloreUrlTpl = "http://www.tela-botanica.org/eflore/BDNFF/4.02/nn/%s/cel"
; Nombre de vignette à afficher : nombre de vignettes par ligne et nombre de lignes séparés par une vigule (ex. : 4,3).
vignette = 4,3
 
 
[observation.cache]
; Active/Désactive le cache
activation = true
; Dossier où stocker les fichiers de cache du widget
stockageDossier = "/tmp"
; Durée de vie du fichier de cache
dureeDeVie = 86400
/trunk/widget/modules/observation/bibliotheque/Cache.php
New file
0,0 → 1,128
<?php
class Cache {
private $actif = null;
private $dossier_stockage = null;
private $duree_de_vie = null;
public function __construct($dossier_stockage = null, $duree_de_vie = null, $activation = true) {
$this->actif = ($activation) ? true : false;
if ($this->actif) {
$this->dossier_stockage = $dossier_stockage;
if (is_null($dossier_stockage)) {
$this->dossier_stockage = self::getDossierTmp();
}
$this->duree_de_vie = $duree_de_vie;
if (is_null($duree_de_vie)) {
$this->duree_de_vie = 3600*24;
}
}
}
public function charger($id) {
$contenu = false;
if ($this->actif) {
$chemin_fichier_cache = $this->dossier_stockage.DIRECTORY_SEPARATOR.$id.'.txt';
if (file_exists($chemin_fichier_cache ) && (time() - @filemtime($chemin_fichier_cache) < $this->duree_de_vie)) {
$contenu = file_get_contents($chemin_fichier_cache);
}
}
return $contenu;
}
public function sauver($id, $contenu) {
if ($this->actif) {
$chemin_fichier_cache = $this->dossier_stockage.DIRECTORY_SEPARATOR.$id.'.txt';
if (!file_exists($chemin_fichier_cache) || (time() - @filemtime($chemin_fichier_cache) > $this->duree_de_vie)) {
$fh = fopen($chemin_fichier_cache,'w+');
if ($fh) {
fputs($fh, $contenu);
fclose($fh);
}
}
}
}
/**
* Détermine le dossier système temporaire et détecte si nous y avons accès en lecture et écriture.
*
* Inspiré de Zend_File_Transfer_Adapter_Abstract & Zend_Cache
*
* @return string|false le chemine vers le dossier temporaire ou false en cas d'échec.
*/
private static function getDossierTmp() {
$dossier_tmp = false;
foreach (array($_ENV, $_SERVER) as $environnement) {
foreach (array('TMPDIR', 'TEMP', 'TMP', 'windir', 'SystemRoot') as $cle) {
if (isset($environnement[$cle])) {
if (($cle == 'windir') or ($cle == 'SystemRoot')) {
$dossier = realpath($environnement[$cle] . '\\temp');
} else {
$dossier = realpath($environnement[$cle]);
}
if (self::etreAccessibleEnLectureEtEcriture($dossier)) {
$dossier_tmp = $dossier;
break 2;
}
}
}
}
if ( ! $dossier_tmp) {
$dossier_televersement_tmp = ini_get('upload_tmp_dir');
if ($dossier_televersement_tmp) {
$dossier = realpath($dossier_televersement_tmp);
if (self::etreAccessibleEnLectureEtEcriture($dossier)) {
$dossier_tmp = $dossier;
}
}
}
if ( ! $dossier_tmp) {
if (function_exists('sys_get_temp_dir')) {
$dossier = sys_get_temp_dir();
if (self::etreAccessibleEnLectureEtEcriture($dossier)) {
$dossier_tmp = $dossier;
}
}
}
if ( ! $dossier_tmp) {
// Tentative de création d'un fichier temporaire
$fichier_tmp = tempnam(md5(uniqid(rand(), TRUE)), '');
if ($fichier_tmp) {
$dossier = realpath(dirname($fichier_tmp));
unlink($fichier_tmp);
if (self::etreAccessibleEnLectureEtEcriture($dossier)) {
$dossier_tmp = $dossier;
}
}
}
if ( ! $dossier_tmp && self::etreAccessibleEnLectureEtEcriture('/tmp')) {
$dossier_tmp = '/tmp';
}
if ( ! $dossier_tmp && self::etreAccessibleEnLectureEtEcriture('\\temp')) {
$dossier_tmp = '\\temp';
}
return $dossier_tmp;
}
/**
* Vérifie si le fichier ou dossier est accessible en lecture et écriture.
*
* @param $ressource chemin vers le dossier ou fichier à tester
* @return boolean true si la ressource est accessible en lecture et écriture.
*/
protected static function etreAccessibleEnLectureEtEcriture($ressource){
$accessible = false;
if (is_readable($ressource) && is_writable($ressource)) {
$accessible = true;
}
return $accessible;
}
}
?>
/trunk/widget/modules/observation/squelettes/css/carto.css
New file
0,0 → 1,328
@charset "UTF-8";
html {
overflow:hidden;
}
body {
overflow:hidden;
padding:0;
margin:0;
width:100%;
height:100%;
font-family:Arial;
font-size:12px;
}
h1 {
font-size:1.6em;
}
h2 {
font-size:1.4em;
}
a, a:active, a:visited {
border-bottom:1px dotted #666;
color:#CCC;
text-decoration:none;
}
a:active {
outline:none;
}
a:focus {
outline:thin dotted;
}
a:hover {
color:#56B80E;
border-bottom:1px dotted #56B80E;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Présentation des listes de définitions */
dl {
width:100%;
}
dt {
float:left;
font-weight:bold;
text-align:top left;
margin-right:0.3em;
}
dd {
width:auto;
margin:0.5em 0;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Tableau : */
table {
border:1px solid gray;
border-collapse:collapse;
}
table thead, table tfoot, table tbody {
background-color:Gainsboro;
border:1px solid gray;
}
table tbody {
background-color:#FFF;
}
table th {
font-family:monospace;
border:1px dotted gray;
padding:5px;
background-color:Gainsboro;
}
table td {
font-family:arial;
border:1px dotted gray;
padding:5px;
text-align:left;
}
table caption {
font-family:sans-serif;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Tableau : tablesorter */
th.header {
background:url(../images/trie.png) no-repeat center right;
padding-right:20px;
}
th.headerSortUp {
background:url(../images/trie_croissant.png) no-repeat center right #56B80E;
color:white;
}
th.headerSortDown {
background:url(../images/trie_decroissant.png) no-repeat center right #56B80E;
color:white;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Générique */
.nettoyage{
clear:both;
}
hr.nettoyage{
visibility:hidden;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Carte */
#carte {
padding:0;
margin:0;
position:absolute;
top:35px;
left:24px;
right:0;
bottom:0;
overflow:auto;
}
.bouton {
background-color:white;
border:2px solid black;
cursor:pointer;
text-align:center;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Message de chargement */
#chargement {
display:none;
}
#chargement-copie img{
display:block;
margin:auto;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Avertissement */
#zone-avertissement {
background-color:#4A4B4C;
color:#CCC;
padding:12px;
text-align:justify;
line-height:16px;
}
#zone-avertissement h1{
margin:0;
}
#zone-avertissement a {
border-bottom:1px dotted gainsboro;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Carte titre */
#zone-titre {
padding:0;
margin:0;
position:absolute;
top:0;
left:0;
width:100%;
height:35px;
overflow:hidden;
background:url(http://www.tela-botanica.org/sites/commun/generique/images/favicones/tela_botanica.png) no-repeat 8px 8px #4A4B4C;
}
#zone-info {
position:absolute;
top:0;
right:8px;
width:48px;
text-align:right;
}
#zone-info img {
display:inline;
padding:4px;
margin:0;
border:none;
}
#carte-titre {
display:inline-block;
margin:0 0 0 24px;
padding:0.2em;
color:#CCCCCC;
}
#carte-titre {/*Hack CSS fonctionne seulement dans ie6, 7 & 8 */
display:inline !hackCssIe6Et7;/*Hack CSS pour ie6 & ie7 */
display /*\**/:inline\9;/*Hack CSS pour ie8 */
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Panneau latéral */
#panneau-lateral {
padding:0;
margin:0;
position:absolute;
top:35px;
left:0;
bottom:0;
width:24px;
overflow:hidden;
background-color:#4A4B4C;
border-right:1px solid grey;
}
#pl-contenu {
display:none;
}
#pl-entete {
height:95px;
}
#pl-corps {
position:absolute;
top:105px;
bottom:0;
overflow:auto;
padding:5px;
width:290px;
}
#pl-ouverture, #pl-fermeture {
position:absolute;
top:0;
height:24px;
width:24px;
text-align:center;
cursor:pointer;
}
#pl-ouverture {
left:0;
background:url(../images/ouverture.png) no-repeat top left #4A4B4C;
}
#pl-fermeture {
display:none;
left:276px;
background:url(../images/fermeture.png) no-repeat top right #4A4B4C;
}
#pl-ouverture span, #pl-fermeture span{
display:none;
}
/* Panneau latéral : balises */
#panneau-lateral h2, #panneau-lateral p {
color:#CCCCCC;}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Liste des taxons de la carte */
#taxons {
color:#999;
}
#taxons .taxon-actif, #taxons .taxon-actif a {
color:#56B80E;}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Pop-up observations */
.info-bulle-contenu {
margin:0;
padding:0;
}
#observations {
margin:23px 0 0 0;
padding:5px;
border:1px solid black;
border-radius:0 0 10px 10px;-moz-border-radius:0 0 10px 10px;-webkit-border-radius:0 0 10px 10px;
border-top:none !important;
overflow:none;
}
#observations ol {
padding-left:20px;
}
.champ_nom_latin {
display:none;
}
#obs-msg-info {
font-size:10px;
color:#CCC;
}
#observations a {
color:#333;
border-bottom:1px dotted gainsboro;
}
#observations a:hover {
color:#56B80E;
border-bottom:1px dotted #56B80E;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Onglets */
.onglets {
position:absolute;
top:0;
float:left;
height:22px;
padding:0;
margin:0;
border-bottom:1px solid black;
width:100%;
}
.onglets ul {
margin:0;
padding:0;
list-style:none;
}
.onglets li {
float:left;
text-transform:uppercase;
text-align:center;
}
.onglets .onglet {
display:block;
padding:5px 15px 4px 15px;
margin:0;
font-size:12px;
line-height:12px;
border:1px solid black;
border-radius:10px 10px 0 0;-moz-border-radius:10px 10px 0 0;-webkit-border-radius:10px 10px 0 0;
text-decoration:none;
}
.onglets .actif .onglet {
border-bottom:1px solid white;
color:black;
background-color:white;
font-weight:bold;
}
.onglets .inactif .onglet {
border-bottom:1px solid #000000;
color:white;
background-color:gray;/*rgba(29,30,32,0.8);*/
}
.onglets .inactif .onglet:hover {
color:black;
background-color:Gainsboro;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Pop-up : liste */
.cel-img-principale img{
float:right;
height:75px;
padding:1px;
border:1px solid white;
}
#observations .cel-img:hover img{
border:1px dotted #56B80E;
}
.cel-img-secondaire{
display:none;
}
/trunk/widget/modules/observation/squelettes/css/observation.css
New file
0,0 → 1,79
@charset "UTF-8";
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Widget */
#cel-observation-contenu{
position:relative;
padding:0 5px;
margin:5px auto;
font-family:Arial,verdana,sans-serif;
font-size:12px;
background-color:#4A4B4C;
color:#CCC;
}
#cel-observation-contenu h1 {
margin:5px;
padding:0;
font-size:1.6em;
color:white;
background-color:transparent;
background-image:none;
text-transform:none;
text-align:left;
}
#cel-observation-contenu h1 a{
color:#CCC;
}
#cel-observation-contenu h1 #cel-observation-flux{
width:16px;
height:20px;
}
#cel-observation-contenu img {
border:0;
padding:0;
margin:0;
}
#cel-observation-contenu a, #cel-observation-contenu a:active, #cel-observation-contenu a:visited {
border-bottom:1px dotted #666;
color:#CCC;
text-decoration:none;
background-image:none;
}
#cel-observation-contenu a:active {
outline:none;
}
#cel-observation-contenu a:focus {
outline:thin dotted;
}
#cel-observation-contenu a:hover {
color:#56B80E;
border-bottom:1px dotted #56B80E;
}
#cel-observation-date-generation{
text-align:right;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Général */
#cel-observation-contenu .discretion {
color:grey;
font-family:arial;
font-size:11px;
font-weight:bold;
}
#cel-observation-contenu .nettoyage {
clear:both;
}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Galerie observations CEL */
#cel-observation-contenu .cel-observation {
float:left;
padding:2px;
border:1px solid white;
}
#cel-observation-contenu .cel-observation h2{
font-size:1em;
}
 
#cel-observation-contenu .cel-infos{
color:white;
}
 
/trunk/widget/modules/observation/squelettes/observation.tpl.html
New file
0,0 → 1,129
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Observations publiques du CEL - Tela Botanica</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Jean-Pascal MILCENT, Grégoire DUCHÉ" />
<meta name="keywords" content="Tela Botanica, observation, CEL" />
<meta name="description" content="Widget de présentation des dernières observations publiées sur le Carnet en Ligne de Tela Botanica" />
 
<!-- Spécial mobile -->
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<!-- Favicones -->
<link rel="icon" type="image/png" href="http://www.tela-botanica.org/sites/commun/generique/images/favicones/tela_botanica.png" />
<link rel="shortcut icon" type="image/x-icon" href="http://www.tela-botanica.org/sites/commun/generique/images/favicones/tela_botanica.ico" />
<!-- Feuilles de styles -->
<link rel="stylesheet" type="text/css" href="http://www.tela-botanica.org/commun/jquery/fancybox/1.3.4/jquery.fancybox-1.3.4.css" media="screen" />
<link rel="stylesheet" type="text/css" href="<?=$url_css?>observation.css" media="screen" />
<style type="text/css">
html {
overflow:hidden;
}
body{
overflow:hidden;
padding:0;
margin:0;
width:100%;
height:100%;
background-color:#4A4B4C;
color:#CCC;
}
#cel-observation-contenu, #cel-galerie-observation{
width:350px;
}
</style>
<!-- Javascript : bibliothèques -->
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/1.4.4/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/fancybox/1.3.4/jquery.fancybox-1.3.4.js"></script>
</head>
<body>
<!-- WIDGET:CEL:OBSERVATION - DEBUT -->
<div id="cel-observation-contenu">
<?php if (isset($erreurs) || isset($informations)) : ?>
<h1>Erreur &amp; informations</h1>
<p>Impossible d'afficher le flux.</p>
<!-- Affichage des erreurs et messages d'information : -->
<?php if ($erreurs) : ?>
<?php foreach ($erreurs as $erreur) : ?>
<p class="erreur"><?=$erreur;?></p>
<?php endforeach; ?>
<?php endif; ?>
<?php if ($informations) : ?>
<?php foreach ($informations as $information) : ?>
<p class="info"><?=$information;?></p>
<?php endforeach; ?>
<?php endif; ?>
<?php else : ?>
<h1>
Dernières observations du
<a href="http://www.tela-botanica.org/appli:cel" title="Carnet en Ligne" onclick="window.open(this.href);return false;">
CEL
</a>
<a href="<?=$flux_rss_url?>" id="cel-observation-flux" title="Suivre les observations"
onclick="window.open(this.href);return false;">
<img src="http://www.tela-botanica.org/sites/commun/generique/images/rss.png" alt="Suivre les observations" />
</a>
</h1>
<div id="cel-liste-observation">
<?php foreach ($items as $item) : ?>
<div id="cel-observation-<?=$item['guid']?>" class="cel-observation" rel="<?=$item['guid']?>" >
<img id="imPlus-<?=$item['guid']?>" width="10" height="10"
name="imPlus-<?=$item['guid']?>" title="Voir les informations complémentaires" alt="+"
src="http://www.tela-botanica.org/sites/commun/generique/images/plus.png" />
<img id="imMoins-<?=$item['guid']?>" width="10" height="10" class="imMoins"
name="imMoins-<?=$item['guid']?>" title="Cacher les informations complémentaires" alt="+"
src="http://www.tela-botanica.org/sites/commun/generique/images/moins.png" />
<strong>
<a href="<?=$item['eflore_url']?>" onclick="window.open(this.href);return false;"
title="Cliquez pour accéder à la fiche eFlore">
<?=$item['titre']?>
</a>
</strong><br />
<span class="cel-img-date">Publiée le <?=$item['date']?></span><br />
<div id="cel-info-<?=$item['guid']?>" class="cel-infos">
<?=$item['description']?>
</div>
</div>
<?php endforeach; ?>
</div>
<p id="cel-observation-date-generation" class="discretion nettoyage">Au <?=strftime('%A %d %B %Y à %H:%M:%S')?></p>
<script type="text/Javascript">
// Function pour cacher / afficher le détail des observations
$(document).ready(function() {
 
$('.cel-infos').hide();
$('.imMoins').hide();
$('.cel-observation').hover(function() {
var id_obs = $(this).attr("rel");
$('#cel-info-'+id_obs).show();
$('#imPlus-'+id_obs).hide();
$('#imMoins-'+id_obs).show();
},
function() {
var id_obs = $(this).attr("rel");
$('#cel-info-'+id_obs).hide();
$('#imPlus-'+id_obs).show();
$('#imMoins-'+id_obs).hide();
});
 
});
</script>
<?php endif; ?>
</div>
<!-- WIDGET:CEL:OBSERVATION - FIN -->
</body>
</html>
/trunk/widget/modules/observation/squelettes/observation_ajax.tpl.html
New file
0,0 → 1,59
<?php
// Réglages de PHP
setlocale(LC_ALL, 'fr_FR');
date_default_timezone_set('Europe/Paris');
?>
<!-- SYNDICATION - DEBUT -->
<div class="flux_simple">
<?php if ($erreurs || $informations) : ?>
<h1>Erreur</h1>
<div class="contenu_RSS">
<b>Impossible d'afficher le flux.</b><br />
<!-- Affichage des erreurs et messages d'information : -->
<?php if ($erreurs) : ?>
<?php foreach ($erreurs as $erreur) : ?>
<p class="pap_erreur"><?=$erreur;?></p>
<?php endforeach; ?>
<?php endif; ?>
<?php if ($informations) : ?>
<?php foreach ($informations as $information) : ?>
<p class="pap_info"><?=$information;?></p>
<?php endforeach; ?>
<?php endif; ?>
</div>
<?php else : ?>
<!-- Affichage du flux RSS -->
<?php $flux = array(); ?>
<?php foreach ($sites as $site) : ?>
<h1><?=$site['titre']?></h1>
<div class="contenu_RSS" id="<?=$site['id']?>">
<a href="http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationObservation/par-defaut/atom" class="suivre-observations" title="Suivre les observations" onclick="window.open(this.href);return false;">Suivre les observations</a>
<?php foreach ($site['pages'] as $page) : ?>
<?php
// Formatage date
$timestamp = strtotime($page['date']);
$page['date'] = strftime('%A %d %B %Y', $timestamp);
// Formatage titre
$page['titre'] = preg_replace('/^\d+-\d+&nbsp;:/', '', $page['titre']);
?>
<div id="actualites1">
<div id="texteActualites1">
<h3><a href="<?=$page['url']?>" class="lien_ext"><?=$page['titre']?></a></h3>
<p class="sous-titre"><?=$page['date']?></p>
</div>
</div>
<br />
<?php endforeach; ?>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
 
 
 
<!-- SYNDICATION - FIN -->
/trunk/widget/modules/observation/Observation.php
New file
0,0 → 1,153
<?php
// declare(encoding='UTF-8');
/**
* Service affichant les dernières observations publiques du CEL.
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* Cas d'utilisation et documentation :
* @link http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=AideCELWidget
*
* Paramètres :
* ===> vignette = [0-9]+,[0-9]+ [par défaut : 4,3]
* Indique le nombre de vignette par ligne et le nombre de ligne.
*
* @author Delphine <jpm@tela-botanica.org>
* @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>
* @version $Id$
* @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
*/
class Observation extends WidgetCommun {
const DS = DIRECTORY_SEPARATOR;
const SERVICE_DEFAUT = 'observation';
private $flux_rss_url = null;
private $eflore_url_tpl = null;
/**
* Méthode appelée par défaut pour charger ce widget.
*/
public function executer() {
$retour = null;
// Pour la création de l'id du cache nous ne tenons pas compte du paramètre de l'url callback
unset($this->parametres['callback']);
extract($this->parametres);
 
if (!isset($mode)) {
$mode = self::SERVICE_DEFAUT;
}
$this->eflore_url_tpl = $this->config['observation']['efloreUrlTpl'];
$this->flux_rss_url = $this->config['observation']['fluxRssUrl'];
$cache_activation = $this->config['observation.cache']['activation'];
$cache_stockage = $this->config['observation.cache']['stockageDossier'];
$ddv = $this->config['observation.cache']['dureeDeVie'];
$cache = new Cache($cache_stockage, $ddv, $cache_activation);
$id_cache = 'observation-'.hash('adler32', print_r($this->parametres, true));
if (! $contenu = $cache->charger($id_cache)) {
$methode = $this->traiterNomMethodeExecuter($mode);
if (method_exists($this, $methode)) {
$retour = $this->$methode();
} else {
$this->messages[] = "Ce type de service '$methode' n'est pas disponible.";
}
if (is_null($retour)) {
$contenu = 'Un problème est survenu : '.print_r($this->messages, true);
} else {
$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html';
$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
$cache->sauver($id_cache, $contenu);
}
}
if (isset($_GET['callback'])) {
$this->envoyerJsonp(array('contenu' => $contenu));
} else {
$this->envoyer($contenu);
}
}
private function executerAjax() {
$widget = $this->executerObservation();
$widget['squelette'] = 'observation_ajax';
return $widget;
}
private function executerObservation() {
$widget = null;
extract($this->parametres);
$max_obs = (isset($max_obs) && preg_match('/^[0-9]+,[0-9]+$/', $max_obs)) ? $max_obs : '10';
$this->flux_rss_url .= $this->traiterParametres();
$xml = file_get_contents($this->flux_rss_url);
if ($xml) {
try {
$flux = new XmlFeedParser($xml);
$widget['donnees']['flux_rss_url'] = $this->flux_rss_url;
$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/observation/squelettes/css/');
$widget['donnees']['colonne'] = 1;
$num = 0;
foreach ($flux as $entree) {
if ($num == $max_obs) {
break;
}
$item = array();
// Formatage date
$date = $entree->updated ? $entree->updated : null;
$date = $entree->pubDate ? $entree->pubDate : $date;
$item['date'] = strftime('%A %d %B %Y', $date);
// Formatage titre
$item['titre'] = $entree->title;
$item['nn'] = '';
$item['eflore_url'] = '#';
if (preg_match('/\[nn([0-9]+)\]/', $entree->title, $match)) {
$item['nn'] = $match[1];
$item['eflore_url'] = sprintf($this->eflore_url_tpl, $item['nn']);
}
// Récupération du GUID
if (preg_match('/urn:lsid:tela-botanica.org:cel:obs([0-9]+)$/', $entree->id, $match)) {
$item['guid'] = (int) $match[1];
} else {
$item['guid'] = $entree->id;
}
$item['description'] = $entree->content;
$widget['donnees']['items'][$num++] = $item;
}
$widget['squelette'] = 'observation';
} catch (XmlFeedParserException $e) {
trigger_error('Flux invalide : '.$e->getMessage(), E_USER_WARNING);
}
}
return $widget;
}
private function traiterParametres() {
$parametres_flux = '?';
$criteres = array(
'utilisateur' => 'auteur',
'commune' => 'commune',
'departement' => 'departement',
'taxon' => 'taxon',
'commentaire' => 'commentaire',
'date' => 'date',
'tag' => 'projet');
foreach($this->parametres as $nom_critere => $valeur_critere) {
if (isset($criteres[$nom_critere])) {
$parametres_flux .= $criteres[$nom_critere].'='.$valeur_critere.'&';
}
}
if ($parametres_flux == '?') {
$parametres_flux = '';
} else {
$parametres_flux = rtrim($parametres_flux, '&');
}
return $parametres_flux;
}
}
?>