Subversion Repositories eFlore/Applications.del

Rev

Rev 2013 | Rev 2017 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2013 Rev 2016
Line 87... Line 87...
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
	}
Line -... Line 91...
-
 
91
 
-
 
92
	/**
-
 
93
	 * Statistiques sur les observations
91
 
94
	 * "MPM" = moyenne par mois
92
	// retourne toutes les stats pour l'année spécifiée
95
	 * "TC" = tag à déterminer ou certitude incertaine
93
	private function getTout() {
96
	 * - Nombre d'observations au total
94
		$obsIdentifieesFinAnneePlus = $this->getPourcentageObsIdentifieesFinAnneePlus();
97
	 * - Nombre d'obs sans identification (ou tag ou certitude)
-
 
98
	 * - Nombre d'obs sans identification
-
 
99
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine
-
 
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
95
		$participants = $this->getParticipants();
102
	 * - Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
-
 
103
	 */
96
 
104
	private function getObservations() {
97
		return array(
105
		return array(
-
 
106
			'nbObsTotal' => $this->getNbObsTotal(),
98
			'annee' => $this->annee,
107
			'nbObsTotalMPM' => $this->getNbObsTotal(true),
99
			'moyenneObsSansNomParMois' => $this->getMoyenneObsSansNomParMois(),
108
			'nbObsSansIdentOuTC' => $this->getNbObsSansIdentOuTC(),
-
 
109
			'nbObsSansIdentOuTCMPM' => $this->getNbObsSansIdentOuTC(true),
100
			'moyenneObsIdentifieesParMois' => $this->getMoyenneObsIdentifieesParMois(),
110
			'nbObsSansIdent' => $this->getNbObsSansIdent(),
-
 
111
			'nbObsSansIdentMPM' => $this->getNbObsSansIdent(true),
-
 
112
			'nbObsTC' => $this->getNbObsTC(),
-
 
113
			'nbObsTCMPM' => $this->getNbObsTC(true),
101
			'pourcentageObsIdentifieesEnFinDAnnee' => $this->getPourcentageObsIdentifieesFinAnnee(),
114
			'nbObsTCRetenue' => $this->getNbObsTCRetenue(),
102
			'pourcentageObsIdentifieesEnFinDAnneePlusPlus' => $obsIdentifieesFinAnneePlus['pourcentage'],
115
			//'nbObsTCRetenueMPM' => $this->getNbObsTCRetenue(true),
-
 
116
			'nbObsTCConsensus' => $this->getNbObsTCConsensus(),
-
 
117
			'nbObsTCConsensusMPM' => $this->getNbObsTCConsensus(true),
103
			'moyenneActionsParJour' => $this->getMoyenneActionsParJour(),
118
			'nbObsTCConsensusNonValide' => $this->getNbObsTCConsensusNonValide(),
104
			'personnesEnvoyantUnePropositionParMois' => $participants['nombre']
119
			'nbObsTCConsensusNonValideMPM' => $this->getNbObsTCConsensusNonValide(true),
105
		);
120
		);
Line 106... Line 121...
106
	}
121
	}
107
 
122
 
108
	// proxy pour le widget de stats
-
 
