Subversion Repositories eFlore/Applications.del

Rev

Rev 2157 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2157 Rev 2178
1
<?php
1
<?php
2
/**
2
/**
3
 * Statistiques par année sur l'utilisation de Identiplante / Pictoflora
3
 * Statistiques par année sur l'utilisation de Identiplante / Pictoflora
4
 *
4
 *
5
 * @see Documentation : <http://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=AppliDelStats>
5
 * @see Documentation : <http://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=AppliDelStats>
6
 *
6
 *
7
 * @category   DEL
7
 * @category   DEL
8
 * @package    Services
8
 * @package    Services
9
 * @subpackage Statistiques
9
 * @subpackage Statistiques
10
 * @version    0.1
10
 * @version    0.1
11
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
11
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
12
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
13
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
14
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
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>
15
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
16
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
16
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
17
 */
17
 */
18
class StatistiquesParAnnee {
18
class StatistiquesParAnnee {
19
 
19
 
20
	private $conteneur;
20
	private $conteneur;
21
	private $contexte;
21
	private $contexte;
22
	private $navigation;
22
	private $navigation;
23
	private $bdd;
23
	private $bdd;
24
 
24
 
25
	private $annee = null;
25
	private $annee = null;
26
	private $type = 'tout';
26
	private $type = 'tout';
27
	private $methode = '';
27
	private $methode = '';
28
 
28
 
29
	public function __construct(Conteneur $conteneur = null) {
29
	public function __construct(Conteneur $conteneur = null) {
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
31
		$this->contexte = $conteneur->getContexte();
31
		$this->contexte = $conteneur->getContexte();
32
		$this->navigation = $conteneur->getNavigation();
32
		$this->navigation = $conteneur->getNavigation();
33
		$this->bdd = $this->conteneur->getBdd();
33
		$this->bdd = $this->conteneur->getBdd();
34
	}
34
	}
35
 
35
 
36
	public function consulter() {
36
	public function consulter() {
37
		$this->intitialiserParametresEtRessources();
37
		$this->intitialiserParametresEtRessources();
38
		$this->verifierPreRequis();
38
		$this->verifierPreRequis();
39
 
39
 
40
		$resultat = new ResultatService();
40
		$resultat = new ResultatService();
41
		$resultat->corps = call_user_func(array($this, $this->methode));
41
		$resultat->corps = call_user_func(array($this, $this->methode));
42
		return $resultat;
42
		return $resultat;
43
	}
43
	}
44
 
44
 
45
	private function intitialiserParametresEtRessources() {
45
	private function intitialiserParametresEtRessources() {
46
		$this->type = $this->contexte->getRessource(2) != null ? $this->contexte->getRessource(2) : $this->type;
46
		$this->type = $this->contexte->getRessource(2) != null ? $this->contexte->getRessource(2) : $this->type;
47
		$this->methode = $this->obtenirNomMethode($this->type);
47
		$this->methode = $this->obtenirNomMethode($this->type);
48
		$this->annee =(int) $this->contexte->getQS('annee') != null ? intval($this->contexte->getQS('annee')) : null;
48
		$this->annee =(int) $this->contexte->getQS('annee') != null ? intval($this->contexte->getQS('annee')) : null;
49
	}
49
	}
50
 
50
 
51
	private function verifierPreRequis() {
51
	private function verifierPreRequis() {
52
		$erreurs = array();
52
		$erreurs = array();
53
 
53
 
54
		if ($this->annee != null && !is_int($this->annee)) {
54
		if ($this->annee != null && !is_int($this->annee)) {
55
			$erreurs[] = "Le paramètre 'annee' doit être un entier.";
55
			$erreurs[] = "Le paramètre 'annee' doit être un entier.";
56
		}
56
		}
57
		if (method_exists($this, $this->obtenirNomMethode($this->type)) === false) {
57
		if (method_exists($this, $this->obtenirNomMethode($this->type)) === false) {
58
			$erreurs[] = "Les stats de type '{$this->type}' n'existent pas.";
58
			$erreurs[] = "Les stats de type '{$this->type}' n'existent pas.";
59
		}
59
		}
60
		if (!empty($erreurs)) {
60
		if (!empty($erreurs)) {
61
			$msg = "Erreur de configuration :\n".implode("\n", $erreurs)."\n\n".Statistiques::getDoc();
61
			$msg = "Erreur de configuration :\n".implode("\n", $erreurs)."\n\n".Statistiques::getDoc();
62
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
62
			throw new Exception($msg, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
63
		}
63
		}
64
	}
64
	}
65
 
65
 
66
	/**
66
	/**
67
	 * Ouh la jolie méthode magique !!
67
	 * Ouh la jolie méthode magique !!
68
	 * @param unknown $mot
68
	 * @param unknown $mot
69
	 * @return string
69
	 * @return string
70
	 */
70
	 */
71
	private function obtenirNomMethode($mot) {
71
	private function obtenirNomMethode($mot) {
72
		$classeNom = 'get'.str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
72
		$classeNom = 'get'.str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
73
		return $classeNom;
73
		return $classeNom;
74
	}
74
	}
75
 
75
 
76
	/**
76
	/**
77
	 * Statistiques sur les observations
77
	 * Statistiques sur les observations
78
	 * "MPM" = moyenne par mois
78
	 * "MPM" = moyenne par mois
79
	 * "TC" = tag à déterminer ou certitude incertaine
79
	 * "TC" = tag à déterminer ou certitude incertaine
80
	 * - Nombre d'observations au total
80
	 * - Nombre d'observations au total
81
	 * - Nombre d'obs sans identification (ou tag ou certitude)
81
	 * - Nombre d'obs sans identification (ou tag ou certitude)
82
	 * - Nombre d'obs sans identification
82
	 * - Nombre d'obs sans identification
83
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine
83
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine
84
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et retenue
84
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et retenue
85
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus
85
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus
86
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
86
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
87
	 * - Nombre d'observations ayant une proposition retenue (parmi les observations de l'année)
87
	 * - Nombre d'observations ayant une proposition retenue (parmi les observations de l'année)
88
	 * - Nombre d'observations ayant une proposition retenue ou en consensus (parmi les observations de l'année)
88
	 * - Nombre d'observations ayant une proposition retenue ou en consensus (parmi les observations de l'année)
89
	 */
89
	 */
90
	private function getObservations() {
90
	private function getObservations() {
91
		$nbObsTotal = $this->getNbObsTotal();
91
		$nbObsTotal = $this->getNbObsTotal();
92
		$nbObsSansIdentOuTC = $this->getNbObsSansIdentOuTC();
92
		$nbObsSansIdentOuTC = $this->getNbObsSansIdentOuTC();
93
		$nbObsSansIdent = $this->getNbObsSansIdent();
93
		$nbObsSansIdent = $this->getNbObsSansIdent();
94
		$nbObsTC = $this->getNbObsTC();
94
		$nbObsTC = $this->getNbObsTC();
95
		$nbObsTCRetenue = $this->getNbObsTCRetenue();
95
		$nbObsTCRetenue = $this->getNbObsTCRetenue();
96
		$nbObsTCConsensus = $this->getNbObsTCConsensus();
96
		$nbObsTCConsensus = $this->getNbObsTCConsensus();
97
		$nbObsTCConsensusNonValide = $this->getNbObsTCConsensusNonValide();
97
		$nbObsTCConsensusNonValide = $this->getNbObsTCConsensusNonValide();
98
		$nbPropositionsRetenuesObsAnnee = $this->getNbPropositionsRetenuesObsAnnee();
98
		$nbPropositionsRetenuesObsAnnee = $this->getNbPropositionsRetenuesObsAnnee();
99
		$nbPropositionsConsensusObsAnnee = $this->getNbPropositionsConsensusObsAnnee();
99
		$nbPropositionsConsensusObsAnnee = $this->getNbPropositionsConsensusObsAnnee();
100
		return array(
100
		return array(
101
			'nbObsTotal' => $nbObsTotal,
101
			'nbObsTotal' => $nbObsTotal,
102
			'nbObsTotalMPM' => $this->getNbObsTotal(true),
102
			'nbObsTotalMPM' => $this->getNbObsTotal(true),
103
			'nbObsSansIdentOuTC' => $nbObsSansIdentOuTC,
103
			'nbObsSansIdentOuTC' => $nbObsSansIdentOuTC,
104
			'nbObsSansIdentOuTCMPM' => $this->getNbObsSansIdentOuTC(true),
104
			'nbObsSansIdentOuTCMPM' => $this->getNbObsSansIdentOuTC(true),
105
			'nbObsSansIdentOuTCPC' => $nbObsTotal == 0 ? 0 : round(($nbObsSansIdentOuTC / $nbObsTotal) * 100, 2),
105
			'nbObsSansIdentOuTCPC' => $nbObsTotal == 0 ? 0 : round(($nbObsSansIdentOuTC / $nbObsTotal) * 100, 2),
106
			'nbObsSansIdent' => $nbObsSansIdent,
106
			'nbObsSansIdent' => $nbObsSansIdent,
107
			'nbObsSansIdentMPM' => $this->getNbObsSansIdent(true),
107
			'nbObsSansIdentMPM' => $this->getNbObsSansIdent(true),
108
			'nbObsSansIdentPC' => $nbObsTotal == 0 ? 0 : round(($nbObsSansIdent / $nbObsTotal) * 100, 2),
108
			'nbObsSansIdentPC' => $nbObsTotal == 0 ? 0 : round(($nbObsSansIdent / $nbObsTotal) * 100, 2),
109
			'nbObsTC' => $nbObsTC,
109
			'nbObsTC' => $nbObsTC,
110
			'nbObsTCMPM' => $this->getNbObsTC(true),
110
			'nbObsTCMPM' => $this->getNbObsTC(true),
111
			'nbObsTCPC' => $nbObsTotal == 0 ? 0 : round(($nbObsTC / $nbObsTotal) * 100, 2),
111
			'nbObsTCPC' => $nbObsTotal == 0 ? 0 : round(($nbObsTC / $nbObsTotal) * 100, 2),
112
			'nbObsTCRetenue' => $nbObsTCRetenue,
112
			'nbObsTCRetenue' => $nbObsTCRetenue,
113
			'nbObsTCRetenueMPM' => $this->getNbObsTCRetenue(true),
113
			'nbObsTCRetenueMPM' => $this->getNbObsTCRetenue(true),
114
			'nbObsTCRetenuePC' => $nbObsTotal == 0 ? 0 : round(($nbObsTCRetenue / $nbObsTotal) * 100, 2),
114
			'nbObsTCRetenuePC' => $nbObsTotal == 0 ? 0 : round(($nbObsTCRetenue / $nbObsTotal) * 100, 2),
115
			'nbObsTCConsensus' => $nbObsTCConsensus,
115
			'nbObsTCConsensus' => $nbObsTCConsensus,
116
			'nbObsTCConsensusMPM' => $this->getNbObsTCConsensus(true),
116
			'nbObsTCConsensusMPM' => $this->getNbObsTCConsensus(true),
117
			'nbObsTCConsensusPC' => $nbObsTotal == 0 ? 0 : round(($nbObsTCConsensus / $nbObsTotal) * 100, 2),
117
			'nbObsTCConsensusPC' => $nbObsTotal == 0 ? 0 : round(($nbObsTCConsensus / $nbObsTotal) * 100, 2),
118
			'nbObsTCConsensusNonValide' => $nbObsTCConsensusNonValide,
118
			'nbObsTCConsensusNonValide' => $nbObsTCConsensusNonValide,
119
			'nbObsTCConsensusNonValideMPM' => $this->getNbObsTCConsensusNonValide(true),
119
			'nbObsTCConsensusNonValideMPM' => $this->getNbObsTCConsensusNonValide(true),
120
			'nbObsTCConsensusNonValidePC' => $nbObsTotal == 0 ? 0 : round(($nbObsTCConsensusNonValide / $nbObsTotal) * 100, 2),
120
			'nbObsTCConsensusNonValidePC' => $nbObsTotal == 0 ? 0 : round(($nbObsTCConsensusNonValide / $nbObsTotal) * 100, 2),
121
			'nbPropositionsRetenuesObsAnnee' => $nbPropositionsRetenuesObsAnnee,
121
			'nbPropositionsRetenuesObsAnnee' => $nbPropositionsRetenuesObsAnnee,
122
			'nbPropositionsRetenuesObsAnneeMPM' => $this->getNbPropositionsRetenuesObsAnnee(true),
122
			'nbPropositionsRetenuesObsAnneeMPM' => $this->getNbPropositionsRetenuesObsAnnee(true),
123
			'nbPropositionsRetenuesObsAnneePC' => $nbObsTotal == 0 ? 0 : round(($nbPropositionsRetenuesObsAnnee / $nbObsTotal) * 100, 2),
123
			'nbPropositionsRetenuesObsAnneePC' => $nbObsTotal == 0 ? 0 : round(($nbPropositionsRetenuesObsAnnee / $nbObsTotal) * 100, 2),
124
			'nbPropositionsConsensusObsAnnee' => $nbPropositionsConsensusObsAnnee,
124
			'nbPropositionsConsensusObsAnnee' => $nbPropositionsConsensusObsAnnee,
125
			'nbPropositionsConsensusObsAnneeMPM' => $this->getNbPropositionsConsensusObsAnnee(true),
125
			'nbPropositionsConsensusObsAnneeMPM' => $this->getNbPropositionsConsensusObsAnnee(true),
126
			'nbPropositionsConsensusObsAnneePC' => $nbObsTotal == 0 ? 0 : round(($nbPropositionsConsensusObsAnnee / $nbObsTotal) * 100, 2),
126
			'nbPropositionsConsensusObsAnneePC' => $nbObsTotal == 0 ? 0 : round(($nbPropositionsConsensusObsAnnee / $nbObsTotal) * 100, 2),
127
		);
127
		);
128
	}
128
	}
129
 
129
 
130
	/**
130
	/**
131
	 * Nombre d'observations au total
131
	 * Nombre d'observations au total
132
	 */
132
	 */
133
	private function getNbObsTotal($mpm=false) {
133
	private function getNbObsTotal($mpm=false) {
134
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation";
134
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation";
135
		if ($this->annee != null) {
135
		if ($this->annee != null) {
136
			$requete .= ' WHERE YEAR(date_transmission) = ' . $this->annee;
136
			$requete .= ' WHERE YEAR(date_transmission) = ' . $this->annee;
137
		}
137
		}
138
		if ($mpm) {
138
		if ($mpm) {
139
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
139
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
140
		}
140
		}
141
		$resultat = $this->bdd->recupererTous($requete);
141
		$resultat = $this->bdd->recupererTous($requete);
142
		return intval(array_pop($resultat[0]));
142
		return intval(array_pop($resultat[0]));
143
	}
143
	}
144
 
144
 
145
	/**
145
	/**
146
	 * Nombre d'obs sans identification (ou tag ou certitude)
146
	 * Nombre d'obs sans identification (ou tag ou certitude)
147
	 */
147
	 */
148
	private function getNbObsSansIdentOuTC($mpm=false) {
148
	private function getNbObsSansIdentOuTC($mpm=false) {
149
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
149
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
150
		if ($this->annee != null) {
150
		if ($this->annee != null) {
151
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
151
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
152
		}
152
		}
153
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR nom_sel_nn = '' OR nom_sel_nn IS NULL OR certitude IN ('aDeterminer','douteux'))";
153
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR nom_sel_nn = '' OR nom_sel_nn IS NULL OR certitude IN ('à déterminer','douteux'))";
154
		if ($mpm) {
154
		if ($mpm) {
155
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
155
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
156
		}
156
		}
157
		$resultat = $this->bdd->recupererTous($requete);
157
		$resultat = $this->bdd->recupererTous($requete);
158
		return intval(array_pop($resultat[0]));
158
		return intval(array_pop($resultat[0]));
159
	}
159
	}
160
 
160
 
161
	/**
161
	/**
162
	 * Nombre d'obs sans identification
162
	 * Nombre d'obs sans identification
163
	 */
163
	 */
164
	private function getNbObsSansIdent($mpm=false) {
164
	private function getNbObsSansIdent($mpm=false) {
165
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
165
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
166
		if ($this->annee != null) {
166
		if ($this->annee != null) {
167
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
167
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
168
		}
168
		}
169
		$requete .= " (nom_sel_nn = '' OR nom_sel_nn IS NULL)";
169
		$requete .= " (nom_sel_nn = '' OR nom_sel_nn IS NULL)";
170
		if ($mpm) {
170
		if ($mpm) {
171
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
171
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
172
		}
172
		}
173
		$resultat = $this->bdd->recupererTous($requete);
173
		$resultat = $this->bdd->recupererTous($requete);
174
		return intval(array_pop($resultat[0]));
174
		return intval(array_pop($resultat[0]));
175
	}
175
	}
176
 
176
 
177
	/**
177
	/**
178
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine
178
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine
179
	 */
179
	 */
180
	private function getNbObsTC($mpm=false) {
180
	private function getNbObsTC($mpm=false) {
181
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
181
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
182
		if ($this->annee != null) {
182
		if ($this->annee != null) {
183
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
183
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
184
		}
184
		}
185
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux'))";
185
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('à déterminer','douteux'))";
186
		if ($mpm) {
186
		if ($mpm) {
187
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
187
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
188
		}
188
		}
189
		$resultat = $this->bdd->recupererTous($requete);
189
		$resultat = $this->bdd->recupererTous($requete);
190
		return intval(array_pop($resultat[0]));
190
		return intval(array_pop($resultat[0]));
191
	}
191
	}
