NEW FEATURE: display longest session, display shortest games in hours
[e-DoKo.git] / stats.php
1 <?php
2 error_reporting(E_ALL);
3
4 include_once("config.php");
5 include_once("output.php");      /* html output only */
6 include_once("db.php");          /* database only */
7 include_once("functions.php");   /* the rest */
8
9 config_check();
10
11 if(DB_open()<0)
12   {
13     output_header();
14     echo "Database error, can't connect... Please wait a while and try again. ".
15       "If the problem doesn't go away feel free to contact $ADMIN_NAME at $ADMIN_EMAIL.";
16     output_footer();
17     exit();
18   }
19
20 /* start a session, if it is not already running */
21 session_start();
22 /* done major error checking, output header of HTML page */
23 output_header();
24
25 /* check if we want to logout */
26 if(myisset("logout"))
27   {
28     session_unset();
29     session_destroy();
30     $_SESSION = array();
31     echo "you are now logged out!";
32   }
33 /* user status page */
34 else if( isset($_SESSION["name"]) )
35    {
36      $name = $_SESSION["name"];
37      $email     = DB_get_email_by_name($name);
38      $password  = DB_get_passwd_by_name($name);
39
40
41      /* verify password and email */
42      if(strlen($password)!=32)
43        $password = md5($password);
44
45      $ok  = 1;
46      $myid = DB_get_userid_by_email_and_password($email,$password);
47      if(!$myid)
48        $ok = 0;
49
50      if($ok)
51        {
52          DB_get_PREF($myid);
53
54          $time     = DB_get_user_timestamp($myid);
55          $unixtime = strtotime($time);
56
57          $offset   = DB_get_user_timezone($myid);
58          $zone     = return_timezone($offset);
59          date_default_timezone_set($zone);
60
61          output_status($name);
62
63          echo "<div class=\"lastlogin\">last login: ".date("r",$unixtime)."</div>";
64
65          DB_update_user_timestamp($myid);
66
67          display_user_menu();
68
69          /* start statistics*/
70          echo "<div class=\"user\">\n";
71
72 /* always: if player logged in: add link to cards  */
73
74          /* total number of games */
75          echo "<p>The number of finished games on this server is: ";
76          $result = mysql_query("SELECT COUNT(*) from Game".
77                                " WHERE status='gameover'");
78          $r = mysql_fetch_array($result,MYSQL_NUM);
79          $GameN =  $r[0];
80          echo " $GameN </p>\n";
81
82          echo "<p>The contra party wins in ";
83          $result = mysql_query("SELECT COUNT(*) from Score".
84                                " LEFT JOIN Game ON Game.id=game_id".
85                                " WHERE score='againstqueens'".
86                                " AND Game.status='gameover'");
87          while( $r = mysql_fetch_array($result,MYSQL_NUM))
88            echo $r[0];
89          echo " games.</p>\n";
90
91
92          /* number of solos */
93          echo "<p>These kind of games have been played this often: <br />";
94          $result = mysql_query("SELECT COUNT(*) as c,type from Game".
95                                " WHERE status='gameover'".
96                                " GROUP BY type".
97                                " ORDER BY c DESC");
98          while( $r = mysql_fetch_array($result,MYSQL_NUM))
99            echo "".$r[1]." (".$r[0].") <br />";
100          echo " </p>\n";
101
102          /* break up solos in types */
103          echo "<p>These kind of solos have been played this often: <br />";
104          $result = mysql_query("SELECT COUNT(*) as c,solo from Game".
105                                " WHERE status='gameover'".
106                                " AND type='solo'".
107                                " GROUP BY solo".
108                                " ORDER BY c DESC");
109          while( $r = mysql_fetch_array($result,MYSQL_NUM))
110            echo "".$r[1]." (".$r[0].")<br />";
111          echo "</p>\n";
112
113          /*
114  2 top user mit maximaler quote an solo (min 10 games)
115
116  top scoring game: winning players
117
118  game with the same cards: show 3 at random:
119  player who won, points, what kind of game
120  select g1.id, g2.id from game g1 left join game g2 on g1.randomnumbers=g2.randomnumbers where g1.id<g2.id order by g1.id
121  select id from game where randomnumbers like "blablabl%"; the % is like .* in regexp
122  select id,type,solo,status from game where id in (select id from game where randomnumbers in (select randomnumbers from game where id=27));
123
124          */
125          echo "<p>Most extra points (doko, fox, karlchen) in a single game:<br />\n";
126          $result = mysql_query("SELECT COUNT(*) as c,fullname FROM Score".
127                                " LEFT JOIN User ON User.id=winner_id" .
128                                " WHERE score IN ('fox','doko','karlchen')".
129                                " GROUP BY game_id,fullname".
130                                " ORDER BY c DESC LIMIT 3" );
131          while( $r = mysql_fetch_array($result,MYSQL_NUM))
132            echo $r[1]." (".$r[0].") <br />\n";
133          echo "</p>\n";
134
135          /* longest and shortest game */
136          $r=mysql_query("SELECT MIN(timediff(mod_date,create_date)),session,id".
137                         " FROM Game WHERE status='gameover' GROUP BY status");
138          if($r)
139            {
140              $short= mysql_fetch_array($r,MYSQL_NUM);
141              $names = DB_get_all_names_by_gameid($short[2]);
142              echo "<p> The shortest game took only ".$short[0]." hours and was played by  ".join(", ",$names).".<br />\n";
143            }
144
145          $r=mysql_query("SELECT MAX(datediff(mod_date,create_date)),session".
146                         " FROM Game where status='gameover' GROUP BY status");
147          if($r)
148            {
149              $long= mysql_fetch_array($r,MYSQL_NUM);
150              echo "The longest game took ".$long[0]." days.</p>\n";
151            }
152
153          $r=mysql_query("SELECT COUNT(*) as c, session, id FROM Game ".
154                         " GROUP BY session ORDER BY c DESC LIMIT 1");
155          if($r)
156            {
157              $long  = mysql_fetch_array($r,MYSQL_NUM);
158              $names = DB_get_all_names_by_gameid($long[2]);
159              echo "The longest session is session ".$long[1]." with ".$long[0].
160                " games played by ".join(", ",$names).".</p>\n";
161            }
162
163          /* most reminders */
164          echo "<p>These players got the most reminders:<br />\n";
165          $result = mysql_query("SELECT COUNT(*) as c,fullname from Reminder".
166                                " LEFT JOIN User ON User.id=user_id".
167                                " GROUP BY user_id".
168                                " ORDER BY c DESC LIMIT 3" );
169          while( $r = mysql_fetch_array($result,MYSQL_NUM))
170            echo $r[1]." (".$r[0].") <br />\n";
171          echo "</p>\n";
172
173          /* fox */
174          echo "<p>These players caught the most foxes:<br />\n";
175          $result = mysql_query("SELECT COUNT(*) as c,fullname from Score".
176                                " LEFT JOIN User ON User.id=winner_id".
177                                " WHERE score='fox'".
178                                " GROUP BY winner_id".
179                                " ORDER BY c DESC LIMIT 2" );
180          while( $r = mysql_fetch_array($result,MYSQL_NUM))
181            echo $r[1]." (".$r[0].") <br />\n";
182          echo "</p>\n";
183
184          echo "<p>These players lost their fox most often:<br />\n";
185          $result = mysql_query("SELECT COUNT(*) as c,fullname from Score".
186                                " LEFT JOIN User ON User.id=looser_id".
187                                " WHERE score='fox'".
188                                " GROUP BY looser_id".
189                                " ORDER BY c DESC LIMIT 2" );
190          while( $r = mysql_fetch_array($result,MYSQL_NUM))
191            echo $r[1]." (".$r[0].") <br />\n";
192          echo "</p>\n";
193
194          /* which position wins the most tricks  */
195          echo "<p>Which positions at the table make the most tricks:<br />\n";
196          $result = mysql_query("SELECT COUNT(*) AS c,winner FROM Trick".
197                                " GROUP BY winner".
198                                " ORDER BY winner ASC " );
199          $r = mysql_fetch_array($result,MYSQL_NUM);
200          if($r[1]==NULL) /* ongoing games, no winner yet */
201            $r = mysql_fetch_array($result,MYSQL_NUM);
202          echo " left ".$r[0]." <br />\n";
203          $r = mysql_fetch_array($result,MYSQL_NUM);
204          echo " top ".$r[0]." <br />\n";
205          $r = mysql_fetch_array($result,MYSQL_NUM);
206          echo " right ".$r[0]." <br />\n";
207          $r = mysql_fetch_array($result,MYSQL_NUM);
208          echo " bottom ".$r[0]." <br />\n";
209          echo "</p>\n";
210
211          /*
212           does the party win more often if they start
213
214          echo "<p>The party playing first wins in";
215          $result = mysql_query("SELECT COUNT(*) from Score".
216                                " LEFT JOIN Game ON Game.id=game_id".
217                                " WHERE score='againstqueens'".
218                                " AND Game.status='gameover'".
219                                " AND Game.type<>'solo'");
220          while( $r = mysql_fetch_array($result,MYSQL_NUM))
221            echo $r[1]." (".$r[0].") <br />\n";
222          echo " games</p>\n";
223          */
224
225
226          /*
227           how often is the last trick a non-trump trick
228          */
229
230          echo "</div>\n"; /* end output */
231        }
232    }
233  else
234    {
235      /* send them back to the login page */
236      echo "<p>Please log in</p>";
237    }
238
239 output_footer();
240 DB_close();
241
242 /*
243  *Local Variables:
244  *mode: php
245  *mode: hs-minor
246  *End:
247  */
248 ?>
249
250