109
	private function getObservations() {
123
	/**
110
		return $this->getTout();
-
 
111
	}
-
 
112
 
124
	 * Nombre d'observations au total
113
	// Retourne le nombre moyen d'observations non identifiées envoyées par mois, pour l'année $annee
125
	 */
114
	private function getMoyenneObsSansNomParMois() {
-
 
115
		$sqlTableTmp = "SELECT COUNT(*) AS compte, ".
-
 
116
			"	CONCAT(YEAR(date_transmission),'-',MONTH(date_transmission)) AS anneemois ".
-
 
117
			"FROM del_observation ".
-
 
118
			"WHERE (mots_cles_texte LIKE '%aDeterminer%' ".
-
 
119
				"OR certitude = 'aDeterminer' ".
-
 
120
				"OR certitude = 'douteux' ".
126
	private function getNbObsTotal($mpm=false) {
121
				// Obs n'ayant pas de nom_sel_nn (détermination non choisie parmi le référentiel)
-
 
122
				"OR nom_sel_nn IS NULL ".
127
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation";
123
				"OR nom_sel_nn = 0 ".
128
		if ($this->annee != null) {
124
				"OR id_observation IN ({$this->getSqlObsSansNom()}) ".
-
 
125
			') '.
129
			$requete .= ' WHERE YEAR(date_transmission) = ' . $this->annee;
126
			(($this->annee !== null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : '').
130
		}
127
			'GROUP BY anneemois '.
131
		if ($mpm) {
128
			'ORDER BY anneemois DESC ';
-
 
129
 
-
 
130
		$requete = "SELECT AVG(parMois.compte) AS moyenne FROM ($sqlTableTmp) AS parMois ".
132
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
131
			' -- '.__FILE__.' : '.__LINE__;
133
		}
132
		$resultat = $this->bdd->recupererTous($requete);
134
		$resultat = $this->bdd->recupererTous($requete);
Line -... Line 135...
-
 
135
		return intval(array_pop($resultat[0]));
-
 
136
	}
-
 
137
 
133
		return intval($resultat[0]['moyenne']);
138
	/**
134
	}
139
	 * Nombre d'obs sans identification (ou tag ou certitude)
135
 
140
	 */
136
	private function getSqlObsSansNom() {
141
	private function getNbObsSansIdentOuTC($mpm=false) {
-
 
142
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
-
 
143
		if ($this->annee != null) {
-
 
144
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
-
 
145
		}
-
 
146
		$requete .= " (`mots_cles_texte` LIKE '%determiner%' OR `nom_sel_nn` = '' OR certitude IN ('aDeterminer','douteux'))";
137
		$sqlObsSansNom = "SELECT DISTINCT ce_observation ".
147
		if ($mpm) {
138
			"FROM del_commentaire ".
148
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
139
			"WHERE proposition_initiale = 1 ".
149
		}
Line -... Line 150...
-
 
150
		$resultat = $this->bdd->recupererTous($requete);
140
			"AND (nom_sel_nn IS NULL OR nom_sel_nn = '') ";
151
		return intval(array_pop($resultat[0]));
141
		return $sqlObsSansNom;
-
 
-
 
152
	}
142
	}
153
 
143
 
-
 
144
	// Retourne la moyenne par mois sur l'année en cours, des propositions marquées comme "retenues"
154
	/**
145
	// dont le dernier vote est dans l'année considérée (comptées en groupant par mois du dernier vote)
155
	 * Nombre d'obs sans identification
146
	private function getMoyenneObsIdentifieesParMois() {
-
 
147
		// Compte et date du dernier vote des propositions marquées comme "retenues"
-
 
148
		$sqlTableTmp1 = "SELECT COUNT(*), MAX(dcv.date) AS maxdate ".
-
 
149
			"FROM del_commentaire AS dc ".
156
	 */
150
			"	LEFT JOIN del_commentaire_vote dcv ON dcv.ce_proposition = dc.id_commentaire ".
157
	private function getNbObsSansIdent($mpm=false) {
151
			" WHERE proposition_retenue = 1 ".
-
 
152
			" GROUP BY dc.id_commentaire ".
-
 
153
			(($this->annee !== null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '');
158
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
154
 
159
		if ($this->annee != null) {
155
		$sqlTableTmp2 = 'SELECT COUNT(*) AS valideesparmois, '.
-
 
156
			"	CONCAT(YEAR(maxdate), '-', MONTH(maxdate)) AS anneemois ".
160
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
157
			"FROM ($sqlTableTmp1) AS temp ".
-
 
158
			"GROUP BY anneemois ";
161
		}
159
 
162
		$requete .= " nom_sel_nn = ''";
160
		$requete = "SELECT AVG(valideesparmois) AS moyenne FROM ($sqlTableTmp2) AS temp2 ".
163
		if ($mpm) {
161
			' -- '.__FILE__.' : '.__LINE__;
164
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
Line 162... Line -...
162
 
-
 
163
		$resultat = $this->bdd->recupererTous($requete);
-
 
164
		return intval($resultat[0]['moyenne']);
-
 
165
	}
-
 
166
 
-
 
167
	// Version améliorée mais non optimale (prend en compte les consensus non validés)
-
 
168
	// @TODO on devrait croiser les IDS pour ne pas prendre en compte les obs validées ou en
-
 
169
	// 		consensus, mais qui datent des années précédentes
-
 
170
	// @ACHTUNG mache pas, dépasse les 100% (voir Wiki)
-
 
171
	private function getPourcentageObsIdentifieesFinAnneePlus() {
-
 
172
		// Obs ayant atteint un consensus cette année
-
 
173
		$requete = "SELECT COUNT(*) AS nombre ".
-
 
174
			"FROM (SELECT id_observation, id_commentaire, id_vote, nbvotes ".
-
 
175
			"FROM (SELECT do.id_observation, dc.id_commentaire, dcv.id_vote, COUNT(dcv.id_vote) AS nbvotes ".
-
 
176
			"FROM del_commentaire AS dc ".
-
 
177
			"	LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ".
-
 
178
			"	LEFT JOIN del_commentaire_vote AS dcv ON (dc.id_commentaire = dcv.ce_proposition) ".
-
 
179
			"AND dcv.valeur = 1 ".
-
 
180
			"AND dc.proposition_retenue = 0 ".
165
		}
181
			"GROUP BY dc.id_commentaire ".
-
 
182
			(($this->annee != null) ? " HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '').
166
		$resultat = $this->bdd->recupererTous($requete);
183
			" ) AS temp ".
-
 
184
			"GROUP BY id_observation ".
167
		return intval(array_pop($resultat[0]));
185
			") AS temp2 ".
-
 
186
			' -- '.__FILE__.' : '.__LINE__;
168
	}
187
		$obsEnConsensus = $this->bdd->recupererTous($requete);
-
 
188
		$oc = intval($obsEnConsensus[0]['nombre']);
-
 
189
 
-
 
190
		// Obs ayant une "proposition retenue" cette année
169
 
191
		$requete = "SELECT COUNT(*) AS nombre ".
170
	/**
192
			"FROM (SELECT COUNT(DISTINCT id_observation), MAX(dcv.date) AS maxdate ".
171
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine
193
			"FROM del_commentaire AS dc ".
-
 
194
			"	LEFT JOIN del_commentaire_vote AS dcv ON (dcv.ce_proposition = dc.id_commentaire) ".
-
 
195
			"	LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ".
-
 
196
			"WHERE proposition_retenue = 1 ".
-
 
197
			(($this->annee != null) ? "AND YEAR(do.date_transmission) = '{$this->annee}' " : '').
-
 
198
			"GROUP BY dc.id_commentaire ".
-
 
199
			(($this->annee != null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '').
172
	 */
200
			") as temp ".
-
 
201
			' -- '.__FILE__.' : '.__LINE__;
-
 
202
		$nbObsValidees = $this->bdd->recupererTous($requete);
-
 
203
		$ov = intval($nbObsValidees[0]['nombre']);
173
	private function getNbObsTC($mpm=false) {
204
 
-
 
205
		// Nombre d'obs sans nom soumises cette année
-
 
206
		$requete = "SELECT COUNT(*) AS nombre ".
-
 
207
			"FROM del_observation ".
174
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
208
			"WHERE (mots_cles_texte LIKE '%aDeterminer%' ".
175
		if ($this->annee != null) {
209
			"OR certitude = 'aDeterminer' ".
176
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
210
			"OR certitude = 'douteux' ".
-
 
211
			"OR nom_sel_nn IS NULL ".
-
 
212
			"OR nom_sel_nn = 0 ".
177
		}
213
			"OR id_observation IN ({$this->getSqlObsSansNom()})".
178
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux'))";
214
			') '.
-
 
215
			(($this->annee != null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : '').
-
 
216
			' -- '.__FILE__.' : '.__LINE__;
-
 
217
		$nbObsSansNom = $this->bdd->recupererTous($requete);
-
 
218
		$osn = intval($nbObsSansNom[0]['nombre']);
-
 
219
 
-
 
220
		return array(
-
 
221
			'observationsEnConsensus' => $oc,
179
		if ($mpm) {
Line -... Line 180...
-
 
180
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
222
			'observationsValidees' => $ov,
181
		}
223
			'observationsSansNom' => $osn,
182
		$resultat = $this->bdd->recupererTous($requete);
224
			'pourcentage' => ($osn == 0 ? 0 : round(((($oc + $ov) / $osn) * 100), 2))
-
 
225
		);
183
		return intval(array_pop($resultat[0]));
226
	}
-
 
227
 
-
 
228
	private function getPourcentageObsIdentifieesFinAnnee() {
184
	}
229
		$requete = "SELECT ( ".
185
 
230
			"SELECT COUNT(*) FROM ( ".
186
	/**
231
				"SELECT COUNT(DISTINCT id_observation), MAX(dcv.date) AS maxdate ".
-
 
232
				"FROM del_commentaire AS dc ".
-
 
233
				"	LEFT JOIN del_commentaire_vote AS dcv ON (dcv.ce_proposition = dc.id_commentaire) ".
-
 
234
				"	LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ".
187
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et retenue
235
				"WHERE proposition_retenue = 1 ".
-
 
236
				(($this->annee != null) ? "AND YEAR(do.date_transmission) = '{$this->annee}' " : '').
-
 
237
				"GROUP BY dc.id_commentaire ".
-
 
238
				(($this->annee != null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : '').
188
	 */
239
			") AS temp)".
-
 
240
			" / ".
-
 
241
			"(SELECT COUNT(*) ".
189
	private function getNbObsTCRetenue($mpm=false) {
242
			"FROM del_observation ".
-
 
243
			"WHERE (mots_cles_texte LIKE '%aDeterminer%' ".
-
 
244
			"OR certitude = 'aDeterminer' ".
-
 
245
			"OR certitude = 'douteux' ".
-
 
246
			"OR nom_sel_nn IS NULL ".
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";
247
			"OR nom_sel_nn = 0 ".
-
 
248
				"OR id_observation IN ( ".
191
		if ($this->annee != null) {
249
				"SELECT DISTINCT ce_observation ".
-
 
250
				"FROM del_commentaire ".
-
 
251
				"WHERE proposition_initiale = 1 ".
-
 
252
				"AND (nom_sel_nn IS NULL OR nom_sel_nn = '') ".
192
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
253
				") ".
193
		}
254
			") ".
194
		$requete .= " (certitude IN ('aDeterminer','douteux')))";
Line 255... Line -...
255
			(($this->annee != null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : '').
-
 
256
		") * 100 AS pourcentage ".
-
 
257
		' -- '.__FILE__.' : '.__LINE__;
-
 
258
		$resultat = $this->bdd->recupererTous($requete);
-
 
259
		return floatval($resultat[0]['pourcentage']);
-
 
260
	}
195
		if ($mpm) {
261
 
-
 
262
	// Retourne la moyenne sur l'année du nombre d'actions (commentaire ou vote) par jour
196
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
263
	private function getMoyenneActionsParJour() {
-
 
264
		// nombre de commentaires sur l'année
197
		}
265
		$sqlNbreCommentaires = 'SELECT COUNT(*) FROM del_commentaire '.
198
		$resultat = $this->bdd->recupererTous($requete);
266
			($this->annee != null ? "WHERE YEAR(date) = '{$this->annee}' " : '');
199
		return intval(array_pop($resultat[0]));
267
 
200
	}
268
		// nombre de votes sur l'année
201
 
-
 
202
	/**
-
 
203
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus
-
 
204
	 */
-
 
205
	private function getNbObsTCConsensus($mpm=false) {
-
 
206
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
-
 
207
		if ($this->annee != null) {
-
 
208
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
-
 
209
		}
-
 
210
		$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" 
-
 
212
			. " AND nom_sel_nn != 0"
-
 
213
			. " AND nom_sel_nn IS NOT NULL"
-
 
214
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
-
 
215
		if ($this->annee != null) {
-
 
216
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
-
 
217
		}
-
 
218
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
269
		$sqlNbreVotes = 'SELECT COUNT(*) FROM del_commentaire_vote '.
219
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
270
			($this->annee != null ? "WHERE YEAR(date) = '{$this->annee}' " : '');
-
 
271
 
-
 
272
		// nombre de jours écoulés dans l'année*
-
 
273
		$sqlNbreJours = "SELECT 365 * (YEAR(now()) - MIN(YEAR(date)) + 1) FROM del_commentaire_vote WHERE YEAR(date) != 0 ";
-
 
274
		if ($this->annee != null) {
-
 
275
			$sqlNbreJours = "SELECT IF(YEAR(CURDATE()) = '{$this->annee}', DAYOFYEAR(CURDATE()), 365) ";
220
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
276
		}
221
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
277
 
222
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
Line -... Line 223...
-
 
223
		. " END) >= 4))";
278
		// nombre d'actions / nombre de jours
224
		if ($mpm) {
-
 
225
			$requete = $this->encapsulerMPM($requete, 'date_transmission');
279
		$requete = "SELECT ((($sqlNbreCommentaires) + ($sqlNbreVotes)) / ($sqlNbreJours)) AS moyenne ".
226
		}
-
 
227
		$resultat = $this->bdd->recupererTous($requete);
280
			' -- '.__FILE__.' : '.__LINE__;
228
		return intval(array_pop($resultat[0]));
281
 
229
	}
282
		$resultat = $this->bdd->recupererTous($requete);
230
 
283
		return intval($resultat[0]['moyenne']);
231
	/**
284
	}
232
	 * Nombre d'obs avec tag à déterminer ou certitude incertaine et avec consensus mais non validées
285
 
-
 
286
	// Retourne le nombre et la liste des personnes ayant sur l'année une moyenne de participation par mois >= 1
-
 
287
	private function getParticipants() {
-
 
288
		// Faire la moyenne par utilisateur et par mois
233
	 */
289
		$requete = "SELECT cal.nbmois, SUM(somme) / cal.nbmois as moyenne, ce_utilisateur, utilisateur_courriel ".
234
	private function getNbObsTCConsensusNonValide($mpm=false) {
290
			"FROM ".
235
		$requete = "SELECT COUNT(id_observation) AS nb_total FROM del_observation WHERE";
291
				// Compter le nombre de participations pour chaque utilisateur à chaque mois de cette année
236
		if ($this->annee != null) {
292
				"(SELECT COUNT(*) as somme, CONCAT(YEAR(date),'-',MONTH(date)) AS anneemois, ".
-
 
293
				"ce_utilisateur, utilisateur_courriel, id_commentaire ".
-
 
294
				"FROM del_commentaire ".
237
			$requete .= ' YEAR(date_transmission) = ' . $this->annee . " AND";
295
				"WHERE ce_proposition = '' ".
238
		}
296
				"AND nom_sel_nn != '' ".
239
		$requete .= " (mots_cles_texte LIKE '%determiner%' OR certitude IN ('aDeterminer','douteux')) AND id_observation IN"
297
				"AND nom_sel_nn IS NOT NULL ".
240
			. " (SELECT ce_observation FROM del_commentaire WHERE proposition_initiale = 1 AND proposition_retenue = 0" 
298
				(($this->annee != null) ? " AND YEAR(date) = '{$this->annee}' " : '').
241
			. " AND nom_sel_nn != 0"
299
				"GROUP BY anneemois, ce_utilisateur, utilisateur_courriel) AS ppm, ".
242
			. " AND nom_sel_nn IS NOT NULL"
300
			// Trouver le nombre de mois différents lors desquels les utilisateurs ont participé, cette année
243
			. " AND id_commentaire IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
301
			// Pour l'année en cours par ex, retournera 2 si on est en février (voire un au début du mois).
244
		if ($this->annee != null) {
302
				"(SELECT COUNT(distinct CONCAT(YEAR(date),'-',MONTH(date))) AS nbmois ".
245
			$requete .= ' WHERE YEAR(date) <= ' . $this->annee;
303
				"FROM del_commentaire ".
246
		}
304
				"WHERE ce_proposition = '' ".
247
		$requete .= " GROUP BY ce_proposition HAVING SUM(CASE"
305
				(($this->annee != null) ? "AND YEAR(date) = '{$this->annee}' " : '').
248
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN 3"
306
				"AND nom_sel_nn != '' ".
249
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' != 0 THEN -3"
307
				"AND nom_sel_nn IS NOT NULL) AS cal ".
-
 
308
			"GROUP BY ce_utilisateur, utilisateur_courriel ".
-
 
309
			"HAVING SUM(somme) / cal.nbmois >= 1 ".
-
 
310
			"ORDER BY moyenne ".
-
 
311
			' -- '.__FILE__.' : '.__LINE__;
-
 
312
 
250
			. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
Line 313... Line 251...
313
		$resultat = $this->bdd->recupererTous($requete);
251
			. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
314
		$cpt = count($resultat);
252
		. " END) >= 4))";
315
		$retour = array(
253
		if ($mpm) {
Line 341... Line 279...
341
			'nbCommentairesMPM' => $this->getNbCommentaires(true),
279
			'nbCommentairesMPM' => $this->getNbCommentaires(true),
342
			'nbPropositionsToutesObs' => $this->getNbPropositionsToutesObs(),
280
			'nbPropositionsToutesObs' => $this->getNbPropositionsToutesObs(),
343
			'nbPropositionsToutesObsMPM' => $this->getNbPropositionsToutesObs(true),
281
			'nbPropositionsToutesObsMPM' => $this->getNbPropositionsToutesObs(true),
344
			'nbPropositionsRetenuesToutesObs' => $this->getNbPropositionsRetenuesToutesObs(),
282
			'nbPropositionsRetenuesToutesObs' => $this->getNbPropositionsRetenuesToutesObs(),
345
			'nbPropositionsRetenuesToutesObsMPM' => $this->getNbPropositionsRetenuesToutesObs(true),
283
			'nbPropositionsRetenuesToutesObsMPM' => $this->getNbPropositionsRetenuesToutesObs(true),
346
			'nbPropositionsConsensusToutesObs' => null, //$this->getNbPropositionsConsensusToutesObs(),
284
			'nbPropositionsConsensusToutesObs' => $this->getNbPropositionsConsensusToutesObs(),
347
			'nbPropositionsConsensusToutesObsMPM' => null, //$this->getNbPropositionsConsensusToutesObs(true),
285
			'nbPropositionsConsensusToutesObsMPM' => $this->getNbPropositionsConsensusToutesObs(true),
348
			'nbPropositionsObsAnnee' => $this->getNbPropositionsObsAnnee(),
286
			'nbPropositionsObsAnnee' => $this->getNbPropositionsObsAnnee(),
349
			'nbPropositionsObsAnneeMPM' => $this->getNbPropositionsObsAnnee(true),
287
			'nbPropositionsObsAnneeMPM' => $this->getNbPropositionsObsAnnee(true),
350
			'nbPropositionsRetenuesObsAnnee' => $this->getNbPropositionsRetenuesObsAnnee(),
288
			'nbPropositionsRetenuesObsAnnee' => $this->getNbPropositionsRetenuesObsAnnee(),
351
			'nbPropositionsRetenuesObsAnneeMPM' => $this->getNbPropositionsRetenuesObsAnnee(true),
289
			'nbPropositionsRetenuesObsAnneeMPM' => $this->getNbPropositionsRetenuesObsAnnee(true),
352
			'nbPropositionsConsensusObsAnnee' => null, //$this->getNbPropositionsConsensusObsAnnee(),
290
			'nbPropositionsConsensusObsAnnee' => $this->getNbPropositionsConsensusObsAnnee(),
353
			'nbPropositionsConsensusObsAnneeMPM' => null //$this->getNbPropositionsConsensusObsAnnee(true),
291
			'nbPropositionsConsensusObsAnneeMPM' => $this->getNbPropositionsConsensusObsAnnee(true),
354
		);
292
		);
355
	}
293
	}
Line 356... Line 294...
356
 
294
 
357
	/**
295
	/**
Line 412... Line 350...
412
		$resultat = $this->bdd->recupererTous($requete);
350
		$resultat = $this->bdd->recupererTous($requete);
413
		return intval(array_pop($resultat[0]));
351
		return intval(array_pop($resultat[0]));
414
	}
352
	}
Line 415... Line 353...
415
 
353
 
416
	/**
354
	/**
417
	 * @TODO Nombre de proposition en consensus faites sur toutes les observations
355
	 * Nombre de proposition en consensus faites sur toutes les observations
418
	 */
356
	 */
-
 
357
	private function getNbPropositionsConsensusToutesObs($mpm=false) {
-
 
358
		$requete = "SELECT COUNT(DISTINCT ce_observation) AS nb_total FROM del_commentaire dc WHERE"
-
 
359
			. " dc.proposition_retenue = 1"
-
 
360
			. " OR (dc.proposition_initiale = 1" 
-
 
361
			. " AND dc.nom_sel_nn != 0"
-
 
362
			. " AND dc.nom_sel_nn IS NOT NULL" 
-
 
363
			. " AND dc.id_commentaire IN"
-
 
364
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv WHERE";
-
 
365
				if ($this->annee != null) {
-
 
366
					$requete .= " year(date) < " . $this->annee . " AND";
-
 
367
				}
-
 
368
				$requete .= " ce_proposition NOT IN (SELECT ce_proposition FROM del_commentaire_vote dcv";
-
 
369
				if ($this->annee != null) { 
-
 
370
					$requete .= " WHERE year(date) < " . ($this->annee - 1);
-
 
371
				}
-
 
372
				$requete .= " GROUP BY ce_proposition"
-
 
373
					. " HAVING SUM(CASE"
-
 
374
						. " 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" 
-
 
376
						. " 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"
-
 
378
					. " END) >= 4)"
-
 
379
				. " GROUP BY ce_proposition"
-
 
380
				. " HAVING SUM(CASE"
-
 
381
					. " 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"
-
 
383
					. " WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN 1"
419
	private function getNbPropositionsConsensusToutesObs($mpm=false) {
384
					. " WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP '^-?[0-9]+$' = 0 THEN -1"
-
 
385
				. " END) >= 4"
-
 
386
			. " )"
-
 
387
		. " )";
-
 
388
		if ($mpm) {
-
 
389
			$requete = $this->encapsulerMPM($requete);
420
		$requete = "";
390
		}
421
		$resultat = $this->bdd->recupererTous($requete);
391
		$resultat = $this->bdd->recupererTous($requete);
422
		return intval($resultat[0][0]);
392
		return intval(array_pop($resultat[0]));
Line 423... Line 393...
423
	}
393
	}
424
 
394
 
425
	/**
395
	/**
Line 454... Line 424...
454
		$resultat = $this->bdd->recupererTous($requete);
424
		$resultat = $this->bdd->recupererTous($requete);
455
		return intval(array_pop($resultat[0]));
425
		return intval(array_pop($resultat[0]));
456
	}
426
	}
Line 457... Line 427...
457
 
427
 
458
	/**
428
	/**
459
	 * @TODO Nombre de proposition en consensus faites sur les observations d'une année
429
	 * Nombre de proposition en consensus faites sur les observations d'une année
460
	 */
430
	 */
-
 
431
	private function getNbPropositionsConsensusObsAnnee($mpm=false) {
461
	private function getNbPropositionsConsensusObsAnnee($mpm=false) {
432
		if ($this->annee == null) {
-
 
433
			return null;
-
 
434
		}
-
 
435
		$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 ("
-
 
437
			. " 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" 
-
 
439
				. " (SELECT ce_proposition FROM del_commentaire_vote dcv"
-
 
440
				. " WHERE year(date) <= " . $this->annee 
-
 
441
				. " GROUP BY ce_proposition"
-
 
442
				. " HAVING SUM(CASE"
-
 
443
					. " 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"
-
 
445
					. " 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"
-
 
447
				. " END) >= 4)"
-
 
448
			. "))";
-
 
449
		if ($mpm) {
-
 
450
			$requete = $this->encapsulerMPM($requete);
462
		$requete = "";
451
		}
463
		$resultat = $this->bdd->recupererTous($requete);
452
		$resultat = $this->bdd->recupererTous($requete);
464
		return intval($resultat[0][0]);
453
		return intval(array_pop($resultat[0]));
Line 465... Line 454...
465
	}
454
	}
466
 
455
 
467
	/**
456
	/**
Line 498... Line 487...
498
	 * Statistiques sur les utilisateurs d'Identiplante
487
	 * Statistiques sur les utilisateurs d'Identiplante
499
	 * "AF" = ayant fait un(e)
488
	 * "AF" = ayant fait un(e)
500
	 * "MPM" = moyenne par mois
489
	 * "MPM" = moyenne par mois
501
	 * - Nombre total d'utilisateurs
490
	 * - Nombre total d'utilisateurs
502
	 * - Nombre d'utilisateurs ayant fait une proposition
491
	 * - Nombre d'utilisateurs ayant fait une proposition
-
 
492
	 * - Nombre d'utilisateurs identifiés ayant fait un vote
503
	 * - Nombre d'utilisateurs ayant fait un vote
493
	 * - Nombre d'utilisateurs anonymes ayant fait un vote
504
	 * - Nombre d'utilisateurs ayant fait un commentaire
494
	 * - Nombre d'utilisateurs ayant fait un commentaire
-
 
495
	 * - Nombre d'utilisateurs ayant fait une action
505
	 */
496
	 */
506
	private function getUtilisateursIp() {
497
	private function getUtilisateursIp() {
507
		return array(
498
		return array(
508
			'nbUtilisateursTotal' => $this->getNbUtilisateursIpTotal(),
499
			'nbUtilisateursTotal' => $this->getNbUtilisateursIpTotal(),
509
			'nbUtilisateursAFProposition' => $this->getNbUtilisateursAFProposition(),
500
			'nbUtilisateursAFProposition' => $this->getNbUtilisateursAFProposition(),
510
			'nbUtilisateursAFCommentaire' => $this->getNbUtilisateursAFCommentaire(),
501
			'nbUtilisateursAFCommentaire' => $this->getNbUtilisateursAFCommentaire(),
511
			'nbUtilisateursAFVote' => $this->getNbUtilisateursAFVote(),
502
			'nbUtilisateursAFVote' => $this->getNbUtilisateursAFVote(),
512
			'nbUtilisateursAnonymesAFVote' => $this->getNbUtilisateursAnonymesAFVote(),
503
			'nbUtilisateursAnonymesAFVote' => $this->getNbUtilisateursAnonymesAFVote(),
-
 
504
			'nbUtilisateursAFAction' => $this->getNbUtilisateursAFAction(),
513
			'nbUtilisateursAFPropositionMPM' => $this->getNbUtilisateursAFProposition(true),
505
			'nbUtilisateursAFPropositionMPM' => $this->getNbUtilisateursAFProposition(true),
514
			'nbUtilisateursAFCommentaireMPM' => $this->getNbUtilisateursAFCommentaire(true),
506
			'nbUtilisateursAFCommentaireMPM' => $this->getNbUtilisateursAFCommentaire(true),
515
			'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursAFVote(true),
507
			'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursAFVote(true),
516
			'nbUtilisateursAnonymesAFVoteMPM' => $this->getNbUtilisateursAnonymesAFVote(true),
508
			'nbUtilisateursAnonymesAFVoteMPM' => $this->getNbUtilisateursAnonymesAFVote(true),
-
 
509
			'nbUtilisateursAFActionMPM' => $this->getNbUtilisateursAFActionMPM()
517
		);
510
		);
518
	}
511
	}
Line 519... Line 512...
519
 
512
 
520
	/**
513
	/**
Line 588... Line 581...
588
		$resultat = $this->bdd->recupererTous($requete);
581
		$resultat = $this->bdd->recupererTous($requete);
589
		return intval(array_pop($resultat[0]));
582
		return intval(array_pop($resultat[0]));
590
	}
583
	}
Line 591... Line 584...
591
 
584
 
-
 
585
	/**
-
 
586
	 * Nombre d'utilisateurs d'Identiplante ayant fait une action (commentaire, vote, proposition)
-
 
587
	 */
-
 
588
	private function getNbUtilisateursAFAction() {
-
 
589
		$requete = "SELECT COUNT(*) AS nb_total FROM (SELECT ce_utilisateur FROM del_commentaire_vote";
-
 
590
		if ($this->annee != null) {
-
 
591
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
592
		}
-
 
593
		$requete .= " UNION SELECT ce_utilisateur FROM del_commentaire";
-
 
594
		if ($this->annee != null) {
-
 
595
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
596
		}
-
 
597
		$requete .= " ) AS action";
-
 
598
		$resultat = $this->bdd->recupererTous($requete);
-
 
599
		return intval(array_pop($resultat[0]));
-
 
600
	}
-
 
601
 
-
 
602
	/**
-
 
603
	 * Moyenne par mois du nombre d'utilisateurs d'Identiplante ayant fait une action
-
 
604
	 * (commentaire, vote, proposition) -> n'est pas encapsulable par encapsulerMPM()
-
 
605
	 */
-
 
606
	private function getNbUtilisateursAFActionMPM() {
-
 
607
		$requete = "SELECT avg(nb_total) FROM (SELECT count(*) as nb_total FROM"
-
 
608
			. " (SELECT * FROM (SELECT ce_utilisateur, date FROM del_commentaire_vote";
-
 
609
		if ($this->annee != null) {
-
 
610
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
611
		}
-
 
612
		$requete .= " UNION SELECT ce_utilisateur, date FROM del_commentaire";
-
 
613
		if ($this->annee != null) {
-
 
614
			$requete .= ' WHERE YEAR(date) = ' . $this->annee;
-
 
615
		}
-
 
616
		$requete .= " ) AS action GROUP BY ce_utilisateur) AS utildate GROUP BY CONCAT(year(date),month(date))) as truc";
-
 
617
		$resultat = $this->bdd->recupererTous($requete);
-
 
618
		return intval(array_pop($resultat[0]));
-
 
619
	}
-
 
620
 
592
	/**
621
	/**
593
	 * Liste des utilisateurs dont les propositions ont été votées positivement
622
	 * Liste des utilisateurs dont les propositions ont été votées positivement
594
	 */
623
	 */
595
	private function getListeMeilleursProposeurs() {
624
	private function getListeMeilleursProposeurs() {
596
		$liste = array();
625
		$liste = array();
Line 775... Line 804...
775
	/**
804
	/**
776
	 * Encapsule une reqûete de comptage dans un autre morceau de requête
805
	 * Encapsule une reqûete de comptage dans un autre morceau de requête
777
	 * afin de calculer la moyenne par mois
806
	 * afin de calculer la moyenne par mois
778
	 * @param string $requete count() qui doit renvoyer une colonne 'nb_total'
807
	 * @param string $requete count() qui doit renvoyer une colonne 'nb_total'
779
	 */
808
	 */
780
	protected function encapsulerMPM($requete) {
809
	protected function encapsulerMPM($requete, $colonne="date") {
781
		$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM ("
810
		$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM ("
782
			. $requete
811
			. $requete
783
			. " GROUP BY CONCAT(year(date),month(date)) ) AS nombre";
812
			. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre";
784
		return $requeteEncapsulee;
813
		return $requeteEncapsulee;
785
	}
814
	}
-
 
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 -------------- */
786
}
1028
}
787
1029