Subversion Repositories eFlore/Applications.cel

Rev

Rev 3080 | 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
 
3080 mathias 185
		$requete = $this->construireRequeteNbreImgLiees(true);
186
		$info['imagesLieesPubliques'] =(int) Cel::db()->requeterValeurUnique($requete);
187
 
696 jpm 188
		$requete = $this->construireRequeteNbreObsLiees();
2143 jpm 189
		$info['observationsLiees'] = (int) Cel::db()->requeterValeurUnique($requete);
190
 
697 jpm 191
		$info['moyImagesParObs'] = ($info['observationsLiees'] > 0 ? round($info['imagesLiees']/$info['observationsLiees'], 2) : '');
2143 jpm 192
 
696 jpm 193
		$requete = $this->construireRequeteNbreObsParCommune();
2143 jpm 194
		$info['communes'] = ($resultats = Cel::db()->requeter($requete)) ? count($resultats) : '' ;
697 jpm 195
		$info['observationsParCommunesMin'] = 1000;
196
		$info['observationsParCommunesMax'] = 0;
197
		$info['observationsParCommunesTotal'] = 0;
198
		foreach ($resultats as $resultat) {
199
			if ($resultat['nbre'] < $info['observationsParCommunesMin']) {
200
				$info['observationsParCommunesMin'] = $resultat['nbre'];
201
			}
202
			if ($resultat['nbre'] > $info['observationsParCommunesMax']) {
203
				$info['observationsParCommunesMax'] = $resultat['nbre'];
204
			}
205
			$info['observationsParCommunesTotal'] += $resultat['nbre'];
206
		}
702 jpm 207
		$info['observationsParCommunesMoyenne'] = ($info['communes'] > 0 ) ? round($info['observationsParCommunesTotal'] / $info['communes'], 2) : 0;
2143 jpm 208
 
209
		return $info;
696 jpm 210
	}
2143 jpm 211
 
2317 mathias 212
	private function getNbObsPubliques() {
213
		$requete = $this->construireRequeteNbreObsPubliques();
214
		$info = (int) Cel::db()->requeterValeurUnique($requete);
215
		return $info;
216
	}
217
 
218
	private function getNbImagesPubliques() {
2504 mathias 219
		$requete = $this->construireRequeteNbreImgLiees(true);
220
		$info = (int) Cel::db()->requeterValeurUnique($requete);
2317 mathias 221
		return $info;
222
	}
223
 
696 jpm 224
	private function construireRequeteNbreObs() {
1359 aurelien 225
		$requete = 	'SELECT COUNT(id_observation) AS nbre '.
226
					'FROM cel_obs ';
696 jpm 227
 
228
		if (count($this->parametres) != 0) {
229
			$filtres = array();
230
			extract($this->parametres);
2143 jpm 231
 
696 jpm 232
			if (isset($utilisateur)) {
1359 aurelien 233
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 234
			}
235
			if (isset($num_taxon)) {
236
				$filtres[] = "num_taxon = $num_taxon ";
237
			}
702 jpm 238
			if (isset($taxon)) {
239
				$filtres[] = "nom_ret LIKE $taxon ";
240
			}
2143 jpm 241
 
696 jpm 242
			$requete .= ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
243
		}
1359 aurelien 244
 
696 jpm 245
		return $requete;
246
	}
2143 jpm 247
 
696 jpm 248
	private function construireRequeteNbreObsPubliques() {
1359 aurelien 249
		$requete = 	'SELECT COUNT(id_observation) AS nbre '.
250
					'FROM cel_obs '.
696 jpm 251
					"WHERE transmission = 1 ";
252
 
253
		if (count($this->parametres) != 0) {
254
			$filtres = array();
255
			extract($this->parametres);
2143 jpm 256
 
696 jpm 257
			if (isset($utilisateur)) {
1359 aurelien 258
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 259
			}
260
			if (isset($num_taxon)) {
261
				$filtres[] = "num_taxon = $num_taxon ";
262
			}
702 jpm 263
			if (isset($taxon)) {
264
				$filtres[] = "nom_ret LIKE $taxon ";
265
			}
2143 jpm 266
 
696 jpm 267
			$requete .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
268
		}
2143 jpm 269
 
696 jpm 270
		return $requete;
271
	}
2143 jpm 272
 
696 jpm 273
	private function construireRequeteNbreObsParCommune() {
1359 aurelien 274
		$requete = 	'SELECT COUNT(id_observation) AS nbre '.
275
					'FROM cel_obs '.
276
					"WHERE zone_geo IS NOT NULL ".
277
					"	AND ce_zone_geo IS NOT NULL ";
278
		$groupBy = 'GROUP BY zone_geo, ce_zone_geo';
696 jpm 279
 
280
		if (count($this->parametres) != 0) {
281
			$filtres = array();
282
			extract($this->parametres);
2143 jpm 283
 
696 jpm 284
			if (isset($utilisateur)) {
1359 aurelien 285
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 286
			}
287
			if (isset($num_taxon)) {
1359 aurelien 288
				$filtres[] = "nt = $num_taxon ";
696 jpm 289
			}
702 jpm 290
			if (isset($taxon)) {
291
				$filtres[] = "nom_ret LIKE $taxon ";
292
			}
2143 jpm 293
 
696 jpm 294
			$requete .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
295
		}
296
		$requete .= $groupBy;
2143 jpm 297
 
696 jpm 298
		return $requete;
299
	}
