Subversion Repositories eFlore/Applications.cel

Rev

Rev 695 | Rev 703 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
429 jpm 1
<?php
2
/**
3
 * Widget fournissant des stats graphiques du CEL.
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
6
 *
7
 * @author Jean-Pascal MILCENT <jpm@clapas.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, Jean-Pascal MILCENT
12
 */
13
class Stats extends WidgetCommun {
700 jpm 14
	const PAGE_DEFAUT = 'defaut';
15
	const MODE_DEFAUT = 'defaut';
16
	const MODE_UTILISATEUR = 'utilisateur';
17
	private $page;
18
	private $mode;
565 jpm 19
 
429 jpm 20
	/**
21
	 * Méthode appelée avec une requête de type GET.
22
	 */
23
	public function executer() {
24
		$retour = null;
565 jpm 25
 
26
		extract($this->parametres);
700 jpm 27
		$this->mode = (isset($mode)) ? $mode : self::MODE_DEFAUT;
28
		$this->page = (isset($page)) ? $page : self::PAGE_DEFAUT;
29
 
30
		$methode = $this->traiterNomMethodeExecuter($this->page);
429 jpm 31
		if (method_exists($this, $methode)) {
32
			$retour = $this->$methode();
33
		} else {
34
			$this->messages[] = "Ce type de carte '$methode' n'est pas disponible.";
35
		}
36
 
37
		if (is_null($retour)) {
38
			$info = 'Un problème est survenu : '.print_r($this->messages, true);
39
			$this->envoyer($info);
40
		} else {
41
			$squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html';
42
			$html = $this->traiterSquelettePhp($squelette, $retour['donnees']);
43
			$this->envoyer($html);
44
		}
45
	}
46
 
47
	/**
48
	 * Stats par défaut
49
	 */
50
	public function executerDefaut() {
51
		$widget = null;
700 jpm 52
		if ($this->mode == self::MODE_DEFAUT) {
53
			$widget['donnees'] = (array) $this->recupererStatsTxtNombres();
54
			$widget['donnees']['url_service'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique');
55
			$widget['squelette'] = 'stats';
56
		} else if ($this->mode == self::MODE_UTILISATEUR) {
57
			if ($this->authentifierUtilisateur()) {
58
				$widget['donnees'] = (array) $this->recupererStatsTxtNombres();
59
				$widget['donnees']['url_service'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique');
60
				$widget['donnees']['utilisateur'] = $this->getAuthIdentifiant();
61
				$widget['donnees']['utilisateur_nom_prenom'] = $this->recupererPrenomNomIdentifie();
62
				$widget['squelette'] = 'stats_utilisateur';
63
			}
64
		} else {
65
			$this->messages[] = "Le mode '{$this->mode}' est inconnu.";
66
		}
429 jpm 67
		return $widget;
68
	}
565 jpm 69
 
700 jpm 70
	private function recupererPrenomNomIdentifie() {
71
		$nom = '';
72
		if ($this->getAuthIdentifiant() != null) {
73
			$infos_utilisateur = $this->recupererUtilisateursNomPrenom(array($this->getAuthIdentifiant()));
74
			if (array_key_exists($this->getAuthIdentifiant(), $infos_utilisateur)) {
75
				$utilisateur = (array) $infos_utilisateur[$this->getAuthIdentifiant()];
76
				$nom = $utilisateur['prenom'].' '.$utilisateur['nom'];
77
			} else {
78
				$nom = $this->getAuthIdentifiant();
79
			}
80
		}
81
		return $nom;
82
	}
83
 
84
	public function executerNombres() {
565 jpm 85
		$widget = null;
700 jpm 86
 
87
		if ($this->mode == self::MODE_DEFAUT) {
88
			$widget['donnees'] = $this->recupererStatsTxtNombres();
89
		} else if ($this->mode == self::MODE_UTILISATEUR) {
90
			if ($this->authentifierUtilisateur()) {
91
				$widget['donnees'] = $this->recupererStatsTxtNombres();
92
				$widget['donnees']['utilisateur_nom_prenom'] = $this->recupererPrenomNomIdentifie();
93
			}
94
		} else {
95
			$this->messages[] = "Le mode '{$this->mode}' est inconnu.";
565 jpm 96
		}
700 jpm 97
 
98
		if (!is_null($widget)) {
99
			$widget['squelette'] = 'stats_nbres';
100
			if (array_key_exists('taxon', $this->parametres)) {
101
				$widget['donnees']['taxon'] = trim($this->parametres['taxon'], "'");
102
			}
103
		}
104
 
565 jpm 105
		return $widget;
106
	}
695 jpm 107
 
108
	private function recupererStatsTxtNombres() {
109
		// Récupération des données au format Json
110
		$service = "CelStatistiqueTxt/Nombres";
111
 
112
		$parametres = array();
700 jpm 113
		if (isset($this->parametres['mode']) && $this->parametres['mode'] == self::MODE_UTILISATEUR && $this->getAuthIdentifiant() != null) {
695 jpm 114
			$parametres[] = 'utilisateur='.$this->getAuthIdentifiant();
115
		}
116
		if (isset($this->parametres['num_taxon'])) {
117
			$parametres[] = 'num_taxon='.$this->parametres['num_taxon'];
118
		}
700 jpm 119
		if (isset($this->parametres['taxon'])) {
120
			$parametres[] = 'taxon='.$this->parametres['taxon'];
121
		}
695 jpm 122
		$service .= (count($parametres) > 0) ? '?'.implode('&', $parametres) : '';
123
 
124
		$url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], $service);
700 jpm 125
		$json = $this->getDao()->consulter($url);
126
		return (array) json_decode($json);
695 jpm 127
	}
700 jpm 128
 
129
	public function executerListeTaxonsNbrePhotos() {
130
		$widget = null;
131
		$widget['donnees']['taxons'] = $this->recupererStatsTxtListeTaxonsNbrePhotos();
132
		$widget['donnees']['utilisateur'] = $this->getAuthIdentifiant();
133
		if (array_key_exists('taxon', $this->parametres)) {
134
			$widget['donnees']['taxon'] = trim($this->parametres['taxon'], "'");
135
		}
136
		$widget['squelette'] = 'liste_taxons_nbre_photos';
137
		return $widget;
138
	}
139
 
140
	private function recupererStatsTxtListeTaxonsNbrePhotos() {
141
		// Récupération des données au format Json
142
		$service = "CelStatistiqueTxt/ListeTaxonsNbrePhotos";
143
 
144
		$parametres = array();
145
		if (isset($this->parametres['mode']) && $this->parametres['mode'] == self::MODE_UTILISATEUR && $this->getAuthIdentifiant() != null) {
146
			$parametres[] = 'utilisateur='.$this->getAuthIdentifiant();
147
		}
148
		if (isset($this->parametres['num_taxon'])) {
149
			$parametres[] = 'num_taxon='.$this->parametres['num_taxon'];
150
		}
151
		if (isset($this->parametres['taxon'])) {
152
			$parametres[] = 'taxon='.$this->parametres['taxon'];
153
		}
154
		if (isset($this->parametres['start'])) {
155
			$parametres[] = 'start='.$this->parametres['start'];
156
		}
157
		if (isset($this->parametres['limit'])) {
158
			$parametres[] = 'limit='.$this->parametres['limit'];
159
		}
160
		$service .= (count($parametres) > 0) ? '?'.implode('&', $parametres) : '';
161
 
162
		$url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], $service);
