Subversion Repositories eFlore/Applications.del

Rev

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

Rev Author Line No. Line
1818 jpm 1
<?php
2
/**
3
 * Statistiques par année sur l'utilisation de Identiplante / Pictoflora
4
 *
5
 * @see Documentation : <http://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=AppliDelStats>
6
 *
7
 * @category   DEL
8
 * @package    Services
9
 * @subpackage Statistiques
10
 * @version    0.1
11
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
12
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
14
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
15
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
16
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
17
 */
18
class StatistiquesParAnnee {
19
 
20
	private $conteneur;
21
	private $contexte;
22
	private $navigation;
23
	private $bdd;
24
 
25
	private $annee = null;
26
	private $type = 'tout';
27
	private $methode = '';
28
 
29
	public function __construct(Conteneur $conteneur = null) {
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
31
		$this->contexte = $conteneur->getContexte();
32
		$this->navigation = $conteneur->getNavigation();
33
		$this->bdd = $this->conteneur->getBdd();
34
	}
35
 
36
	public function consulter() {
37
		$this->intitialiserParametresEtRessources();
38
		$this->verifierPreRequis();
39
 
40
		$resultat = new ResultatService();
41
		$resultat->corps = call_user_func(array($this, $this->methode));
42
		return $resultat;
43
	}
44
 
45
	private function intitialiserParametresEtRessources() {
46
		$this->type = $this->contexte->getRessource(2) != null ? $this->contexte->getRessource(2) : $this->type;
47
		$this->methode = $this->obtenirNomMethode($this->type);
48
		$this->annee =(int) $this->contexte->getQS('annee') != null ? intval($this->contexte->getQS('annee')) : null;
49
	}
50
 
51
	private function verifierPreRequis() {
52
		$erreurs = array();
53
 
54
		if ($this->annee != null && !is_int($this->annee)) {
55
			$erreurs[] = "Le paramètre 'annee' doit être un entier.";
56
		}
57
		if (method_exists($this, $this->obtenirNomMethode($this->type)) === false) {
58
			$erreurs[] = "Les stats de type '{$this->type}' n'existent pas.";
59
		}
60
		if (!empty($erreurs)) {
61
			$msg = "Erreur de configuration :\n".implode("\n", $erreurs)."\n\n".Statistiques::getDoc();
62
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
63
		}
64
	}
65
 
2009 mathias 66
	/**
67
	 * Ouh la jolie méthode magique !!
68
	 * @param unknown $mot
69
	 * @return string
70
	 */
1818 jpm 71
	private function obtenirNomMethode($mot) {
72
		$classeNom = 'get'.str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
73
		return $classeNom;
74
	}
75
 
2009 mathias 76
	/**
77
	* Prend en paramêtre un tableau de courriels et retourne après avoir intérogé un service we de l'annuaire
78
	* une tableau avec en clé le courriel et en valeur, un tableau associatif :
79
	*  - nom : le nom de l'utilisateur
80
	*  - prenom : le prénom de l'utilisateur.
81
	*  @TODO ne gère pas le pseudo, qui devrait être retourné en lieu et place des nom / prénom s'il est utilisé et renseigné
82
	* @param array $courriels un tableau de courriels pour lesquels il faut recherche le prénom et nom.
83
	*/
84
	protected function recupererUtilisateursNomPrenom(Array $courriels) {
85
		// Récupération des données au format Json
86
		$service = "utilisateur/prenom-nom-par-courriel/".implode(',', $courriels);
87
		$url = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], $service);
88
		$json = $this->getDao()->consulter($url);
89
		return (array) json_decode($json);
90
	}
91
 
1818 jpm 92
	// retourne toutes les stats pour l'année spécifiée
