summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/functions.php24
-rw-r--r--include/stats.php374
2 files changed, 218 insertions, 180 deletions
diff --git a/include/functions.php b/include/functions.php
index f8a0da4..8307648 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -1071,6 +1071,30 @@ function format_score_table_html($score,$userid)
return $output;
}
+function createCache($content, $cacheFile)
+{
+ $fp = fopen($cacheFile,"w");
+ if($fp)
+ {
+ fwrite($fp,$content);
+ fclose($fp);
+ }
+ else
+ echo "WARNING: couldn't create cache file";
+
+ return;
+}
+
+function getCache($cacheFile, $expireTime)
+{
+ if( file_exists($cacheFile) &&
+ filemtime($cacheFile )>( time() - $expireTime ) )
+ {
+ return file_get_contents($cacheFile);
+ }
+
+ return false;
+}
?>
diff --git a/include/stats.php b/include/stats.php
index c7b0da1..cff6a84 100644
--- a/include/stats.php
+++ b/include/stats.php
@@ -20,77 +20,83 @@ DB_update_user_timestamp($myid);
display_user_menu();
-/* start statistics*/
-echo "<div class=\"user wide\">\n";
-
-/* always: if player logged in: add link to cards */
-
-/* total number of games */
-echo "<p>The number of finished games on this server is: ";
-$r = DB_query_array("SELECT COUNT(*) from Game".
- " WHERE status='gameover'");
-$GameN = $r[0];
-echo " $GameN </p>\n";
-
-echo "<p>The contra party wins in ";
-$result = DB_query("SELECT COUNT(*) from Score".
- " LEFT JOIN Game ON Game.id=game_id".
- " WHERE score='againstqueens'".
- " AND Game.status='gameover'");
-while( $r = DB_fetch_array($result))
- echo $r[0];
-echo " games.</p>\n";
-
-/* longest and shortest game */
-$r=DB_query("SELECT timediff(mod_date,create_date) ,session,id".
- " FROM Game WHERE status='gameover'".
- " ORDER BY time_to_sec(timediff(mod_date,create_date)) ASC LIMIT 1");
-
-if($r)
- {
- $short= DB_fetch_array($r);
- $names = DB_get_all_names_by_gameid($short[2]);
- echo "<p> The shortest game took only ".$short[0]." hours and was played by ".join(", ",$names).".<br />\n";
- }
-
-$r=DB_query("SELECT datediff(mod_date,create_date) ,session,id".
+/* check if cached version exist */
+if( !$content = getCache("cache/stats.html",60*60*24) )
+{
+ /* start caching */
+ ob_start();
+
+ /* start statistics*/
+ echo "<div class=\"user wide\">\n";
+
+ echo "<p>Generated ".date("Y-m-d H:i:s")." (server time) </p>";
+
+ /* total number of games */
+ echo "<p>The number of finished games on this server is: ";
+ $r = DB_query_array("SELECT COUNT(*) from Game".
+ " WHERE status='gameover'");
+ $GameN = $r[0];
+ echo " $GameN </p>\n";
+
+ echo "<p>The contra party wins in ";
+ $result = DB_query("SELECT COUNT(*) from Score".
+ " LEFT JOIN Game ON Game.id=game_id".
+ " WHERE score='againstqueens'".
+ " AND Game.status='gameover'");
+ while( $r = DB_fetch_array($result))
+ echo $r[0];
+ echo " games.</p>\n";
+
+ /* longest and shortest game */
+ $r=DB_query("SELECT timediff(mod_date,create_date) ,session,id".
" FROM Game WHERE status='gameover'".
- " ORDER BY time_to_sec(timediff(mod_date,create_date)) DESC LIMIT 1");
-if($r)
- {
- $long= DB_fetch_array($r);
- echo "The longest game took ".$long[0]." days.</p>\n";
- }
-
-$r=DB_query("SELECT COUNT(*) as c, session, id FROM Game ".
- " GROUP BY session ORDER BY c DESC LIMIT 1");
-if($r)
- {
- $long = DB_fetch_array($r);
- $names = DB_get_all_names_by_gameid($long[2]);
- echo "<p>The longest session is session ".$long[1]." with ".$long[0].
- " games played by ".join(", ",$names).".</p>\n";
- }
-
-
-/* number of solos */
-$result = DB_query_array_all("SELECT type,COUNT(*) as c from Game".
- " WHERE status='gameover'".
- " GROUP BY type".
- " ORDER BY c DESC");
-array_unshift($result,array("Type","Frequency"));
-echo output_table($result,"Game types","stats");
-
-/* break up solos in types */
-$result = DB_query_array_all("SELECT solo,COUNT(*) as c from Game".
- " WHERE status='gameover'".
- " AND type='solo'".
- " GROUP BY solo".
- " ORDER BY c DESC");
-array_unshift($result,array("Type","Frequency"));
-echo output_table($result,"Kind of solos","stats");
-
-/*
+ " ORDER BY time_to_sec(timediff(mod_date,create_date)) ASC LIMIT 1");
+
+ if($r)
+ {
+ $short= DB_fetch_array($r);
+ $names = DB_get_all_names_by_gameid($short[2]);
+ echo "<p> The shortest game took only ".$short[0]." hours and was played by ".join(", ",$names).".<br />\n";
+ }
+
+ $r=DB_query("SELECT datediff(mod_date,create_date) ,session,id".
+ " FROM Game WHERE status='gameover'".
+ " ORDER BY time_to_sec(timediff(mod_date,create_date)) DESC LIMIT 1");
+ if($r)
+ {
+ $long= DB_fetch_array($r);
+ echo "The longest game took ".$long[0]." days.</p>\n";
+ }
+
+ $r=DB_query("SELECT COUNT(*) as c, session, id FROM Game ".
+ " GROUP BY session ORDER BY c DESC LIMIT 1");
+ if($r)
+ {
+ $long = DB_fetch_array($r);
+ $names = DB_get_all_names_by_gameid($long[2]);
+ echo "<p>The longest session is session ".$long[1]." with ".$long[0].
+ " games played by ".join(", ",$names).".</p>\n";
+ }
+
+
+ /* number of solos */
+ $result = DB_query_array_all("SELECT type,COUNT(*) as c from Game".
+ " WHERE status='gameover'".
+ " GROUP BY type".
+ " ORDER BY c DESC");
+ array_unshift($result,array("Type","Frequency"));
+ echo output_table($result,"Game types","stats");
+
+ /* break up solos in types */
+ $result = DB_query_array_all("SELECT solo,COUNT(*) as c from Game".
+ " WHERE status='gameover'".
+ " AND type='solo'".
+ " GROUP BY solo".
+ " ORDER BY c DESC");
+ array_unshift($result,array("Type","Frequency"));
+ echo output_table($result,"Kind of solos","stats");
+
+ /*
2 top user mit maximaler quote an solo (min 10 games)
top scoring game: winning players
@@ -101,108 +107,108 @@ echo output_table($result,"Kind of solos","stats");
select id from game where randomnumbers like "blablabl%"; the % is like .* in regexp
select id,type,solo,status from game where id in (select id from game where randomnumbers in (select randomnumbers from game where id=27));
-*/
-$result = DB_query_array_all("SELECT fullname,COUNT(*) as c FROM Score".
- " LEFT JOIN User ON User.id=winner_id" .
- " WHERE score IN ('fox','doko','karlchen')".
- " GROUP BY game_id,fullname".
- " ORDER BY c DESC LIMIT 3" );
-array_unshift($result,array("Name","Points"));
-echo output_table($result,"Most extra points in a single game","stats");
-
-/* most reminders */
-$result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
- " (SELECT COUNT(*) FROM Hand".
- " WHERE user_id=User.id) as c".
- " FROM Reminder".
- " LEFT JOIN User ON User.id=user_id".
- " GROUP BY user_id".
- " ORDER BY c DESC LIMIT 5" );
-array_unshift($result,array("Name","Reminders"));
-echo output_table($result,"Most reminders per game","stats");
-
-/* fox */
-$result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
- " (SELECT COUNT(*) FROM Hand".
- " WHERE user_id=User.id) as c".
- " FROM Score".
- " LEFT JOIN User ON User.id=winner_id".
- " WHERE score='fox'".
- " GROUP BY winner_id".
- " ORDER BY c DESC LIMIT 5" );
-array_unshift($result,array("Name","Number of foxes caught"));
-echo output_table($result,"Most caught foxes","stats");
-
-$result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
- " (SELECT COUNT(*) FROM Hand".
- " WHERE user_id=User.id) as c".
- " FROM Score".
- " LEFT JOIN User ON User.id=looser_id".
- " WHERE score='fox'".
- " GROUP BY looser_id".
- " ORDER BY c DESC LIMIT 5" );
-array_unshift($result,array("Name","Number of foxes lost"));
-echo output_table($result,"Lost foxes (most)","stats");
-
-$result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
- " (SELECT COUNT(*) FROM Hand".
- " WHERE user_id=User.id) as c".
- " FROM Score".
- " LEFT JOIN User ON User.id=looser_id".
- " WHERE score='fox'".
- " GROUP BY looser_id".
- " ORDER BY c ASC LIMIT 5" );
-array_unshift($result,array("Name","Number of foxes lost"));
-echo output_table($result,"Lost foxes (least)","stats");
-
-/* which position wins the most tricks */
-$result = DB_query_array_all("SELECT CASE winner ".
- " WHEN 1 THEN 'left' ".
- " WHEN 2 THEN 'top' ".
- " WHEN 3 THEN 'right' ".
- " WHEN 4 THEN 'bottom' END,".
- " COUNT(*) AS c FROM Trick".
- " GROUP BY winner ".
- " HAVING LENGTH(winner)>0 ".
- " ORDER BY winner ASC " );
-array_unshift($result,array("Position","Number of tricks"));
-echo output_table($result,"Tricks at the table","stats");
-
-/* most games */
-$result = DB_query_array_all("SELECT fullname, COUNT(*) as c " .
- " FROM Hand".
- " LEFT JOIN User ON User.id=user_id".
- " GROUP BY user_id".
- " ORDER BY c DESC LIMIT 7" );
-array_unshift($result,array("Name","Number of games"));
-echo output_table($result,"Most games","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.solo<>'silent' 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<>'gameover'".
- " 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");
-
-/*
+ */
+ $result = DB_query_array_all("SELECT fullname,COUNT(*) as c FROM Score".
+ " LEFT JOIN User ON User.id=winner_id" .
+ " WHERE score IN ('fox','doko','karlchen')".
+ " GROUP BY game_id,fullname".
+ " ORDER BY c DESC LIMIT 3" );
+ array_unshift($result,array("Name","Points"));
+ echo output_table($result,"Most extra points in a single game","stats");
+
+ /* most reminders */
+ $result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
+ " (SELECT COUNT(*) FROM Hand".
+ " WHERE user_id=User.id) as c".
+ " FROM Reminder".
+ " LEFT JOIN User ON User.id=user_id".
+ " GROUP BY user_id".
+ " ORDER BY c DESC LIMIT 5" );
+ array_unshift($result,array("Name","Reminders"));
+ echo output_table($result,"Most reminders per game","stats");
+
+ /* fox */
+ $result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
+ " (SELECT COUNT(*) FROM Hand".
+ " WHERE user_id=User.id) as c".
+ " FROM Score".
+ " LEFT JOIN User ON User.id=winner_id".
+ " WHERE score='fox'".
+ " GROUP BY winner_id".
+ " ORDER BY c DESC LIMIT 5" );
+ array_unshift($result,array("Name","Number of foxes caught"));
+ echo output_table($result,"Most caught foxes","stats");
+
+ $result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
+ " (SELECT COUNT(*) FROM Hand".
+ " WHERE user_id=User.id) as c".
+ " FROM Score".
+ " LEFT JOIN User ON User.id=looser_id".
+ " WHERE score='fox'".
+ " GROUP BY looser_id".
+ " ORDER BY c DESC LIMIT 5" );
+ array_unshift($result,array("Name","Number of foxes lost"));
+ echo output_table($result,"Lost foxes (most)","stats");
+
+ $result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
+ " (SELECT COUNT(*) FROM Hand".
+ " WHERE user_id=User.id) as c".
+ " FROM Score".
+ " LEFT JOIN User ON User.id=looser_id".
+ " WHERE score='fox'".
+ " GROUP BY looser_id".
+ " ORDER BY c ASC LIMIT 5" );
+ array_unshift($result,array("Name","Number of foxes lost"));
+ echo output_table($result,"Lost foxes (least)","stats");
+
+ /* which position wins the most tricks */
+ $result = DB_query_array_all("SELECT CASE winner ".
+ " WHEN 1 THEN 'left' ".
+ " WHEN 2 THEN 'top' ".
+ " WHEN 3 THEN 'right' ".
+ " WHEN 4 THEN 'bottom' END,".
+ " COUNT(*) AS c FROM Trick".
+ " GROUP BY winner ".
+ " HAVING LENGTH(winner)>0 ".
+ " ORDER BY winner ASC " );
+ array_unshift($result,array("Position","Number of tricks"));
+ echo output_table($result,"Tricks at the table","stats");
+
+ /* most games */
+ $result = DB_query_array_all("SELECT fullname, COUNT(*) as c " .
+ " FROM Hand".
+ " LEFT JOIN User ON User.id=user_id".
+ " GROUP BY user_id".
+ " ORDER BY c DESC LIMIT 7" );
+ array_unshift($result,array("Name","Number of games"));
+ echo output_table($result,"Most games","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.solo<>'silent' 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<>'gameover'".
+ " 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");
+
+ /*
does the party win more often if they start
echo "<p>The party playing first wins in";
@@ -214,16 +220,24 @@ echo output_table($result,"Active games","stats");
while( $r = mysql_fetch_array($result,MYSQL_NUM))
echo $r[1]." (".$r[0].") <br />\n";
echo " games</p>\n";
-*/
-$result = generate_global_score_table();
-array_unshift($result,array("Name","Average score per game"));
-echo output_table($result,"Points per game","stats");
-
-/*
+ */
+ $result = generate_global_score_table();
+ array_unshift($result,array("Name","Average score per game"));
+ echo output_table($result,"Points per game","stats");
+
+ /*
how often is the last trick a non-trump trick
-*/
+ */
+
+ echo "</div>\n"; /* end output */
+
+ /* write file to cache */
+ $content = ob_get_contents();
+ ob_end_clean();
+ createCache($content,"cache/stats.html");
+}
-echo "</div>\n"; /* end output */
+echo $content;
?>