From fceb0d9bc48ae848461e728abaf5065a2578da61 Mon Sep 17 00:00:00 2001 From: Arun Persaud Date: Thu, 4 Mar 2010 21:43:37 -0800 Subject: [PATCH] CLEANUP: moved more statistics into the sortable table --- include/functions.php | 53 ++++++++++++++++++++++++++++++++++++++++--- include/stats.php | 48 +++++---------------------------------- 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

\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 -- 2.17.1