Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1582 Rev 1598
Line 1... Line 1...
1
<?php
1
<?php
2
 
-
 
3
namespace TelaBotanica\Del\Commun;
2
namespace TelaBotanica\Del\Commun;
Line 4... Line 3...
4
 
3
 
Line 5... Line 4...
5
class Stats {
4
class Stats {
6
 
5
 
7
	static function updateStats($db, $id_image, $id_proto) {
6
	static function updateStats($db, $id_image, $id_proto) {
8
		// @TODO Attention aux situations de concurrence possible - nécessite une
7
		// @TODO Attention aux situations de concurrence possible - nécessite une
9
		// transaction mais la flemme de tout mettre en InnoDB
8
		// transaction mais la flemme de tout mettre en InnoDB
10
		$id_image = intval($id_image);
9
		$id_image = intval($id_image);
11
		$id_proto = intval($id_proto);
10
		$id_proto = intval($id_proto);
12
		if(!$id_image || !$id_proto) throw new Exception("Ne peut mettre à jour les statistiques de vote",
11
		if (!$id_image || !$id_proto) throw new Exception("Ne peut mettre à jour les statistiques de vote",
13
				RestServeur::HTTP_CODE_ERREUR);
12
			RestServeur::HTTP_CODE_ERREUR);
14
	
13
 
15
		// 1) choper tous les votes pour le protocole choisi
14
		// 1) choper tous les votes pour le protocole choisi
16
		$votes = $db->requeter(sprintf(
15
		$votes = $db->requeter(sprintf(
17
				' SELECT ce_image, ce_protocole, valeur, ce_utilisateur'.
16
			' SELECT ce_image, ce_protocole, valeur, ce_utilisateur'.
18
				' FROM del_image_vote'.
17
			' FROM del_image_vote'.
19
				' WHERE ce_image = %d AND ce_protocole = %d',
18
			' WHERE ce_image = %d AND ce_protocole = %d',
20
				$id_image, $id_proto));
19
			$id_image, $id_proto));
21
	
20
 
22
		// 2) calculer la moyenne pondérée, le nombre de points
21
		// 2) calculer la moyenne pondérée, le nombre de points
23
		// @ACHTUNG_ALARM attention à ce que cette méthode corresponde avec les
22
		// @ACHTUNG_ALARM attention à ce que cette méthode corresponde avec les
24
		// calculs dans GWT, notamment l'échelle de points !!
23
		// calculs dans GWT, notamment l'échelle de points !!
Line 49... Line 48...
49
			$diviseur += ($o * $o);
48
			$diviseur += ($o * $o);
50
		}
49
		}
51
		if ($diviseur > 0) {
50
		if ($diviseur > 0) {
52
			$moyennePonderee = $moyennePonderee / $diviseur;
51
			$moyennePonderee = $moyennePonderee / $diviseur;
53
		}
52
		}
54
	
53
 
55
		// 3) mise à jour de la table stats
54
		// 3) mise à jour de la table stats
56
		$db->requeter(sprintf(
55
		$db->requeter(sprintf(
57
				' INSERT INTO del_image_stat (ce_image, ce_protocole, moyenne, nb_votes, nb_points)'.
56
			' INSERT INTO del_image_stat (ce_image, ce_protocole, moyenne, nb_votes, nb_points)'.
58
				' VALUES (%d, %d, %s, %d, %d)'.
57
			' VALUES (%d, %d, %s, %d, %d)'.
59
				' ON DUPLICATE KEY UPDATE moyenne = %s, nb_votes = %d, nb_points = %d',
58
			' ON DUPLICATE KEY UPDATE moyenne = %s, nb_votes = %d, nb_points = %d',
60
				$id_image, $id_proto, number_format($moyennePonderee, 3, '.', ''), $nbVotes, $nbPoints, number_format($moyennePonderee, 3, '.', ''), $nbVotes, $nbPoints));
59
			$id_image, $id_proto, number_format($moyennePonderee, 3, '.', ''), $nbVotes, $nbPoints,
-
 
60
			number_format($moyennePonderee, 3, '.', ''), $nbVotes, $nbPoints));
61
	
61
 
62
	}
62
	}
63
}
-
 
64
63
}
-
 
64
?>
-
 
65
65
66