192
 
192
 
193
	/**
193
	/**
194
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et retenue
194
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et retenue
195
	 */
195
	 */
196
	private function getNbObsTCRetenue($mpm=false) {
196
	private function getNbObsTCRetenue($mpm=false) {
197
		$requete = "SELECT COUNT(*) AS nb_total FROM del_commentaire WHERE proposition_retenue = 1 AND ce_observation IN (SELECT id_observation FROM del_observation WHERE";
197
		$requete = "SELECT COUNT(*) AS nb_total FROM del_commentaire WHERE proposition_retenue = 1 AND ce_observation IN (SELECT id_observation FROM del_observation WHERE";
198
		if ($this->annee != null) {
198
		if ($this->annee != null) {
199
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
199
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
200
		}
200
		}
201
		$requete .= " (certitude IN ('aDeterminer','douteux')))";
201
		$requete .= " (certitude IN ('à déterminer','douteux')))";
202
		if ($mpm) {
202
		if ($mpm) {
203
			// @TODO vérifier que grouper sur "date" est pertinent
203
			// @TODO vérifier que grouper sur "date" est pertinent
204
			// date_transmission n'est pas dispo pour grouper ici :-/
204
			// date_transmission n'est pas dispo pour grouper ici :-/
205
			$requete = $this->encapsulerMPM($requete);
205
			$requete = $this->encapsulerMPM($requete);
206
		}
206
		}
207
		$resultat = $this->bdd->recupererTous($requete);
207
		$resultat = $this->bdd->recupererTous($requete);
208
		return intval(array_pop($resultat[0]));
208
		return intval(array_pop($resultat[0]));
209
	}
209
	}
210
 
210
 
211
	/**
211
	/**
212
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus
212
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus
213
	 */
213
	 */
214
	private function getNbObsTCConsensus($mpm=false) {
214
	private function getNbObsTCConsensus($mpm=false) {
215
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
215
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
216
		if ($this->annee != null) {
216
		if ($this->annee != null) {
217
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
217
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
218
		}
218
		}
219
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux')) AND id_observation IN"
219
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('à déterminer','douteux')) AND id_observation IN"
220
			. " (SELECT ce_observation FROM del_commentaire WHERE proposition_initiale = 1" 
220
			. " (SELECT ce_observation FROM del_commentaire WHERE proposition_initiale = 1" 
221
			. " AND nom_sel_nn != 0"
221
			. " AND nom_sel_nn != 0"
222
			. " AND nom_sel_nn IS NOT NULL"
222
			. " AND nom_sel_nn IS NOT NULL"
223
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
223
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
224
		if ($this->annee != null) {
224
		if ($this->annee != null) {
225
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
225
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
226
		}
226
		}
227
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
227
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
228
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
228
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
229
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
229
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
230
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
230
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
231
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
231
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
232
		. " END) >= 4))";
232
		. " END) >= 4))";
233
		if ($mpm) {
233
		if ($mpm) {
234
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
234
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
235
		}
235
		}
236
		$resultat = $this->bdd->recupererTous($requete);
236
		$resultat = $this->bdd->recupererTous($requete);
237
		return intval(array_pop($resultat[0]));
237
		return intval(array_pop($resultat[0]));
238
	}
238
	}
239
 
239
 
240
	/**
240
	/**
241
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
241
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
242
	 */
242
	 */
243
	private function getNbObsTCConsensusNonValide($mpm=false) {
243
	private function getNbObsTCConsensusNonValide($mpm=false) {
244
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
244
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
245
		if ($this->annee != null) {
245
		if ($this->annee != null) {
246
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
246
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
247
		}
247
		}
248
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux')) AND id_observation IN"
248
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('à déterminer','douteux')) AND id_observation IN"
249
			. " (SELECT ce_observation FROM del_commentaire WHERE proposition_initiale = 1 AND proposition_retenue = 0" 
249
			. " (SELECT ce_observation FROM del_commentaire WHERE proposition_initiale = 1 AND proposition_retenue = 0" 
250
			. " AND nom_sel_nn != 0"
250
			. " AND nom_sel_nn != 0"
251
			. " AND nom_sel_nn IS NOT NULL"
251
			. " AND nom_sel_nn IS NOT NULL"
252
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
252
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
253
		if ($this->annee != null) {
253
		if ($this->annee != null) {
254
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
254
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
255
		}
255
		}
256
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
256
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
257
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
257
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
258
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
258
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
259
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
259
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
260
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
260
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
261
		. " END) >= 4))";
261
		. " END) >= 4))";
262
		if ($mpm) {
262
		if ($mpm) {
263
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
263
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
264
		}
264
		}
265
		$resultat = $this->bdd->recupererTous($requete);
265
		$resultat = $this->bdd->recupererTous($requete);
266
		return intval(array_pop($resultat[0]));
266
		return intval(array_pop($resultat[0]));
267
	}
267
	}
268
 
268
 
269
	/**
269
	/**
270
	 * Statistiques sur les propositions, les commentaires et les votes
270
	 * Statistiques sur les propositions, les commentaires et les votes
271
	 * "MPM" = moyenne par mois
271
	 * "MPM" = moyenne par mois
272
	 * - Nombre de votes
272
	 * - Nombre de votes
273
	 * - Nombre de commentaires
273
	 * - Nombre de commentaires
274
	 * - Nombre d'actions par jour
274
	 * - Nombre d'actions par jour
275
	 * - Nombres de propositions sur toutes les obs
275
	 * - Nombres de propositions sur toutes les obs
276
	 * - Nombre d'observations ayant une proposition retenue (parmi toutes les observations)
276
	 * - Nombre d'observations ayant une proposition retenue (parmi toutes les observations)
277
	 * - Nombre d'observations ayant une proposition retenue ou en consensus (parmi toutes les observations)
277
	 * - Nombre d'observations ayant une proposition retenue ou en consensus (parmi toutes les observations)
278
	 * - Nombre de propositions sur les obs d'une année
278
	 * - Nombre de propositions sur les obs d'une année
279
	 */
279
	 */