93
	private function getTout() {
94
		$obsIdentifieesFinAnneePlus = $this->getPourcentageObsIdentifieesFinAnneePlus();
95
		$participants = $this->getParticipants();
96
 
97
		return array(
98
			'annee' => $this->annee,
99
			'moyenneObsSansNomParMois' => $this->getMoyenneObsSansNomParMois(),
100
			'moyenneObsIdentifieesParMois' => $this->getMoyenneObsIdentifieesParMois(),
101
			'pourcentageObsIdentifieesEnFinDAnnee' => $this->getPourcentageObsIdentifieesFinAnnee(),
102
			'pourcentageObsIdentifieesEnFinDAnneePlusPlus' => $obsIdentifieesFinAnneePlus['pourcentage'],
103
			'moyenneActionsParJour' => $this->getMoyenneActionsParJour(),
104
			'personnesEnvoyantUnePropositionParMois' => $participants['nombre']
105
		);
106
	}
107
 
108
	// proxy pour le widget de stats
109
	private function getObservations() {
110
		return $this->getTout();
111
	}
112
 
113
	// Retourne le nombre moyen d'observations non identifiées envoyées par mois, pour l'année $annee
114
	private function getMoyenneObsSansNomParMois() {
115
		$sqlTableTmp = "SELECT COUNT(*) AS compte, ".
116
			"	CONCAT(YEAR(date_transmission),'-',MONTH(date_transmission)) AS anneemois ".
117
			"FROM del_observation ".
118
			"WHERE (mots_cles_texte LIKE '%aDeterminer%' ".
119
				"OR certitude = 'aDeterminer' ".
120
				"OR certitude = 'douteux' ".
121
				// Obs n'ayant pas de nom_sel_nn (détermination non choisie parmi le référentiel)
122
				"OR nom_sel_nn IS NULL ".
123
				"OR nom_sel_nn = 0 ".
124
				"OR id_observation IN ({$this->getSqlObsSansNom()}) ".
125
			') '.
126
			(($this->annee !== null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : '').
127
			'GROUP BY anneemois '.
128
			'ORDER BY anneemois DESC ';
129
 
130
		$requete = "SELECT AVG(parMois.compte) AS moyenne FROM ($sqlTableTmp) AS parMois ".
131
			' -- '.__FILE__.' : '.__LINE__;
132
		$resultat = $this->bdd->recupererTous($requete);
133
		return intval($resultat[0]['moyenne']);
134
	}
135
 
136
	private function getSqlObsSansNom() {
137
		$sqlObsSansNom = "SELECT DISTINCT ce_observation ".
138
			"FROM del_commentaire ".
139
			"WHERE proposition_initiale = 1 ".
140
			"AND (nom_sel_nn IS NULL OR nom_sel_nn = '') ";
141
		return $sqlObsSansNom;
142
	}
143
 
144
	// Retourne la moyenne par mois sur l'année en cours, des propositions marquées comme "retenues"
145
	// dont le dernier vote est dans l'année considérée (comptées en groupant par mois du dernier vote)
146
	private function getMoyenneObsIdentifieesParMois() {
147
		// Compte et date du dernier vote des propositions marquées comme "retenues"
148
		$sqlTableTmp1 = "SELECT COUNT(*), MAX(dcv.date) AS maxdate ".
149
			"FROM del_commentaire AS dc ".
150
			"	LEFT JOIN del_commentaire_vote dcv ON dcv.ce_proposition = dc.id_commentaire ".
151
			" WHERE proposition_retenue = 1 ".
152
			" GROUP BY dc.id_commentaire ".
153
			(($this->annee !== null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '');
154
 
155
		$sqlTableTmp2 = 'SELECT COUNT(*) AS valideesparmois, '.
156
			"	CONCAT(YEAR(maxdate), '-', MONTH(maxdate)) AS anneemois ".
157
			"FROM ($sqlTableTmp1) AS temp ".
158
			"GROUP BY anneemois ";
159
 
160
		$requete = "SELECT AVG(valideesparmois) AS moyenne FROM ($sqlTableTmp2) AS temp2 ".
161
			' -- '.__FILE__.' : '.__LINE__;
162
 
163
		$resultat = $this->bdd->recupererTous($requete);
164
		return intval($resultat[0]['moyenne']);
165
	}
166
 
167
	// Version améliorée mais non optimale (prend en compte les consensus non validés)
168
	// @TODO on devrait croiser les IDS pour ne pas prendre en compte les obs validées ou en
169
	// 		consensus, mais qui datent des années précédentes
170
	// @ACHTUNG mache pas, dépasse les 100% (voir Wiki)
171
	private function getPourcentageObsIdentifieesFinAnneePlus() {
172
		// Obs ayant atteint un consensus cette année
173
		$requete = "SELECT COUNT(*) AS nombre ".
174
			"FROM (SELECT id_observation, id_commentaire, id_vote, nbvotes ".
175
			"FROM (SELECT do.id_observation, dc.id_commentaire, dcv.id_vote, COUNT(dcv.id_vote) AS nbvotes ".
176
			"FROM del_commentaire AS dc ".
177
			"	LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ".
178
			"	LEFT JOIN del_commentaire_vote AS dcv ON (dc.id_commentaire = dcv.ce_proposition) ".
179
			"AND dcv.valeur = 1 ".
180
			"AND dc.proposition_retenue = 0 ".
181
			"GROUP BY dc.id_commentaire ".
182
			(($this->annee != null) ? " HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '').
183
			" ) AS temp ".
184
			"GROUP BY id_observation ".
185
			") AS temp2 ".
186
			' -- '.__FILE__.' : '.__LINE__;
187
		$obsEnConsensus = $this->bdd->recupererTous($requete);
188
		$oc = intval($obsEnConsensus[0]['nombre']);
189
 
190
		// Obs ayant une "proposition retenue" cette année
191
		$requete = "SELECT COUNT(*) AS nombre ".
192
			"FROM (SELECT COUNT(DISTINCT id_observation), MAX(dcv.date) AS maxdate ".
193
			"FROM del_commentaire AS dc ".
194
			"	LEFT JOIN del_commentaire_vote AS dcv ON (dcv.ce_proposition = dc.id_commentaire) ".
195
			"	LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ".
196
			"WHERE proposition_retenue = 1 ".
197
			(($this->annee != null) ? "AND YEAR(do.date_transmission) = '{$this->annee}' " : '').
198
			"GROUP BY dc.id_commentaire ".
199
			(($this->annee != null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '').
200
			") as temp ".
201
			' -- '.__FILE__.' : '.__LINE__;
202
		$nbObsValidees = $this->bdd->recupererTous($requete);
203
		$ov = intval($nbObsValidees[0]['nombre']);
204
 
205
		// Nombre d'obs sans nom soumises cette année
206
		$requete = "SELECT COUNT(*) AS nombre ".
207
			"FROM del_observation ".
208
			"WHERE (mots_cles_texte LIKE '%aDeterminer%' ".
209
			"OR certitude = 'aDeterminer' ".
210
			"OR certitude = 'douteux' ".
211
			"OR nom_sel_nn IS NULL ".
212
			"OR nom_sel_nn = 0 ".
213
			"OR id_observation IN ({$this->getSqlObsSansNom()})".
214
			') '.
215
			(($this->annee != null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : '').
216
			' -- '.__FILE__.' : '.__LINE__;
217
		$nbObsSansNom = $this->bdd->recupererTous($requete);
218
		$osn = intval($nbObsSansNom[0]['nombre']);
219
 
220
		return array(
221
			'observationsEnConsensus' => $oc,
222
			'observationsValidees' => $ov,
223
			'observationsSansNom' => $osn,
224
			'pourcentage' => ($osn == 0 ? 0 : round(((($oc + $ov) / $osn) * 100), 2))
225
		);
226
	}
227
 
228
	private function getPourcentageObsIdentifieesFinAnnee() {
229
		$requete = "SELECT ( ".
230
			"SELECT COUNT(*) FROM ( ".
231
				"SELECT COUNT(DISTINCT id_observation), MAX(dcv.date) AS maxdate ".
232
				"FROM del_commentaire AS dc ".
233
				"	LEFT JOIN del_commentaire_vote AS dcv ON (dcv.ce_proposition = dc.id_commentaire) ".
234
				"	LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ".
235
				"WHERE proposition_retenue = 1 ".
236
				(($this->annee != null) ? "AND YEAR(do.date_transmission) = '{$this->annee}' " : '').
237
				"GROUP BY dc.id_commentaire ".
238
				(($this->annee != null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '').
239
			") AS temp)".
240
			" / ".
241
			"(SELECT COUNT(*) ".
242
			"FROM del_observation ".
243
			"WHERE (mots_cles_texte LIKE '%aDeterminer%' ".
244
			"OR certitude = 'aDeterminer' ".
245
			"OR certitude = 'douteux' ".
246
			"OR nom_sel_nn IS NULL ".
247
			"OR nom_sel_nn = 0 ".
248
				"OR id_observation IN ( ".
249
				"SELECT DISTINCT ce_observation ".
250
				"FROM del_commentaire ".
251
				"WHERE proposition_initiale = 1 ".
252
				"AND (nom_sel_nn IS NULL OR nom_sel_nn = '') ".
253
				") ".
254
			") ".
255
			(($this->annee != null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : '').
256
		") * 100 AS pourcentage ".
257
		' -- '.__FILE__.' : '.__LINE__;
258
		$resultat = $this->bdd->recupererTous($requete);
259
		return floatval($resultat[0]['pourcentage']);
260
	}
261
 
262
	// Retourne la moyenne sur l'année du nombre d'actions (commentaire ou vote) par jour
263
	private function getMoyenneActionsParJour() {
264
		// nombre de commentaires sur l'année
265
		$sqlNbreCommentaires = 'SELECT COUNT(*) FROM del_commentaire '.
266
			($this->annee != null ? "WHERE YEAR(date) = '{$this->annee}' " : '');
267
 
268
		// nombre de votes sur l'année
269
		$sqlNbreVotes = 'SELECT COUNT(*) FROM del_commentaire_vote '.
270
			($this->annee != null ? "WHERE YEAR(date) = '{$this->annee}' " : '');
271
 
272
		// nombre de jours écoulés dans l'année*
273
		$sqlNbreJours = "SELECT 365 * (YEAR(now()) - MIN(YEAR(date)) + 1) FROM del_commentaire_vote WHERE YEAR(date) != 0 ";
274
		if ($this->annee != null) {
275
			$sqlNbreJours = "SELECT IF(YEAR(CURDATE()) = '{$this->annee}', DAYOFYEAR(CURDATE()), 365) ";
276
		}
277
 
278
		// nombre d'actions / nombre de jours
279
		$requete = "SELECT ((($sqlNbreCommentaires) + ($sqlNbreVotes)) / ($sqlNbreJours)) AS moyenne ".
280
			' -- '.__FILE__.' : '.__LINE__;
281
 
282
		$resultat = $this->bdd->recupererTous($requete);
283
		return intval($resultat[0]['moyenne']);
284
	}
285
 
286
	// Retourne le nombre et la liste des personnes ayant sur l'année une moyenne de participation par mois >= 1
287
	private function getParticipants() {
288
		// Faire la moyenne par utilisateur et par mois
289
		$requete = "SELECT cal.nbmois, SUM(somme) / cal.nbmois as moyenne, ce_utilisateur, utilisateur_courriel ".
290
			"FROM ".
291
				// Compter le nombre de participations pour chaque utilisateur à chaque mois de cette année
292
				"(SELECT COUNT(*) as somme, CONCAT(YEAR(date),'-',MONTH(date)) AS anneemois, ".
293
				"ce_utilisateur, utilisateur_courriel, id_commentaire ".
294
				"FROM del_commentaire ".
295
				"WHERE ce_proposition = '' ".
296
				"AND nom_sel_nn != '' ".
297
				"AND nom_sel_nn IS NOT NULL ".
298
				(($this->annee != null) ? " AND YEAR(date) = '{$this->annee}' " : '').
299
				"GROUP BY anneemois, ce_utilisateur, utilisateur_courriel) AS ppm, ".
300
			// Trouver le nombre de mois différents lors desquels les utilisateurs ont participé, cette année
301
			// Pour l'année en cours par ex, retournera 2 si on est en février (voire un au début du mois).
302
				"(SELECT COUNT(distinct CONCAT(YEAR(date),'-',MONTH(date))) AS nbmois ".
303
				"FROM del_commentaire ".
304
				"WHERE ce_proposition = '' ".
305
				(($this->annee != null) ? "AND YEAR(date) = '{$this->annee}' " : '').
306
				"AND nom_sel_nn != '' ".
307
				"AND nom_sel_nn IS NOT NULL) AS cal ".
308
			"GROUP BY ce_utilisateur, utilisateur_courriel ".
309
			"HAVING SUM(somme) / cal.nbmois >= 1 ".
310
			"ORDER BY moyenne ".
311
			' -- '.__FILE__.' : '.__LINE__;
312
 
313
		$resultat = $this->bdd->recupererTous($requete);
314
		$cpt = count($resultat);
315
		$retour = array(
316
			'nombre' => intval($cpt),
317
			'donnees' => $resultat
318
		);
319
		return $retour;
320
	}
2009 mathias 321
 
322
	/**
323
	 * Statistiques sur les propositions et les votes
324
	 * - Nombre de proposition faites (au total et sur les derniers 15 jours)
325
	 * - Nombre de propositions validées(au total et sur le dernier mois)
326
	 * - Nombres de votes (au total et sur les derniers 15 jours)
327
	 */
328
	private function getPropositions() {
329
		$nbPropositions = $this->getNbPropositions();
330
		$nbPropositionsValidees = $this->getNbPropositionsValidees();
331
		$votes = $this->getNbVotes();
332
		return array(
333
			'annee' => $this->annee,
334
			'nbPropositionsTotal' => $nbPropositions[0],
335
			'nbPropositions15J' => $nbPropositions[1],
336
			'nbPropositionsValidees' => $nbPropositionsValidees[0],
337
			'nbPropositionsValidees15J' => $nbPropositionsValidees[1],
338
			'nbVotes' => $votes[0],
339
			'nbVotes15J' => $votes[1]
340
		);
341
	}
342
 
343
	/**
344
	 * @TODO Nombre de proposition faites (au total et sur les derniers 15 jours)
345
	 * @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer
346
	 * l'activité des 15 derniers jours (on met la case à null ?)
347
	 */
348
	private function getNbPropositionsTotal() {
349
		$requete = "";
350
		$resultat = $this->bdd->recupererTous($requete);
351
		return intval($resultat[0][0]);
352
	}
353
 
354
	/**
355
	 * @TODO Nombre de proposition validées (au total et sur les derniers 15 jours)
356
	 * @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer
357
	 * l'activité des 15 derniers jours (on met la case à null ?)
358
	 */
359
	private function getNbPropositionsValidees() {
360
		$requete = "";
361
		$resultat = $this->bdd->recupererTous($requete);
362
		return intval($resultat[0][0]);
363
	}
364
 
365
	/**
366
	 * @TODO Nombre de votes (au total et sur les derniers 15 jours)
367
	 * @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer
368
	 * l'activité des 15 derniers jours (on met la case à null ?)
369
	 */
370
	private function getNbVotes() {
371
		$requete = "";
372
		$resultat = $this->bdd->recupererTous($requete);
373
		return intval($resultat[0][0]);
374
	}
375
 
376
	/**
377
	 * Statistiques sur les utilisateurs d'Identiplante
378
	 * - Nombre total d'utilisateurs
379
	 * - Nombre d'utilisateurs réguliers
380
	 * - Nombre d'utilisateurs prenant part aux votes
381
	 * - Nombre de participants actifs pour le mois, la semaine, l'année
382
	 */
383
	private function getUtilisateursIp() {
384
		return array(
385
			'annee' => $this->annee,
386
			'nbUtilisateursTotal' => $this->getNbUtilisateursIpTotal(),
387
			'nbUtilisateursReguliers' => $this->getNbUtilisateursIpReguliers(),
388
			'nbUtilisateursVotant' => $this->getNbUtilisateursIpVotant(),
389
			'nbUtilisateursActifs' => $this->getNbUtilisateursIpActifs(),
390
		);
391
	}
392
 
393
	/**
394
	 * @TODO Nombre total d'utilisateurs d'Identiplante
395
	 * @REFLEXION est-ce le même nombre que les utilisateurs d'Identiplante ?
396
	 */
397
	private function getNbUtilisateursIpTotal() {
398
		$requete = "";
399
		$resultat = $this->bdd->recupererTous($requete);
400
		return intval($resultat[0][0]);
401
	}
402
 
403
	/**
404
	 * @TODO Nombre d'utilisateurs réguliers d'Identiplante
405
	 * @REFLEXION quelle différence avec getNbUtilisateursIpActifs() ?
406
	 */
407
	private function getNbUtilisateursIpReguliers() {
408
		$requete = "";
409
		$resultat = $this->bdd->recupererTous($requete);
410
		return intval($resultat[0][0]);
411
	}
412
 
413
	/**
414
	 * @TODO Nombre d'utilisateurs d'Identiplante prenant part aux votes
415
	 */
416
	private function getNbUtilisateursIpVotant() {
417
		$requete = "";
418
		$resultat = $this->bdd->recupererTous($requete);
419
		return intval($resultat[0][0]);
420
	}
421
 
422
	/**
423
	 * @TODO Nombre de participants actifs à Identiplante (pour le mois, la semaine, l'année)
424
	 * @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer
425
	 * l'activité du mois et de la semaine (on met la case à null ?)
426
	 */
427
	private function getNbUtilisateursIpActifs() {
428
		$requete = "";
429
		$resultat = $this->bdd->recupererTous($requete);
430
		return intval($resultat[0][0]);
431
	}
432
 
433
	/**
434
	 * @TODO Liste des utilisateurs ayant fait le plus de propositions, et
435
	 * le plus de propositions retenues (ou ayant atteint un consensus)
436
	 */
437
	private function getListeMeilleursProposeurs() {
438
		$liste = array();
439
		$requete = "";
440
		$resultat = $this->bdd->recupererTous($requete);
441
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
442
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
443
		// ...
444
 
445
		return array(
446
			'annee' => $this->annee,
447
			'listeMeilleursProposeurs' => $liste[0],
448
			'listeMeilleursProposeursAyantEteRetenus' => $liste[1]
449
		);
450
	}
451
 
452
	/**
453
	 * @TODO Liste des utilisateurs ayant fait le plus de votes, et le plus
454
	 * de votes sur des propositions retenues (ou ayant atteint un consensus)
455
	 */
456
	private function getListeMeilleursVoteurs() {
457
		$liste = array();
458
		$requete = "";
459
		$resultat = $this->bdd->recupererTous($requete);
460
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir service CEL stats)
461
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
462
		// ...
463
 
464
		return array(
465
			'annee' => $this->annee,
466
			'listeMeilleursVoteurs' => $liste[0],
467
			'listeMeilleursVoteursSurPropositionsRetenues' => $liste[1]
468
		);
469
	}
470
 
471
	/**
472
	 * @TODO Statistiques sur les images de Pictoflora
473
	 * @REFLEXION aucune idée de ce qu'on met dedans
474
	 */
475
	private function getImages() {
476
		return array(
477
			'annee' => $this->annee
478
		);
479
	}
480
 
481
	/**
482
	 * @TODO Statistiques sur les mots-clés de Pictoflora
483
	 * @REFLEXION aucune idée de ce qu'on met dedans
484
	 */
485
	private function getTags() {
486
		return array(
487
			'annee' => $this->annee
488
		);
489
	}
490
 
491
	/**
492
	 * @TODO Statistiques sur les utilisateurs de Pictoflora
493
	 * - Nombre total d'utilisateurs
494
	 * - Nombre d'utilisateurs réguliers
495
	 * - Nombre d'utilisateurs prenant part au taggage ?
496
	 * - Nombre de participants actifs pour le mois, la semaine, l'année
497
	 */
498
	private function getUtilisateursPf() {
499
		return array(
500
			'annee' => $this->annee,
501
			'nbUtilisateursTotal' => $this->getNbUtilisateursPfTotal(),
502
			'nbUtilisateursReguliers' => $this->getNbUtilisateursPfReguliers(),
503
			'nbUtilisateursVotant' => $this->getNbUtilisateursPfTaggant(),
504
			'nbUtilisateursActifs' => $this->getNbUtilisateursPfActifs(),
505
		);
506
	}
507
 
508
	/**
509
	 * @TODO Nombre total d'utilisateurs de Pictoflora
510
	 * @REFLEXION est-ce le même nombre que les utilisateurs d'Identiplante ?
511
	 */
512
	private function getNbUtilisateursPfTotal() {
513
		$requete = "";
514
		$resultat = $this->bdd->recupererTous($requete);
515
		return intval($resultat[0][0]);
516
	}
517
 
518
	/**
519
	 * @TODO Nombre d'utilisateurs réguliers de Pictoflora
520
	 * @REFLEXION quelle différence avec getNbUtilisateursPfActifs() ?
521
	 */
522
	private function getNbUtilisateursPfReguliers() {
523
		$requete = "";
524
		$resultat = $this->bdd->recupererTous($requete);
525
		return intval($resultat[0][0]);
526
	}
527
 
528
	/**
529
	 * @TODO Nombre d'utilisateurs de Pictoflora prenant part aux votes
530
	 */
531
	private function getNbUtilisateursPfTaggant() {
532
		$requete = "";
533
		$resultat = $this->bdd->recupererTous($requete);
534
		return intval($resultat[0][0]);
535
	}
536
 
537
	/**
538
	 * @TODO Nombre de participants à Pictoflora actifs (pour le mois, la semaine, l'année)
539
	 * @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer
540
	 * l'activité du mois et de la semaine (on met la case à null ?)
541
	 */
542
	private function getNbUtilisateursPfActifs() {
543
		$requete = "";
544
		$resultat = $this->bdd->recupererTous($requete);
545
		return intval($resultat[0][0]);
546
	}
547
 
548
	/**
549
	 * @TODO Liste des mots-clés les plus fréquents
550
	 */
551
	private function getListeMeilleursTags() {
552
		$liste = array();
553
		$requete = "";
554
		$resultat = $this->bdd->recupererTous($requete);
555
		// Formater liste
556
		// ...
557
 
558
		return array(
559
			'annee' => $this->annee,
560
			'listeMeilleursTags' => $liste
561
		);
562
	}
563
 
564
	/**
565
	 * @TODO Liste des utilisateurs ayant ajouté le plus de mots-clés
566
	 */
567
	private function getListeMeilleursTagueurs() {
568
		$liste = array();
569
		$requete = "";
570
		$resultat = $this->bdd->recupererTous($requete);
571
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir service CEL stats)
572
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
573
		// ...
574
 
575
		return array(
576
			'annee' => $this->annee,
577
			'listeMeilleursTagueurs' => $liste
578
		);
579
	}
1818 jpm 580
}