Subversion Repositories eFlore/Applications.del

Rev

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

Rev 2016 Rev 2017
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
	* Prend en paramêtre un tableau de courriels et retourne après avoir intérogé un service we de l'annuaire
77
	* Prend en paramêtre un tableau de courriels et retourne après avoir intérogé un service we de l'annuaire
78
	* une tableau avec en clé le courriel et en valeur, un tableau associatif :
78
	* une tableau avec en clé le courriel et en valeur, un tableau associatif :
79
	*  - nom : le nom de l'utilisateur
79
	*  - nom : le nom de l'utilisateur
80
	*  - prenom : le prénom de l'utilisateur.
80
	*  - prenom : le prénom de l'utilisateur.
81
	*  @TODO ne gère pas le pseudo, qui devrait être retourné en lieu et place des nom / prénom s'il est utilisé et renseigné
81
	*  @TODO ne gère pas le pseudo, qui devrait être retourné en lieu et place des nom / prénom s'il est utilisé et renseigné
82
	* @param array $courriels un tableau de courriels pour lesquels il faut recherche le prénom et nom.
82
	* @param array $courriels un tableau de courriels pour lesquels il faut recherche le prénom et nom.
83
	*/
83
	*/
84
	protected function recupererUtilisateursNomPrenom(Array $courriels) {
84
	protected function recupererUtilisateursNomPrenom(Array $courriels) {
85
		// Récupération des données au format Json
85
		// Récupération des données au format Json
86
		$service = "utilisateur/prenom-nom-par-courriel/".implode(',', $courriels);
86
		$service = "utilisateur/prenom-nom-par-courriel/".implode(',', $courriels);
87
		$url = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], $service);
87
		$url = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], $service);
88
		$json = $this->getDao()->consulter($url);
88
		$json = $this->getDao()->consulter($url);
89
		return (array) json_decode($json);
89
		return (array) json_decode($json);
90
	}
90
	}
91
 
91
 
92
	/**
92
	/**
93
	 * Statistiques sur les observations
93
	 * Statistiques sur les observations
94
	 * "MPM" = moyenne par mois
94
	 * "MPM" = moyenne par mois
95
	 * "TC" = tag à déterminer ou certitude incertaine
95
	 * "TC" = tag à déterminer ou certitude incertaine
96
	 * - Nombre d'observations au total
96
	 * - Nombre d'observations au total
97
	 * - Nombre d'obs sans identification (ou tag ou certitude)
97
	 * - Nombre d'obs sans identification (ou tag ou certitude)
98
	 * - Nombre d'obs sans identification
98
	 * - Nombre d'obs sans identification
99
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine
99
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine
100
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et retenue
100
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et retenue
101
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus
101
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus
102
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
102
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
103
	 */
103
	 */
104
	private function getObservations() {
104
	private function getObservations() {
105
		return array(
105
		return array(
106
			'nbObsTotal' => $this->getNbObsTotal(),
106
			'nbObsTotal' => $this->getNbObsTotal(),
107
			'nbObsTotalMPM' => $this->getNbObsTotal(true),
107
			'nbObsTotalMPM' => $this->getNbObsTotal(true),
108
			'nbObsSansIdentOuTC' => $this->getNbObsSansIdentOuTC(),
108
			'nbObsSansIdentOuTC' => $this->getNbObsSansIdentOuTC(),
109
			'nbObsSansIdentOuTCMPM' => $this->getNbObsSansIdentOuTC(true),
109
			'nbObsSansIdentOuTCMPM' => $this->getNbObsSansIdentOuTC(true),
110
			'nbObsSansIdent' => $this->getNbObsSansIdent(),
110
			'nbObsSansIdent' => $this->getNbObsSansIdent(),
111
			'nbObsSansIdentMPM' => $this->getNbObsSansIdent(true),
111
			'nbObsSansIdentMPM' => $this->getNbObsSansIdent(true),
112
			'nbObsTC' => $this->getNbObsTC(),
112
			'nbObsTC' => $this->getNbObsTC(),
113
			'nbObsTCMPM' => $this->getNbObsTC(true),
113
			'nbObsTCMPM' => $this->getNbObsTC(true),
114
			'nbObsTCRetenue' => $this->getNbObsTCRetenue(),
114
			'nbObsTCRetenue' => $this->getNbObsTCRetenue(),
115
			//'nbObsTCRetenueMPM' => $this->getNbObsTCRetenue(true),
115
			'nbObsTCRetenueMPM' => $this->getNbObsTCRetenue(true),
116
			'nbObsTCConsensus' => $this->getNbObsTCConsensus(),
116
			'nbObsTCConsensus' => $this->getNbObsTCConsensus(),
117
			'nbObsTCConsensusMPM' => $this->getNbObsTCConsensus(true),
117
			'nbObsTCConsensusMPM' => $this->getNbObsTCConsensus(true),
118
			'nbObsTCConsensusNonValide' => $this->getNbObsTCConsensusNonValide(),
118
			'nbObsTCConsensusNonValide' => $this->getNbObsTCConsensusNonValide(),
119
			'nbObsTCConsensusNonValideMPM' => $this->getNbObsTCConsensusNonValide(true),
119
			'nbObsTCConsensusNonValideMPM' => $this->getNbObsTCConsensusNonValide(true),
120
		);
120
		);
121
	}
121
	}
122
 
122
 
123
	/**
123
	/**
124
	 * Nombre d'observations au total
124
	 * Nombre d'observations au total
125
	 */
125
	 */
126
	private function getNbObsTotal($mpm=false) {
126
	private function getNbObsTotal($mpm=false) {
127
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation";
127
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation";
128
		if ($this->annee != null) {
128
		if ($this->annee != null) {
129
			$requete .= ' WHERE YEAR(date_transmission) = ' . $this->annee;
129
			$requete .= ' WHERE YEAR(date_transmission) = ' . $this->annee;
130
		}
130
		}
131
		if ($mpm) {
131
		if ($mpm) {
132
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
132
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
133
		}
133
		}
134
		$resultat = $this->bdd->recupererTous($requete);
134
		$resultat = $this->bdd->recupererTous($requete);
135
		return intval(array_pop($resultat[0]));
135
		return intval(array_pop($resultat[0]));
136
	}
136
	}
137
 
137
 
138
	/**
138
	/**
139
	 * Nombre d'obs sans identification (ou tag ou certitude)
139
	 * Nombre d'obs sans identification (ou tag ou certitude)
140
	 */
140
	 */
141
	private function getNbObsSansIdentOuTC($mpm=false) {
141
	private function getNbObsSansIdentOuTC($mpm=false) {
142
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
142
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
143
		if ($this->annee != null) {
143
		if ($this->annee != null) {
144
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
144
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
145
		}
145
		}
146
		$requete .= " (`mots_cles_texte` LIKE '%determiner%' OR `nom_sel_nn` = '' OR certitude IN ('aDeterminer','douteux'))";
146
		$requete .= " (`mots_cles_texte` LIKE '%determiner%' OR `nom_sel_nn` = '' OR certitude IN ('aDeterminer','douteux'))";
147
		if ($mpm) {
147
		if ($mpm) {
148
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
148
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
149
		}
149
		}
150
		$resultat = $this->bdd->recupererTous($requete);
150
		$resultat = $this->bdd->recupererTous($requete);
151
		return intval(array_pop($resultat[0]));
151
		return intval(array_pop($resultat[0]));
152
	}
152
	}
153
 
153
 
154
	/**
154
	/**
155
	 * Nombre d'obs sans identification
155
	 * Nombre d'obs sans identification
156
	 */
156
	 */
157
	private function getNbObsSansIdent($mpm=false) {
157
	private function getNbObsSansIdent($mpm=false) {
158
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
158
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
159
		if ($this->annee != null) {
159
		if ($this->annee != null) {
160
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
160
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
161
		}
161
		}
162
		$requete .= " nom_sel_nn = ''";
162
		$requete .= " nom_sel_nn = ''";
163
		if ($mpm) {
163
		if ($mpm) {
164
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
164
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
165
		}
165
		}
166
		$resultat = $this->bdd->recupererTous($requete);
166
		$resultat = $this->bdd->recupererTous($requete);
167
		return intval(array_pop($resultat[0]));
167
		return intval(array_pop($resultat[0]));
168
	}
168
	}
169
 
169
 
170
	/**
170
	/**
171
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine
171
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine
172
	 */
172
	 */
173
	private function getNbObsTC($mpm=false) {
173
	private function getNbObsTC($mpm=false) {
174
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
174
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
175
		if ($this->annee != null) {
175
		if ($this->annee != null) {
176
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
176
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
177
		}
177
		}
178
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux'))";
178
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux'))";
179
		if ($mpm) {
179
		if ($mpm) {
180
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
180
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
181
		}
181
		}
182
		$resultat = $this->bdd->recupererTous($requete);
182
		$resultat = $this->bdd->recupererTous($requete);
183
		return intval(array_pop($resultat[0]));
183
		return intval(array_pop($resultat[0]));
184
	}
184
	}
185
 
185
 
186
	/**
186
	/**
187
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et retenue
187
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et retenue
188
	 */
188
	 */
189
	private function getNbObsTCRetenue($mpm=false) {
189
	private function getNbObsTCRetenue($mpm=false) {
190
		$requete = "SELECT COUNT(*) AS nb_total FROM del_commentaire WHERE proposition_retenue = 1 AND ce_observation IN (SELECT id_observation FROM del_observation WHERE";
190
		$requete = "SELECT COUNT(*) AS nb_total FROM del_commentaire WHERE proposition_retenue = 1 AND ce_observation IN (SELECT id_observation FROM del_observation WHERE";
191
		if ($this->annee != null) {
191
		if ($this->annee != null) {
192
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
192
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
193
		}
193
		}
194
		$requete .= " (certitude IN ('aDeterminer','douteux')))";
194
		$requete .= " (certitude IN ('aDeterminer','douteux')))";
195
		if ($mpm) {
195
		if ($mpm) {
-
 
196
			// @TODO vérifier que grouper sur "date" est pertinent
-
 
197
			// date_transmission n'est pas dispo pour grouper ici :-/
196
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
198
			$requete = $this->encapsulerMPM($requete);
197
		}
199
		}
198
		$resultat = $this->bdd->recupererTous($requete);
200
		$resultat = $this->bdd->recupererTous($requete);
199
		return intval(array_pop($resultat[0]));
201
		return intval(array_pop($resultat[0]));
200
	}
202
	}
201
 
203
 
202
	/**
204
	/**
203
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus
205
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus
204
	 */
206
	 */
