/trunk/jrest/services/CelSyndicationImage.php |
---|
10,8 → 10,10 |
* @version $Id$ |
* @copyright 2010 |
*/ |
// TODO : résoudre le problème des images liées à plusieurs obs. Cela créé plusieurs item avec le même id pour atom... |
class CelSyndicationImage extends Cel { |
private $parametres_origines = null; |
private $format = null; |
private $service = null; |
private $squelette = null; |
25,6 → 27,7 |
*/ |
public function getElement($params = array()) { |
// Initialisation des variables |
$this->parametres_origines = $params; |
$info = array(); |
$contenu = ''; |
82,6 → 85,12 |
"Ce flux fournit l'url des nouvelles images du CEL liées à une observation."); |
$this->setFlux('complet', 'Nouvelles images liées à une observation dans le CEL (détails)', |
"Ce flux fournit les informations sur les nouvelles images du CEL liées à une observation."); |
$this->setFlux('par-mots-cles', 'Flux de syndication des nouvelles images liées à une observation publique du CEL filtrées par mots clés', |
"Ce flux fournit des informations sur les nouvelles images du CEL liées à une observation du CEL filtrées par mots-clés. Il nécessite d'être |
paramétré en indiquant en dernier position de l'url le mot-clé à rechercher."); |
$this->setFlux('par-commune','Flux de syndication des nouvelles images liées à une observation publique du CEL filtrées par commune', |
"Ce flux fournit des informations sur les nouvelles images liées à une observation du CEL filtrées par commune. Il nécessite d'être |
paramétré en indiquant en dernier position de l'url le nom de la commune à rechercher."); |
} |
private function setFlux($nom, $titre, $description) { |
117,7 → 126,7 |
} |
private function getUrlServiceBase() { |
$url_service = $this->getUrlBase().$this->service.'/'.$this->format; |
$url_service = $this->getUrlBase().implode('/', $this->parametres_origines); |
return $url_service; |
} |
151,6 → 160,13 |
} |
return $json; |
} |
private function creerCategorie($element) { |
$categorie = ''; |
$categorie = 'Image'; |
$categorie = $this->nettoyerTexte($categorie); |
return $categorie; |
} |
private function etreFluxAdmin() { |
return ($_GET['admin'] == '1') ? true : false; |
158,17 → 174,8 |
private function creerUrlService() { |
$url_service = $this->getUrlServiceBase(); |
if (isset($this->start) || isset($this->limit)) { |
$arguments = array(); |
if (isset($this->start) && isset($_GET['start'])) { |
$arguments[] = 'start='.$this->start; |
} |
if (isset($this->limit) && isset($_GET['limit'])) { |
$arguments[] = 'limit='.$this->limit; |
} |
if (count($arguments) > 0) { |
$url_service .= '?'.implode('&', $arguments); |
} |
if (count($_GET) > 0) { |
$url_service .= '?'.implode('&', $_GET); |
} |
return $url_service; |
} |
219,7 → 226,7 |
private function construireDonneesCommunesAuxItems($info) { |
$item = array(); |
$date_modification_timestamp = strtotime($info['ci_meta_date_ajout']); |
$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['ci_meta_date_ajout']); |
$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp); |
$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp); |
$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp); |
227,13 → 234,15 |
$item['titre'] = $this->creerTitre($info); |
$item['guid'] = $this->creerGuidItem($info); |
$item['lien'] = $this->creerLienItem($info); |
$item['description'] = $this->creerDescription($info, $item); |
$item['description_encodee'] = htmlspecialchars($item['description']); |
$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->creerAuteur($info['identifiant'], $this->etreFluxAdmin()); |
return $item; |
} |
private function creerGuidItem($element) { |
$guid = sprintf($this->config['settings']['guidImgTpl'], $element['ci_id_image']); |
$guid = $this->getUrlImage($element['ci_id_image']); |
return $guid; |
} |
341,14 → 350,24 |
} |
private function creerDescriptionComplet($donnees, $item) { |
$auteur = $this->creerAuteur($donnees['identifiant'], $this->etreFluxAdmin()); |
$id_img = $donnees['ci_id_image']; |
$nom_fichier = $donnees['ci_nom_original']; |
$url_img = $this->getUrlImage($donnees['ci_id_image'], 'M'); |
$mots_cles_image = $this->decoderMotsClesImg($donnees['identifiant'], $donnees['ci_meta_mots_cles']); |
$note = ($donnees['ci_note_image'] +1).'/5'; |
$commentaire_img = $donnees['ci_meta_comment']; |
$id_obs = $donnees['id']; |
$url_img = $this->getUrlImage($donnees['ci_id_image'], 'M'); |
$auteur = $this->creerAuteur($donnees['identifiant'], $this->etreFluxAdmin()); |
$famille = $donnees['famille']; |
$nom_saisi = $donnees['nom_sel']; |
$nom_retenu = $donnees['nom_ret']; |
$mots_cles_obs = $this->decoderMotsClesObs($donnees['identifiant'], $donnees['mots_cles']); |
$mots_cles_image = $this->decoderMotsClesImg($donnees['identifiant'], $donnees['ci_meta_mots_cles']); |
$lieu = $donnees['location'].' ('.$donnees['id_location'].') > '.$donnees['lieudit'].' > '.$donnees['station']; |
$lieu = $donnees['location'].' ('.$donnees['id_location'].') > '.$donnees['lieudit'].' > '.$donnees['station']; |
$milieu = $donnees['milieu']; |
$coordonnees = ($this->etreNull($donnees['coord_x']) && $this->etreNull($donnees['coord_y'])) ? '' : $donnees['coord_x'].'/'.$donnees['coord_y']; |
$commentaire_obs = $donnees['commentaire']; |
$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y'); |
$date_transmission = $this->formaterDate($donnees['date_transmission']); |
$date_modification = $this->formaterDate($donnees['date_modification']); |
357,7 → 376,7 |
$description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'. |
'<h2>'."Image #$id_img liée à l'observation #$id_obs".'</h2>'. |
'<img class="gauche" src="'.$url_img.'" alt="'.$donnees['ci_nom_original'].'" />'. |
'<img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" />'. |
'<div class="gauche">'. |
'<h3>'.'Image'.'</h3>'. |
'<ul>'. |
365,9 → 384,9 |
'<li>'.'<span class="champ">Par :</span> '. |
(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur.'">'.$auteur.'</a>' : $auteur). |
'</li>'. |
'<li>'.'<span class="champ">Nom du fichier :</span> '.$donnees['ci_nom_original'].'</li>'. |
'<li>'.'<span class="champ">Note qualité :</span> '.($donnees['ci_note_image'] +1).'/5</li>'. |
'<li>'.'<span class="champ">Commentaires :</span> '.$donnees['ci_meta_comment'].'</li>'. |
'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'. |
'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'. |
'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'. |
'<li>'.'<span class="champ">Mots-clés :</span> '.implode(', ', $mots_cles_image).'</li>'. |
'</ul>'. |
'</div>'. |
375,14 → 394,14 |
'<div class="gauche">'. |
'<h3>'.'Observation'.'</h3>'. |
'<ul>'. |
'<li>'.'<span class="champ">Famille :</span> '.$donnees['famille'].'</li>'. |
'<li>'.'<span class="champ">Nom saisi :</span> '.$donnees['nom_sel'].'</li>'. |
'<li>'.'<span class="champ">Nom retenu :</span> '.$donnees['nom_ret'].'</li>'. |
'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'. |
'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'. |
'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'. |
'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'. |
'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'. |
'<li>'.'<span class="champ">Milieu :</span> '.$donnees['milieu'].'</li>'. |
'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'. |
(($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : ''). |
'<li>'.'<span class="champ">Commentaire :</span> '.$donnees['commentaire'].'</li>'. |
'<li>'.'<span class="champ">Commentaire :</span> '.$commentaire_obs.'</li>'. |
'<li>'.'<span class="champ">Mots-clés :</span> '.implode(', ', $mots_cles_obs).'</li>'. |
(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : ''). |
'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'. |
/trunk/jrest/services/Cel.php |
---|
300,12 → 300,39 |
return $tableau; |
} |
/** |
* Fonction nettoyant les caractères spéciaux (&,<) et les valeurs nulles du CEL dans un texte comprenant du HTML. |
*/ |
protected function nettoyerTexte($txt) { |
$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9][a-f]+);)/i', '&', $txt); |
// TODO : trouver une regexp qui permet de remplacer les symboles < et > isolés |
//$txt = preg_replace('/<(?!([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>|\/\s*([a-z][a-z0-9]*)\s*>)/i', '<', $txt); |
//$txt = preg_replace('/(?!<([a-z][a-z0-9]*)\b[^>]*)>(?!(.*?)<\/\1>)/i', '>', $txt); |
$txt = preg_replace('/(?:000null|null)/i', '', $txt); |
return $txt; |
} |
/** |
* Fonction nettoyant les caractères spéciaux HTML pour les champs de saisie libre du CEL. |
*/ |
protected function protegerCaracteresHtmlDansChamps($donnees) { |
$champs = array('ci_meta_mots_cles', 'ci_meta_comment', |
'mots_cles', 'location', 'lieudit', 'station', 'milieu', 'commentaire', 'nom_sel'); |
foreach ($champs as $champ) { |
if (isset($donnees[$champ])) { |
$donnees[$champ] = htmlspecialchars($donnees[$champ]); |
} |
} |
return $donnees; |
} |
protected function convertirDateHeureMysqlEnTimestamp($date_heure_mysql){ |
$val = explode(' ', $date_heure_mysql); |
$date = explode('-', $val[0]); |
$heure = explode(':', $val[1]); |
return mktime($heure[0], $heure[1], $heure[2], $date[1], $date[2], $date[0]); |
} |
protected function etreNull($valeur) { |
$etre_null = false; |
if ($valeur == '' || $valeur == null || $valeur == '000null' || $valeur == 'null') { |
/trunk/jrest/services/squelettes/rss2.tpl.xml |
---|
2,7 → 2,7 |
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> |
<channel> |
<title><?=$titre?></title> |
<link><?=$lien?></link> |
<link><?=$lien_cel?></link> |
<atom:link href="<?=$lien_service?>" rel="self" type="application/rss+xml" /> |
<description><?=$description?></description> |
/trunk/jrest/services/squelettes/rss1.tpl.xml |
---|
14,7 → 14,7 |
<channel rdf:about="<?=$guid?>"> |
<title><?=$titre?></title> |
<link><?=$lien?></link> |
<link><?=$lien_cel?></link> |
<description><?=$description?></description> |
<dc:publisher><?=$editeur?></dc:publisher> |
<dc:date><?=$date_maj_W3C?></dc:date> |
39,7 → 39,6 |
<link><?=$item['lien']?></link> |
<? endif; ?> |
<description><?=$item['description_encodee']?></description> |
<category><?= $item['categorie'] ?></category> |
<dc:date><?=$item['date_maj_W3C']?></dc:date> |
</item> |
<?php endforeach; ?> |
/trunk/jrest/services/CelSyndicationObservation.php |
---|
23,9 → 23,9 |
*/ |
class CelSyndicationObservation extends Cel { |
private $parametres_origines = null; |
private $format = null; |
private $service = null; |
public $parametres = null; |
private $squelette = null; |
private $squelette_dossier = null; |
private $flux = array(); |
35,6 → 35,7 |
*/ |
public function getElement($params = array()) { |
// Initialisation des variables |
$this->parametres_origines = $params; |
$info = array(); |
$contenu = ''; |
93,7 → 94,7 |
} |
private function getUrlServiceBase() { |
$url_service = $this->getUrlBase().$this->service.'/'.$this->format; |
$url_service = $this->getUrlBase().implode('/', $this->parametres_origines); |
return $url_service; |
} |
194,7 → 195,7 |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '. |
'FROM cel_inventory '. |
'WHERE transmission = 1 '. |
(($this->etreFluxAdmin()) ? '' : 'WHERE transmission = 1 '). |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'date_modification DESC').' '. |
"LIMIT $this->start,$this->limit "; |
205,20 → 206,6 |
return $contenu; |
} |
private function getServicePourAdmin() { |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '. |
'FROM cel_inventory '. |
'ORDER BY '.((!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() { |
$contenu = ''; |
$mot_cle = $this->parametres[0]; |
243,8 → 230,8 |
// Construction de la requête |
$requete = 'SELECT * '. |
'FROM cel_inventory '. |
'WHERE transmission = 1 '. |
'AND '.implode(" \nOR ", $requete_where).' '. |
'WHERE '.implode(" \nOR ", $requete_where).' '. |
' '.(($this->etreFluxAdmin()) ? '' : 'AND transmission = 1 '). |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'date_modification, date_creation DESC').' '. |
"LIMIT $this->start,$this->limit "; |
$elements = $this->executerRequete($requete); |
269,8 → 256,8 |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '. |
'FROM cel_inventory '. |
'WHERE transmission = 1 '. |
"AND location = $commune ". |
"WHERE location = $commune ". |
' '.(($this->etreFluxAdmin()) ? '' : 'AND transmission = 1 '). |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'date_modification DESC, location ASC').' '. |
"LIMIT $this->start,$this->limit "; |
322,7 → 309,7 |
private function construireDonneesCommunesAuxItems($observation) { |
$item = array(); |
$date_modification_timestamp = strtotime($observation['date_modification']); |
$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($observation['date_modification']); |
$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp); |
$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp); |
$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp); |
331,9 → 318,9 |
$item['titre'] = $this->creerTitre($observation); |
$item['guid'] = $this->creerGuidItem($observation); |
$item['lien'] = $this->creerLienItem($observation); |
$item['description'] = $this->creerDescription($observation, $item); |
$item['categorie'] = $this->creerCategorie($item); |
$item['description_encodee'] = htmlspecialchars($item['description']); |
$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($observation), $item); |
$item['description_encodee'] = htmlspecialchars($this->creerDescription($observation, $item)); |
$item['modifier_par'] = $this->creerAuteur($observation['identifiant'], $this->etreFluxAdmin()); |
return $item; |
} |
361,19 → 348,38 |
} |
private function creerDescription($obs, $item) { |
$id_obs = $donnees['id']; |
$famille = $obs['famille']; |
$nom_saisi = $obs['nom_sel']; |
$nom_retenu = $obs['nom_ret']; |
$auteur = $this->creerAuteur($obs['identifiant'], $this->etreFluxAdmin()); |
$mots_cles_obs = $this->decoderMotsClesObs($obs['identifiant'], $obs['mots_cles']); |
$lien_correction = sprintf($this->config['settings']['phpEditUrlTpl'], $obs['id']); |
$description = |
$lieu = $obs['location'].' ('.$obs['id_location'].') > '.$obs['lieudit'].' > '.$obs['station']; |
$milieu = $obs['milieu']; |
$coordonnees = ($this->etreNull($obs['coord_x']) && $this->etreNull($obs['coord_y'])) ? '' : $obs['coord_x'].'/'.$obs['coord_y']; |
$commentaire = htmlspecialchars($obs['commentaire']); |
$date_observation = $this->formaterDate($obs['date_observation'], '%A %d %B %Y'); |
$date_transmission = $this->formaterDate($obs['date_transmission']); |
$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>Nom saisi : '.$obs['nom_sel'].'</li>'. |
(($obs['nom_sel'] != $obs['nom_ret']) ? ' <li>Nom retenu : '.$obs['nom_ret'].'</li>' : ''). |
' <li>Lieu : '.$obs['location'].' ('.$obs['id_location'].')</li>'. |
($this->etreNull($obs['station']) ? '': ' <li>Station : '.$obs['station'].'</li>'). |
($this->etreNull($obs['milieu']) ? '': ' <li>Milieu : '.$obs['milieu'].'</li>'). |
($this->etreNull($obs['commentaire']) ? '': ' <li>Commentaire : '.$obs['commentaire'].'</li>'). |
(($this->etreFluxAdmin()) ? ' <li>Transmis (= public) : '.($obs['transmission'] == 1 ? 'oui' : 'non').'</li>' : ''). |
' <li>Modifiée le : '.$item['date_maj_simple'].'</li>'. |
' <li>Créée le : '.$item['date_creation_simple'].'</li>'. |
(($this->etreFluxAdmin()) ? ' <li><a href="'.$lien_correction.'">Corriger cette observation</a></li>' : ''). |
'<li>'.'Famille : '.$famille.'</li>'. |
'<li>'.'Nom saisi : '.$nom_saisi.'</li>'. |
'<li>'.'Nom retenu : '.$nom_retenu.'</li>'. |
'<li>'.'Observée le : '.$date_observation.'</li>'. |
'<li>'.'Lieu : '.$lieu.'</li>'. |
'<li>'.'Milieu : '.$milieu.'</li>'. |
(($this->etreFluxAdmin()) ? '<li>Coordonnées (Lat/Long) : '.$coordonnees.'</li>' : ''). |
'<li>'.'Commentaire : '.$commentaire.'</li>'. |
'<li>'.'Mots-clés : '.implode(', ', $mots_cles_obs).'</li>'. |
(($this->etreFluxAdmin()) ? '<li>Transmis (= public) : '.$transmission.'</li>' : ''). |
'<li>Modifiée le : '.$date_modification.'</li>'. |
'<li>Créée le : '.$date_creation.'</li>'. |
(($this->etreFluxAdmin()) ? '<li><a href="'.$lien_correction.'">Corriger cette observation</a></li>' : ''). |
'</ul>'; |
$description = $this->nettoyerTexte($description); |
return $description; |
387,22 → 393,13 |
} |
private function etreFluxAdmin() { |
return ($this->service == 'pour-admin' || $_GET['admin'] == '1') ? true : false; |
return ($_GET['admin'] == '1') ? true : false; |
} |
private function creerUrlService() { |
$url_service = $this->getUrlServiceBase(); |
if (isset($this->start) || isset($this->limit)) { |
$arguments = array(); |
if (isset($this->start) && isset($_GET['start'])) { |
$arguments[] = 'start='.$this->start; |
} |
if (isset($this->limit) && isset($_GET['limit'])) { |
$arguments[] = 'limit='.($this->limit); |
} |
if (count($arguments) > 0) { |
$url_service .= '?'.implode('&', $arguments); |
} |
if (count($_GET) > 0) { |
$url_service .= '?'.implode('&', $_GET); |
} |
return $url_service; |
} |