summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/functions.php53
-rw-r--r--include/stats.php48
2 files changed, 56 insertions, 45 deletions
diff --git a/include/functions.php b/include/functions.php
index 16d094c..173ccd4 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -1156,7 +1156,8 @@ function generate_global_score_table()
/* save information in an array */
while( $r = DB_fetch_array($result))
- $player[$r[0]] = array('name'=> $r[1], 'points' => 0 ,'nr' => 0);
+ $player[$r[0]] = array('name'=> $r[1], 'points' => 0 , 'nr' => 0, 'active' => 0,
+ 'response' => 0 , 'solo' => 0, 'soloavg' => 0);
/* get points and generate table */
foreach($gameids as $gameid)
@@ -1182,9 +1183,53 @@ function generate_global_score_table()
}
}
+ /* add number of active games */
+ $result = DB_query_array_all("SELECT user_id, COUNT(*) as c " .
+ " FROM Hand".
+ " LEFT JOIN Game ON Game.id=game_id".
+ " WHERE Game.status IN ('pre','play')".
+ " GROUP BY user_id");
+
+ foreach($result as $res)
+ {
+ $player[$res[0]]['active'] = $res[1];
+ }
+
+ /* response time of users*/
+ $result = DB_query_array_all("SELECT user_id,".
+ "IFNULL(AVG(if(P1.sequence in (2,3,4),".
+ "-timestampdiff(MINUTE,mod_date,(select mod_date from Play P2 where P1.trick_id=P2.trick_id and P2.sequence=P1.sequence-1)),NULL )),1e9) as a ".
+ "FROM Play P1 ".
+ "LEFT JOIN Hand_Card ON P1.hand_card_id=Hand_Card.id ".
+ "LEFT JOIN Hand ON Hand.id=Hand_Card.hand_id ".
+ "GROUP BY user_id ");
+
+ foreach($result as $res)
+ {
+ $player[$res[0]]['response'] = $res[1];
+ }
+
+ /* most solos */
+ $result = DB_query_array_all("SELECT user_id as uid,".
+ " COUNT(*), ".
+ " COUNT(*)/(SELECT COUNT(*) FROM Hand LEFT JOIN User ON User.id=Hand.user_id WHERE User.id=uid) as c ".
+ " FROM Game ".
+ " LEFT JOIN Hand ON Hand.position=startplayer AND Game.id=Hand.game_id ".
+ " WHERE type='solo' AND Game.status='gameover' ".
+ " GROUP BY user_id ");
+
+ foreach($result as $res)
+ {
+ $player[$res[0]]['solo'] = $res[1];
+ $player[$res[0]]['soloavg'] = $res[2];
+ }
+
+
+ /* sort everything nicely */
+
function cmp($a,$b)
{
- if($a['nr']==0 ) return 1;
+ if($a['nr']==0) return 1;
if($b['nr']==0) return 1;
$a=$a['points']/$a['nr'];
@@ -1196,11 +1241,13 @@ function generate_global_score_table()
}
usort($player,'cmp');
+
foreach($player as $pl)
{
/* limit to players with at least 10 games */
if($pl['nr']>10)
- $return[] = array( $pl['name'], round($pl['points']/$pl['nr'],3), $pl['points'],$pl['nr']);
+ $return[] = array( $pl['name'], round($pl['points']/$pl['nr'],3), $pl['points'],$pl['nr'],$pl['active'],
+ $pl['response'],$pl['solo'],$pl['soloavg']);
}
return $return;
diff --git a/include/stats.php b/include/stats.php
index fb56df8..61e7d88 100644
--- a/include/stats.php
+++ b/include/stats.php
@@ -24,6 +24,9 @@
if(!isset($HOST))
exit;
+/* turn warnings off (problem with two warnings in function.php */
+error_reporting(!E_ALL & ~E_NOTICE);
+
$name = $_SESSION["name"];
$email = DB_get_email('name',$name);
@@ -190,46 +193,6 @@ if( !$content = getCache("cache/stats.html",60*60*24) )
array_unshift($result,array("Position","Number of tricks"));
echo output_table($result,"Tricks at the table","stats");
- /* most solos */
- $result = DB_query_array_all("SELECT fullname as fname,".
- " COUNT(*), ".
- " COUNT(*)/(SELECT COUNT(*) FROM Hand LEFT JOIN User ON User.id=Hand.user_id WHERE fullname=fname) as c ".
- " FROM Game ".
- " LEFT JOIN Hand ON Hand.position=startplayer AND Game.id=Hand.game_id ".
- " LEFT JOIN User ON User.id=Hand.user_id ".
- " WHERE type='solo' AND Game.status='gameover' ".
- " GROUP BY user_id ".
- " ORDER BY c DESC;");
- array_unshift($result,array("Name","Number of solos","Solos/game"));
- echo output_table($result,"Most solos","stats");
-
-
- /* most active games */
- $result = DB_query_array_all("SELECT fullname, COUNT(*) as c " .
- " FROM Hand".
- " LEFT JOIN User ON User.id=user_id".
- " LEFT JOIN Game ON Game.id=game_id".
- " WHERE Game.status IN ('pre','play')".
- " GROUP BY user_id".
- " ORDER BY c DESC LIMIT 7" );
- array_unshift($result,array("Name","Number of active games"));
- echo output_table($result,"Active games","stats");
-
- /* response time of users*/
- $result = DB_query_array_all("SELECT User.fullname,".
- "IFNULL(AVG(if(P1.sequence in (2,3,4),".
- "-timestampdiff(MINUTE,mod_date,(select mod_date from Play P2 where P1.trick_id=P2.trick_id and P2.sequence=P1.sequence-1)),NULL )),1e9) as a, ".
- " COUNT(*) as na ".
- "FROM Play P1 ".
- "LEFT JOIN Hand_Card ON P1.hand_card_id=Hand_Card.id ".
- "LEFT JOIN Hand ON Hand.id=Hand_Card.hand_id ".
- "LEFT JOIN User ON Hand.user_id=User.id ".
- "GROUP BY user_id ".
- "HAVING na>8 ".
- "ORDER BY a " );
- array_unshift($result,array("Name","Average minutes before response","trick count"));
- echo output_table($result,"Response","stats");
-
/*
does the party win more often if they start
@@ -244,8 +207,9 @@ if( !$content = getCache("cache/stats.html",60*60*24) )
echo " games</p>\n";
*/
$result = generate_global_score_table();
- array_unshift($result,array("Name","Average score per game","Total Points","Number of games"));
- echo output_table($result,"Points per game (need more than 10 games)","stats","ScoreTable");
+ array_unshift($result,array('Name','Average score per game','Total Points','Number of games', 'Active games',
+ 'Response Time [min]','Number of solos','Solos/game'));
+ echo output_table($result,'Players (need more than 10 games)','stats','ScoreTable');
/*
* how often is the last trick a non-trump trick