205
	private function getNbObsTCConsensus($mpm=false) {
207
	private function getNbObsTCConsensus($mpm=false) {
206
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
208
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
207
		if ($this->annee != null) {
209
		if ($this->annee != null) {
208
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
210
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
209
		}
211
		}
210
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux')) AND id_observation IN"
212
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux')) AND id_observation IN"
211
			. " (SELECT ce_observation FROM del_commentaire WHERE proposition_initiale = 1" 
213
			. " (SELECT ce_observation FROM del_commentaire WHERE proposition_initiale = 1" 
212
			. " AND nom_sel_nn != 0"
214
			. " AND nom_sel_nn != 0"
213
			. " AND nom_sel_nn IS NOT NULL"
215
			. " AND nom_sel_nn IS NOT NULL"
214
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
216
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
215
		if ($this->annee != null) {
217
		if ($this->annee != null) {
216
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
218
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
217
		}
219
		}
218
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
220
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
219
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
221
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
220
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
222
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
221
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
223
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
222
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
224
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
223
		. " END) >= 4))";
225
		. " END) >= 4))";
224
		if ($mpm) {
226
		if ($mpm) {
225
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
227
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
226
		}
228
		}
227
		$resultat = $this->bdd->recupererTous($requete);
229
		$resultat = $this->bdd->recupererTous($requete);
228
		return intval(array_pop($resultat[0]));
230
		return intval(array_pop($resultat[0]));
229
	}
231
	}
230
 
232
 
231
	/**
233
	/**
232
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
234
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
233
	 */
235
	 */
234
	private function getNbObsTCConsensusNonValide($mpm=false) {
236
	private function getNbObsTCConsensusNonValide($mpm=false) {
235
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
237
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
236
		if ($this->annee != null) {
238
		if ($this->annee != null) {
237
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
239
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
238
		}
240
		}
239
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux')) AND id_observation IN"
241
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux')) AND id_observation IN"
240
			. " (SELECT ce_observation FROM del_commentaire WHERE proposition_initiale = 1 AND proposition_retenue = 0" 
242
			. " (SELECT ce_observation FROM del_commentaire WHERE proposition_initiale = 1 AND proposition_retenue = 0" 
241
			. " AND nom_sel_nn != 0"
243
			. " AND nom_sel_nn != 0"
242
			. " AND nom_sel_nn IS NOT NULL"
244
			. " AND nom_sel_nn IS NOT NULL"
243
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
245
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
244
		if ($this->annee != null) {
246
		if ($this->annee != null) {
245
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
247
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
246
		}
248
		}
247
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
249
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
248
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
250
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
249
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
251
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
250
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
252
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
251
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
253
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
252
		. " END) >= 4))";
254
		. " END) >= 4))";
253
		if ($mpm) {
255
		if ($mpm) {
254
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
256
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
255
		}
257
		}
256
		$resultat = $this->bdd->recupererTous($requete);
258
		$resultat = $this->bdd->recupererTous($requete);
257
		return intval(array_pop($resultat[0]));
259
		return intval(array_pop($resultat[0]));
258
	}
260
	}
259
 
261
 
260
	/**
262
	/**
261
	 * Statistiques sur les propositions, les commentaires et les votes
263
	 * Statistiques sur les propositions, les commentaires et les votes
262
	 * "MPM" = moyenne par mois
264
	 * "MPM" = moyenne par mois
263
	 * - Nombre de votes
265
	 * - Nombre de votes
264
	 * - Nombre de commentaires
266
	 * - Nombre de commentaires
265
	 * - Nombre d'actions par jour
267
	 * - Nombre d'actions par jour
266
	 * - Nombres de propositions sur toutes les obs
268
	 * - Nombres de propositions sur toutes les obs
267
	 * - Nombres de propositions retenues sur toutes les obs
269
	 * - Nombres de propositions retenues sur toutes les obs
268
	 * - Nombres de propositions en consensus sur toutes les obs
270
	 * - Nombres de propositions en consensus sur toutes les obs
269
	 * - Nombres de propositions sur les obs d'une année
271
	 * - Nombres de propositions sur les obs d'une année
270
	 * - Nombres de propositions retenues sur les obs d'une année
272
	 * - Nombres de propositions retenues sur les obs d'une année
271
	 * - Nombres de propositions en consensus sur les obs d'une année
273
	 * - Nombres de propositions en consensus sur les obs d'une année
272
	 */
274
	 */
273
	private function getPropositions() {
275
	private function getPropositions() {
274
		return array(
276
		return array(
275
			'nbVotes' => $this->getNbVotes(),
277
			'nbVotes' => $this->getNbVotes(),
276
			'nbVotesMPM' => $this->getNbVotes(true),
278
			'nbVotesMPM' => $this->getNbVotes(true),
277
			'nbMoyenActionsParJour' => $this->getNbMoyenActionsParJour(),
279
			'nbMoyenActionsParJour' => $this->getNbMoyenActionsParJour(),
278
			'nbCommentaires' => $this->getNbCommentaires(),
280
			'nbCommentaires' => $this->getNbCommentaires(),
279
			'nbCommentairesMPM' => $this->getNbCommentaires(true),
281
			'nbCommentairesMPM' => $this->getNbCommentaires(true),
280
			'nbPropositionsToutesObs' => $this->getNbPropositionsToutesObs(),
282
			'nbPropositionsToutesObs' => $this->getNbPropositionsToutesObs(),
281
			'nbPropositionsToutesObsMPM' => $this->getNbPropositionsToutesObs(true),
283
			'nbPropositionsToutesObsMPM' => $this->getNbPropositionsToutesObs(true),
282
			'nbPropositionsRetenuesToutesObs' => $this->getNbPropositionsRetenuesToutesObs(),
284
			'nbPropositionsRetenuesToutesObs' => $this->getNbPropositionsRetenuesToutesObs(),
283
			'nbPropositionsRetenuesToutesObsMPM' => $this->getNbPropositionsRetenuesToutesObs(true),
285
			'nbPropositionsRetenuesToutesObsMPM' => $this->getNbPropositionsRetenuesToutesObs(true),
284
			'nbPropositionsConsensusToutesObs' => $this->getNbPropositionsConsensusToutesObs(),
286
			'nbPropositionsConsensusToutesObs' => $this->getNbPropositionsConsensusToutesObs(),
285
			'nbPropositionsConsensusToutesObsMPM' => $this->getNbPropositionsConsensusToutesObs(true),
287
			'nbPropositionsConsensusToutesObsMPM' => $this->getNbPropositionsConsensusToutesObs(true),
286
			'nbPropositionsObsAnnee' => $this->getNbPropositionsObsAnnee(),
288
			'nbPropositionsObsAnnee' => $this->getNbPropositionsObsAnnee(),
287
			'nbPropositionsObsAnneeMPM' => $this->getNbPropositionsObsAnnee(true),
289
			'nbPropositionsObsAnneeMPM' => $this->getNbPropositionsObsAnnee(true),
288
			'nbPropositionsRetenuesObsAnnee' => $this->getNbPropositionsRetenuesObsAnnee(),
290
			'nbPropositionsRetenuesObsAnnee' => $this->getNbPropositionsRetenuesObsAnnee(),
289
			'nbPropositionsRetenuesObsAnneeMPM' => $this->getNbPropositionsRetenuesObsAnnee(true),
291
			'nbPropositionsRetenuesObsAnneeMPM' => $this->getNbPropositionsRetenuesObsAnnee(true),
290
			'nbPropositionsConsensusObsAnnee' => $this->getNbPropositionsConsensusObsAnnee(),
292
			'nbPropositionsConsensusObsAnnee' => $this->getNbPropositionsConsensusObsAnnee(),
291
			'nbPropositionsConsensusObsAnneeMPM' => $this->getNbPropositionsConsensusObsAnnee(true),
293
			'nbPropositionsConsensusObsAnneeMPM' => $this->getNbPropositionsConsensusObsAnnee(true),
292
		);
294
		);
293
	}
295
	}
294
 
296
 
295
	/**
297
	/**
296
	 * Nombre moyen d'actions par jour (commentaire, proposition, vote)
298
	 * Nombre moyen d'actions par jour (commentaire, proposition, vote)
297
	 */
299
	 */
298
	private function getNbMoyenActionsParJour() {
300
	private function getNbMoyenActionsParJour() {
299
		$requete = "SELECT (SELECT (SELECT count(*) FROM del_commentaire";
301
		$requete = "SELECT (SELECT (SELECT count(*) FROM del_commentaire";
300
		if ($this->annee != null) {
302
		if ($this->annee != null) {
301
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
303
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
302
		}
304
		}
303
		$requete .= ") +  (SELECT count(*) FROM del_commentaire_vote";
305
		$requete .= ") +  (SELECT count(*) FROM del_commentaire_vote";
304
		if ($this->annee != null) {
306
		if ($this->annee != null) {
305
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
307
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
306
		}
308
		}
307
		$requete .= ") +  (SELECT count(*) FROM del_commentaire";
309
		$requete .= ") +  (SELECT count(*) FROM del_commentaire";
308
		if ($this->annee != null) {
310
		if ($this->annee != null) {
309
			$requete .= ' WHERE YEAR(date_validation) = ' . $this->annee;
311
			$requete .= ' WHERE YEAR(date_validation) = ' . $this->annee;
310
		}
312
		}
311
		$requete .= ")) / (";
313
		$requete .= ")) / (";
312
		if ($this->annee != null) {
314
		if ($this->annee != null) {
313
			$requete .= "SELECT IF( YEAR(CURDATE()) = " . $this->annee . ", DAYOFYEAR(CURDATE()), 365) ";
315
			$requete .= "SELECT IF( YEAR(CURDATE()) = " . $this->annee . ", DAYOFYEAR(CURDATE()), 365) ";
314
		} else {
316
		} else {
315
			$requete .= "365";
317
			$requete .= "365";
316
		}
318
		}
317
		$requete .= ")";
319
		$requete .= ")";
318
		$resultat = $this->bdd->recupererTous($requete);
320
		$resultat = $this->bdd->recupererTous($requete);
319
		return intval(array_pop($resultat[0]));
321
		return intval(array_pop($resultat[0]));
320
	}
322
	}
321
 
323
 
322
	/**
324
	/**
323
	 * Nombre de proposition faites sur toutes les observations
325
	 * Nombre de proposition faites sur toutes les observations
324
	 */
326
	 */
325
	private function getNbPropositionsToutesObs($mpm=false) {
327
	private function getNbPropositionsToutesObs($mpm=false) {
326
		$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM `del_commentaire` WHERE";
328
		$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM `del_commentaire` WHERE";
327
		if ($this->annee != null) {
329
		if ($this->annee != null) {
328
			$requete .= ' YEAR(date) = ' . $this->annee . " AND";
330
			$requete .= ' YEAR(date) = ' . $this->annee . " AND";
329
		}
331
		}
330
		$requete .= " (`nom_sel_nn` IS NOT NULL OR `nom_sel_nn` != '') AND `proposition_initiale` = 0";
332
		$requete .= " (`nom_sel_nn` IS NOT NULL OR `nom_sel_nn` != '') AND `proposition_initiale` = 0";
331
		if ($mpm) {
333
		if ($mpm) {
332
			$requete = $this->encapsulerMPM($requete);
334
			$requete = $this->encapsulerMPM($requete);
333
		}
335
		}
334
		$resultat = $this->bdd->recupererTous($requete);
336
		$resultat = $this->bdd->recupererTous($requete);
335
		return intval(array_pop($resultat[0]));
337
		return intval(array_pop($resultat[0]));
336
	}
338
	}
337
 
339
 
338
	/**
340
	/**
339
	 * Nombre de proposition retenues faites sur toutes les observations
341
	 * Nombre de proposition retenues faites sur toutes les observations
340
	 */
342
	 */
