Subversion Repositories eFlore/Applications.del

Rev

Rev 1048 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1047 aurelien 1
<?php
2
/**
3
 * Service fournissant des informations concernant les commentaire de DEL au format RSS1, RSS2 ou ATOM.
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
6
 *
7
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
8
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
9
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
10
 * @version $Id$
11
 * @copyright 2010
12
 */
13
class SyndicationCommentaires {
14
 
15
	private $ressources = null;
16
	private $parametres = null;
17
	private $format = null;
18
	private $service = null;
19
	private $squelette = null;
20
	private $squelette_dossier = null;
21
	private $auteurs = array();
22
	private $flux = array();
23
	private $conteneur = null;
24
	private $gestionBdd = null;
25
 
26
	public function __construct(Conteneur $conteneur = null) {
27
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
28
		$this->gestionBdd = $conteneur->getGestionBdd();
29
	}
30
 
31
	public function consulter($params = array()) {
32
		$donnees_brutes = $this->getDerniersCommentaires();
33
		$commentaires_formates = $this->formaterPourRss($donnees_brutes) ;
34
		return $commentaires_formates;
35
	}
36
 
37
	private function formaterPourRss($elements) {
38
		// Prétraitement des données
39
		$donnees = $this->construireDonneesCommunesAuFlux($elements);
40
		foreach ($elements as $element) {
41
			$identifiants[$element['id_commentaire']] = $element['id_commentaire'];
42
		}
43
		foreach ($elements as $element) {
44
			$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
45
		}
46
		return $donnees;
47
	}
48
 
49
	private function creerCategorie($element) {
50
		$categorie = 'Commentaires';
51
		$categorie = htmlentities($categorie);
52
		return $categorie;
53
	}
54
 
55
	private function creerUrlService() {
56
		$url_service = '';
57
		if (count($_GET) > 0) {
58
			$parametres_get = array();
59
			foreach ($_GET as $cle => $valeur) {
60
				$parametres_get[] = $cle.'='.$valeur;
61
			}
62
			$url_service .= '?'.implode('&amp;', $parametres_get);
63
		}
64
		return $url_service;
65
	}
66
 
67
	private function construireDonneesCommunesAuFlux($infos) {
68
		$donnees = array();
69
		$donnees['guid'] = '';
70
		$donnees['titre'] = 'Dernières déterminations et commentaires de l\'application identiplante';
71
		$donnees['description'] = 'Ce flux regroupe les dernières déterminations et commentaires rédigés dans l\'application identiplante';
72
		$donnees['lien_service'] = $this->creerUrlService();
73
		$donnees['lien_del'] = $this->conteneur->getParametre('delAppliLien');
74
		$donnees['editeur'] = $this->conteneur->getParametre('editeur');
75
		$derniere_info_en_date = reset($infos);
76
		$date_modification_timestamp = strtotime($derniere_info_en_date['date']);
77
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
78
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
79
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
80
		$donnees['annee_courante'] = date('Y');
81
		$donnees['generateur'] = 'DEL - SyndicationCommentaire';
82
		$donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ?  $match[1] : '0';
83
		return $donnees;
84
	}
85
 
86
	private function construireDonneesCommunesAuxItems($info) {
87
		$item = array();
88
		$date_modification_timestamp = strtotime($info['date']);
89
		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
90
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
91
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
92
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
93
		$item['titre'] = $this->creerTitre($info);
94
		$item['guid'] = $this->creerGuidItem($info);
95
		$item['lien'] = $this->creerLienItem($info);
96
		$item['categorie'] = $this->creerCategorie($item);
97
		$item['description'] = $this->creerDescription($info, $item);
98
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
99
		$item['modifie_par'] = $this->creerAuteur($info);
100
		return $item;
101
	}
102
 
103
	private function creerGuidItem($element) {
104
		$guid = sprintf($this->conteneur->getParametre('guidObsTpl'), $element['id_commentaire']);
105
		return $guid;
106
	}
107
 
108
	private function creerLienItem($element) {
109
		$lien = sprintf($this->conteneur->getParametre('delFicheObsTpl'), $element['dob_id_observation']);
110
		return $lien;
111
	}
112
 
113
	private function creerTitre($element) {
114
		$titre = 'Observation '.$element['dob_id_observation'].' - '.htmlspecialchars($element['dob_nom_sel']).' à '.$element['dob_zone_geo'].' le '.$element['dob_date_observation'];
115
		return $titre;
116
	}
117
 
118
	private function creerDescription($donnees, $item) {
119
		$description = '<ul>';
120
 
121
		if($donnees['nom_sel'] != '') {
122
			$description = '<li>Proposition : '.htmlspecialchars($donnees['nom_sel']).'</li>';
123
		}
124
		$description .= '<li>Commentaire : <pre>'.htmlspecialchars($donnees['texte']).'</pre></li>'.
125
		                '<li>Auteur : '.htmlspecialchars($this->creerAuteur($donnees)).'</li>'.
126
		             	'</ul>';
127
		return $description;
128
	}
129
 
130
	private function creerAuteur($info) {
131
		return $info['utilisateur_prenom'].' '.$info['utilisateur_nom'];
132
	}
133
 
134
	private function getDerniersCommentaires() {
135
		$requete =  "SELECT dc.*, dob.id_observation as dob_id_observation, dob.ce_zone_geo as dob_ce_zone_geo, ".
136
		            "dob.zone_geo as dob_zone_geo, dob.date_observation as dob_date_observation, dob.nom_sel as dob_nom_sel ".
137
					"FROM del_commentaire dc ".
138
					"INNER JOIN del_observation dob ".
139
					"ON dob.id_observation = dc.ce_observation ".
140
					"AND dob.nom_sel != dc.nom_sel ".
141
					"ORDER BY dc.date DESC ".
142
					"LIMIT 0,50 ";
143
		$elements = $this->gestionBdd->getBdd()->recupererTous($requete);
144
		return $elements;
145
	}
146
}