163
		$json = $this->getDao()->consulter($url);
164
		return (array) json_decode($json);
165
	}
166
 
167
	public function executerListeUtilisateursNbrePhotos() {
168
		$widget = null;
169
		$utilisateurs = $this->recupererStatsTxtListeUtilisateursNbrePhotos();
170
		$noms = $this->recupererUtilisateursNomPrenom(array_keys($utilisateurs));
171
		foreach ($utilisateurs as $courriel => $infos) {
172
			if (array_key_exists($courriel, $noms)) {
173
				$nom_infos = (array) $noms[$courriel];
174
				$nom_fmt = $nom_infos['prenom'].' '.$nom_infos['nom'];
175
				$widget['donnees']['utilisateurs'][$nom_fmt] = $infos;
176
			}
177
		}
178
		if (array_key_exists('taxon', $this->parametres)) {
179
			$widget['donnees']['taxon'] = trim($this->parametres['taxon'], "'");
180
		}
181
		$widget['squelette'] = 'liste_utilisateurs_nbre_photos';
182
		return $widget;
183
	}
184
 
185
	private function recupererStatsTxtListeUtilisateursNbrePhotos() {
186
		// Récupération des données au format Json
187
		$service = "CelStatistiqueTxt/ListeUtilisateursNbrePhotos";
188
 
189
		$parametres = array();
190
		if (isset($this->parametres['mode']) && $this->parametres['mode'] == self::MODE_UTILISATEUR && $this->getAuthIdentifiant() != null) {
191
			$parametres[] = 'utilisateur='.$this->getAuthIdentifiant();
192
		}
193
		if (isset($this->parametres['num_taxon'])) {
194
			$parametres[] = 'num_taxon='.$this->parametres['num_taxon'];
195
		}
196
		if (isset($this->parametres['taxon'])) {
197
			$parametres[] = 'taxon='.$this->parametres['taxon'];
198
		}
199
		if (isset($this->parametres['start'])) {
200
			$parametres[] = 'start='.$this->parametres['start'];
201
		}
202
		if (isset($this->parametres['limit'])) {
203
			$parametres[] = 'limit='.$this->parametres['limit'];
204
		}
205
		$service .= (count($parametres) > 0) ? '?'.implode('&', $parametres) : '';
206
 
207
		$url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], $service);
208
		$json = $this->getDao()->consulter($url);
209
		return (array) json_decode($json);
210
	}
211
 
212
	private function recupererUtilisateursNomPrenom($courriels) {
213
		// Récupération des données au format Json
214
		$service = "utilisateur/prenom-nom-par-courriel/".implode(',', $courriels);
215
		$url = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], $service);
216
		$json = $this->getDao()->consulter($url);
217
		return (array) json_decode($json);
218
	}
429 jpm 219
}