280
	private function getPropositions() {
280
	private function getPropositions() {
281
		return array(
281
		return array(
282
			'nbVotes' => $this->getNbVotes(),
282
			'nbVotes' => $this->getNbVotes(),
283
			'nbVotesMPM' => $this->getNbVotes(true),
283
			'nbVotesMPM' => $this->getNbVotes(true),
284
			'nbMoyenActionsParJour' => $this->getNbMoyenActionsParJour(),
284
			'nbMoyenActionsParJour' => $this->getNbMoyenActionsParJour(),
285
			'nbCommentaires' => $this->getNbCommentaires(),
285
			'nbCommentaires' => $this->getNbCommentaires(),
286
			'nbCommentairesMPM' => $this->getNbCommentaires(true),
286
			'nbCommentairesMPM' => $this->getNbCommentaires(true),
287
			'nbPropositionsToutesObs' => $this->getNbPropositionsToutesObs(),
287
			'nbPropositionsToutesObs' => $this->getNbPropositionsToutesObs(),
288
			'nbPropositionsToutesObsMPM' => $this->getNbPropositionsToutesObs(true),
288
			'nbPropositionsToutesObsMPM' => $this->getNbPropositionsToutesObs(true),
289
			'nbPropositionsRetenuesToutesObs' => $this->getNbPropositionsRetenuesToutesObs(),
289
			'nbPropositionsRetenuesToutesObs' => $this->getNbPropositionsRetenuesToutesObs(),
290
			'nbPropositionsRetenuesToutesObsMPM' => $this->getNbPropositionsRetenuesToutesObs(true),
290
			'nbPropositionsRetenuesToutesObsMPM' => $this->getNbPropositionsRetenuesToutesObs(true),
291
			'nbPropositionsConsensusToutesObs' => $this->getNbPropositionsConsensusToutesObs(),
291
			'nbPropositionsConsensusToutesObs' => $this->getNbPropositionsConsensusToutesObs(),
292
			'nbPropositionsConsensusToutesObsMPM' => $this->getNbPropositionsConsensusToutesObs(true),
292
			'nbPropositionsConsensusToutesObsMPM' => $this->getNbPropositionsConsensusToutesObs(true),
293
			'nbPropositionsObsAnnee' => $this->getNbPropositionsObsAnnee(),
293
			'nbPropositionsObsAnnee' => $this->getNbPropositionsObsAnnee(),
294
			'nbPropositionsObsAnneeMPM' => $this->getNbPropositionsObsAnnee(true),
294
			'nbPropositionsObsAnneeMPM' => $this->getNbPropositionsObsAnnee(true),
295
		);
295
		);
296
	}
296
	}
297
 
297
 
298
	/**
298
	/**
299
	 * Nombre moyen d'actions par jour (commentaire, proposition, vote)
299
	 * Nombre moyen d'actions par jour (commentaire, proposition, vote)
300
	 */
300
	 */
301
	private function getNbMoyenActionsParJour() {
301
	private function getNbMoyenActionsParJour() {
302
		$requete = "SELECT (SELECT (SELECT count(*) FROM del_commentaire";
302
		$requete = "SELECT (SELECT (SELECT count(*) FROM del_commentaire";
303
		if ($this->annee != null) {
303
		if ($this->annee != null) {
304
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
304
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
305
		}
305
		}
306
		$requete .= ") +  (SELECT count(*) FROM del_commentaire_vote";
306
		$requete .= ") +  (SELECT count(*) FROM del_commentaire_vote";
307
		if ($this->annee != null) {
307
		if ($this->annee != null) {
308
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
308
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
309
		}
309
		}
310
		$requete .= ") +  (SELECT count(*) FROM del_commentaire";
310
		$requete .= ") +  (SELECT count(*) FROM del_commentaire";
311
		if ($this->annee != null) {
311
		if ($this->annee != null) {
312
			$requete .= ' WHERE YEAR(date_validation) = ' . $this->annee;
312
			$requete .= ' WHERE YEAR(date_validation) = ' . $this->annee;
313
		}
313
		}
314
		$requete .= ")) / (";
314
		$requete .= ")) / (";
315
		if ($this->annee != null) {
315
		if ($this->annee != null) {
316
			$requete .= "SELECT IF( YEAR(CURDATE()) = " . $this->annee . ", DAYOFYEAR(CURDATE()), 365) ";
316
			$requete .= "SELECT IF( YEAR(CURDATE()) = " . $this->annee . ", DAYOFYEAR(CURDATE()), 365) ";
317
		} else {
317
		} else {
318
			$requete .= "365";
318
			$requete .= "365";
319
		}
319
		}
320
		$requete .= ")";
320
		$requete .= ")";
321
		$resultat = $this->bdd->recupererTous($requete);
321
		$resultat = $this->bdd->recupererTous($requete);
322
		return intval(array_pop($resultat[0]));
322
		return intval(array_pop($resultat[0]));
323
	}
323
	}
324
 
324
 
325
	/**
325
	/**
326
	 * Nombre de propositions faites sur toutes les observations (hors initiales)
326
	 * Nombre de propositions faites sur toutes les observations (hors initiales)
327
	 */
327
	 */
328
	private function getNbPropositionsToutesObs($mpm=false) {
328
	private function getNbPropositionsToutesObs($mpm=false) {
329
		$requete = "SELECT COUNT(DISTINCT id_commentaire) AS nb_total FROM del_commentaire WHERE";
329
		$requete = "SELECT COUNT(DISTINCT id_commentaire) AS nb_total FROM del_commentaire WHERE";
330
		if ($this->annee != null) {
330
		if ($this->annee != null) {
331
			$requete .= ' YEAR(date) = ' . $this->annee . " AND";
331
			$requete .= ' YEAR(date) = ' . $this->annee . " AND";
332
		}
332
		}
333
		$requete .= " (nom_sel_nn IS NOT NULL OR nom_sel_nn != '') AND proposition_initiale = 0";
333
		$requete .= " (nom_sel_nn IS NOT NULL OR nom_sel_nn != '') AND proposition_initiale = 0";
334
		if ($mpm) {
334
		if ($mpm) {
335
			$requete = $this->encapsulerMPM($requete);
335
			$requete = $this->encapsulerMPM($requete);
336
		}
336
		}
337
		$resultat = $this->bdd->recupererTous($requete);
337
		$resultat = $this->bdd->recupererTous($requete);
338
		return intval(array_pop($resultat[0]));
338
		return intval(array_pop($resultat[0]));
339
	}
339
	}
340
 
340
 
341
	/**
341
	/**
342
	 * Nombre d'observations ayant une proposition retenue (parmi toutes les observations)
342
	 * Nombre d'observations ayant une proposition retenue (parmi toutes les observations)
343
	 */
343
	 */
344
	private function getNbPropositionsRetenuesToutesObs($mpm=false) {
344
	private function getNbPropositionsRetenuesToutesObs($mpm=false) {
345
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire WHERE";
345
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire WHERE";
346
		if ($this->annee != null) {
346
		if ($this->annee != null) {
347
			$requete .= ' YEAR(date) = ' . $this->annee . " AND";
347
			$requete .= ' YEAR(date) = ' . $this->annee . " AND";
348
		}
348
		}
349
		$requete .= " proposition_retenue = 1";
349
		$requete .= " proposition_retenue = 1";
350
		if ($mpm) {
350
		if ($mpm) {
351
			$requete = $this->encapsulerMPM($requete);
351
			$requete = $this->encapsulerMPM($requete);
352
		}
352
		}
353
		$resultat = $this->bdd->recupererTous($requete);
353
		$resultat = $this->bdd->recupererTous($requete);
354
		return intval(array_pop($resultat[0]));
354
		return intval(array_pop($resultat[0]));
355
	}
355
	}
356
 
356
 
357
	/**
357
	/**
358
	 * Nombre d'observations ayant une proposition retenue ou en consensus (parmi toutes les observations)
358
	 * Nombre d'observations ayant une proposition retenue ou en consensus (parmi toutes les observations)
359
	 */
359
	 */
360
	private function getNbPropositionsConsensusToutesObs($mpm=false) {
360
	private function getNbPropositionsConsensusToutesObs($mpm=false) {
361
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire dc WHERE"
361
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire dc WHERE"
362
			. " dc.proposition_retenue = 1"
362
			. " dc.proposition_retenue = 1"
363
			. " OR (dc.proposition_initiale = 1" 
363
			. " OR (dc.proposition_initiale = 1" 
364
			. " AND dc.nom_sel_nn != 0"
364
			. " AND dc.nom_sel_nn != 0"
365
			. " AND dc.nom_sel_nn IS NOT NULL" 
365
			. " AND dc.nom_sel_nn IS NOT NULL" 
366
			. " AND dc.id_commentaire IN"
366
			. " AND dc.id_commentaire IN"
367
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv WHERE";
367
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv WHERE";
368
				if ($this->annee != null) {
368
				if ($this->annee != null) {
369
					$requete .= " year(date) < " . $this->annee . " AND";
369
					$requete .= " year(date) < " . $this->annee . " AND";
370
				}
370
				}
371
				$requete .= " ce_proposition NOT IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
371
				$requete .= " ce_proposition NOT IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
372
				if ($this->annee != null) { 
372
				if ($this->annee != null) { 
373
					$requete .= " WHERE year(date) < " . ($this->annee - 1);
373
					$requete .= " WHERE year(date) < " . ($this->annee - 1);
374
				}
374
				}
375
				$requete .= " GROUP BY ce_proposition"
375
				$requete .= " GROUP BY ce_proposition"
376
					. " HAVING SUM(CASE"
376
					. " HAVING SUM(CASE"
377
						. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3" 
377
						. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3" 
378
						. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3" 
378
						. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3" 
379
						. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
379
						. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
380
						. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
380
						. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
381
					. " END) >= 4)"
381
					. " END) >= 4)"
382
				. " GROUP BY ce_proposition"
382
				. " GROUP BY ce_proposition"
383
				. " HAVING SUM(CASE"
383
				. " HAVING SUM(CASE"
384
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
384
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
385
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
385
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
386
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
386
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
387
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
387
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
388
				. " END) >= 4"
388
				. " END) >= 4"
389
			. " )"
389
			. " )"
390
		. " )";
390
		. " )";
391
		if ($mpm) {
391
		if ($mpm) {
392
			$requete = $this->encapsulerMPM($requete);
392
			$requete = $this->encapsulerMPM($requete);
393
		}
393
		}
394
		$resultat = $this->bdd->recupererTous($requete);
394
		$resultat = $this->bdd->recupererTous($requete);
395
		return intval(array_pop($resultat[0]));
395
		return intval(array_pop($resultat[0]));
396
	}
396
	}
397
 
397
 
398
	/**
398
	/**
399
	 * Nombre d'observations ayant une proposition retenue (parmi les observations de l'année)
399
	 * Nombre d'observations ayant une proposition retenue (parmi les observations de l'année)
400
	 */
400
	 */
401
	private function getNbPropositionsObsAnnee($mpm=false) {
401
	private function getNbPropositionsObsAnnee($mpm=false) {
402
		if ($this->annee == null) {
402
		if ($this->annee == null) {
403
			return null;
403
			return null;
404
		}
404
		}
405
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire WHERE YEAR(date) = " . $this->annee . " AND "
405
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire WHERE YEAR(date) = " . $this->annee . " AND "
406
			. "(nom_sel_nn IS NOT NULL OR nom_sel_nn != '') AND proposition_initiale = 0 AND ce_observation in"
406
			. "(nom_sel_nn IS NOT NULL OR nom_sel_nn != '') AND proposition_initiale = 0 AND ce_observation in"
407
			. " (SELECT id_observation FROM del_observation WHERE year(date_transmission) = " . $this->annee . ")";
407
			. " (SELECT id_observation FROM del_observation WHERE year(date_transmission) = " . $this->annee . ")";
408
		if ($mpm) {
408
		if ($mpm) {
409
			$requete = $this->encapsulerMPM($requete);
409
			$requete = $this->encapsulerMPM($requete);
410
		}
410
		}
411
		$resultat = $this->bdd->recupererTous($requete);
411
		$resultat = $this->bdd->recupererTous($requete);
412
		return intval(array_pop($resultat[0]));
412
		return intval(array_pop($resultat[0]));
413
	}
413
	}
414
 
414
 