2143 jpm 300
 
696 jpm 301
	private function construireRequeteNbreImg() {
1359 aurelien 302
		$select = 	'SELECT COUNT(DISTINCT ci.id_image) AS nbre ';
303
		$from = 'FROM cel_images ci ';
2143 jpm 304
 
696 jpm 305
		if (count($this->parametres) != 0) {
306
			$filtres = array();
2143 jpm 307
 
696 jpm 308
			extract($this->parametres);
2143 jpm 309
 
696 jpm 310
			if (isset($utilisateur)) {
1359 aurelien 311
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 312
			}
313
			if (isset($num_taxon)) {
2143 jpm 314
 
1359 aurelien 315
				$filtres[] = "nt = $num_taxon ";
696 jpm 316
			}
702 jpm 317
			if (isset($taxon)) {
318
				$filtres[] = "nom_ret LIKE $taxon ";
319
			}
320
			if (isset($num_taxon) || isset($taxon)) {
2446 jpm 321
				$from .= 'LEFT JOIN cel_obs co ON (ci.ce_observation = co.id_observation) ';
702 jpm 322
			}
2143 jpm 323
 
696 jpm 324
			$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
325
		}
326
		$requete = $select.$from.$where;
1359 aurelien 327
 
696 jpm 328
		return $requete;
694 jpm 329
	}
2143 jpm 330
 
2504 mathias 331
	private function construireRequeteNbreImgLiees($publiquesSeulement=false) {
1359 aurelien 332
		$select = 'SELECT COUNT(DISTINCT ci.id_image) AS nbre ';
2446 jpm 333
		$from = 'FROM cel_images ci ';
2143 jpm 334
 
696 jpm 335
		if (count($this->parametres) != 0) {
336
			$filtres = array();
2143 jpm 337
 
696 jpm 338
			extract($this->parametres);
2143 jpm 339
 
696 jpm 340
			if (isset($utilisateur)) {
1359 aurelien 341
				$filtres[] = "ci.courriel_utilisateur = $utilisateur ";
696 jpm 342
			}
343
			if (isset($num_taxon)) {
1359 aurelien 344
				$filtres[] = "nt = $num_taxon ";
696 jpm 345
			}
702 jpm 346
			if (isset($taxon)) {
347
				$filtres[] = "nom_ret LIKE $taxon ";
348
			}
2504 mathias 349
			if ($publiquesSeulement === true) {
350
				$filtres[] = "ci.transmission = 1";
351
			}
2143 jpm 352
 
702 jpm 353
			if (isset($num_taxon) || isset($taxon)) {
2446 jpm 354
				$from .= 'LEFT JOIN cel_obs ON (ci.ce_observation = co.id_observation) ';
702 jpm 355
			}
2143 jpm 356
 
696 jpm 357
			$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
358
		}
2143 jpm 359
 
696 jpm 360
		$requete = $select.$from.$where;
361
		return $requete;
362
	}
2143 jpm 363
 
696 jpm 364
	private function construireRequeteNbreObsLiees() {
2446 jpm 365
		$select = 'SELECT COUNT(DISTINCT id_observation) AS nbre ';
366
		$from = 'FROM cel_images ci '.
367
				'	LEFT JOIN cel_obs co ON (ci.ce_observation = co.id_observation) ';
2143 jpm 368
 
696 jpm 369
		if (count($this->parametres) != 0) {
370
			$filtres = array();
2143 jpm 371
 
696 jpm 372
			extract($this->parametres);
2143 jpm 373
 
696 jpm 374
			if (isset($utilisateur)) {
1359 aurelien 375
				$filtres[] = "courriel_utilisateur = $utilisateur ";
696 jpm 376
			}
377
			if (isset($num_taxon)) {
1359 aurelien 378
				$filtres[] = "nt = $num_taxon ";
696 jpm 379
			}
702 jpm 380
			if (isset($taxon)) {
381
				$filtres[] = "nom_ret LIKE $taxon ";
382
			}
2143 jpm 383
 
696 jpm 384
			$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
385
		}
2143 jpm 386
 
696 jpm 387
		$requete = $select.$from.$where;
2143 jpm 388
 
696 jpm 389
		return $requete;
390
	}
2175 mathias 391
 
392
 
393
	/**
394
	 * Retourne les n principaux contributeurs depuis x jours,
395
	 * en termes d'observations ajoutées, d'images ajoutées, ou les deux
396
	 * Paramètres : "jours" (int), "nombre" (int), "critere" ("obs" ou "img" ou "")
397
	 * @return array
398
	 */