341
	private function getNbPropositionsRetenuesToutesObs($mpm=false) {
343
	private function getNbPropositionsRetenuesToutesObs($mpm=false) {
342
		$requete = "SELECT COUNT(DISTINCT id_commentaire) AS nb_total FROM del_commentaire WHERE";
344
		$requete = "SELECT COUNT(DISTINCT id_commentaire) AS nb_total FROM del_commentaire WHERE";
343
		if ($this->annee != null) {
345
		if ($this->annee != null) {
344
			$requete .= ' YEAR(date) = ' . $this->annee . " AND";
346
			$requete .= ' YEAR(date) = ' . $this->annee . " AND";
345
		}
347
		}
346
		$requete .= " proposition_retenue = 1";
348
		$requete .= " proposition_retenue = 1";
347
		if ($mpm) {
349
		if ($mpm) {
348
			$requete = $this->encapsulerMPM($requete);
350
			$requete = $this->encapsulerMPM($requete);
349
		}
351
		}
350
		$resultat = $this->bdd->recupererTous($requete);
352
		$resultat = $this->bdd->recupererTous($requete);
351
		return intval(array_pop($resultat[0]));
353
		return intval(array_pop($resultat[0]));
352
	}
354
	}
353
 
355
 
354
	/**
356
	/**
355
	 * Nombre de proposition en consensus faites sur toutes les observations
357
	 * Nombre de proposition en consensus faites sur toutes les observations
356
	 */
358
	 */
357
	private function getNbPropositionsConsensusToutesObs($mpm=false) {
359
	private function getNbPropositionsConsensusToutesObs($mpm=false) {
358
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire dc WHERE"
360
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire dc WHERE"
359
			. " dc.proposition_retenue = 1"
361
			. " dc.proposition_retenue = 1"
360
			. " OR (dc.proposition_initiale = 1" 
362
			. " OR (dc.proposition_initiale = 1" 
361
			. " AND dc.nom_sel_nn != 0"
363
			. " AND dc.nom_sel_nn != 0"
362
			. " AND dc.nom_sel_nn IS NOT NULL" 
364
			. " AND dc.nom_sel_nn IS NOT NULL" 
363
			. " AND dc.id_commentaire IN"
365
			. " AND dc.id_commentaire IN"
364
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv WHERE";
366
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv WHERE";
365
				if ($this->annee != null) {
367
				if ($this->annee != null) {
366
					$requete .= " year(date) < " . $this->annee . " AND";
368
					$requete .= " year(date) < " . $this->annee . " AND";
367
				}
369
				}
368
				$requete .= " ce_proposition NOT IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
370
				$requete .= " ce_proposition NOT IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
369
				if ($this->annee != null) { 
371
				if ($this->annee != null) { 
370
					$requete .= " WHERE year(date) < " . ($this->annee - 1);
372
					$requete .= " WHERE year(date) < " . ($this->annee - 1);
371
				}
373
				}
372
				$requete .= " GROUP BY ce_proposition"
374
				$requete .= " GROUP BY ce_proposition"
373
					. " HAVING SUM(CASE"
375
					. " HAVING SUM(CASE"
374
						. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3" 
376
						. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3" 
375
						. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3" 
377
						. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3" 
376
						. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
378
						. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
377
						. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
379
						. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
378
					. " END) >= 4)"
380
					. " END) >= 4)"
379
				. " GROUP BY ce_proposition"
381
				. " GROUP BY ce_proposition"
380
				. " HAVING SUM(CASE"
382
				. " HAVING SUM(CASE"
381
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
383
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
382
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
384
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
383
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
385
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
384
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
386
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
385
				. " END) >= 4"
387
				. " END) >= 4"
386
			. " )"
388
			. " )"
387
		. " )";
389
		. " )";
388
		if ($mpm) {
390
		if ($mpm) {
389
			$requete = $this->encapsulerMPM($requete);
391
			$requete = $this->encapsulerMPM($requete);
390
		}
392
		}
391
		$resultat = $this->bdd->recupererTous($requete);
393
		$resultat = $this->bdd->recupererTous($requete);
392
		return intval(array_pop($resultat[0]));
394
		return intval(array_pop($resultat[0]));
393
	}
395
	}
394
 
396
 
395
	/**
397
	/**
396
	 * Nombre de proposition faites sur les observations d'une année
398
	 * Nombre de proposition faites sur les observations d'une année
397
	 */
399
	 */
398
	private function getNbPropositionsObsAnnee($mpm=false) {
400
	private function getNbPropositionsObsAnnee($mpm=false) {
399
		if ($this->annee == null) {
401
		if ($this->annee == null) {
400
			return null;
402
			return null;
401
		}
403
		}
402
		$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM `del_commentaire` WHERE YEAR(date) = " . $this->annee . " AND "
404
		$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM `del_commentaire` WHERE YEAR(date) = " . $this->annee . " AND "
403
			. "(`nom_sel_nn` IS NOT NULL OR `nom_sel_nn` != '') AND `proposition_initiale` = 0 AND ce_observation in"
405
			. "(`nom_sel_nn` IS NOT NULL OR `nom_sel_nn` != '') AND `proposition_initiale` = 0 AND ce_observation in"
404
			. " (SELECT `id_observation` FROM `del_observation` WHERE year(date_transmission) = " . $this->annee . ")";
406
			. " (SELECT `id_observation` FROM `del_observation` WHERE year(date_transmission) = " . $this->annee . ")";
405
		if ($mpm) {
407
		if ($mpm) {
406
			$requete = $this->encapsulerMPM($requete);
408
			$requete = $this->encapsulerMPM($requete);
407
		}
409
		}
408
		$resultat = $this->bdd->recupererTous($requete);
410
		$resultat = $this->bdd->recupererTous($requete);
409
		return intval(array_pop($resultat[0]));
411
		return intval(array_pop($resultat[0]));
410
	}
412
	}
411
 
413
 
412
	/**
414
	/**
413
	 * Nombre de proposition retenues faites sur les observations d'une année
415
	 * Nombre de proposition retenues faites sur les observations d'une année
414
	 */
416
	 */
415
	private function getNbPropositionsRetenuesObsAnnee($mpm=false) {
417
	private function getNbPropositionsRetenuesObsAnnee($mpm=false) {
416
		if ($this->annee == null) {
418
		if ($this->annee == null) {
417
			return null;
419
			return null;
418
		}
420
		}
419
		$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM `del_commentaire` WHERE YEAR(date) = " . $this->annee . " AND "
421
		$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM `del_commentaire` WHERE YEAR(date) = " . $this->annee . " AND "
420
			. "`proposition_retenue` = 1 AND ce_observation in (SELECT `id_observation` FROM `del_observation` WHERE year(date_transmission) = " . $this->annee . ")";
422
			. "`proposition_retenue` = 1 AND ce_observation in (SELECT `id_observation` FROM `del_observation` WHERE year(date_transmission) = " . $this->annee . ")";
421
		if ($mpm) {
423
		if ($mpm) {
422
			$requete = $this->encapsulerMPM($requete);
424
			$requete = $this->encapsulerMPM($requete);
423
		}
425
		}
424
		$resultat = $this->bdd->recupererTous($requete);
426
		$resultat = $this->bdd->recupererTous($requete);
425
		return intval(array_pop($resultat[0]));
427
		return intval(array_pop($resultat[0]));
426
	}
428
	}
427
 
429
 
428
	/**
430
	/**
429
	 * Nombre de proposition en consensus faites sur les observations d'une année
431
	 * Nombre de proposition en consensus faites sur les observations d'une année
430
	 */
432
	 */
