Subversion Repositories eFlore/Applications.cel

Rev

Rev 2504 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
694 jpm 1
<?php
2462 jpm 2
// declare(encoding='UTF-8');
694 jpm 3
/**
696 jpm 4
 * Service fournissant des statistiques de l'application CEL au format texte (JSON).
694 jpm 5
 * Encodage en entrée : utf8
6
 * Encodage en sortie : utf8
7
 *
8
 * Cas d'utilisation :
696 jpm 9
 * /CelStatistiqueTxt/TypeDeStat : retourne les statistiques demandées
694 jpm 10
 * Paramêtres :
696 jpm 11
 * utilisateur=courriel : retourne les statistiques d'un utilisateur donné.
694 jpm 12
 *
2462 jpm 13
 * @internal   Mininum PHP version : 5.2
14
 * @category   CEL
15
 * @package    Services
16
 * @subpackage Statistiques
17
 * @version    0.1
18
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
19
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
20
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
21
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
22
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
23
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
694 jpm 24
 */
25
class CelStatistiqueTxt extends Cel {
2143 jpm 26
 
694 jpm 27
	/**
28
	 * Méthode appelée avec une requête de type GET.
29
	 */
696 jpm 30
	public function getElement($ressources) {
694 jpm 31
		$graph = null;
32
		$serveur = '';
33
 
696 jpm 34
		if (isset($ressources[0])) {
35
			$this->analyserParametresUrl();
36
			$stat_demande = array_shift($ressources);
694 jpm 37
			$methode = 'get'.$stat_demande;
38
			if (method_exists($this, $methode)) {
702 jpm 39
				$this->ressources = $ressources;
696 jpm 40
				$stats = $this->$methode($ressources);
694 jpm 41
			} else {
42
				$this->messages[] = "Ce type de statistiques '$stat_demande' n'est pas disponible.";
43
			}
44
		} else {
696 jpm 45
			$this->messages[] = "La ressource du service CEL StatistiqueTxt doit indiquer le type de statistique. Ex. : .../CelStatistiqueTxt/Nombres";
694 jpm 46
		}
47
 
48
		if (!is_null($stats)) {
49
			$this->envoyerJson($stats);
50
		}
51
	}
2143 jpm 52
 
696 jpm 53
	private function analyserParametresUrl() {
1765 raphael 54
		$this->parametres['utilisateur'] = isset($_GET['utilisateur']) ? Cel::db()->quote($this->verifierSecuriteParametreUrl($_GET['utilisateur'])) : null;
55
		$this->parametres['num_taxon'] = isset($_GET['num_taxon']) ? Cel::db()->quote($this->verifierSecuriteParametreUrl($_GET['num_taxon'])) : null;
56
		$this->parametres['taxon'] = isset($_GET['taxon']) ? Cel::db()->quote($this->verifierSecuriteParametreUrl($_GET['taxon'].'%')) : null;
707 jpm 57
		$this->parametres['tag'] = isset($_GET['tag']) ? $this->verifierSecuriteParametreUrl($_GET['tag']) : null;
702 jpm 58
		$this->parametres['start'] = isset($_GET['start']) ? $this->verifierSecuriteParametreUrl($_GET['start']) : null;
59
		$this->parametres['limit'] = isset($_GET['limit']) ? $this->verifierSecuriteParametreUrl($_GET['limit']) : null;
696 jpm 60
	}
2143 jpm 61
 
702 jpm 62
	private function getListeUtilisateursNbrePhotos() {
707 jpm 63
		$liste = array();
2143 jpm 64
 
702 jpm 65
		$requete = $this->construireRequeteListeUtilisateurNbrePhoto();
707 jpm 66
		if ($requete != null) {
2143 jpm 67
			$resultats = Cel::db()->requeter($requete);
707 jpm 68
			if ($resultats != false) {
69
				foreach ($resultats as $resultat) {
1359 aurelien 70
					$liste[$resultat['courriel_utilisateur']] = $resultat['nbre'];
707 jpm 71
				}
702 jpm 72
			}
73
		}
74
		return $liste;
75
	}
2143 jpm 76
 
702 jpm 77
	private function construireRequeteListeUtilisateurNbrePhoto() {
1359 aurelien 78
		$select = 	'SELECT co.courriel_utilisateur, COUNT(DISTINCT ci.id_image) AS nbre ';
2357 mathias 79
		$from = 	'FROM cel_obs AS co '.
2446 jpm 80
			'	LEFT JOIN cel_images AS ci ON (co.id_observation = ci.ce_observation) ';
81
		$where = 	'WHERE co.transmission = 1 ';
1359 aurelien 82
		$groupBy = 	'GROUP BY co.courriel_utilisateur ';
702 jpm 83
		$orderBy = 	'ORDER BY nbre DESC ';
84
		$limitSql =	'LIMIT 0,150 ';
2143 jpm 85
 
707 jpm 86
		$zero_images = false;
702 jpm 87
		if (count($this->parametres) != 0) {
88
			extract($this->parametres);
2143 jpm 89
 
702 jpm 90
			$filtres = array();
2143 jpm 91
 
702 jpm 92
			if (isset($utilisateur)) {
1359 aurelien 93
				$filtres[] = "co.courriel_utilisateur = $utilisateur ";
702 jpm 94
			}
95
			if (isset($num_taxon)) {
1359 aurelien 96
				$filtres[] = "nt = $num_taxon ";
702 jpm 97
			}
98
			if (isset($taxon)) {
99
				$filtres[] = "nom_ret LIKE $taxon ";
100
			}
707 jpm 101
			if (isset($tag)) {
2357 mathias 102
				$tagP = Cel::db()->quote("%$tag%");
103
				$filtres[] = "ci.mots_cles_texte LIKE $tagP ";
707 jpm 104
			}
702 jpm 105
			$where .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
2143 jpm 106
 
702 jpm 107
			if (isset($start)) {
108
				$limitSql = str_replace('0,', "$start,", $limitSql);
109
			}
110
			if (isset($limit)) {
111
				$limitSql = str_replace('150', $limit, $limitSql);
112
			}
113
		}
2357 mathias 114
		$requete = $select.$from.$where.$groupBy.$orderBy.$limitSql;
702 jpm 115
		return $requete;
116
	}
2143 jpm 117
 
702 jpm 118
	private function getListeTaxonsNbrePhotos() {
119
		$requete = $this->construireRequeteListeTaxonNbrePhoto();
1359 aurelien 120
 
2143 jpm 121
		$resultats = Cel::db()->requeter($requete);
702 jpm 122
		$liste = array();
123
		if ($resultats != false) {
124
			foreach ($resultats as $resultat) {
125
				$liste[$resultat['nom_ret']] = $resultat['nbre'];
126
			}
127
		}
128
		return $liste;
129
	}
2143 jpm 130
 
702 jpm 131
	private function construireRequeteListeTaxonNbrePhoto() {
1359 aurelien 132
		$select = 	'SELECT nom_ret, COUNT(DISTINCT ci.id_image) AS nbre ';
133
		$from = 	'FROM cel_obs co '.
2446 jpm 134
			'	LEFT JOIN cel_images ci ON (co.id_observation = ci.ce_observation) ';
135
		$where = 	'WHERE co.transmission = 1 '.
136
			"	AND nom_ret != '' ";
702 jpm 137
		$groupBy = 	'GROUP BY nom_ret ';
138
		$orderBy = 	'ORDER BY nbre DESC ';
139
		$limitSql =	'LIMIT 0,150 ';
2143 jpm 140
 
141
 
702 jpm 142
		if (count($this->parametres) != 0) {
143
			extract($this->parametres);
2143 jpm 144
 
702 jpm 145
			$filtres = array();
2143 jpm 146
 
702 jpm 147
			if (isset($utilisateur)) {
1359 aurelien 148
				$filtres[] = "co.courriel_utilisateur = $utilisateur ";
702 jpm 149
			}
150
			if (isset($num_taxon)) {
1359 aurelien 151
				$filtres[] = "nt = $num_taxon ";
702 jpm 152
			}
153
			if (isset($taxon)) {
154
				$filtres[] = "nom_ret LIKE $taxon ";
155
			}
156
			$where .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
2143 jpm 157
 
702 jpm 158
			if (isset($start)) {
159
				$limitSql = str_replace('0,', "$start,", $limitSql);
160
			}
161
			if (isset($limit)) {
162
				$limitSql = str_replace('150', $limit, $limitSql);
163
			}
164
		}
2143 jpm 165
 
702 jpm 166
		$requete = $select.$from.$where.$groupBy.$orderBy.$limitSql;
1359 aurelien 167
 
702 jpm 168
		return $requete;
169
	}
2143 jpm 170
 
702 jpm 171
	private function getNombres() {
696 jpm 172
 
2143 jpm 173
		$requete = $this->construireRequeteNbreObs();
174
		$info['observations'] = (int) Cel::db()->requeterValeurUnique($requete);
175
 
176
		$requete = $this->construireRequeteNbreObsPubliques();
177
		$info['observationsPubliques'] = (int) Cel::db()->requeterValeurUnique($requete);
178
 
696 jpm 179
		$requete = $this->construireRequeteNbreImg();
2143 jpm 180
		$info['images'] =(int) Cel::db()->requeterValeurUnique($requete);
181
 
696 jpm 182
		$requete = $this->construireRequeteNbreImgLiees();
2143 jpm 183
		$info['imagesLiees'] =(int) Cel::db()->requeterValeurUnique($requete);
184
 
696 jpm 185
		$requete = $this->construireRequeteNbreObsLiees();
2143 jpm 186
		$info['observationsLiees'] = (int) Cel::db()->requeterValeurUnique($requete);
187
 
697 jpm 188
		$info['moyImagesParObs'] = ($info['observationsLiees'] > 0 ? round($info['imagesLiees']/$info['observationsLiees'], 2) : '');
2143 jpm 189
 
696 jpm 190
		$requete = $this->construireRequeteNbreObsParCommune();
2143 jpm 191
		$info['communes'] = ($resultats = Cel::db()->requeter($requete)) ? count($resultats) : '' ;
697 jpm 192
		$info['observationsParCommunesMin'] = 1000;
193
		$info['observationsParCommunesMax'] = 0;
194
		$info['observationsParCommunesTotal'] = 0;
195
		foreach ($resultats as $resultat) {
196
			if ($resultat['nbre'] < $info['observationsParCommunesMin']) {
197
				$info['observationsParCommunesMin'] = $resultat['nbre'];
198
			}
199
			if ($resultat['nbre'] > $info['observationsParCommunesMax']) {
200
				$info['observationsParCommunesMax'] = $resultat['nbre'];
201
			}
202
			$info['observationsParCommunesTotal'] += $resultat['nbre'];
203
		}
702 jpm 204
		$info['observationsParCommunesMoyenne'] = ($info['communes'] > 0 ) ? round($info['observationsParCommunesTotal'] / $info['communes'], 2) : 0;
2143 jpm 205
 
206
		return $info;
696 jpm 207
	}
2143 jpm 208
 
2317 mathias 209
	private function getNbObsPubliques() {
210
		$requete = $this->construireRequeteNbreObsPubliques();
211
		$info = (int) Cel::db()->requeterValeurUnique($requete);
212
		return $info;
213
	}
214
 
215
	private function getNbImagesPubliques() {
2504 mathias 216
		$requete = $this->construireRequeteNbreImgLiees(true);
217
		$info = (int) Cel::db()->requeterValeurUnique($requete);
2317 mathias 218
		return $info;
219
	}
220
 
696 jpm 221
	private function construireRequeteNbreObs() {
1359 aurelien 222
		$requete = 	'SELECT COUNT(id_observation) AS nbre '.
223
					'FROM cel_obs ';
696 jpm 224
 
225
		if (count($this->parametres) != 0) {
226
			$filtres = array();
227
			extract($this->parametres);
2143 jpm 228
 
696 jpm 229
			if (isset($utilisateur)) {
1359 aurelien 230
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 231
			}
232
			if (isset($num_taxon)) {
233
				$filtres[] = "num_taxon = $num_taxon ";
234
			}
702 jpm 235
			if (isset($taxon)) {
236
				$filtres[] = "nom_ret LIKE $taxon ";
237
			}
2143 jpm 238
 
696 jpm 239
			$requete .= ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
240
		}
1359 aurelien 241
 
696 jpm 242
		return $requete;
243
	}
2143 jpm 244
 
696 jpm 245
	private function construireRequeteNbreObsPubliques() {
1359 aurelien 246
		$requete = 	'SELECT COUNT(id_observation) AS nbre '.
247
					'FROM cel_obs '.
696 jpm 248
					"WHERE transmission = 1 ";
249
 
250
		if (count($this->parametres) != 0) {
251
			$filtres = array();
252
			extract($this->parametres);
2143 jpm 253
 
696 jpm 254
			if (isset($utilisateur)) {
1359 aurelien 255
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 256
			}
257
			if (isset($num_taxon)) {
258
				$filtres[] = "num_taxon = $num_taxon ";
259
			}
702 jpm 260
			if (isset($taxon)) {
261
				$filtres[] = "nom_ret LIKE $taxon ";
262
			}
2143 jpm 263
 
696 jpm 264
			$requete .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
265
		}
2143 jpm 266
 
696 jpm 267
		return $requete;
268
	}
2143 jpm 269
 
696 jpm 270
	private function construireRequeteNbreObsParCommune() {
1359 aurelien 271
		$requete = 	'SELECT COUNT(id_observation) AS nbre '.
272
					'FROM cel_obs '.
273
					"WHERE zone_geo IS NOT NULL ".
274
					"	AND ce_zone_geo IS NOT NULL ";
275
		$groupBy = 'GROUP BY zone_geo, ce_zone_geo';
696 jpm 276
 
277
		if (count($this->parametres) != 0) {
278
			$filtres = array();
279
			extract($this->parametres);
2143 jpm 280
 
696 jpm 281
			if (isset($utilisateur)) {
1359 aurelien 282
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 283
			}
284
			if (isset($num_taxon)) {
1359 aurelien 285
				$filtres[] = "nt = $num_taxon ";
696 jpm 286
			}
702 jpm 287
			if (isset($taxon)) {
288
				$filtres[] = "nom_ret LIKE $taxon ";
289
			}
2143 jpm 290
 
696 jpm 291
			$requete .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
292
		}
293
		$requete .= $groupBy;
2143 jpm 294
 
696 jpm 295
		return $requete;
296
	}
2143 jpm 297
 
696 jpm 298
	private function construireRequeteNbreImg() {
1359 aurelien 299
		$select = 	'SELECT COUNT(DISTINCT ci.id_image) AS nbre ';
300
		$from = 'FROM cel_images ci ';
2143 jpm 301
 
696 jpm 302
		if (count($this->parametres) != 0) {
303
			$filtres = array();
2143 jpm 304
 
696 jpm 305
			extract($this->parametres);
2143 jpm 306
 
696 jpm 307
			if (isset($utilisateur)) {
1359 aurelien 308
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 309
			}
310
			if (isset($num_taxon)) {
2143 jpm 311
 
1359 aurelien 312
				$filtres[] = "nt = $num_taxon ";
696 jpm 313
			}
702 jpm 314
			if (isset($taxon)) {
315
				$filtres[] = "nom_ret LIKE $taxon ";
316
			}
317
			if (isset($num_taxon) || isset($taxon)) {
2446 jpm 318
				$from .= 'LEFT JOIN cel_obs co ON (ci.ce_observation = co.id_observation) ';
702 jpm 319
			}
2143 jpm 320
 
696 jpm 321
			$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
322
		}
323
		$requete = $select.$from.$where;
1359 aurelien 324
 
696 jpm 325
		return $requete;
694 jpm 326
	}
2143 jpm 327
 
2504 mathias 328
	private function construireRequeteNbreImgLiees($publiquesSeulement=false) {
1359 aurelien 329
		$select = 'SELECT COUNT(DISTINCT ci.id_image) AS nbre ';
2446 jpm 330
		$from = 'FROM cel_images ci ';
2143 jpm 331
 
696 jpm 332
		if (count($this->parametres) != 0) {
333
			$filtres = array();
2143 jpm 334
 
696 jpm 335
			extract($this->parametres);
2143 jpm 336
 
696 jpm 337
			if (isset($utilisateur)) {
1359 aurelien 338
				$filtres[] = "ci.courriel_utilisateur = $utilisateur ";
696 jpm 339
			}
340
			if (isset($num_taxon)) {
1359 aurelien 341
				$filtres[] = "nt = $num_taxon ";
696 jpm 342
			}
702 jpm 343
			if (isset($taxon)) {
344
				$filtres[] = "nom_ret LIKE $taxon ";
345
			}
2504 mathias 346
			if ($publiquesSeulement === true) {
347
				$filtres[] = "ci.transmission = 1";
348
			}
2143 jpm 349
 
702 jpm 350
			if (isset($num_taxon) || isset($taxon)) {
2446 jpm 351
				$from .= 'LEFT JOIN cel_obs ON (ci.ce_observation = co.id_observation) ';
702 jpm 352
			}
2143 jpm 353
 
696 jpm 354
			$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
355
		}
2143 jpm 356
 
696 jpm 357
		$requete = $select.$from.$where;
358
		return $requete;
359
	}
2143 jpm 360
 
696 jpm 361
	private function construireRequeteNbreObsLiees() {
2446 jpm 362
		$select = 'SELECT COUNT(DISTINCT id_observation) AS nbre ';
363
		$from = 'FROM cel_images ci '.
364
				'	LEFT JOIN cel_obs co ON (ci.ce_observation = co.id_observation) ';
2143 jpm 365
 
696 jpm 366
		if (count($this->parametres) != 0) {
367
			$filtres = array();
2143 jpm 368
 
696 jpm 369
			extract($this->parametres);
2143 jpm 370
 
696 jpm 371
			if (isset($utilisateur)) {
1359 aurelien 372
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 373
			}
374
			if (isset($num_taxon)) {
1359 aurelien 375
				$filtres[] = "nt = $num_taxon ";
696 jpm 376
			}
702 jpm 377
			if (isset($taxon)) {
378
				$filtres[] = "nom_ret LIKE $taxon ";
379
			}
2143 jpm 380
 
696 jpm 381
			$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
382
		}
2143 jpm 383
 
696 jpm 384
		$requete = $select.$from.$where;
2143 jpm 385
 
696 jpm 386
		return $requete;
387
	}
2175 mathias 388
 
389
 
390
	/**
391
	 * Retourne les n principaux contributeurs depuis x jours,
392
	 * en termes d'observations ajoutées, d'images ajoutées, ou les deux
393
	 * Paramètres : "jours" (int), "nombre" (int), "critere" ("obs" ou "img" ou "")
394
	 * @return array
395
	 */
396
	private function getGrandsContributeurs() {
397
		$nombre = 10; // les $nombre plus importants contributeurs
398
		$jours = 7; // depuis $jours jours
399
		$critere = null; // "obs", "img" ou null (les deux)
400
 
401
		if (isset($this->parametres['nombre'])) {
402
			$nombre = $this->parametres['nombre'];
403
		}
404
		if (isset($this->parametres['jours'])) {
405
			$jours = $this->parametres['jours'];
406
		}
407
		if (isset($this->parametres['critere'])) {
408
			$critere = $this->parametres['critere'];
409
		}
410
 
411
		$requete = $this->construireRequeteGrandsContributeurs($nombre, $jours, $critere);
412
		$resultats = Cel::db()->requeter($requete);
413
 
2181 mathias 414
		$courriels = array();
415
		foreach ($resultats as $res) {
416
			$courriels[] = $res['courriel_utilisateur'];
417
		}
418
		$identites = $this->recupererUtilisateursIdentite($courriels);
419
		foreach ($resultats as &$res) {
420
			$res['intitule_utilisateur'] = $identites[$res['courriel_utilisateur']]['intitule'];
421
			unset($res['courriel_utilisateur']);
422
			unset($res['nom_utilisateur']);
423
			unset($res['prenom_utilisateur']);
424
		}
425
 
2177 mathias 426
		$retour = array(
427
			'entete' => array(
2180 mathias 428
				'nombre' => intval($nombre),
429
				'jours' => intval($jours),
2177 mathias 430
				'critere' => $critere
431
			),
432
			'resultats' => array()
433
		);
2175 mathias 434
		$liste = array();
435
		if ($resultats != false) {
436
			foreach ($resultats as $resultat) {
2180 mathias 437
				// essayons de faire du JSON propre
2182 mathias 438
				if (isset($resultat['nombreImg'])) {
439
					$resultat['nombreImg'] = intval($resultat['nombreImg']);
440
				}
441
				if (isset($resultat['nombreObs'])) {
442
					$resultat['nombreObs'] = intval($resultat['nombreObs']);
443
				}
444
				if (isset($resultat['somme'])) {
445
					$resultat['somme'] = intval($resultat['somme']);
446
				}
2176 mathias 447
				$liste[] = $resultat; // pas de clefs afin de renvoyer une "liste" JSON, qui sera interprétée en conservant l'ordre
2175 mathias 448
			}
2177 mathias 449
			$retour['resultats'] = $liste;
2175 mathias 450
		}
2177 mathias 451
		return $retour;
2175 mathias 452
	}
453
 
454
	private function construireRequeteGrandsContributeurs($nombre = 10, $jours = 7, $critere = null) {
2449 jpm 455
		$requete = '';
2175 mathias 456
		switch ($critere) {
2449 jpm 457
			case 'obs':
458
				$requete = "SELECT ce_utilisateur , prenom_utilisateur , nom_utilisateur , courriel_utilisateur , ".
459
					"	COUNT(*) AS nombreObs ".
460
					"FROM cel_obs ".
461
					"WHERE transmission = 1 ".
462
					"AND TO_DAYS(NOW()) - TO_DAYS(date_transmission) <= $jours ".
463
					"GROUP BY ce_utilisateur ".
464
					"ORDER BY nombreObs DESC ".
465
					"LIMIT $nombre ";
2175 mathias 466
				break;
2449 jpm 467
			case 'img':
468
				$requete = "SELECT co.ce_utilisateur , co.prenom_utilisateur , co.nom_utilisateur , ".
469
					"	co.courriel_utilisateur , COUNT(DISTINCT ci.id_image) AS nombreImg ".
2446 jpm 470
					"FROM cel_images ci ".
2449 jpm 471
					"	RIGHT JOIN cel_obs co ON ci.ce_observation = co.id_observation ".
2446 jpm 472
					"WHERE co.transmission = 1 ".
473
					"AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours ".
2449 jpm 474
					"GROUP BY co.ce_utilisateur ".
475
					"ORDER BY nombreImg DESC ".
476
					"LIMIT $nombre ";
2175 mathias 477
				break;
478
			default:
2449 jpm 479
				$requete = "SELECT co.ce_utilisateur, co.prenom_utilisateur, co.nom_utilisateur, co.courriel_utilisateur, ".
2446 jpm 480
					"COUNT(DISTINCT ci.id_image) AS nombreImg, COUNT(DISTINCT co.id_observation) AS nombreObs, ".
481
					"COUNT(DISTINCT ci.id_image) + COUNT(DISTINCT co.id_observation) AS somme ".
482
					"FROM cel_images ci ".
2449 jpm 483
					"	RIGHT JOIN cel_obs co ON ci.ce_observation = co.id_observation ".
2446 jpm 484
					"WHERE co.transmission = 1 ".
485
					"AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours ".
486
					"GROUP BY co.ce_utilisateur ".
2449 jpm 487
					"ORDER BY somme DESC ".
488
					"LIMIT $nombre ";
2175 mathias 489
		}
2449 jpm 490
		return $requete;
2175 mathias 491
	}
2449 jpm 492
}