415
	/**
415
	/**
416
	 * Nombre d'observations ayant une proposition retenue ou en consensus (parmi les observations de l'année)
416
	 * Nombre d'observations ayant une proposition retenue ou en consensus (parmi les observations de l'année)
417
	 */
417
	 */
418
	private function getNbPropositionsRetenuesObsAnnee($mpm=false) {
418
	private function getNbPropositionsRetenuesObsAnnee($mpm=false) {
419
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire WHERE ";
419
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire WHERE ";
420
		if ($this->annee != null) {
420
		if ($this->annee != null) {
421
			$requete .= "YEAR(date) = " . $this->annee . " AND ";
421
			$requete .= "YEAR(date) = " . $this->annee . " AND ";
422
		}
422
		}
423
		$requete .= "proposition_retenue = 1 AND ce_observation in (SELECT id_observation FROM del_observation ";
423
		$requete .= "proposition_retenue = 1 AND ce_observation in (SELECT id_observation FROM del_observation ";
424
		if ($this->annee != null) {
424
		if ($this->annee != null) {
425
			$requete .= "WHERE year(date_transmission) = " . $this->annee;
425
			$requete .= "WHERE year(date_transmission) = " . $this->annee;
426
		} 
426
		} 
427
		$requete .= ")";
427
		$requete .= ")";
428
		if ($mpm) {
428
		if ($mpm) {
429
			$requete = $this->encapsulerMPM($requete);
429
			$requete = $this->encapsulerMPM($requete);
430
		}
430
		}
431
		$resultat = $this->bdd->recupererTous($requete);
431
		$resultat = $this->bdd->recupererTous($requete);
432
		return intval(array_pop($resultat[0]));
432
		return intval(array_pop($resultat[0]));
433
	}
433
	}
434
 
434
 
435
	/**
435
	/**
436
	 * Nombre de proposition en consensus faites sur les observations d'une année
436
	 * Nombre de proposition en consensus faites sur les observations d'une année
437
	 */
437
	 */