431
	private function getNbPropositionsConsensusObsAnnee($mpm=false) {
433
	private function getNbPropositionsConsensusObsAnnee($mpm=false) {
432
		if ($this->annee == null) {
434
		if ($this->annee == null) {
433
			return null;
435
			return null;
434
		}
436
		}
435
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire dc WHERE ce_observation in ("
437
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire dc WHERE ce_observation in ("
436
			. " SELECT `id_observation` FROM `del_observation` WHERE year(date_transmission) = " . $this->annee . ") AND ("
438
			. " SELECT `id_observation` FROM `del_observation` WHERE year(date_transmission) = " . $this->annee . ") AND ("
437
			. " dc.proposition_retenue = 1 OR (dc.proposition_initiale = 1"
439
			. " dc.proposition_retenue = 1 OR (dc.proposition_initiale = 1"
438
			. " AND dc.nom_sel_nn != 0 AND dc.nom_sel_nn IS NOT NULL AND dc.id_commentaire IN" 
440
			. " AND dc.nom_sel_nn != 0 AND dc.nom_sel_nn IS NOT NULL AND dc.id_commentaire IN" 
439
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv"
441
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv"
440
				. " WHERE year(date) <= " . $this->annee 
442
				. " WHERE year(date) <= " . $this->annee 
441
				. " GROUP BY ce_proposition"
443
				. " GROUP BY ce_proposition"
442
				. " HAVING SUM(CASE"
444
				. " HAVING SUM(CASE"
443
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
445
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
444
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
446
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
445
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
447
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
446
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
448
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
447
				. " END) >= 4)"
449
				. " END) >= 4)"
448
			. "))";
450
			. "))";
449
		if ($mpm) {
451
		if ($mpm) {
450
			$requete = $this->encapsulerMPM($requete);
452
			$requete = $this->encapsulerMPM($requete);
451
		}
453
		}
452
		$resultat = $this->bdd->recupererTous($requete);
454
		$resultat = $this->bdd->recupererTous($requete);
453
		return intval(array_pop($resultat[0]));
455
		return intval(array_pop($resultat[0]));
454
	}
456
	}
455
 
457
 
456
	/**
458
	/**
457
	 * Nombre de votes
459
	 * Nombre de votes
458
	 */
460
	 */
459
	private function getNbVotes($mpm=false) {
461
	private function getNbVotes($mpm=false) {
460
		$requete = "SELECT COUNT(DISTINCT `id_vote`) AS nb_total FROM del_commentaire_vote";
462
		$requete = "SELECT COUNT(DISTINCT `id_vote`) AS nb_total FROM del_commentaire_vote";
461
		if ($this->annee != null) {
463
		if ($this->annee != null) {
462
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
464
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
463
		}
465
		}
464
		if ($mpm) {
466
		if ($mpm) {
465
			$requete = $this->encapsulerMPM($requete);
467
			$requete = $this->encapsulerMPM($requete);
466
		}
468
		}
467
		$resultat = $this->bdd->recupererTous($requete);
469
		$resultat = $this->bdd->recupererTous($requete);
468
		return intval(array_pop($resultat[0]));
470
		return intval(array_pop($resultat[0]));
469
	}
471
	}
470
 
472
 
471
	/**
473
	/**
472
	 * Nombre de commentaires
474
	 * Nombre de commentaires
473
	 */
475
	 */
474
	private function getNbCommentaires($mpm=false) {
476
	private function getNbCommentaires($mpm=false) {
475
		$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM del_commentaire WHERE `ce_proposition` != '' AND (`nom_sel` IS NULL OR `nom_sel` = '')";
477
		$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM del_commentaire WHERE `ce_proposition` != '' AND (`nom_sel` IS NULL OR `nom_sel` = '')";
476
		if ($this->annee != null) {
478
		if ($this->annee != null) {
477
			$requete .= ' AND YEAR(date) = ' . $this->annee;
479
			$requete .= ' AND YEAR(date) = ' . $this->annee;
478
		}
480
		}
479
		if ($mpm) {
481
		if ($mpm) {
480
			$requete = $this->encapsulerMPM($requete);
482
			$requete = $this->encapsulerMPM($requete);
481
		}
483
		}
482
		$resultat = $this->bdd->recupererTous($requete);
484
		$resultat = $this->bdd->recupererTous($requete);
483
		return intval(array_pop($resultat[0]));
485
		return intval(array_pop($resultat[0]));
484
	}
486
	}
485
 
487
 
486
	/**
488
	/**
487
	 * Statistiques sur les utilisateurs d'Identiplante
489
	 * Statistiques sur les utilisateurs d'Identiplante
488
	 * "AF" = ayant fait un(e)
490
	 * "AF" = ayant fait un(e)
489
	 * "MPM" = moyenne par mois
491
	 * "MPM" = moyenne par mois
490
	 * - Nombre total d'utilisateurs
492
	 * - Nombre total d'utilisateurs
491
	 * - Nombre d'utilisateurs ayant fait une proposition
493
	 * - Nombre d'utilisateurs ayant fait une proposition
492
	 * - Nombre d'utilisateurs identifiés ayant fait un vote
494
	 * - Nombre d'utilisateurs identifiés ayant fait un vote
493
	 * - Nombre d'utilisateurs anonymes ayant fait un vote
495
	 * - Nombre d'utilisateurs anonymes ayant fait un vote
494
	 * - Nombre d'utilisateurs ayant fait un commentaire
496
	 * - Nombre d'utilisateurs ayant fait un commentaire
495
	 * - Nombre d'utilisateurs ayant fait une action
497
	 * - Nombre d'utilisateurs ayant fait une action
496
	 */
498
	 */
497
	private function getUtilisateursIp() {
499
	private function getUtilisateursIp() {
498
		return array(
500
		return array(
499
			'nbUtilisateursTotal' => $this->getNbUtilisateursIpTotal(),
501
			'nbUtilisateursTotal' => $this->getNbUtilisateursIpTotal(),
500
			'nbUtilisateursAFProposition' => $this->getNbUtilisateursAFProposition(),
502
			'nbUtilisateursAFProposition' => $this->getNbUtilisateursAFProposition(),
501
			'nbUtilisateursAFCommentaire' => $this->getNbUtilisateursAFCommentaire(),
503
			'nbUtilisateursAFCommentaire' => $this->getNbUtilisateursAFCommentaire(),
502
			'nbUtilisateursAFVote' => $this->getNbUtilisateursAFVote(),
504
			'nbUtilisateursAFVote' => $this->getNbUtilisateursAFVote(),
503
			'nbUtilisateursAnonymesAFVote' => $this->getNbUtilisateursAnonymesAFVote(),
505
			'nbUtilisateursAnonymesAFVote' => $this->getNbUtilisateursAnonymesAFVote(),
504
			'nbUtilisateursAFAction' => $this->getNbUtilisateursAFAction(),
506
			'nbUtilisateursAFAction' => $this->getNbUtilisateursAFAction(),
505
			'nbUtilisateursAFPropositionMPM' => $this->getNbUtilisateursAFProposition(true),
507
			'nbUtilisateursAFPropositionMPM' => $this->getNbUtilisateursAFProposition(true),
506
			'nbUtilisateursAFCommentaireMPM' => $this->getNbUtilisateursAFCommentaire(true),
508
			'nbUtilisateursAFCommentaireMPM' => $this->getNbUtilisateursAFCommentaire(true),
507
			'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursAFVote(true),
509
			'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursAFVote(true),
508
			'nbUtilisateursAnonymesAFVoteMPM' => $this->getNbUtilisateursAnonymesAFVote(true),
510
			'nbUtilisateursAnonymesAFVoteMPM' => $this->getNbUtilisateursAnonymesAFVote(true),
509
			'nbUtilisateursAFActionMPM' => $this->getNbUtilisateursAFActionMPM()
511
			'nbUtilisateursAFActionMPM' => $this->getNbUtilisateursAFActionMPM()
510
		);
512
		);
511
	}
513
	}
512
 
514
 
513
	/**
515
	/**
514
	 * Nombre total d'utilisateurs d'Identiplante
516
	 * Nombre total d'utilisateurs d'Identiplante
515
	 */
517
	 */
516
	private function getNbUtilisateursIpTotal() {
518
	private function getNbUtilisateursIpTotal() {
517
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total  FROM del_commentaire";
519
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total  FROM del_commentaire";
518
		if ($this->annee != null) {
520
		if ($this->annee != null) {
519
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
521
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
520
		}
522
		}
521
		$resultat = $this->bdd->recupererTous($requete);
523
		$resultat = $this->bdd->recupererTous($requete);
522
		return intval(array_pop($resultat[0]));
524
		return intval(array_pop($resultat[0]));
523
	}
525
	}
524
 
526
 
525
	/**
527
	/**
526
	 * Nombre d'utilisateurs d'Identiplante ayant fait au moins une proposition
528
	 * Nombre d'utilisateurs d'Identiplante ayant fait au moins une proposition
527
	 */
529
	 */
528
	private function getNbUtilisateursAFProposition($mpm=false) {
530
	private function getNbUtilisateursAFProposition($mpm=false) {
529
		$requete = "SELECT COUNT(DISTINCT `utilisateur_courriel`) AS nb_total FROM del_commentaire WHERE `ce_proposition` = '' AND `nom_sel` IS NOT NULL AND `nom_sel` != ''";
531
		$requete = "SELECT COUNT(DISTINCT `utilisateur_courriel`) AS nb_total FROM del_commentaire WHERE `ce_proposition` = '' AND `nom_sel` IS NOT NULL AND `nom_sel` != ''";
530
		if ($this->annee != null) {
532
		if ($this->annee != null) {
531
			$requete .= ' AND YEAR(date) = ' . $this->annee;
533
			$requete .= ' AND YEAR(date) = ' . $this->annee;
532
		}
534
		}
533
		if ($mpm) {
535
		if ($mpm) {
534
			$requete = $this->encapsulerMPM($requete);
536
			$requete = $this->encapsulerMPM($requete);
535
		}
537
		}
536
		$resultat = $this->bdd->recupererTous($requete);
538
		$resultat = $this->bdd->recupererTous($requete);
537
		return intval(array_pop($resultat[0]));
539
		return intval(array_pop($resultat[0]));
538
	}
540
	}
539
 
541
 
540
	/**
542
	/**
541
	 * Nombre d'utilisateurs d'Identiplante ayant fait au moins un commentaire
543
	 * Nombre d'utilisateurs d'Identiplante ayant fait au moins un commentaire
542
	 */
544
	 */
543
	private function getNbUtilisateursAFCommentaire($mpm=false) {
545
	private function getNbUtilisateursAFCommentaire($mpm=false) {
544
		$requete = "SELECT COUNT(DISTINCT `utilisateur_courriel`) AS nb_total FROM del_commentaire WHERE `ce_proposition` != '' AND (`nom_sel` IS NULL OR `nom_sel` = '')";
546
		$requete = "SELECT COUNT(DISTINCT `utilisateur_courriel`) AS nb_total FROM del_commentaire WHERE `ce_proposition` != '' AND (`nom_sel` IS NULL OR `nom_sel` = '')";
545
		if ($this->annee != null) {
547
		if ($this->annee != null) {
546
			$requete .= ' AND YEAR(date) = ' . $this->annee;
548
			$requete .= ' AND YEAR(date) = ' . $this->annee;
547
		}
549
		}
548
		if ($mpm) {
550
		if ($mpm) {
549
			$requete = $this->encapsulerMPM($requete);
551
			$requete = $this->encapsulerMPM($requete);
550
		}
552
		}
551
		$resultat = $this->bdd->recupererTous($requete);
553
		$resultat = $this->bdd->recupererTous($requete);
552
		return intval(array_pop($resultat[0]));
554
		return intval(array_pop($resultat[0]));
553
	}
555
	}
554
 
556
 
555
	/**
557
	/**
556
	 * Nombre d'utilisateurs d'Identiplante identifiés prenant part aux votes
558
	 * Nombre d'utilisateurs d'Identiplante identifiés prenant part aux votes
557
	 */
559
	 */
558
	private function getNbUtilisateursAFVote($mpm=false) {
560
	private function getNbUtilisateursAFVote($mpm=false) {
559
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur REGEXP '^-?[0-9]+$'";
561
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur REGEXP '^-?[0-9]+$'";
560
		if ($this->annee != null) {
562
		if ($this->annee != null) {
561
			$requete .= ' AND YEAR(date) = ' . $this->annee;
563
			$requete .= ' AND YEAR(date) = ' . $this->annee;
562
		}
564
		}
563
		if ($mpm) {
565
		if ($mpm) {
564
			$requete = $this->encapsulerMPM($requete);
566
			$requete = $this->encapsulerMPM($requete);
565
		}
567
		}
566
		$resultat = $this->bdd->recupererTous($requete);
568
		$resultat = $this->bdd->recupererTous($requete);
567
		return intval(array_pop($resultat[0]));
569
		return intval(array_pop($resultat[0]));
568
	}
570
	}
569
 
571
 
570
	/**
572
	/**
571
	 * Nombre d'utilisateurs d'Identiplante anonymes prenant part aux votes
573
	 * Nombre d'utilisateurs d'Identiplante anonymes prenant part aux votes
572
	 */
574
	 */
573
	private function getNbUtilisateursAnonymesAFVote($mpm=false) {
575
	private function getNbUtilisateursAnonymesAFVote($mpm=false) {
574
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur NOT REGEXP '^-?[0-9]+$'";
576
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur NOT REGEXP '^-?[0-9]+$'";
575
		if ($this->annee != null) {
577
		if ($this->annee != null) {
576
			$requete .= ' AND YEAR(date) = ' . $this->annee;
578
			$requete .= ' AND YEAR(date) = ' . $this->annee;
577
		}
579
		}
578
		if ($mpm) {
580
		if ($mpm) {
579
			$requete = $this->encapsulerMPM($requete);
581
			$requete = $this->encapsulerMPM($requete);
580
		}
582
		}
581
		$resultat = $this->bdd->recupererTous($requete);
583
		$resultat = $this->bdd->recupererTous($requete);
582
		return intval(array_pop($resultat[0]));
584
		return intval(array_pop($resultat[0]));
583
	}
585
	}
584
 
586
 
585
	/**
587
	/**
586
	 * Nombre d'utilisateurs d'Identiplante ayant fait une action (commentaire, vote, proposition)
588
	 * Nombre d'utilisateurs d'Identiplante ayant fait une action (commentaire, vote, proposition)
587
	 */
589
	 */
588
	private function getNbUtilisateursAFAction() {
590
	private function getNbUtilisateursAFAction() {
589
		$requete = "SELECT COUNT(*) AS nb_total FROM (SELECT ce_utilisateur FROM del_commentaire_vote";
591
		$requete = "SELECT COUNT(*) AS nb_total FROM (SELECT ce_utilisateur FROM del_commentaire_vote";
590
		if ($this->annee != null) {
592
		if ($this->annee != null) {
591
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
593
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
592
		}
594
		}
593
		$requete .= " UNION SELECT ce_utilisateur FROM del_commentaire";
595
		$requete .= " UNION SELECT ce_utilisateur FROM del_commentaire";
594
		if ($this->annee != null) {
596
		if ($this->annee != null) {
595
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
597
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
596
		}
598
		}
597
		$requete .= " ) AS action";
599
		$requete .= " ) AS action";
598
		$resultat = $this->bdd->recupererTous($requete);
600
		$resultat = $this->bdd->recupererTous($requete);
599
		return intval(array_pop($resultat[0]));
601
		return intval(array_pop($resultat[0]));
600
	}
602
	}
601
 
603
 
602
	/**
604
	/**
603
	 * Moyenne par mois du nombre d'utilisateurs d'Identiplante ayant fait une action
605
	 * Moyenne par mois du nombre d'utilisateurs d'Identiplante ayant fait une action
604
	 * (commentaire, vote, proposition) -> n'est pas encapsulable par encapsulerMPM()
606
	 * (commentaire, vote, proposition) -> n'est pas encapsulable par encapsulerMPM()
605
	 */
607
	 */
606
	private function getNbUtilisateursAFActionMPM() {
608
	private function getNbUtilisateursAFActionMPM() {
607
		$requete = "SELECT avg(nb_total) FROM (SELECT count(*) as nb_total FROM"
609
		$requete = "SELECT avg(nb_total) FROM (SELECT count(*) as nb_total FROM"
608
			. " (SELECT * FROM (SELECT ce_utilisateur, date FROM del_commentaire_vote";
610
			. " (SELECT * FROM (SELECT ce_utilisateur, date FROM del_commentaire_vote";
609
		if ($this->annee != null) {
611
		if ($this->annee != null) {
610
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
612
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
611
		}
613
		}
612
		$requete .= " UNION SELECT ce_utilisateur, date FROM del_commentaire";
614
		$requete .= " UNION SELECT ce_utilisateur, date FROM del_commentaire";
613
		if ($this->annee != null) {
615
		if ($this->annee != null) {
614
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
616
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
615
		}
617
		}
616
		$requete .= " ) AS action GROUP BY ce_utilisateur) AS utildate GROUP BY CONCAT(year(date),month(date))) as truc";
618
		$requete .= " ) AS action GROUP BY ce_utilisateur) AS utildate GROUP BY CONCAT(year(date),month(date))) as truc";
617
		$resultat = $this->bdd->recupererTous($requete);
619
		$resultat = $this->bdd->recupererTous($requete);
618
		return intval(array_pop($resultat[0]));
620
		return intval(array_pop($resultat[0]));
619
	}
621
	}
620
 
622
 
621
	/**
623
	/**
622
	 * Liste des utilisateurs dont les propositions ont été votées positivement
624
	 * Liste des utilisateurs dont les propositions ont été votées positivement
623
	 */
625
	 */
624
	private function getListeMeilleursProposeurs() {
626
	private function getListeMeilleursProposeurs() {
625
		$liste = array();
627
		$liste = array();
626
		$requete = "SELECT * FROM (SELECT utilisateur_courriel, count(prop) as nb_prop"
628
		$requete = "SELECT * FROM (SELECT utilisateur_courriel, count(prop) as nb_prop"
627
			. " FROM (SELECT `ce_proposition` as prop, COUNT(DISTINCT `id_vote`) AS nb_vote FROM del_commentaire_vote where";
629
			. " FROM (SELECT `ce_proposition` as prop, COUNT(DISTINCT `id_vote`) AS nb_vote FROM del_commentaire_vote where";
628
		if ($this->annee != null) {
630
		if ($this->annee != null) {
629
			$requete .= " year(`date`) = " . $this->annee . " AND";
631
			$requete .= " year(`date`) = " . $this->annee . " AND";
630
		}
632
		}
631
		$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`)"
633
		$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`)"
632
			. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop  DESC LIMIT 20";
634
			. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop  DESC LIMIT 20";
633
		$resultat = $this->bdd->recupererTous($requete);
635
		$resultat = $this->bdd->recupererTous($requete);
634
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
636
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
635
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
637
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
636
		// ...
638
		// ...
637
 
639
 
638
		return array(
640
		return array(
639
				'liste' => $resultat
641
				'liste' => $resultat
640
		);
642
		);
641
	}
643
	}
642
 
644
 
643
	/**
645
	/**
644
	 * Liste des utilisateurs ayant fait le plus de votes positifs
646
	 * Liste des utilisateurs ayant fait le plus de votes positifs
645
	 * @TODO et le plus de votes sur des propositions retenues (ou ayant atteint un consensus)
647
	 * @TODO et le plus de votes sur des propositions retenues (ou ayant atteint un consensus)
646
	 */
648
	 */
647
	private function getListeMeilleursVoteurs() {
649
	private function getListeMeilleursVoteurs() {
648
		$liste = array();
650
		$liste = array();
649
		$requete = "SELECT * FROM (SELECT courriel, COUNT(DISTINCT `id_vote`) AS nombre FROM del_commentaire_vote, del_utilisateur where";
651
		$requete = "SELECT * FROM (SELECT courriel, COUNT(DISTINCT `id_vote`) AS nombre FROM del_commentaire_vote, del_utilisateur where";
650
		if ($this->annee != null) {
652
		if ($this->annee != null) {
651
			$requete .= " year(`date`) = " . $this->annee . " AND";
653
			$requete .= " year(`date`) = " . $this->annee . " AND";
652
		}
654
		}
653
		$requete .= " ce_utilisateur = id_utilisateur AND valeur = 1 GROUP BY `ce_utilisateur`) AS utilisateurs WHERE nombre > 100 ORDER BY nombre DESC LIMIT 20";
655
		$requete .= " ce_utilisateur = id_utilisateur AND valeur = 1 GROUP BY `ce_utilisateur`) AS utilisateurs WHERE nombre > 100 ORDER BY nombre DESC LIMIT 20";
654
		$resultat = $this->bdd->recupererTous($requete);
656
		$resultat = $this->bdd->recupererTous($requete);
655
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
657
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
656
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
658
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
657
		// ...
659
		// ...
658
 
660
 
659
		return array(
661
		return array(
660
				'liste' => $resultat
662
				'liste' => $resultat
661
		);
663
		);
662
	}
664
	}
663
 
665
 
664
	/**
666
	/**
665
	 * Liste des utilisateurs ayant fait au moins une proposition par mois toute l'année
667
	 * Liste des utilisateurs ayant fait au moins une proposition par mois toute l'année
666
	 */
668
	 */
667
	private function getListeProposeursReguliers() {
669
	private function getListeProposeursReguliers() {
668
		$liste = array();
670
		$liste = array();
669
		$requete = "SELECT cal.nbmois, SUM(somme) / cal.nbmois as moyenne, ce_utilisateur, utilisateur_courriel FROM (SELECT count(*) as somme,"
671
		$requete = "SELECT cal.nbmois, SUM(somme) / cal.nbmois as moyenne, ce_utilisateur, utilisateur_courriel FROM (SELECT count(*) as somme,"
670
			. " CONCAT(YEAR(date),'-',MONTH(date)) as anneemois, ce_utilisateur, utilisateur_courriel, id_commentaire FROM del_commentaire"
672
			. " CONCAT(YEAR(date),'-',MONTH(date)) as anneemois, ce_utilisateur, utilisateur_courriel, id_commentaire FROM del_commentaire"
671
			. " WHERE ce_proposition = '' AND nom_sel_nn != '' AND nom_sel_nn IS NOT NULL";
673
			. " WHERE ce_proposition = '' AND nom_sel_nn != '' AND nom_sel_nn IS NOT NULL";
672
		if ($this->annee != null) {
674
		if ($this->annee != null) {
673
			$requete .= " AND year(`date`) = " . $this->annee;
675
			$requete .= " AND year(`date`) = " . $this->annee;
674
		}
676
		}
675
		$requete .= "  GROUP BY anneemois, ce_utilisateur, utilisateur_courriel) as ppm, (SELECT count(distinct CONCAT(YEAR(date),'-',MONTH(date))) as nbmois FROM del_commentaire WHERE";
677
		$requete .= "  GROUP BY anneemois, ce_utilisateur, utilisateur_courriel) as ppm, (SELECT count(distinct CONCAT(YEAR(date),'-',MONTH(date))) as nbmois FROM del_commentaire WHERE";
676
		if ($this->annee != null) {
678
		if ($this->annee != null) {
677
			$requete .= " year(`date`) = " . $this->annee . " AND";
679
			$requete .= " year(`date`) = " . $this->annee . " AND";
678
		}
680
		}
679
		$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"
681
		$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"
680
			. " ORDER BY moyenne DESC"; // @ TODO limite ?
682
			. " ORDER BY moyenne DESC"; // @ TODO limite ?
681
		$resultat = $this->bdd->recupererTous($requete);
683
		$resultat = $this->bdd->recupererTous($requete);
682
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
684
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
683
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
685
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
684
		// ...
686
		// ...
685
 
687
 
686
		return array(
688
		return array(
687
			'liste' => $resultat
689
			'liste' => $resultat
688
		);
690
		);
689
	}
691
	}
690
 
692
 
691
	/**
693
	/**
-
 
694
	 * Statistiques sur Sauvages de ma Rue (Sdmr)
-
 
695
	 * "MPM" = moyenne par mois
-
 
696
	 * - Nombre total d'observations sdmr
-
 
697
	 * - Nombre d'observations Sauvages de PACA
-
 
698
	 */
-
 
699
	private function getSdmr() {
-
 
700
		return array(
-
 
701
			'nbObsSdmrTotal' => $this->getNbObsSdmrTotal(),
-
 
702
			'nbObsSdmrTotalMPM' => $this->getNbObsSdmrTotal(true),
-
 
703
			'nbObsSdmrPACA' => $this->getNbObsSdmrPACA(),
-
 
704
			'nbObsSdmrPACAMPM' => $this->getNbObsSdmrPACA(true)
-
 
705
		);
-
 
706
	}
-
 
707
 
-
 
708
	/**
-
 
709
	 * Nombre total d'observations Sauvages de ma Rue
-
 
710
	 */
-
 
711
	private function getNbObsSdmrTotal($mpm=false) {
-
 
712
		$requete = "SELECT COUNT(DISTINCT ce_observation) as nb_total FROM del_commentaire WHERE";
-
 
713
		if ($this->annee != null) {
-
 
714
			$requete .= ' YEAR(date) <= ' . $this->annee . ' AND';
-
 
715
		}
-
 
716
		$requete .= " ce_observation in (SELECT id_observation FROM del_observation WHERE mots_cles_texte like '%sauvages%')";
-
 
717
		if ($mpm) {
-
 
718
			$requete = $this->encapsulerMPM($requete);
-
 
719
		}
-
 
720
		$resultat = $this->bdd->recupererTous($requete);
-
 
721
		return intval(array_pop($resultat[0]));
-
 
722
	}
-
 
723
 
-
 
724
	/**
-
 
725
	 * Nombre total d'observations Sauvages de ma Rue en PACA
-
 
726
	 */
-
 
727
	private function getNbObsSdmrPACA($mpm=false) {
-
 
728
		$requete = "SELECT COUNT(DISTINCT ce_observation) as nb_total FROM del_commentaire WHERE";
-
 
729
		if ($this->annee != null) {
-
 
730
			$requete .= ' YEAR(date) <= ' . $this->annee . ' AND';
-
 
731
		}
-
 
732
		$requete .= " ce_observation in (SELECT id_observation FROM del_observation"
-
 
733
			. " WHERE SUBSTR(ce_zone_geo, 9 , 2) IN (13,04,05,06,83,84) AND mots_cles_texte like '%sauvages%')";
-
 
734
		if ($mpm) {
-
 
735
			$requete = $this->encapsulerMPM($requete);
-
 
736
		}
-
 
737
		$resultat = $this->bdd->recupererTous($requete);
-
 
738
		return intval(array_pop($resultat[0]));
-
 
739
	}
-
 
740
 
-
 
741
	/**
692
	 * @TODO Statistiques sur les images de Pictoflora
742
	 * Statistiques sur les images de Pictoflora
-
 
743
	 * "MPM" = Moyenne par mois
-
 
744
	 *  - Nombre total d'images
693
	 * @REFLEXION aucune idée de ce qu'on met dedans
745
	 *  - Nombre d'images ayant au moins un mot-clé
-
 
746
	 *  - Nombre d'images ayant au moins un vote
-
 
747
	 *  - Nombre d'images de l'année ayant au moins un mot-clé
-
 
748
	 *  - Nombre d'images de l'année ayant au moins un vote
694
	 */
749
	 */
695
	private function getImages() {
750
	private function getImages() {
696
		return array(
751
		return array(
697
			'annee' => $this->annee
752
			'nbImagesTotal' => $this->getNbImagesTotal(),
-
 
753
			'nbImagesTotalMPM' => $this->getNbImagesTotal(true),
-
 
754
			'nbImagesAyantTag' => $this->getNbImagesAyantTag(),
-
 
755
			'nbImagesAyantTagMPM' => $this->getNbImagesAyantTag(true),
-
 
756
			'nbImagesAyantVote' => $this->getNbImagesAyantVote(),
-
 
757
			'nbImagesAyantVoteMPM' => $this->getNbImagesAyantVote(true),
-
 
758
			'nbImagesAnneeAyantTag' => $this->getNbImagesAnneeAyantTag(),
-
 
759
			'nbImagesAnneeAyantTagMPM' => $this->getNbImagesAnneeAyantTag(true),
-
 
760
			'nbImagesAnneeAyantVote' => $this->getNbImagesAnneeAyantVote(),
-
 
761
			'nbImagesAnneeAyantVoteMPM' => $this->getNbImagesAnneeAyantVote(true),
698
		);
762
		);
699
	}
763
	}
700
 
764
 
701
	/**
765
	/**
-
 
766
	 * Nombre total d'images Pictoflora
-
 
767
	 */
-
 
768
	private function getNbImagesTotal($mpm=false) {
-
 
769
		$requete = "SELECT COUNT(*) AS nb_total FROM del_image";
-
 
770
		if ($this->annee != null) {
-
 
771
			$requete .= ' WHERE YEAR(date_transmission) = ' . $this->annee;
-
 
772
		}
-
 
773
		if ($mpm) {
-
 
774
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
-
 
775
		}
-
 
776
		$resultat = $this->bdd->recupererTous($requete);
-
 
777
		return intval(array_pop($resultat[0]));
-
 
778
	}
-
 
779
 
-
 
780
	/**
-
 
781
	 * Nombre total d'images Pictoflora ayant au moins un mot-clé
-
 
782
	 */
-
 
783
	private function getNbImagesAyantTag($mpm=false) {
-
 
784
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_tag";
-
 
785
		if ($this->annee != null) {
-
 
786
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
787
		}
-
 
788
		if ($mpm) {
-
 
789
			$requete = $this->encapsulerMPM($requete);
-
 
790
		}
-
 
791
		$resultat = $this->bdd->recupererTous($requete);
-
 
792
		return intval(array_pop($resultat[0]));
-
 
793
	}
-
 
794
 
-
 
795
	/**
-
 
796
	 * Nombre total d'images Pictoflora ayant au moins un vote
-
 
797
	 */
-
 
798
	private function getNbImagesAyantVote($mpm=false) {
-
 
799
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_vote";
-
 
800
		if ($this->annee != null) {
-
 
801
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
802
		}
-
 
803
		if ($mpm) {
-
 
804
			$requete = $this->encapsulerMPM($requete);
-
 
805
		}
-
 
806
		$resultat = $this->bdd->recupererTous($requete);
-
 
807
		return intval(array_pop($resultat[0]));
-
 
808
	}
-
 
809
 
-
 
810
	/**
-
 
811
	 * Nombre total d'images Pictoflora de l'année ayant au moins un mot-clé
-
 
812
	 */
-
 
813
	private function getNbImagesAnneeAyantTag($mpm=false) {
-
 
814
		if ($this->annee == null) {
-
 
815
			return null;
-
 
816
		}
-
 
817
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_tag WHERE YEAR(date) = " . $this->annee
-
 
818
			. " AND ce_image IN (SELECT id_image FROM del_image WHERE year(date_transmission) = " . $this->annee . ")";
-
 
819
		if ($mpm) {
-
 
820
			$requete = $this->encapsulerMPM($requete);
-
 
821
		}
-
 
822
		$resultat = $this->bdd->recupererTous($requete);
-
 
823
		return intval(array_pop($resultat[0]));
-
 
824
	}
-
 
825
 
-
 
826
	/**
-
 
827
	 * Nombre total d'images Pictoflora de l'année ayant au moins un vote
-
 
828
	 */
-
 
829
	private function getNbImagesAnneeAyantVote($mpm=false) {
-
 
830
		if ($this->annee == null) {
-
 
831
			return null;
-
 
832
		}
-
 
833
		$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_vote WHERE YEAR(date) = " . $this->annee
-
 
834
			. " AND ce_image IN (SELECT id_image FROM del_image WHERE year(date_transmission) = " . $this->annee . ")";
-
 
835
		if ($mpm) {
-
 
836
			$requete = $this->encapsulerMPM($requete);
-
 
837
		}
-
 
838
		$resultat = $this->bdd->recupererTous($requete);
-
 
839
		return intval(array_pop($resultat[0]));
-
 
840
	}
-
 
841
 
-
 
842
	/**
702
	 * @TODO Statistiques sur les mots-clés de Pictoflora
843
	 * Statistiques sur les votes et mots-clés (tags) de Pictoflora
-
 
844
	 * "MPM" = moyenne par mois
-
 
845
	 * - Nombre total de votes
-
 
846
	 * - Nombre total de mots clés
703
	 * @REFLEXION aucune idée de ce qu'on met dedans
847
	 * - Nombre d'images ayant le mot-clé "defiPhoto"
704
	 */
848
	 */
705
	private function getTags() {
849
	private function getTagsVotes() {
706
		return array(
850
		return array(
707
			'annee' => $this->annee
851
			'nbTagsTotal' => $this->getNbTagsTotal(),
-
 
852
			'nbTagsTotalMPM' => $this->getNbTagsTotal(true),
-
 
853
			'nbVotesTotal' => $this->getNbVotesTotal(),
-
 
854
			'nbVotesTotalMPM' => $this->getNbVotesTotal(true),
-
 
855
			// devra être paramétré par une liste de mots-clés
-
 
856
			//'nbImagesTagDP' => $this->getNbImagesTagDP(),
-
 
857
			//'nbImagesTagDPMPM' => $this->getNbImagesTagDP(true)
708
		);
858
		);
709
	}
859
	}
710
 
860
 
711
	/**
861
	/**
-
 
862
	 * Nombre total de mots clés Pictoflora
-
 
863
	 */
-
 
864
	private function getNbTagsTotal($mpm=false) {
-
 
865
		$requete = "SELECT COUNT(*) AS nb_total FROM del_image_tag";
-
 
866
		if ($this->annee != null) {
-
 
867
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
868
		}
-
 
869
		if ($mpm) {
-
 
870
			$requete = $this->encapsulerMPM($requete);
-
 
871
		}
-
 
872
		$resultat = $this->bdd->recupererTous($requete);
-
 
873
		return intval(array_pop($resultat[0]));
-
 
874
	}
-
 
875
 
-
 
876
	/**
-
 
877
	 * Nombre total de votes Pictoflora
-
 
878
	 */
-
 
879
	private function getNbVotesTotal($mpm=false) {
-
 
880
		$requete = "SELECT COUNT(*) AS nb_total FROM del_image_vote";
-
 
881
		if ($this->annee != null) {
-
 
882
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
883
		}
-
 
884
		if ($mpm) {
-
 
885
			$requete = $this->encapsulerMPM($requete);
-
 
886
		}
-
 
887
		$resultat = $this->bdd->recupererTous($requete);
-
 
888
		return intval(array_pop($resultat[0]));
-
 
889
	}
-
 
890
 
-
 
891
	/**
712
	 * @TODO Statistiques sur les utilisateurs de Pictoflora
892
	 * Statistiques sur les utilisateurs de Pictoflora
713
	 * - Nombre total d'utilisateurs
893
	 * "MPM" = Moyenne par mois
-
 
894
	 * "AF" = Ayant fait
714
	 * - Nombre d'utilisateurs réguliers
895
	 * - Nombre d'utilisateurs ayant ajouté un mot-clé
715
	 * - Nombre d'utilisateurs prenant part au taggage ?
896
	 * - Nombre d'utilisateurs ayant voté
716
	 * - Nombre de participants actifs pour le mois, la semaine, l'année
897
	 * - Nombre d'utilisateurs ayant fait une action
717
	 */
898
	 */
718
	private function getUtilisateursPf() {
899
	private function getUtilisateursPf() {
719
		$nbUtilisateursActifs = $this->getNbUtilisateursPfActifs();
-
 
720
		return array(
900
		return array(
721
			'annee' => $this->annee,
-
 
722
			'nbUtilisateursTotal' => $this->getNbUtilisateursPfTotal(),
901
			'nbUtilisateursAFTag' => $this->getNbUtilisateursPfAFTag(),
723
			'nbUtilisateursReguliers' => $this->getNbUtilisateursPfReguliers(),
902
			'nbUtilisateursAFTagMPM' => $this->getNbUtilisateursPfAFTag(true),
724
			'nbUtilisateursTaggant' => $this->getNbUtilisateursPfTaggant(),
903
			'nbUtilisateursAFVote' => $this->getNbUtilisateursPfAFVote(),
725
			'nbUtilisateursActifsAnnee' => $nbUtilisateursActifs['annee'],
904
			'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursPfAFVote(true),
726
			'nbUtilisateursActifsMois' => $nbUtilisateursActifs['mois'],
905
			'nbUtilisateursAFAction' => $this->getNbUtilisateursPfAFAction(),
727
			'nbUtilisateursActifsSemaine' => $nbUtilisateursActifs['semaine']
906
			'nbUtilisateursAFActionMPM' => $this->getNbUtilisateursPfAFActionMPM()
728
		);
907
		);
729
	}
908
	}
730
 
909
 
731
	/**
910
	/**
732
	 * @TODO Nombre total d'utilisateurs de Pictoflora
911
	 * Nombre d'utilisateurs ayant ajouté un mot-clé
733
	 * @REFLEXION est-ce le même nombre que les utilisateurs d'Identiplante ?
-
 
734
	 */
912
	 */
735
	private function getNbUtilisateursPfTotal() {
913
	private function getNbUtilisateursPfAFTag($mpm=false) {
-
 
914
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_image_tag";
-
 
915
		if ($this->annee != null) {
-
 
916
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
917
		}
736
		$requete = "";
918
		if ($mpm) {
-
 
919
			$requete = $this->encapsulerMPM($requete);
-
 
920
		}
737
		$resultat = $this->bdd->recupererTous($requete);
921
		$resultat = $this->bdd->recupererTous($requete);
738
		return intval($resultat[0][0]);
922
		return intval(array_pop($resultat[0]));
739
	}
923
	}
740
 
924
 
741
	/**
925
	/**
742
	 * @TODO Nombre d'utilisateurs réguliers de Pictoflora
926
	 * Nombre d'utilisateurs ayant fait un vote
743
	 * @REFLEXION quelle différence avec getNbUtilisateursPfActifs() ?
-
 
744
	 */
927
	 */
745
	private function getNbUtilisateursPfReguliers() {
928
	private function getNbUtilisateursPfAFVote($mpm=false) {
-
 
929
		$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_image_vote";
-
 
930
		if ($this->annee != null) {
-
 
931
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
932
		}
746
		$requete = "";
933
		if ($mpm) {
-
 
934
			$requete = $this->encapsulerMPM($requete);
-
 
935
		}
747
		$resultat = $this->bdd->recupererTous($requete);
936
		$resultat = $this->bdd->recupererTous($requete);
748
		return intval($resultat[0][0]);
937
		return intval(array_pop($resultat[0]));
749
	}
938
	}
750
 
939
 
751
	/**
940
	/**
752
	 * @TODO Nombre d'utilisateurs de Pictoflora prenant part aux votes
941
	 * Nombre d'utilisateurs ayant fait une action
753
	 */
942
	 */
754
	private function getNbUtilisateursPfTaggant() {
943
	private function getNbUtilisateursPfAFAction() {
-
 
944
		$requete = "SELECT COUNT(*) AS nb_total FROM (SELECT ce_utilisateur FROM del_image_tag";
-
 
945
		if ($this->annee != null) {
-
 
946
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
947
		}
-
 
948
		$requete .= " UNION SELECT ce_utilisateur FROM del_image_vote";
-
 
949
		if ($this->annee != null) {
-
 
950
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
951
		}
755
		$requete = "";
952
		$requete .= ") AS action";
756
		$resultat = $this->bdd->recupererTous($requete);
953
		$resultat = $this->bdd->recupererTous($requete);
757
		return intval($resultat[0][0]);
954
		return intval(array_pop($resultat[0]));
758
	}
955
	}
759
 
956
 
760
	/**
957
	/**
761
	 * @TODO Nombre de participants à Pictoflora actifs (pour le mois, la semaine, l'année)
958
	 * Moyenne par mois du nombre d'utilisateurs ayant fait une action
762
	 * @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer
-
 
763
	 * l'activité du mois et de la semaine (on met la case à null ?)
959
	 * -> n'est pas encapsulable par encapsulerMPM()
764
	 */
960
	 */
765
	private function getNbUtilisateursPfActifs() {
961
	private function getNbUtilisateursPfAFActionMPM() {
-
 
962
		$requete = "SELECT avg(nb_total) FROM (SELECT COUNT(*) AS nb_total FROM (SELECT * FROM (SELECT ce_utilisateur, date FROM del_image_tag";
-
 
963
		if ($this->annee != null) {
-
 
964
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
965
		}
-
 
966
		$requete .= " UNION SELECT ce_utilisateur, date FROM del_image_vote";
766
		$requete = "";
967
		if ($this->annee != null) {
-
 
968
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
969
		}
-
 
970
		$requete .= ") AS action GROUP BY ce_utilisateur) AS utildate GROUP BY CONCAT(year(date),month(date))) as truc";
767
		$resultat = $this->bdd->recupererTous($requete);
971
		$resultat = $this->bdd->recupererTous($requete);
768
		return intval($resultat[0][0]);
972
		return intval(array_pop($resultat[0]));
769
	}
973
	}
770
 
974
 
771
	/**
975
	/**
772
	 * @TODO Liste des mots-clés les plus fréquents
976
	 * Liste des mots-clés les plus fréquents
773
	 */
977
	 */
774
	private function getListeMeilleursTags() {
978
	private function getListeMeilleursTags() {
775
		$liste = array();
979
		$liste = array();
-
 
980
		$requete = "SELECT count(*) as occurrences, tag FROM del_image_tag";
776
		$requete = "";
981
		if ($this->annee != null) {
-
 
982
			$requete .= " WHERE YEAR(date) = " . $this->annee;
-
 
983
		}
-
 
984
		$requete .= " GROUP BY tag ORDER BY occurrences DESC LIMIT 20";
777
		$resultat = $this->bdd->recupererTous($requete);
985
		$resultat = $this->bdd->recupererTous($requete);
778
		// Formater liste
-
 
779
		// ...
-
 
780
 
-
 
781
		return array(
986
		return array(
782
			'annee' => $this->annee,
987
				'liste' => $resultat
783
			'listeMeilleursTags' => $liste
-
 
784
		);
988
		);
785
	}
989
	}
786
 
990
 
787
	/**
991
	/**
788
	 * @TODO Liste des utilisateurs ayant ajouté le plus de mots-clés
992
	 * @TODO Liste des utilisateurs ayant ajouté le plus de mots-clés
789
	 */
993
	 */
790
	private function getListeMeilleursTagueurs() {
994
	private function getListeMeilleursTagueurs() {
791
		$liste = array();
995
		$resultat = array();
-
 
996
		/*$requete = "SELECT * FROM (SELECT utilisateur_courriel, count(prop) as nb_prop"
-
 
997
			. " FROM (SELECT `ce_proposition` as prop, COUNT(DISTINCT `id_vote`) AS nb_vote FROM del_commentaire_vote where";
792
		$requete = "";
998
		if ($this->annee != null) {
-
 
999
			$requete .= " year(`date`) = " . $this->annee . " AND";
-
 
1000
		}
-
 
1001
		$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`)"
-
 
1002
			. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop  DESC LIMIT 20";
793
		$resultat = $this->bdd->recupererTous($requete);
1003
		$resultat = $this->bdd->recupererTous($requete);
794
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir service CEL stats)
1004
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
795
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
1005
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
796
		// ...
1006
		// ...
-
 
1007
		 */
797
 
1008
 
798
		return array(
1009
		return array(
799
			'annee' => $this->annee,
-
 
800
			'listeMeilleursTagueurs' => $liste
1010
				'liste' => $resultat
801
		);
1011
		);
802
	}
1012
	}
803
 
1013
 
804
	/**
1014
	/**
805
	 * Encapsule une reqûete de comptage dans un autre morceau de requête
1015
	 * Encapsule une reqûete de comptage dans un autre morceau de requête
806
	 * afin de calculer la moyenne par mois
1016
	 * afin de calculer la moyenne par mois
807
	 * @param string $requete count() qui doit renvoyer une colonne 'nb_total'
1017
	 * @param string $requete count() qui doit renvoyer une colonne 'nb_total'
808
	 */
1018
	 */
809
	protected function encapsulerMPM($requete, $colonne="date") {
1019
	protected function encapsulerMPM($requete, $colonne="date") {
810
		$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM ("
1020
		$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM ("
811
			. $requete
1021
			. $requete
812
			. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre";
1022
			. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre";
813
		return $requeteEncapsulee;
1023
		return $requeteEncapsulee;
814
	}
1024
	}
815
 
-
 
816
	/* ---------------- OBSOLETE -------------
-
 
817
	
-
 
818
	// Retourne le nombre moyen d'observations non identifiées envoyées par mois, pour l'année $annee
-
 
819
	private function getMoyenneObsSansNomParMois() {
-
 
820
	$sqlTableTmp = "SELECT COUNT(*) AS compte, ".
-
 
821
	"	CONCAT(YEAR(date_transmission),'-',MONTH(date_transmission)) AS anneemois ".
-
 
822
	"FROM del_observation ".
-
 
823
	"WHERE (mots_cles_texte LIKE '%aDeterminer%' ".
-
 
824
	"OR certitude = 'aDeterminer' ".
-
 
825
	"OR certitude = 'douteux' ".
-
 
826
	// Obs n'ayant pas de nom_sel_nn (détermination non choisie parmi le référentiel)
-
 
827
	"OR nom_sel_nn IS NULL ".
-
 
828
	"OR nom_sel_nn = 0 ".
-
 
829
	"OR id_observation IN ({$this->getSqlObsSansNom()}) ".
-
 
830
	') '.
-
 
831
	(($this->annee !== null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : '').
-
 
832
	'GROUP BY anneemois '.
-
 
833
	'ORDER BY anneemois DESC ';
-
 
834
	
-
 
835
	$requete = "SELECT AVG(parMois.compte) AS moyenne FROM ($sqlTableTmp) AS parMois ".
-
 
836
	' -- '.__FILE__.' : '.__LINE__;
-
 
837
	$resultat = $this->bdd->recupererTous($requete);
-
 
838
	return intval($resultat[0]['moyenne']);
-
 
839
	}
-
 
840
	
-
 
841
	private function getSqlObsSansNom() {
-
 
842
	$sqlObsSansNom = "SELECT DISTINCT ce_observation ".
-
 
843
	"FROM del_commentaire ".
-
 
844
	"WHERE proposition_initiale = 1 ".
-
 
845
	"AND (nom_sel_nn IS NULL OR nom_sel_nn = '') ";
-
 
846
	return $sqlObsSansNom;
-
 
847
	}
-
 
848
	
-
 
849
	// Retourne la moyenne par mois sur l'année en cours, des propositions marquées comme "retenues"
-
 
850
	// dont le dernier vote est dans l'année considérée (comptées en groupant par mois du dernier vote)
-
 
851
	private function getMoyenneObsIdentifieesParMois() {
-
 
852
	// Compte et date du dernier vote des propositions marquées comme "retenues"
-
 
853
	$sqlTableTmp1 = "SELECT COUNT(*), MAX(dcv.date) AS maxdate ".
-
 
854
	"FROM del_commentaire AS dc ".
-
 
855
	"	LEFT JOIN del_commentaire_vote dcv ON dcv.ce_proposition = dc.id_commentaire ".
-
 
856
	" WHERE proposition_retenue = 1 ".
-
 
857
	" GROUP BY dc.id_commentaire ".
-
 
858
	(($this->annee !== null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '');
-
 
859
	
-
 
860
	$sqlTableTmp2 = 'SELECT COUNT(*) AS valideesparmois, '.
-
 
861
	"	CONCAT(YEAR(maxdate), '-', MONTH(maxdate)) AS anneemois ".
-
 
862
	"FROM ($sqlTableTmp1) AS temp ".
-
 
863
	"GROUP BY anneemois ";
-
 
864
	
-
 
865
	$requete = "SELECT AVG(valideesparmois) AS moyenne FROM ($sqlTableTmp2) AS temp2 ".
-
 
866
	' -- '.__FILE__.' : '.__LINE__;
-
 
867
	
-
 
868
	$resultat = $this->bdd->recupererTous($requete);
-
 
869
	return intval($resultat[0]['moyenne']);
-
 
870
	}
-
 
871
	
-
 
872
	// Version améliorée mais non optimale (prend en compte les consensus non validés)
-
 
873
	// @TODO on devrait croiser les IDS pour ne pas prendre en compte les obs validées ou en
-
 
874
	// 		consensus, mais qui datent des années précédentes
-
 
875
	// @ACHTUNG mache pas, dépasse les 100% (voir Wiki)
-
 
876
	private function getPourcentageObsIdentifieesFinAnneePlus() {
-
 
877
	// Obs ayant atteint un consensus cette année
-
 
878
	$requete = "SELECT COUNT(*) AS nombre ".
-
 
879
	"FROM (SELECT id_observation, id_commentaire, id_vote, nbvotes ".
-
 
880
	"FROM (SELECT do.id_observation, dc.id_commentaire, dcv.id_vote, COUNT(dcv.id_vote) AS nbvotes ".
-
 
881
	"FROM del_commentaire AS dc ".
-
 
882
	"	LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ".
-
 
883
	"	LEFT JOIN del_commentaire_vote AS dcv ON (dc.id_commentaire = dcv.ce_proposition) ".
-
 
884
	"AND dcv.valeur = 1 ".
-
 
885
	"AND dc.proposition_retenue = 0 ".
-
 
886
	"GROUP BY dc.id_commentaire ".
-
 
887
	(($this->annee != null) ? " HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '').
-
 
888
	" ) AS temp ".
-
 
889
	"GROUP BY id_observation ".
-
 
890
	") AS temp2 ".
-
 
891
	' -- '.__FILE__.' : '.__LINE__;
-
 
892
	$obsEnConsensus = $this->bdd->recupererTous($requete);
-
 
893
	$oc = intval($obsEnConsensus[0]['nombre']);
-
 
894
	
-
 
895
	// Obs ayant une "proposition retenue" cette année
-
 
896
	$requete = "SELECT COUNT(*) AS nombre ".
-
 
897
	"FROM (SELECT COUNT(DISTINCT id_observation), MAX(dcv.date) AS maxdate ".
-
 
898
	"FROM del_commentaire AS dc ".
-
 
899
	"	LEFT JOIN del_commentaire_vote AS dcv ON (dcv.ce_proposition = dc.id_commentaire) ".
-
 
900
	"	LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ".
-
 
901
	"WHERE proposition_retenue = 1 ".
-
 
902
	(($this->annee != null) ? "AND YEAR(do.date_transmission) = '{$this->annee}' " : '').
-
 
903
	"GROUP BY dc.id_commentaire ".
-
 
904
	(($this->annee != null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '').
-
 
905
	") as temp ".
-
 
906
	' -- '.__FILE__.' : '.__LINE__;
-
 
907
	$nbObsValidees = $this->bdd->recupererTous($requete);
-
 
908
	$ov = intval($nbObsValidees[0]['nombre']);
-
 
909
	
-
 
910
	// Nombre d'obs sans nom soumises cette année
-
 
911
	$requete = "SELECT COUNT(*) AS nombre ".
-
 
912
	"FROM del_observation ".
-
 
913
	"WHERE (mots_cles_texte LIKE '%aDeterminer%' ".
-
 
914
	"OR certitude = 'aDeterminer' ".
-
 
915
	"OR certitude = 'douteux' ".
-
 
916
	"OR nom_sel_nn IS NULL ".
-
 
917
	"OR nom_sel_nn = 0 ".
-
 
918
	"OR id_observation IN ({$this->getSqlObsSansNom()})".
-
 
919
	') '.
-
 
920
	(($this->annee != null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : '').
-
 
921
	' -- '.__FILE__.' : '.__LINE__;
-
 
922
	$nbObsSansNom = $this->bdd->recupererTous($requete);
-
 
923
	$osn = intval($nbObsSansNom[0]['nombre']);
-
 
924
	
-
 
925
	return array(
-
 
926
	'observationsEnConsensus' => $oc,
-
 
927
	'observationsValidees' => $ov,
-
 
928
	'observationsSansNom' => $osn,
-
 
929
	'pourcentage' => ($osn == 0 ? 0 : round(((($oc + $ov) / $osn) * 100), 2))
-
 
930
	);
-
 
931
	}
-
 
932
	
-
 
933
	private function getPourcentageObsIdentifieesFinAnnee() {
-
 
934
	$requete = "SELECT ( ".
-
 
935
	"SELECT COUNT(*) FROM ( ".
-
 
936
	"SELECT COUNT(DISTINCT id_observation), MAX(dcv.date) AS maxdate ".
-
 
937
	"FROM del_commentaire AS dc ".
-
 
938
	"	LEFT JOIN del_commentaire_vote AS dcv ON (dcv.ce_proposition = dc.id_commentaire) ".
-
 
939
	"	LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ".
-
 
940
	"WHERE proposition_retenue = 1 ".
-
 
941
	(($this->annee != null) ? "AND YEAR(do.date_transmission) = '{$this->annee}' " : '').
-
 
942
	"GROUP BY dc.id_commentaire ".
-
 
943
	(($this->annee != null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '').
-
 
944
	") AS temp)".
-
 
945
	" / ".
-
 
946
	"(SELECT COUNT(*) ".
-
 
947
	"FROM del_observation ".
-
 
948
	"WHERE (mots_cles_texte LIKE '%aDeterminer%' ".
-
 
949
	"OR certitude = 'aDeterminer' ".
-
 
950
	"OR certitude = 'douteux' ".
-
 
951
	"OR nom_sel_nn IS NULL ".
-
 
952
	"OR nom_sel_nn = 0 ".
-
 
953
	"OR id_observation IN ( ".
-
 
954
	"SELECT DISTINCT ce_observation ".
-
 
955
	"FROM del_commentaire ".
-
 
956
	"WHERE proposition_initiale = 1 ".
-
 
957
	"AND (nom_sel_nn IS NULL OR nom_sel_nn = '') ".
-
 
958
	") ".
-
 
959
	") ".
-
 
960
	(($this->annee != null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : '').
-
 
961
	") * 100 AS pourcentage ".
-
 
962
	' -- '.__FILE__.' : '.__LINE__;
-
 
963
	$resultat = $this->bdd->recupererTous($requete);
-
 
964
	return floatval($resultat[0]['pourcentage']);
-
 
965
	}
-
 
966
	
-
 
967
	// Retourne la moyenne sur l'année du nombre d'actions (commentaire ou vote) par jour
-
 
968
	private function getMoyenneActionsParJour() {
-
 
969
	// nombre de commentaires sur l'année
-
 
970
	$sqlNbreCommentaires = 'SELECT COUNT(*) FROM del_commentaire '.
-
 
971
	($this->annee != null ? "WHERE YEAR(date) = '{$this->annee}' " : '');
-
 
972
	
-
 
973
	// nombre de votes sur l'année
-
 
974
	$sqlNbreVotes = 'SELECT COUNT(*) FROM del_commentaire_vote '.
-
 
975
	($this->annee != null ? "WHERE YEAR(date) = '{$this->annee}' " : '');
-
 
976
	
-
 
977
	// nombre de jours écoulés dans l'année*
-
 
978
	$sqlNbreJours = "SELECT 365 * (YEAR(now()) - MIN(YEAR(date)) + 1) FROM del_commentaire_vote WHERE YEAR(date) != 0 ";
-
 
979
	if ($this->annee != null) {
-
 
980
	$sqlNbreJours = "SELECT IF(YEAR(CURDATE()) = '{$this->annee}', DAYOFYEAR(CURDATE()), 365) ";
-
 
981
	}
-
 
982
	
-
 
983
	// nombre d'actions / nombre de jours
-
 
984
	$requete = "SELECT ((($sqlNbreCommentaires) + ($sqlNbreVotes)) / ($sqlNbreJours)) AS moyenne ".
-
 
985
	' -- '.__FILE__.' : '.__LINE__;
-
 
986
	
-
 
987
	$resultat = $this->bdd->recupererTous($requete);
-
 
988
	return intval($resultat[0]['moyenne']);
-
 
989
	}
-
 
990
	
-
 
991
	// Retourne le nombre et la liste des personnes ayant sur l'année une moyenne de participation par mois >= 1
-
 
992
	private function getParticipants() {
-
 
993
	// Faire la moyenne par utilisateur et par mois
-
 
994
	$requete = "SELECT cal.nbmois, SUM(somme) / cal.nbmois as moyenne, ce_utilisateur, utilisateur_courriel ".
-
 
995
	"FROM ".
-
 
996
	// Compter le nombre de participations pour chaque utilisateur à chaque mois de cette année
-
 
997
	"(SELECT COUNT(*) as somme, CONCAT(YEAR(date),'-',MONTH(date)) AS anneemois, ".
-
 
998
	"ce_utilisateur, utilisateur_courriel, id_commentaire ".
-
 
999
	"FROM del_commentaire ".
-
 
1000
	"WHERE ce_proposition = '' ".
-
 
1001
	"AND nom_sel_nn != '' ".
-
 
1002
	"AND nom_sel_nn IS NOT NULL ".
-
 
1003
	(($this->annee != null) ? " AND YEAR(date) = '{$this->annee}' " : '').
-
 
1004
	"GROUP BY anneemois, ce_utilisateur, utilisateur_courriel) AS ppm, ".
-
 
1005
	// Trouver le nombre de mois différents lors desquels les utilisateurs ont participé, cette année
-
 
1006
	// Pour l'année en cours par ex, retournera 2 si on est en février (voire un au début du mois).
-
 
1007
	"(SELECT COUNT(distinct CONCAT(YEAR(date),'-',MONTH(date))) AS nbmois ".
-
 
1008
	"FROM del_commentaire ".
-
 
1009
	"WHERE ce_proposition = '' ".
-
 
1010
	(($this->annee != null) ? "AND YEAR(date) = '{$this->annee}' " : '').
-
 
1011
	"AND nom_sel_nn != '' ".
-
 
1012
	"AND nom_sel_nn IS NOT NULL) AS cal ".
-
 
1013
	"GROUP BY ce_utilisateur, utilisateur_courriel ".
-
 
1014
	"HAVING SUM(somme) / cal.nbmois >= 1 ".
-
 
1015
	"ORDER BY moyenne ".
-
 
1016
	' -- '.__FILE__.' : '.__LINE__;
-
 
1017
	
-
 
1018
	$resultat = $this->bdd->recupererTous($requete);
-
 
1019
	$cpt = count($resultat);
-
 
1020
	$retour = array(
-
 
1021
	'nombre' => intval($cpt),
-
 
1022
	'donnees' => $resultat
-
 
1023
	);
-
 
1024
	return $retour;
-
 
1025
	}
-
 
1026
	
-
 
1027
	--------------- FIN OBSOLETE -------------- */
-
 
1028
}
1025
}
1029
1026