399
	private function getGrandsContributeurs() {
400
		$nombre = 10; // les $nombre plus importants contributeurs
401
		$jours = 7; // depuis $jours jours
402
		$critere = null; // "obs", "img" ou null (les deux)
403
 
404
		if (isset($this->parametres['nombre'])) {
405
			$nombre = $this->parametres['nombre'];
406
		}
407
		if (isset($this->parametres['jours'])) {
408
			$jours = $this->parametres['jours'];
409
		}
410
		if (isset($this->parametres['critere'])) {
411
			$critere = $this->parametres['critere'];
412
		}
413
 
414
		$requete = $this->construireRequeteGrandsContributeurs($nombre, $jours, $critere);
415
		$resultats = Cel::db()->requeter($requete);
416
 
2181 mathias 417
		$courriels = array();
418
		foreach ($resultats as $res) {
419
			$courriels[] = $res['courriel_utilisateur'];
420
		}
421
		$identites = $this->recupererUtilisateursIdentite($courriels);
422
		foreach ($resultats as &$res) {
423
			$res['intitule_utilisateur'] = $identites[$res['courriel_utilisateur']]['intitule'];
424
			unset($res['courriel_utilisateur']);
425
			unset($res['nom_utilisateur']);
426
			unset($res['prenom_utilisateur']);
427
		}
428
 
2177 mathias 429
		$retour = array(
430
			'entete' => array(
2180 mathias 431
				'nombre' => intval($nombre),
432
				'jours' => intval($jours),
2177 mathias 433
				'critere' => $critere
434
			),
435
			'resultats' => array()
436
		);
2175 mathias 437
		$liste = array();
438
		if ($resultats != false) {
439
			foreach ($resultats as $resultat) {
2180 mathias 440
				// essayons de faire du JSON propre
2182 mathias 441
				if (isset($resultat['nombreImg'])) {
442
					$resultat['nombreImg'] = intval($resultat['nombreImg']);
443
				}
444
				if (isset($resultat['nombreObs'])) {
445
					$resultat['nombreObs'] = intval($resultat['nombreObs']);
446
				}
447
				if (isset($resultat['somme'])) {
448
					$resultat['somme'] = intval($resultat['somme']);
449
				}
2176 mathias 450
				$liste[] = $resultat; // pas de clefs afin de renvoyer une "liste" JSON, qui sera interprétée en conservant l'ordre
2175 mathias 451
			}
2177 mathias 452
			$retour['resultats'] = $liste;
2175 mathias 453
		}
2177 mathias 454
		return $retour;
2175 mathias 455
	}
456
 
457
	private function construireRequeteGrandsContributeurs($nombre = 10, $jours = 7, $critere = null) {
2449 jpm 458
		$requete = '';
2175 mathias 459
		switch ($critere) {
2449 jpm 460
			case 'obs':
461
				$requete = "SELECT ce_utilisateur , prenom_utilisateur , nom_utilisateur , courriel_utilisateur , ".
462
					"	COUNT(*) AS nombreObs ".
463
					"FROM cel_obs ".
464
					"WHERE transmission = 1 ".
465
					"AND TO_DAYS(NOW()) - TO_DAYS(date_transmission) <= $jours ".
466
					"GROUP BY ce_utilisateur ".
467
					"ORDER BY nombreObs DESC ".
468
					"LIMIT $nombre ";
2175 mathias 469
				break;
2449 jpm 470
			case 'img':
471
				$requete = "SELECT co.ce_utilisateur , co.prenom_utilisateur , co.nom_utilisateur , ".
472
					"	co.courriel_utilisateur , COUNT(DISTINCT ci.id_image) AS nombreImg ".
2446 jpm 473
					"FROM cel_images ci ".
2449 jpm 474
					"	RIGHT JOIN cel_obs co ON ci.ce_observation = co.id_observation ".
2446 jpm 475
					"WHERE co.transmission = 1 ".
476
					"AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours ".
2449 jpm 477
					"GROUP BY co.ce_utilisateur ".
478
					"ORDER BY nombreImg DESC ".
479
					"LIMIT $nombre ";
2175 mathias 480
				break;
481
			default:
2449 jpm 482
				$requete = "SELECT co.ce_utilisateur, co.prenom_utilisateur, co.nom_utilisateur, co.courriel_utilisateur, ".
2446 jpm 483
					"COUNT(DISTINCT ci.id_image) AS nombreImg, COUNT(DISTINCT co.id_observation) AS nombreObs, ".
484
					"COUNT(DISTINCT ci.id_image) + COUNT(DISTINCT co.id_observation) AS somme ".
485
					"FROM cel_images ci ".
2449 jpm 486
					"	RIGHT JOIN cel_obs co ON ci.ce_observation = co.id_observation ".
2446 jpm 487
					"WHERE co.transmission = 1 ".
488
					"AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours ".
489
					"GROUP BY co.ce_utilisateur ".
2449 jpm 490
					"ORDER BY somme DESC ".
491
					"LIMIT $nombre ";
2175 mathias 492
		}
2449 jpm 493
		return $requete;
2175 mathias 494
	}
2449 jpm 495
}