438
	private function getNbPropositionsConsensusObsAnnee($mpm=false) {
438
	private function getNbPropositionsConsensusObsAnnee($mpm=false) {
439
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire dc WHERE ce_observation in ("
439
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire dc WHERE ce_observation in ("
440
			. " SELECT id_observation FROM del_observation ";
440
			. " SELECT id_observation FROM del_observation ";
441
		if ($this->annee != null) {
441
		if ($this->annee != null) {
442
			$requete .= "WHERE year(date_transmission) = " . $this->annee ;
442
			$requete .= "WHERE year(date_transmission) = " . $this->annee ;
443
		}
443
		}
444
		$requete .= ") AND ("
444
		$requete .= ") AND ("
445
			. " dc.proposition_retenue = 1 OR (dc.proposition_initiale = 1"
445
			. " dc.proposition_retenue = 1 OR (dc.proposition_initiale = 1"
446
			. " AND dc.nom_sel_nn != 0 AND dc.nom_sel_nn IS NOT NULL AND dc.id_commentaire IN" 
446
			. " AND dc.nom_sel_nn != 0 AND dc.nom_sel_nn IS NOT NULL AND dc.id_commentaire IN" 
447
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv";
447
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv";
448
			if ($this->annee != null) {
448
			if ($this->annee != null) {
449
				$requete .= " WHERE year(date) <= " . $this->annee;
449
				$requete .= " WHERE year(date) <= " . $this->annee;
450
			} 
450
			} 
451
			$requete .= " GROUP BY ce_proposition"
451
			$requete .= " GROUP BY ce_proposition"
452
				. " HAVING SUM(CASE"
452
				. " HAVING SUM(CASE"
453
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
453
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
454
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
454
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
455
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
455
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
456
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
456
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
457
				. " END) >= 4)"
457
				. " END) >= 4)"
458
			. "))";
458
			. "))";
459
		if ($mpm) {
459
		if ($mpm) {
460
			$requete = $this->encapsulerMPM($requete);
460
			$requete = $this->encapsulerMPM($requete);
461
		}
461
		}
462
		$resultat = $this->bdd->recupererTous($requete);
462
		$resultat = $this->bdd->recupererTous($requete);
463
		return intval(array_pop($resultat[0]));
463
		return intval(array_pop($resultat[0]));
464
	}
464
	}
465
 
465
 
466
	/**
466
	/**
467
	 * Nombre de votes
467
	 * Nombre de votes
468
	 */
468
	 */
469
	private function getNbVotes($mpm=false) {
469
	private function getNbVotes($mpm=false) {
470
		$requete = "SELECT COUNT(DISTINCT id_vote) AS nb_total FROM del_commentaire_vote";
470
		$requete = "SELECT COUNT(DISTINCT id_vote) AS nb_total FROM del_commentaire_vote";
471
		if ($this->annee != null) {
471
		if ($this->annee != null) {
472
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
472
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
473
		}
473
		}
474
		if ($mpm) {
474
		if ($mpm) {
475
			$requete = $this->encapsulerMPM($requete);
475
			$requete = $this->encapsulerMPM($requete);
476
		}
476
		}
477
		$resultat = $this->bdd->recupererTous($requete);
477
		$resultat = $this->bdd->recupererTous($requete);
478
		return intval(array_pop($resultat[0]));
478
		return intval(array_pop($resultat[0]));
479
	}
479
	}
480
 
480
 
481
	/**
481
	/**
482
	 * Nombre de commentaires
482
	 * Nombre de commentaires
483
	 */
483
	 */
484
	private function getNbCommentaires($mpm=false) {
484
	private function getNbCommentaires($mpm=false) {
485
		$requete = "SELECT COUNT(DISTINCT id_commentaire) AS nb_total FROM del_commentaire WHERE ce_proposition != '' AND (nom_sel IS NULL OR nom_sel = '')";
485
		$requete = "SELECT COUNT(DISTINCT id_commentaire) AS nb_total FROM del_commentaire WHERE ce_proposition != '' AND (nom_sel IS NULL OR nom_sel = '')";
486
		if ($this->annee != null) {
486
		if ($this->annee != null) {
487
			$requete .= ' AND YEAR(date) = ' . $this->annee;
487
			$requete .= ' AND YEAR(date) = ' . $this->annee;
488
		}
488
		}
489
		if ($mpm) {
489
		if ($mpm) {
490
			$requete = $this->encapsulerMPM($requete);
490
			$requete = $this->encapsulerMPM($requete);
491
		}
491
		}
492
		$resultat = $this->bdd->recupererTous($requete);
492
		$resultat = $this->bdd->recupererTous($requete);
493
		return intval(array_pop($resultat[0]));
493
		return intval(array_pop($resultat[0]));
494
	}
494
	}
495
 
495
 
496
	/**
496
	/**
497
	 * Statistiques sur les utilisateurs d'Identiplante
497
	 * Statistiques sur les utilisateurs d'Identiplante
498
	 * "AF" = ayant fait un(e)
498
	 * "AF" = ayant fait un(e)
499
	 * "MPM" = moyenne par mois
499
	 * "MPM" = moyenne par mois
500
	 * - Nombre total d'utilisateurs
500
	 * - Nombre total d'utilisateurs
501
	 * - Nombre d'utilisateurs ayant fait une proposition
501
	 * - Nombre d'utilisateurs ayant fait une proposition
502
	 * - Nombre d'utilisateurs identifiés ayant fait un vote
502
	 * - Nombre d'utilisateurs identifiés ayant fait un vote
503
	 * - Nombre d'utilisateurs anonymes ayant fait un vote
503
	 * - Nombre d'utilisateurs anonymes ayant fait un vote
504
	 * - Nombre d'utilisateurs ayant fait un commentaire
504
	 * - Nombre d'utilisateurs ayant fait un commentaire
505
	 * - Nombre d'utilisateurs ayant fait une action
505
	 * - Nombre d'utilisateurs ayant fait une action
506
	 */
506
	 */
507
	private function getUtilisateursIp() {
507
	private function getUtilisateursIp() {
508
		return array(
508
		return array(
509
			'nbUtilisateursTotal' => $this->getNbUtilisateursIpTotal(),
509
			'nbUtilisateursTotal' => $this->getNbUtilisateursIpTotal(),
510
			'nbUtilisateursAFProposition' => $this->getNbUtilisateursAFProposition(),
510
			'nbUtilisateursAFProposition' => $this->getNbUtilisateursAFProposition(),
511
			'nbUtilisateursAFCommentaire' => $this->getNbUtilisateursAFCommentaire(),
511
			'nbUtilisateursAFCommentaire' => $this->getNbUtilisateursAFCommentaire(),
512
			'nbUtilisateursAFVote' => $this->getNbUtilisateursAFVote(),
512
			'nbUtilisateursAFVote' => $this->getNbUtilisateursAFVote(),
513
			'nbUtilisateursAnonymesAFVote' => $this->getNbUtilisateursAnonymesAFVote(),
513
			'nbUtilisateursAnonymesAFVote' => $this->getNbUtilisateursAnonymesAFVote(),
514
			'nbUtilisateursAFAction' => $this->getNbUtilisateursAFAction(),
514
			'nbUtilisateursAFAction' => $this->getNbUtilisateursAFAction(),
515
			'nbUtilisateursAFPropositionMPM' => $this->getNbUtilisateursAFProposition(true),
515
			'nbUtilisateursAFPropositionMPM' => $this->getNbUtilisateursAFProposition(true),
516
			'nbUtilisateursAFCommentaireMPM' => $this->getNbUtilisateursAFCommentaire(true),
516
			'nbUtilisateursAFCommentaireMPM' => $this->getNbUtilisateursAFCommentaire(true),
517
			'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursAFVote(true),
517
			'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursAFVote(true),
518
			'nbUtilisateursAnonymesAFVoteMPM' => $this->getNbUtilisateursAnonymesAFVote(true),
518
			'nbUtilisateursAnonymesAFVoteMPM' => $this->getNbUtilisateursAnonymesAFVote(true),
519
			'nbUtilisateursAFActionMPM' => $this->getNbUtilisateursAFActionMPM()
519
			'nbUtilisateursAFActionMPM' => $this->getNbUtilisateursAFActionMPM()
520
		);
520
		);
521
	}
521
	}
522
 
522
 
523
	/**
523
	/**
524
	 * Nombre total d'utilisateurs d'Identiplante
524
	 * Nombre total d'utilisateurs d'Identiplante
525
	 */
525
	 */
526
	private function getNbUtilisateursIpTotal() {
526
	private function getNbUtilisateursIpTotal() {
527
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total  FROM del_commentaire";
527
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total  FROM del_commentaire";
528
		if ($this->annee != null) {
528
		if ($this->annee != null) {
529
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
529
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
530
		}
530
		}
531
		$resultat = $this->bdd->recupererTous($requete);
531
		$resultat = $this->bdd->recupererTous($requete);
532
		return intval(array_pop($resultat[0]));
532
		return intval(array_pop($resultat[0]));
533
	}
533
	}
534
 
534
 
535
	/**
535
	/**
536
	 * Nombre d'utilisateurs d'Identiplante ayant fait au moins une proposition
536
	 * Nombre d'utilisateurs d'Identiplante ayant fait au moins une proposition
537
	 */
537
	 */
538
	private function getNbUtilisateursAFProposition($mpm=false) {
538
	private function getNbUtilisateursAFProposition($mpm=false) {
539
		$requete = "SELECT COUNT(DISTINCT utilisateur_courriel) AS nb_total FROM del_commentaire WHERE ce_proposition = '' AND nom_sel IS NOT NULL AND nom_sel != ''";
539
		$requete = "SELECT COUNT(DISTINCT utilisateur_courriel) AS nb_total FROM del_commentaire WHERE ce_proposition = '' AND nom_sel IS NOT NULL AND nom_sel != ''";
540
		if ($this->annee != null) {
540
		if ($this->annee != null) {
541
			$requete .= ' AND YEAR(date) = ' . $this->annee;
541
			$requete .= ' AND YEAR(date) = ' . $this->annee;
542
		}
542
		}
543
		if ($mpm) {
543
		if ($mpm) {
544
			$requete = $this->encapsulerMPM($requete);
544
			$requete = $this->encapsulerMPM($requete);
545
		}
545
		}
546
		$resultat = $this->bdd->recupererTous($requete);
546
		$resultat = $this->bdd->recupererTous($requete);
547
		return intval(array_pop($resultat[0]));
547
		return intval(array_pop($resultat[0]));
548
	}
548
	}
549
 
549
 
550
	/**
550
	/**
551
	 * Nombre d'utilisateurs d'Identiplante ayant fait au moins un commentaire
551
	 * Nombre d'utilisateurs d'Identiplante ayant fait au moins un commentaire
552
	 */
552
	 */
553
	private function getNbUtilisateursAFCommentaire($mpm=false) {
553
	private function getNbUtilisateursAFCommentaire($mpm=false) {
554
		$requete = "SELECT COUNT(DISTINCT utilisateur_courriel) AS nb_total FROM del_commentaire WHERE ce_proposition != '' AND (nom_sel IS NULL OR nom_sel = '')";
554
		$requete = "SELECT COUNT(DISTINCT utilisateur_courriel) AS nb_total FROM del_commentaire WHERE ce_proposition != '' AND (nom_sel IS NULL OR nom_sel = '')";
555
		if ($this->annee != null) {
555
		if ($this->annee != null) {
556
			$requete .= ' AND YEAR(date) = ' . $this->annee;
556
			$requete .= ' AND YEAR(date) = ' . $this->annee;
557
		}
557
		}
558
		if ($mpm) {
558
		if ($mpm) {
559
			$requete = $this->encapsulerMPM($requete);
559
			$requete = $this->encapsulerMPM($requete);
560
		}
560
		}
561
		$resultat = $this->bdd->recupererTous($requete);
561
		$resultat = $this->bdd->recupererTous($requete);
562
		return intval(array_pop($resultat[0]));
562
		return intval(array_pop($resultat[0]));
563
	}
563
	}
564
 
564
 
565
	/**
565
	/**
566
	 * Nombre d'utilisateurs d'Identiplante identifiés prenant part aux votes
566
	 * Nombre d'utilisateurs d'Identiplante identifiés prenant part aux votes
567
	 */
567
	 */
568
	private function getNbUtilisateursAFVote($mpm=false) {
568
	private function getNbUtilisateursAFVote($mpm=false) {
569
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur REGEXP '^-?[0-9]+$'";
569
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur REGEXP '^-?[0-9]+$'";
570
		if ($this->annee != null) {
570
		if ($this->annee != null) {
571
			$requete .= ' AND YEAR(date) = ' . $this->annee;
571
			$requete .= ' AND YEAR(date) = ' . $this->annee;
572
		}
572
		}
573
		if ($mpm) {
573
		if ($mpm) {
574
			$requete = $this->encapsulerMPM($requete);
574
			$requete = $this->encapsulerMPM($requete);
575
		}
575
		}
576
		$resultat = $this->bdd->recupererTous($requete);
576
		$resultat = $this->bdd->recupererTous($requete);
577
		return intval(array_pop($resultat[0]));
577
		return intval(array_pop($resultat[0]));
578
	}
578
	}
579
 
579
 
580
	/**
580
	/**
581
	 * Nombre d'utilisateurs d'Identiplante anonymes prenant part aux votes
581
	 * Nombre d'utilisateurs d'Identiplante anonymes prenant part aux votes
582
	 */
582
	 */
583
	private function getNbUtilisateursAnonymesAFVote($mpm=false) {
583
	private function getNbUtilisateursAnonymesAFVote($mpm=false) {
584
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur NOT REGEXP '^-?[0-9]+$'";
584
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur NOT REGEXP '^-?[0-9]+$'";
585
		if ($this->annee != null) {
585
		if ($this->annee != null) {
586
			$requete .= ' AND YEAR(date) = ' . $this->annee;
586
			$requete .= ' AND YEAR(date) = ' . $this->annee;
587
		}
587
		}
588
		if ($mpm) {
588
		if ($mpm) {
589
			$requete = $this->encapsulerMPM($requete);
589
			$requete = $this->encapsulerMPM($requete);
590
		}
590
		}
591
		$resultat = $this->bdd->recupererTous($requete);
591
		$resultat = $this->bdd->recupererTous($requete);
592
		return intval(array_pop($resultat[0]));
592
		return intval(array_pop($resultat[0]));
593
	}
593
	}
594
 
594
 
595
	/**
595
	/**
596
	 * Nombre d'utilisateurs d'Identiplante ayant fait une action (commentaire, vote, proposition)
596
	 * Nombre d'utilisateurs d'Identiplante ayant fait une action (commentaire, vote, proposition)
597
	 */
597
	 */
598
	private function getNbUtilisateursAFAction() {
598
	private function getNbUtilisateursAFAction() {
599
		$requete = "SELECT COUNT(*) AS nb_total FROM (SELECT ce_utilisateur FROM del_commentaire_vote";
599
		$requete = "SELECT COUNT(*) AS nb_total FROM (SELECT ce_utilisateur FROM del_commentaire_vote";
600
		if ($this->annee != null) {
600
		if ($this->annee != null) {
601
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
601
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
602
		}
602
		}
603
		$requete .= " UNION SELECT ce_utilisateur FROM del_commentaire";
603
		$requete .= " UNION SELECT ce_utilisateur FROM del_commentaire";
604
		if ($this->annee != null) {
604
		if ($this->annee != null) {
605
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
605
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
606
		}
606
		}
607
		$requete .= " ) AS action";
607
		$requete .= " ) AS action";
608
		$resultat = $this->bdd->recupererTous($requete);
608
		$resultat = $this->bdd->recupererTous($requete);
609
		return intval(array_pop($resultat[0]));
609
		return intval(array_pop($resultat[0]));
610
	}
610
	}
611
 
611
 
612
	/**
612
	/**
613
	 * Moyenne par mois du nombre d'utilisateurs d'Identiplante ayant fait une action
613
	 * Moyenne par mois du nombre d'utilisateurs d'Identiplante ayant fait une action
614
	 * (commentaire, vote, proposition) -> n'est pas encapsulable par encapsulerMPM()
614
	 * (commentaire, vote, proposition) -> n'est pas encapsulable par encapsulerMPM()
615
	 */
615
	 */
616
	private function getNbUtilisateursAFActionMPM() {
616
	private function getNbUtilisateursAFActionMPM() {
617
		$requete = "SELECT avg(nb_total) FROM (SELECT count(*) as nb_total FROM"
617
		$requete = "SELECT avg(nb_total) FROM (SELECT count(*) as nb_total FROM"
618
			. " (SELECT * FROM (SELECT ce_utilisateur, date FROM del_commentaire_vote";
618
			. " (SELECT * FROM (SELECT ce_utilisateur, date FROM del_commentaire_vote";
619
		if ($this->annee != null) {
619
		if ($this->annee != null) {
620
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
620
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
621
		}
621
		}
622
		$requete .= " UNION SELECT ce_utilisateur, date FROM del_commentaire";
622
		$requete .= " UNION SELECT ce_utilisateur, date FROM del_commentaire";
623
		if ($this->annee != null) {
623
		if ($this->annee != null) {
624
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
624
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
625
		}
625
		}
626
		$requete .= " ) AS action GROUP BY ce_utilisateur) AS utildate GROUP BY CONCAT(year(date),month(date))) as truc";
626
		$requete .= " ) AS action GROUP BY ce_utilisateur) AS utildate GROUP BY CONCAT(year(date),month(date))) as truc";
627
		$resultat = $this->bdd->recupererTous($requete);
627
		$resultat = $this->bdd->recupererTous($requete);
628
		return intval(array_pop($resultat[0]));
628
		return intval(array_pop($resultat[0]));
629
	}
629
	}
630
 
630
 
631
	/**
631
	/**
632
	 * Liste des utilisateurs dont les propositions ont été votées positivement
632
	 * Liste des utilisateurs dont les propositions ont été votées positivement
633
	 */
633
	 */
634
	private function getListeMeilleursProposeurs() {
634
	private function getListeMeilleursProposeurs() {
635
		$liste = array();
635
		$liste = array();
636
		$requete = "SELECT * FROM (SELECT utilisateur_courriel, ce_utilisateur, count(prop) as nb_prop"
636
		$requete = "SELECT * FROM (SELECT utilisateur_courriel, ce_utilisateur, count(prop) as nb_prop"
637
			. " FROM (SELECT ce_proposition as prop, COUNT(DISTINCT id_vote) AS nb_vote FROM del_commentaire_vote where";
637
			. " FROM (SELECT ce_proposition as prop, COUNT(DISTINCT id_vote) AS nb_vote FROM del_commentaire_vote where";
638
		if ($this->annee != null) {
638
		if ($this->annee != null) {
639
			$requete .= " year(date) = " . $this->annee . " AND";
639
			$requete .= " year(date) = " . $this->annee . " AND";
640
		}
640
		}
641
		$requete .= " valeur = 1 GROUP BY ce_proposition) AS vote, del_commentaire WHERE nb_vote > 3 AND prop = id_commentaire AND ce_utilisateur != 0 GROUP BY ce_utilisateur)"
641
		$requete .= " valeur = 1 GROUP BY ce_proposition) AS vote, del_commentaire WHERE nb_vote > 3 AND prop = id_commentaire AND ce_utilisateur != 0 GROUP BY ce_utilisateur)"
642
			. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop  DESC LIMIT 20";
642
			. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop  DESC LIMIT 20";
643
		$resultat = $this->bdd->recupererTous($requete);
643
		$resultat = $this->bdd->recupererTous($requete);
644
 
644
 
645
		// Formatage de la liste avec les intitulés des utilisateurs
645
		// Formatage de la liste avec les intitulés des utilisateurs
646
		$ids = array_column($resultat, 'ce_utilisateur');
646
		$ids = array_column($resultat, 'ce_utilisateur');
647
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
647
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
648
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
648
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
649
		foreach ($resultat as &$util) {
649
		foreach ($resultat as &$util) {
650
			$ce = $util['ce_utilisateur'];
650
			$ce = $util['ce_utilisateur'];
651
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
651
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
652
		}
652
		}
653
 
653
 
654
		return array(
654
		return array(
655
				'liste' => $resultat
655
				'liste' => $resultat
656
		);
656
		);
657
	}
657
	}
658
 
658
 
659
	/**
659
	/**
660
	 * Liste des utilisateurs ayant fait le plus de votes positifs
660
	 * Liste des utilisateurs ayant fait le plus de votes positifs
661
	 * @TODO et le plus de votes sur des propositions retenues (ou ayant atteint un consensus)
661
	 * @TODO et le plus de votes sur des propositions retenues (ou ayant atteint un consensus)
662
	 */
662
	 */
663
	private function getListeMeilleursVoteurs() {
663
	private function getListeMeilleursVoteurs() {
664
		$liste = array();
664
		$liste = array();
665
		$requete = "SELECT * FROM (SELECT courriel, ce_utilisateur, COUNT(DISTINCT id_vote) AS nombre FROM del_commentaire_vote, del_utilisateur_infos where";
665
		$requete = "SELECT * FROM (SELECT courriel, ce_utilisateur, COUNT(DISTINCT id_vote) AS nombre FROM del_commentaire_vote, del_utilisateur_infos where";
666
		if ($this->annee != null) {
666
		if ($this->annee != null) {
667
			$requete .= " year(date) = " . $this->annee . " AND";
667
			$requete .= " year(date) = " . $this->annee . " AND";
668
		}
668
		}
669
		$requete .= " ce_utilisateur = id_utilisateur AND valeur = 1 GROUP BY ce_utilisateur) AS utilisateurs WHERE nombre > 100 ORDER BY nombre DESC LIMIT 20";
669
		$requete .= " ce_utilisateur = id_utilisateur AND valeur = 1 GROUP BY ce_utilisateur) AS utilisateurs WHERE nombre > 100 ORDER BY nombre DESC LIMIT 20";
670
		$resultat = $this->bdd->recupererTous($requete);
670
		$resultat = $this->bdd->recupererTous($requete);
671
 
671
 
672
		// Formatage de la liste avec les intitulés des utilisateurs
672
		// Formatage de la liste avec les intitulés des utilisateurs
673
		$ids = array_column($resultat, 'ce_utilisateur');
673
		$ids = array_column($resultat, 'ce_utilisateur');
674
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
674
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
675
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
675
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
676
		foreach ($resultat as &$util) {
676
		foreach ($resultat as &$util) {
677
			$ce = $util['ce_utilisateur'];
677
			$ce = $util['ce_utilisateur'];
678
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
678
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
679
		}
679
		}
680
 
680
 
681
		return array(
681
		return array(
682
				'liste' => $resultat
682
				'liste' => $resultat
683
		);
683
		);
684
	}
684
	}
685
 
685
 
686
	/**
686
	/**
687
	 * Liste des utilisateurs ayant fait au moins une proposition par mois toute l'année
687
	 * Liste des utilisateurs ayant fait au moins une proposition par mois toute l'année
688
	 */
688
	 */
689
	private function getListeProposeursReguliers() {
689
	private function getListeProposeursReguliers() {
690
		$liste = array();
690
		$liste = array();
691
		$requete = "SELECT cal.nbmois, SUM(somme) / cal.nbmois as moyenne, ce_utilisateur, utilisateur_courriel FROM (SELECT count(*) as somme,"
691
		$requete = "SELECT cal.nbmois, SUM(somme) / cal.nbmois as moyenne, ce_utilisateur, utilisateur_courriel FROM (SELECT count(*) as somme,"
692
			. " CONCAT(YEAR(date),'-',MONTH(date)) as anneemois, ce_utilisateur, utilisateur_courriel, id_commentaire FROM del_commentaire"
692
			. " CONCAT(YEAR(date),'-',MONTH(date)) as anneemois, ce_utilisateur, utilisateur_courriel, id_commentaire FROM del_commentaire"
693
			. " WHERE ce_proposition = '' AND nom_sel_nn != '' AND nom_sel_nn IS NOT NULL";
693
			. " WHERE ce_proposition = '' AND nom_sel_nn != '' AND nom_sel_nn IS NOT NULL";
694
		if ($this->annee != null) {
694
		if ($this->annee != null) {
695
			$requete .= " AND year(date) = " . $this->annee;
695
			$requete .= " AND year(date) = " . $this->annee;
696
		}
696
		}
697
		$requete .= "  GROUP BY anneemois, ce_utilisateur, utilisateur_courriel) as ppm, (SELECT count(distinct CONCAT(YEAR(date),'-',MONTH(date))) as nbmois FROM del_commentaire WHERE";
697
		$requete .= "  GROUP BY anneemois, ce_utilisateur, utilisateur_courriel) as ppm, (SELECT count(distinct CONCAT(YEAR(date),'-',MONTH(date))) as nbmois FROM del_commentaire WHERE";
698
		if ($this->annee != null) {
698
		if ($this->annee != null) {
699
			$requete .= " year(date) = " . $this->annee . " AND";
699
			$requete .= " year(date) = " . $this->annee . " AND";
700
		}
700
		}
701
		$requete .= " ce_proposition = '' AND nom_sel_nn != '' AND nom_sel_nn IS NOT NULL) as cal GROUP BY ce_utilisateur, utilisateur_courriel HAVING SUM(somme) / cal.nbmois >= 1"
701
		$requete .= " ce_proposition = '' AND nom_sel_nn != '' AND nom_sel_nn IS NOT NULL) as cal GROUP BY ce_utilisateur, utilisateur_courriel HAVING SUM(somme) / cal.nbmois >= 1"
702
			. " ORDER BY moyenne DESC"; // @ TODO limite ?
702
			. " ORDER BY moyenne DESC"; // @ TODO limite ?
703
		$resultat = $this->bdd->recupererTous($requete);
703
		$resultat = $this->bdd->recupererTous($requete);
704
 
704
 
705
		// Formatage de la liste avec les intitulés des utilisateurs
705
		// Formatage de la liste avec les intitulés des utilisateurs
706
		$ids = array_column($resultat, 'ce_utilisateur');
706
		$ids = array_column($resultat, 'ce_utilisateur');
707
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
707
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
708
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
708
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
709
		foreach ($resultat as &$util) {
709
		foreach ($resultat as &$util) {
710
			$ce = $util['ce_utilisateur'];
710
			$ce = $util['ce_utilisateur'];
711
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
711
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
712
		}
712
		}
713
 
713
 
714
		return array(
714
		return array(
715
			'liste' => $resultat
715
			'liste' => $resultat
716
		);
716
		);
717
	}
717
	}
718
 
718
 
719
	/**
719
	/**
720
	 * Statistiques sur Sauvages de ma Rue (Sdmr)
720
	 * Statistiques sur Sauvages de ma Rue (Sdmr)
721
	 * "MPM" = moyenne par mois
721
	 * "MPM" = moyenne par mois
722
	 * - Nombre total d'observations sdmr
722
	 * - Nombre total d'observations sdmr
723
	 * - Nombre d'observations Sauvages de PACA
723
	 * - Nombre d'observations Sauvages de PACA
724
	 */
724
	 */
725
	private function getSdmr() {
725
	private function getSdmr() {
726
		return array(
726
		return array(
727
			'nbObsSdmrTotal' => $this->getNbObsSdmrTotal(),
727
			'nbObsSdmrTotal' => $this->getNbObsSdmrTotal(),
728
			'nbObsSdmrTotalMPM' => $this->getNbObsSdmrTotal(true),
728
			'nbObsSdmrTotalMPM' => $this->getNbObsSdmrTotal(true),
729
			'nbObsSdmrPACA' => $this->getNbObsSdmrPACA(),
729
			'nbObsSdmrPACA' => $this->getNbObsSdmrPACA(),
730
			'nbObsSdmrPACAMPM' => $this->getNbObsSdmrPACA(true)
730
			'nbObsSdmrPACAMPM' => $this->getNbObsSdmrPACA(true)
731
		);
731
		);
732
	}
732
	}
733
 
733
 
734
	/**
734
	/**
735
	 * Nombre total d'observations Sauvages de ma Rue
735
	 * Nombre total d'observations Sauvages de ma Rue
736
	 */
736
	 */
737
	private function getNbObsSdmrTotal($mpm=false) {
737
	private function getNbObsSdmrTotal($mpm=false) {
738
		$requete = "SELECT COUNT(DISTINCT ce_observation) as nb_total FROM del_commentaire WHERE";
738
		$requete = "SELECT COUNT(DISTINCT ce_observation) as nb_total FROM del_commentaire WHERE";
739
		if ($this->annee != null) {
739
		if ($this->annee != null) {
740
			$requete .= ' YEAR(date) <= ' . $this->annee . ' AND';
740
			$requete .= ' YEAR(date) <= ' . $this->annee . ' AND';
741
		}
741
		}
742
		$requete .= " ce_observation in (SELECT id_observation FROM del_observation WHERE mots_cles_texte like '%sauvages%')";
742
		$requete .= " ce_observation in (SELECT id_observation FROM del_observation WHERE mots_cles_texte like '%sauvages%')";
743
		if ($mpm) {
743
		if ($mpm) {
744
			$requete = $this->encapsulerMPM($requete);
744
			$requete = $this->encapsulerMPM($requete);
745
		}
745
		}
746
		$resultat = $this->bdd->recupererTous($requete);
746
		$resultat = $this->bdd->recupererTous($requete);
747
		return intval(array_pop($resultat[0]));
747
		return intval(array_pop($resultat[0]));
748
	}
748
	}
749
 
749
 
750
	/**
750
	/**
751
	 * Nombre total d'observations Sauvages de ma Rue en PACA
751
	 * Nombre total d'observations Sauvages de ma Rue en PACA
752
	 */
752
	 */
753
	private function getNbObsSdmrPACA($mpm=false) {
753
	private function getNbObsSdmrPACA($mpm=false) {
754
		$requete = "SELECT COUNT(DISTINCT ce_observation) as nb_total FROM del_commentaire WHERE";
754
		$requete = "SELECT COUNT(DISTINCT ce_observation) as nb_total FROM del_commentaire WHERE";
755
		if ($this->annee != null) {
755
		if ($this->annee != null) {
756
			$requete .= ' YEAR(date) <= ' . $this->annee . ' AND';
756
			$requete .= ' YEAR(date) <= ' . $this->annee . ' AND';
757
		}
757
		}
758
		$requete .= " ce_observation in (SELECT id_observation FROM del_observation"
758
		$requete .= " ce_observation in (SELECT id_observation FROM del_observation"
759
			. " WHERE SUBSTR(ce_zone_geo, 9 , 2) IN (13,04,05,06,83,84) AND mots_cles_texte like '%sauvages%')";
759
			. " WHERE SUBSTR(ce_zone_geo, 9 , 2) IN (13,04,05,06,83,84) AND mots_cles_texte like '%sauvages%')";
760
		if ($mpm) {
760
		if ($mpm) {
761
			$requete = $this->encapsulerMPM($requete);
761
			$requete = $this->encapsulerMPM($requete);
762
		}
762
		}
763
		$resultat = $this->bdd->recupererTous($requete);
763
		$resultat = $this->bdd->recupererTous($requete);
764
		return intval(array_pop($resultat[0]));
764
		return intval(array_pop($resultat[0]));
765
	}
765
	}
766
 
766
 
767
	/**
767
	/**
768
	 * Statistiques sur les images de Pictoflora
768
	 * Statistiques sur les images de Pictoflora
769
	 * "MPM" = Moyenne par mois
769
	 * "MPM" = Moyenne par mois
770
	 *  - Nombre total d'images
770
	 *  - Nombre total d'images
771
	 *  - Nombre d'images ayant au moins un mot-clé
771
	 *  - Nombre d'images ayant au moins un mot-clé
772
	 *  - Nombre d'images ayant au moins un vote
772
	 *  - Nombre d'images ayant au moins un vote
773
	 *  - Nombre d'images de l'année ayant au moins un mot-clé
773
	 *  - Nombre d'images de l'année ayant au moins un mot-clé
774
	 *  - Nombre d'images de l'année ayant au moins un vote
774
	 *  - Nombre d'images de l'année ayant au moins un vote
775
	 */
775
	 */
776
	private function getImages() {
776
	private function getImages() {
777
		return array(
777
		return array(
778
			'nbImagesTotal' => $this->getNbImagesTotal(),
778
			'nbImagesTotal' => $this->getNbImagesTotal(),
779
			'nbImagesTotalMPM' => $this->getNbImagesTotal(true),
779
			'nbImagesTotalMPM' => $this->getNbImagesTotal(true),
780
			'nbImagesAyantTag' => $this->getNbImagesAyantTag(),
780
			'nbImagesAyantTag' => $this->getNbImagesAyantTag(),
781
			'nbImagesAyantTagMPM' => $this->getNbImagesAyantTag(true),
781
			'nbImagesAyantTagMPM' => $this->getNbImagesAyantTag(true),
782
			'nbImagesAyantVote' => $this->getNbImagesAyantVote(),
782
			'nbImagesAyantVote' => $this->getNbImagesAyantVote(),
783
			'nbImagesAyantVoteMPM' => $this->getNbImagesAyantVote(true),
783
			'nbImagesAyantVoteMPM' => $this->getNbImagesAyantVote(true),
784
			'nbImagesAnneeAyantTag' => $this->getNbImagesAnneeAyantTag(),
784
			'nbImagesAnneeAyantTag' => $this->getNbImagesAnneeAyantTag(),
785
			'nbImagesAnneeAyantTagMPM' => $this->getNbImagesAnneeAyantTag(true),
785
			'nbImagesAnneeAyantTagMPM' => $this->getNbImagesAnneeAyantTag(true),
786
			'nbImagesAnneeAyantVote' => $this->getNbImagesAnneeAyantVote(),
786
			'nbImagesAnneeAyantVote' => $this->getNbImagesAnneeAyantVote(),
787
			'nbImagesAnneeAyantVoteMPM' => $this->getNbImagesAnneeAyantVote(true),
787
			'nbImagesAnneeAyantVoteMPM' => $this->getNbImagesAnneeAyantVote(true),
788
		);
788
		);
789
	}
789
	}
790
 
790
 
791
	/**
791
	/**
792
	 * Nombre total d'images Pictoflora
792
	 * Nombre total d'images Pictoflora
793
	 */
793
	 */
794
	private function getNbImagesTotal($mpm=false) {
794
	private function getNbImagesTotal($mpm=false) {
795
		$requete = "SELECT COUNT(*) AS nb_total FROM del_image";
795
		$requete = "SELECT COUNT(*) AS nb_total FROM del_image";
796
		if ($this->annee != null) {
796
		if ($this->annee != null) {
797
			$requete .= ' WHERE YEAR(date_transmission) = ' . $this->annee;
797
			$requete .= ' WHERE YEAR(date_transmission) = ' . $this->annee;
798
		}
798
		}
799
		if ($mpm) {
799
		if ($mpm) {
800
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
800
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
801
		}
801
		}
802
		$resultat = $this->bdd->recupererTous($requete);
802
		$resultat = $this->bdd->recupererTous($requete);
803
		return intval(array_pop($resultat[0]));
803
		return intval(array_pop($resultat[0]));
804
	}
804
	}
805
 
805
 
806
	/**
806
	/**
807
	 * Nombre total d'images Pictoflora ayant au moins un mot-clé
807
	 * Nombre total d'images Pictoflora ayant au moins un mot-clé
808
	 */
808
	 */
809
	private function getNbImagesAyantTag($mpm=false) {
809
	private function getNbImagesAyantTag($mpm=false) {
810
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_tag";
810
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_tag";
811
		if ($this->annee != null) {
811
		if ($this->annee != null) {
812
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
812
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
813
		}
813
		}
814
		if ($mpm) {
814
		if ($mpm) {
815
			$requete = $this->encapsulerMPM($requete);
815
			$requete = $this->encapsulerMPM($requete);
816
		}
816
		}
817
		$resultat = $this->bdd->recupererTous($requete);
817
		$resultat = $this->bdd->recupererTous($requete);
818
		return intval(array_pop($resultat[0]));
818
		return intval(array_pop($resultat[0]));
819
	}
819
	}
820
 
820
 
821
	/**
821
	/**
822
	 * Nombre total d'images Pictoflora ayant au moins un vote
822
	 * Nombre total d'images Pictoflora ayant au moins un vote
823
	 */
823
	 */
824
	private function getNbImagesAyantVote($mpm=false) {
824
	private function getNbImagesAyantVote($mpm=false) {
825
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_vote";
825
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_vote";
826
		if ($this->annee != null) {
826
		if ($this->annee != null) {
827
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
827
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
828
		}
828
		}
829
		if ($mpm) {
829
		if ($mpm) {
830
			$requete = $this->encapsulerMPM($requete);
830
			$requete = $this->encapsulerMPM($requete);
831
		}
831
		}
832
		$resultat = $this->bdd->recupererTous($requete);
832
		$resultat = $this->bdd->recupererTous($requete);
833
		return intval(array_pop($resultat[0]));
833
		return intval(array_pop($resultat[0]));
834
	}
834
	}
835
 
835
 
836
	/**
836
	/**
837
	 * Nombre total d'images Pictoflora de l'année ayant au moins un mot-clé
837
	 * Nombre total d'images Pictoflora de l'année ayant au moins un mot-clé
838
	 */
838
	 */
839
	private function getNbImagesAnneeAyantTag($mpm=false) {
839
	private function getNbImagesAnneeAyantTag($mpm=false) {
840
		if ($this->annee == null) {
840
		if ($this->annee == null) {
841
			return null;
841
			return null;
842
		}
842
		}
843
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_tag WHERE YEAR(date) = " . $this->annee
843
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_tag WHERE YEAR(date) = " . $this->annee
844
			. " AND ce_image IN (SELECT id_image FROM del_image WHERE year(date_transmission) = " . $this->annee . ")";
844
			. " AND ce_image IN (SELECT id_image FROM del_image WHERE year(date_transmission) = " . $this->annee . ")";
845
		if ($mpm) {
845
		if ($mpm) {
846
			$requete = $this->encapsulerMPM($requete);
846
			$requete = $this->encapsulerMPM($requete);
847
		}
847
		}
848
		$resultat = $this->bdd->recupererTous($requete);
848
		$resultat = $this->bdd->recupererTous($requete);
849
		return intval(array_pop($resultat[0]));
849
		return intval(array_pop($resultat[0]));
850
	}
850
	}
851
 
851
 
852
	/**
852
	/**
853
	 * Nombre total d'images Pictoflora de l'année ayant au moins un vote
853
	 * Nombre total d'images Pictoflora de l'année ayant au moins un vote
854
	 */
854
	 */
855
	private function getNbImagesAnneeAyantVote($mpm=false) {
855
	private function getNbImagesAnneeAyantVote($mpm=false) {
856
		if ($this->annee == null) {
856
		if ($this->annee == null) {
857
			return null;
857
			return null;
858
		}
858
		}
859
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_vote WHERE YEAR(date) = " . $this->annee
859
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_vote WHERE YEAR(date) = " . $this->annee
860
			. " AND ce_image IN (SELECT id_image FROM del_image WHERE year(date_transmission) = " . $this->annee . ")";
860
			. " AND ce_image IN (SELECT id_image FROM del_image WHERE year(date_transmission) = " . $this->annee . ")";
861
		if ($mpm) {
861
		if ($mpm) {
862
			$requete = $this->encapsulerMPM($requete);
862
			$requete = $this->encapsulerMPM($requete);
863
		}
863
		}
864
		$resultat = $this->bdd->recupererTous($requete);
864
		$resultat = $this->bdd->recupererTous($requete);
865
		return intval(array_pop($resultat[0]));
865
		return intval(array_pop($resultat[0]));
866
	}
866
	}
867
 
867
 
868
	/**
868
	/**
869
	 * Statistiques sur les votes et mots-clés (tags) de Pictoflora
869
	 * Statistiques sur les votes et mots-clés (tags) de Pictoflora
870
	 * "MPM" = moyenne par mois
870
	 * "MPM" = moyenne par mois
871
	 * - Nombre total de votes
871
	 * - Nombre total de votes
872
	 * - Nombre total de mots clés
872
	 * - Nombre total de mots clés
873
	 * - Nombre d'images ayant le mot-clé "defiPhoto"
873
	 * - Nombre d'images ayant le mot-clé "defiPhoto"
874
	 */
874
	 */
875
	private function getTagsVotes() {
875
	private function getTagsVotes() {
876
		return array(
876
		return array(
877
			'nbTagsTotal' => $this->getNbTagsTotal(),
877
			'nbTagsTotal' => $this->getNbTagsTotal(),
878
			'nbTagsTotalMPM' => $this->getNbTagsTotal(true),
878
			'nbTagsTotalMPM' => $this->getNbTagsTotal(true),
879
			'nbVotesTotal' => $this->getNbVotesTotal(),
879
			'nbVotesTotal' => $this->getNbVotesTotal(),
880
			'nbVotesTotalMPM' => $this->getNbVotesTotal(true),
880
			'nbVotesTotalMPM' => $this->getNbVotesTotal(true),
881
			// devra être paramétré par une liste de mots-clés
881
			// devra être paramétré par une liste de mots-clés
882
			//'nbImagesTagDP' => $this->getNbImagesTagDP(),
882
			//'nbImagesTagDP' => $this->getNbImagesTagDP(),
883
			//'nbImagesTagDPMPM' => $this->getNbImagesTagDP(true)
883
			//'nbImagesTagDPMPM' => $this->getNbImagesTagDP(true)
884
		);
884
		);
885
	}
885
	}
886
 
886
 
887
	/**
887
	/**
888
	 * Nombre total de mots clés Pictoflora
888
	 * Nombre total de mots clés Pictoflora
889
	 */
889
	 */
890
	private function getNbTagsTotal($mpm=false) {
890
	private function getNbTagsTotal($mpm=false) {
891
		$requete = "SELECT COUNT(*) AS nb_total FROM del_image_tag";
891
		$requete = "SELECT COUNT(*) AS nb_total FROM del_image_tag";
892
		if ($this->annee != null) {
892
		if ($this->annee != null) {
893
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
893
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
894
		}
894
		}
895
		if ($mpm) {
895
		if ($mpm) {
896
			$requete = $this->encapsulerMPM($requete);
896
			$requete = $this->encapsulerMPM($requete);
897
		}
897
		}
898
		$resultat = $this->bdd->recupererTous($requete);
898
		$resultat = $this->bdd->recupererTous($requete);
899
		return intval(array_pop($resultat[0]));
899
		return intval(array_pop($resultat[0]));
900
	}
900
	}
901
 
901
 
902
	/**
902
	/**
903
	 * Nombre total de votes Pictoflora
903
	 * Nombre total de votes Pictoflora
904
	 */
904
	 */
905
	private function getNbVotesTotal($mpm=false) {
905
	private function getNbVotesTotal($mpm=false) {
906
		$requete = "SELECT COUNT(*) AS nb_total FROM del_image_vote";
906
		$requete = "SELECT COUNT(*) AS nb_total FROM del_image_vote";
907
		if ($this->annee != null) {
907
		if ($this->annee != null) {
908
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
908
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
909
		}
909
		}
910
		if ($mpm) {
910
		if ($mpm) {
911
			$requete = $this->encapsulerMPM($requete);
911
			$requete = $this->encapsulerMPM($requete);
912
		}
912
		}
913
		$resultat = $this->bdd->recupererTous($requete);
913
		$resultat = $this->bdd->recupererTous($requete);
914
		return intval(array_pop($resultat[0]));
914
		return intval(array_pop($resultat[0]));
915
	}
915
	}
916
 
916
 
917
	/**
917
	/**
918
	 * Statistiques sur les utilisateurs de Pictoflora
918
	 * Statistiques sur les utilisateurs de Pictoflora
919
	 * "MPM" = Moyenne par mois
919
	 * "MPM" = Moyenne par mois
920
	 * "AF" = Ayant fait
920
	 * "AF" = Ayant fait
921
	 * - Nombre d'utilisateurs ayant ajouté un mot-clé
921
	 * - Nombre d'utilisateurs ayant ajouté un mot-clé
922
	 * - Nombre d'utilisateurs ayant voté
922
	 * - Nombre d'utilisateurs ayant voté
923
	 * - Nombre d'utilisateurs ayant fait une action
923
	 * - Nombre d'utilisateurs ayant fait une action
924
	 */
924
	 */
925
	private function getUtilisateursPf() {
925
	private function getUtilisateursPf() {
926
		return array(
926
		return array(
927
			'nbUtilisateursAFTag' => $this->getNbUtilisateursPfAFTag(),
927
			'nbUtilisateursAFTag' => $this->getNbUtilisateursPfAFTag(),
928
			'nbUtilisateursAFTagMPM' => $this->getNbUtilisateursPfAFTag(true),
928
			'nbUtilisateursAFTagMPM' => $this->getNbUtilisateursPfAFTag(true),
929
			'nbUtilisateursAFVote' => $this->getNbUtilisateursPfAFVote(),
929
			'nbUtilisateursAFVote' => $this->getNbUtilisateursPfAFVote(),
930
			'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursPfAFVote(true),
930
			'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursPfAFVote(true),
931
			'nbUtilisateursAFAction' => $this->getNbUtilisateursPfAFAction(),
931
			'nbUtilisateursAFAction' => $this->getNbUtilisateursPfAFAction(),
932
			'nbUtilisateursAFActionMPM' => $this->getNbUtilisateursPfAFActionMPM()
932
			'nbUtilisateursAFActionMPM' => $this->getNbUtilisateursPfAFActionMPM()
933
		);
933
		);
934
	}
934
	}
935
 
935
 
936
	/**
936
	/**
937
	 * Nombre d'utilisateurs ayant ajouté un mot-clé
937
	 * Nombre d'utilisateurs ayant ajouté un mot-clé
938
	 */
938
	 */
939
	private function getNbUtilisateursPfAFTag($mpm=false) {
939
	private function getNbUtilisateursPfAFTag($mpm=false) {
940
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_image_tag";
940
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_image_tag";
941
		if ($this->annee != null) {
941
		if ($this->annee != null) {
942
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
942
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
943
		}
943
		}
944
		if ($mpm) {
944
		if ($mpm) {
945
			$requete = $this->encapsulerMPM($requete);
945
			$requete = $this->encapsulerMPM($requete);
946
		}
946
		}
947
		$resultat = $this->bdd->recupererTous($requete);
947
		$resultat = $this->bdd->recupererTous($requete);
948
		return intval(array_pop($resultat[0]));
948
		return intval(array_pop($resultat[0]));
949
	}
949
	}
950
 
950
 
951
	/**
951
	/**
952
	 * Nombre d'utilisateurs ayant fait un vote
952
	 * Nombre d'utilisateurs ayant fait un vote
953
	 */
953
	 */
954
	private function getNbUtilisateursPfAFVote($mpm=false) {
954
	private function getNbUtilisateursPfAFVote($mpm=false) {
955
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_image_vote";
955
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_image_vote";
956
		if ($this->annee != null) {
956
		if ($this->annee != null) {
957
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
957
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
958
		}
958
		}
959
		if ($mpm) {
959
		if ($mpm) {
960
			$requete = $this->encapsulerMPM($requete);
960
			$requete = $this->encapsulerMPM($requete);
961
		}
961
		}
962
		$resultat = $this->bdd->recupererTous($requete);
962
		$resultat = $this->bdd->recupererTous($requete);
963
		return intval(array_pop($resultat[0]));
963
		return intval(array_pop($resultat[0]));
964
	}
964
	}
965
 
965
 
966
	/**
966
	/**
967
	 * Nombre d'utilisateurs ayant fait une action
967
	 * Nombre d'utilisateurs ayant fait une action
968
	 */
968
	 */
969
	private function getNbUtilisateursPfAFAction() {
969
	private function getNbUtilisateursPfAFAction() {
970
		$requete = "SELECT COUNT(*) AS nb_total FROM (SELECT ce_utilisateur FROM del_image_tag";
970
		$requete = "SELECT COUNT(*) AS nb_total FROM (SELECT ce_utilisateur FROM del_image_tag";
971
		if ($this->annee != null) {
971
		if ($this->annee != null) {
972
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
972
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
973
		}
973
		}
974
		$requete .= " UNION SELECT ce_utilisateur FROM del_image_vote";
974
		$requete .= " UNION SELECT ce_utilisateur FROM del_image_vote";
975
		if ($this->annee != null) {
975
		if ($this->annee != null) {
976
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
976
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
977
		}
977
		}
978
		$requete .= ") AS action";
978
		$requete .= ") AS action";
979
		$resultat = $this->bdd->recupererTous($requete);
979
		$resultat = $this->bdd->recupererTous($requete);
980
		return intval(array_pop($resultat[0]));
980
		return intval(array_pop($resultat[0]));
981
	}
981
	}
982
 
982
 
983
	/**
983
	/**
984
	 * Moyenne par mois du nombre d'utilisateurs ayant fait une action
984
	 * Moyenne par mois du nombre d'utilisateurs ayant fait une action
985
	 * -> n'est pas encapsulable par encapsulerMPM()
985
	 * -> n'est pas encapsulable par encapsulerMPM()
986
	 */
986
	 */
987
	private function getNbUtilisateursPfAFActionMPM() {
987
	private function getNbUtilisateursPfAFActionMPM() {
988
		$requete = "SELECT avg(nb_total) FROM (SELECT COUNT(*) AS nb_total FROM (SELECT * FROM (SELECT ce_utilisateur, date FROM del_image_tag";
988
		$requete = "SELECT avg(nb_total) FROM (SELECT COUNT(*) AS nb_total FROM (SELECT * FROM (SELECT ce_utilisateur, date FROM del_image_tag";
989
		if ($this->annee != null) {
989
		if ($this->annee != null) {
990
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
990
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
991
		}
991
		}
992
		$requete .= " UNION SELECT ce_utilisateur, date FROM del_image_vote";
992
		$requete .= " UNION SELECT ce_utilisateur, date FROM del_image_vote";
993
		if ($this->annee != null) {
993
		if ($this->annee != null) {
994
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
994
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
995
		}
995
		}
996
		$requete .= ") AS action GROUP BY ce_utilisateur) AS utildate GROUP BY CONCAT(year(date),month(date))) as truc";
996
		$requete .= ") AS action GROUP BY ce_utilisateur) AS utildate GROUP BY CONCAT(year(date),month(date))) as truc";
997
		$resultat = $this->bdd->recupererTous($requete);
997
		$resultat = $this->bdd->recupererTous($requete);
998
		return intval(array_pop($resultat[0]));
998
		return intval(array_pop($resultat[0]));
999
	}
999
	}
1000
 
1000
 
1001
	/**
1001
	/**
1002
	 * Liste des mots-clés les plus fréquents
1002
	 * Liste des mots-clés les plus fréquents
1003
	 */
1003
	 */
1004
	private function getListeMeilleursTags() {
1004
	private function getListeMeilleursTags() {
1005
		$liste = array();
1005
		$liste = array();
1006
		$requete = "SELECT count(*) as occurrences, tag FROM del_image_tag";
1006
		$requete = "SELECT count(*) as occurrences, tag FROM del_image_tag";
1007
		if ($this->annee != null) {
1007
		if ($this->annee != null) {
1008
			$requete .= " WHERE YEAR(date) = " . $this->annee;
1008
			$requete .= " WHERE YEAR(date) = " . $this->annee;
1009
		}
1009
		}
1010
		$requete .= " GROUP BY tag ORDER BY occurrences DESC LIMIT 20";
1010
		$requete .= " GROUP BY tag ORDER BY occurrences DESC LIMIT 20";
1011
		$resultat = $this->bdd->recupererTous($requete);
1011
		$resultat = $this->bdd->recupererTous($requete);
1012
		return array(
1012
		return array(
1013
				'liste' => $resultat
1013
				'liste' => $resultat
1014
		);
1014
		);
1015
	}
1015
	}
1016
 
1016
 
1017
	/**
1017
	/**
1018
	 * Liste des utilisateurs ayant ajouté le plus de mots-clés
1018
	 * Liste des utilisateurs ayant ajouté le plus de mots-clés
1019
	 */
1019
	 */
1020
	private function getListeMeilleursTagueurs() {
1020
	private function getListeMeilleursTagueurs() {
1021
		$resultat = array();
1021
		$resultat = array();
1022
		$requete = "SELECT count(*) as nombre, IF (ce_utilisateur REGEXP '^-?[0-9]+$' OR ce_utilisateur REGEXP '^.+@.+$', ce_utilisateur, null) as ce_util FROM del_image_tag";
1022
		$requete = "SELECT count(*) as nombre, IF (ce_utilisateur REGEXP '^-?[0-9]+$' OR ce_utilisateur REGEXP '^.+@.+$', ce_utilisateur, null) as ce_util FROM del_image_tag";
1023
		if ($this->annee != null) {
1023
		if ($this->annee != null) {
1024
			$requete .= " WHERE year(date) = " . $this->annee;
1024
			$requete .= " WHERE year(date) = " . $this->annee;
1025
		}
1025
		}
1026
		$requete .= " GROUP BY ce_util ORDER BY nombre DESC LIMIT 20";
1026
		$requete .= " GROUP BY ce_util ORDER BY nombre DESC LIMIT 20";
1027
		$resultat = $this->bdd->recupererTous($requete);
1027
		$resultat = $this->bdd->recupererTous($requete);
1028
 
1028
 
1029
		// Formatage de la liste avec les intitulés des utilisateurs
1029
		// Formatage de la liste avec les intitulés des utilisateurs
1030
		$ids = array_column($resultat, 'ce_util');
1030
		$ids = array_column($resultat, 'ce_util');
1031
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
1031
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
1032
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
1032
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
1033
		foreach ($resultat as &$util) {
1033
		foreach ($resultat as &$util) {
1034
			$ce = $util['ce_util'];
1034
			$ce = $util['ce_util'];
1035
			if (isset($infosUtilisateurs[$ce]['intitule'])) {
1035
			if (isset($infosUtilisateurs[$ce]['intitule'])) {
1036
				$util['intitule'] = $infosUtilisateurs[$ce]['intitule'];
1036
				$util['intitule'] = $infosUtilisateurs[$ce]['intitule'];
1037
			} else {
1037
			} else {
1038
				$posa = strpos($ce, '@');
1038
				$posa = strpos($ce, '@');
1039
				if ($posa !== false) {
1039
				if ($posa !== false) {
1040
					$util['intitule'] = substr($ce, 0, $posa+1) . '...';
1040
					$util['intitule'] = substr($ce, 0, $posa+1) . '...';
1041
				} else {
1041
				} else {
1042
					$util['intitule'] = null;
1042
					$util['intitule'] = null;
1043
				}
1043
				}
1044
			}
1044
			}
1045
		}
1045
		}
1046
 
1046
 
1047
		return array(
1047
		return array(
1048
				'liste' => $resultat
1048
				'liste' => $resultat
1049
		);
1049
		);
1050
	}
1050
	}
1051
 
1051
 
1052
	/**
1052
	/**
1053
	 * Encapsule une reqûete de comptage dans un autre morceau de requête
1053
	 * Encapsule une reqûete de comptage dans un autre morceau de requête
1054
	 * afin de calculer la moyenne par mois
1054
	 * afin de calculer la moyenne par mois
1055
	 * @param string $requete count() qui doit renvoyer une colonne 'nb_total'
1055
	 * @param string $requete count() qui doit renvoyer une colonne 'nb_total'
1056
	 */
1056
	 */
1057
	protected function encapsulerMPM($requete, $colonne="date") {
1057
	protected function encapsulerMPM($requete, $colonne="date") {
1058
		$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM ("
1058
		$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM ("
1059
			. $requete
1059
			. $requete
1060
			. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre";
1060
			. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre";
1061
		return $requeteEncapsulee;
1061
		return $requeteEncapsulee;
1062
	}
1062
	}
1063
 
1063
 
1064
	/**
1064
	/**
1065
	 * Prend en paramêtre un tableau d'identifiants utilisateurs et retourne après avoir interrogé un
1065
	 * Prend en paramêtre un tableau d'identifiants utilisateurs et retourne après avoir interrogé un
1066
	 * webservice de l'annuaire un tableau avec en clé l'id et en valeur l'intitulé
1066
	 * webservice de l'annuaire un tableau avec en clé l'id et en valeur l'intitulé
1067
	 * @param array $ids un tableau d'ids
1067
	 * @param array $ids un tableau d'ids
1068
	 */
1068
	 */
1069
	protected function recupererIntitulesUtilisateursParIds(array $ids) {
1069
	protected function recupererIntitulesUtilisateursParIds(array $ids) {
1070
		$service = "utilisateur/infos-par-id/" . implode(',', $ids);
1070
		$service = "utilisateur/infos-par-id/" . implode(',', $ids);
1071
		$url = $this->conteneur->getParametre('urlServiceBaseAnnuaire') . $service;
1071
		$url = $this->conteneur->getParametre('urlServiceBaseAnnuaire') . $service;
1072
		//echo "URL: $url\n\n";
1072
		//echo "URL: $url\n\n";
1073
		$json = $this->conteneur->getRestClient()->consulter($url);
1073
		$json = $this->conteneur->getRestClient()->consulter($url);
1074
		$resultat = json_decode($json, true);
1074
		$resultat = json_decode($json, true);
1075
		return $resultat;
1075
		return $resultat;
1076
	}
1076
	}
1077
}
-
 
1078
1077
}
-
 
1078