NEW FEATURE: detailed few of the score of one game
[e-DoKo.git] / index.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
23 /* done major error checking, output header of HTML page */
24 output_header();
25
26 /* check if we want to start a new game */
27 if(myisset("logout"))
28   {
29     session_unset();
30     session_destroy();
31     $_SESSION = array();
32     echo "you are now logged out!";
33   }
34 else if(myisset("new"))
35   {
36     if( isset($_SESSION["name"]) )
37       {
38         $names = DB_get_all_names();
39         output_form_for_new_game($names);
40       }
41     else
42       {
43         echo "Please log in.";
44       }
45   }
46 /*check if everything is ready to set up a new game */
47  else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD","dullen","schweinchen","call" ))
48   {
49     $PlayerA = $_REQUEST["PlayerA"];
50     $PlayerB = $_REQUEST["PlayerB"];
51     $PlayerC = $_REQUEST["PlayerC"];
52     $PlayerD = $_REQUEST["PlayerD"];
53
54     $dullen      = $_REQUEST["dullen"];
55     $schweinchen = $_REQUEST["schweinchen"];
56     $call        = $_REQUEST["call"];
57
58     $EmailA  = DB_get_email_by_name($PlayerA);
59     $EmailB  = DB_get_email_by_name($PlayerB);
60     $EmailC  = DB_get_email_by_name($PlayerC);
61     $EmailD  = DB_get_email_by_name($PlayerD);
62
63     if($EmailA=="" || $EmailB=="" || $EmailC=="" || $EmailD=="")
64       {
65         echo "couldn't find one of the names, please start a new game";
66         output_footer();
67         DB_close();
68         exit();
69       }
70
71     $useridA  = DB_get_userid_by_name($PlayerA);
72     $useridB  = DB_get_userid_by_name($PlayerB);
73     $useridC  = DB_get_userid_by_name($PlayerC);
74     $useridD  = DB_get_userid_by_name($PlayerD);
75
76     /* create random numbers */
77     $randomNR       = create_array_of_random_numbers($useridA,$useridB,$useridC,$useridD);
78     $randomNRstring = join(":",$randomNR);
79
80     /* create game */
81     $followup = NULL;
82     if(myisset("followup") )
83       {
84         $followup= $_REQUEST["followup"];
85         $session = DB_get_session_by_gameid($followup);
86         $ruleset = DB_get_ruleset_by_gameid($followup); /* just copy ruleset from old game,
87                                                          this way no manipulation is possible */
88
89         /* check if there is a game in pre or play mode, in that case do nothing */
90         if( DB_is_session_active($session) > 0 )
91           {
92             echo "<p class=\"message\"> There is already a game going on in session $session, you can't start a new one</p>";
93             output_footer();
94             DB_close();
95             exit();
96           }
97         else if ( DB_is_session_active($session) < 0 )
98           {
99             echo "<p class=\"message\"> ERROR: status of session $session couldn't be determined.</p>";
100             output_footer();
101             DB_close();
102             exit();
103           }
104
105         if($session)
106           mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre',".
107                       "'$ruleset','$session' ,NULL)");
108         else
109           {
110             /* get max session */
111             $max = DB_get_max_session();
112             $max++;
113             mysql_query("UPDATE Game SET session='".$max."' WHERE id=".DB_quote_smart($followup));
114             mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre',".
115                         "'$ruleset','$max' ,NULL)");
116           }
117       }
118     else
119       {
120         /* get ruleset information or create new one */
121         $ruleset = DB_get_ruleset($dullen,$schweinchen,$call);
122         if($ruleset <0)
123           {
124             myerror("Error defining ruleset: $ruleset");
125             output_footer();
126             DB_close();
127             exit();
128           };
129         /* get max session */
130         $max = DB_get_max_session();
131         $max++;
132
133         mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre', ".
134                   "'$ruleset','$max' ,NULL)");
135       }
136     $game_id = mysql_insert_id();
137
138     /* create hash */
139     $TIME  = (string) time(); /* to avoid collisions */
140     $hashA = md5("AGameOfDoko".$game_id.$PlayerA.$EmailA.$TIME);
141     $hashB = md5("AGameOfDoko".$game_id.$PlayerB.$EmailB.$TIME);
142     $hashC = md5("AGameOfDoko".$game_id.$PlayerC.$EmailC.$TIME);
143     $hashD = md5("AGameOfDoko".$game_id.$PlayerD.$EmailD.$TIME);
144
145     /* create hands */
146     mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridA).
147                 ", ".DB_quote_smart($hashA).", 'start','1',NULL,NULL,NULL,NULL)");
148     $hand_idA = mysql_insert_id();
149     mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridB).
150                 ", ".DB_quote_smart($hashB).", 'start','2',NULL,NULL,NULL,NULL)");
151     $hand_idB = mysql_insert_id();
152     mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridC).
153                 ", ".DB_quote_smart($hashC).", 'start','3',NULL,NULL,NULL,NULL)");
154     $hand_idC = mysql_insert_id();
155     mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridD).
156                 ", ".DB_quote_smart($hashD).", 'start','4',NULL,NULL,NULL,NULL)");
157     $hand_idD = mysql_insert_id();
158
159     /* save cards */
160     for($i=0;$i<12;$i++)
161       mysql_query("INSERT INTO Hand_Card VALUES (NULL, '$hand_idA', '".$randomNR[$i]."', 'false')");
162     for($i=12;$i<24;$i++)
163       mysql_query("INSERT INTO Hand_Card VALUES (NULL, '$hand_idB', '".$randomNR[$i]."', 'false')");
164     for($i=24;$i<36;$i++)
165       mysql_query("INSERT INTO Hand_Card VALUES (NULL, '$hand_idC', '".$randomNR[$i]."', 'false')");
166     for($i=36;$i<48;$i++)
167       mysql_query("INSERT INTO Hand_Card VALUES (NULL, '$hand_idD', '".$randomNR[$i]."', 'false')");
168
169     /* send out email, TODO: check for error with email */
170     $message = "\n".
171       "you are invited to play a game of DoKo (that is to debug the program ;).\n".
172       "Place comments and bug reports here:\n".
173       "http://wiki.nubati.net/index.php?title=EmailDoko\n\n".
174       "The whole round would consist of the following players:\n".
175       "$PlayerA\n".
176       "$PlayerB\n".
177       "$PlayerC\n".
178       "$PlayerD\n\n".
179       "If you want to join this game, please follow this link:\n\n".
180       "".$host."?me=";
181
182     mymail($EmailA,"You are invited to a game of DoKo","Hello $PlayerA,\n".$message.$hashA);
183     mymail($EmailB,"You are invited to a game of DoKo","Hello $PlayerB,\n".$message.$hashB);
184     mymail($EmailC,"You are invited to a game of DoKo","Hello $PlayerC,\n".$message.$hashC);
185     mymail($EmailD,"You are invited to a game of DoKo","Hello $PlayerD,\n".$message.$hashD);
186
187     echo "You started a new game. The emails have been sent out!";
188   }    /* end set up a new game */
189 /* cancle a game, if nothing has happend in the last N minutes */
190 else if(myisset("cancle","me"))
191   {
192     $me = $_REQUEST["me"];
193
194     /* test for valid ID */
195     $myid = DB_get_userid_by_hash($me);
196     if(!$myid)
197       {
198         echo "Can't find you in the database, please check the url.<br />\n";
199         echo "perhaps the game has been cancled, check by login in <a href=\"$host\">here</a>.";
200         output_footer();
201         DB_close();
202         exit();
203       }
204
205     DB_update_user_timestamp($myid);
206
207     /* get some information from the DB */
208     $gameid   = DB_get_gameid_by_hash($me);
209     $myname   = DB_get_name_by_hash($me);
210
211     /* check if game really is old enough */
212     $result = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " );
213     $r = mysql_fetch_array($result,MYSQL_NUM);
214     if(time()-strtotime($r[0]) > 60*60*24*30) /* = 1 month */
215       {
216         $message = "Hello, \n\n".
217           "Game ".DB_format_gameid($gameid).
218           " has been cancled since nothing happend for a while and $myname requested it.\n";
219
220         $userids = DB_get_all_userid_by_gameid($gameid);
221         foreach($userids as $user)
222           {
223             $To = DB_get_email_by_userid($user);
224             mymail($To,$EmailName."game ".DB_format_gameid($gameid)." cancled (timed out)",$message);
225           }
226
227         /* delete everything from the dB */
228         DB_cancel_game($me);
229
230         echo "<p style=\"background-color:red\";>Game ".DB_format_gameid($gameid).
231           " has been cancled.<br /><br /></p>";
232       }
233     else
234       echo "<p>You need to wait longer before you can cancle a game...</p>\n";
235   }
236 /* send out a reminder */
237 else if(myisset("remind","me"))
238   {
239     $me = $_REQUEST["me"];
240
241     /* test for valid ID */
242     $myid = DB_get_userid_by_hash($me);
243     if(!$myid)
244       {
245         echo "Can't find you in the database, please check the url.<br />\n";
246         echo "perhaps the game has been cancled, check by login in <a href=\"$host\">here</a>.";
247         output_footer();
248         DB_close();
249         exit();
250       }
251
252     DB_update_user_timestamp($myid);
253
254     /* get some information from the DB */
255     $gameid   = DB_get_gameid_by_hash($me);
256     $myname   = DB_get_name_by_hash($me);
257
258     /* check if game really is old enough */
259     $result = mysql_query("SELECT mod_date,player,status from Game WHERE id='$gameid' " );
260     $r = mysql_fetch_array($result,MYSQL_NUM);
261     if( (time()-strtotime($r[0]) > 60*60*24*7)  && ($r[2]!='gameover') ) /* = 1 week */
262       {
263         $name = DB_get_name_by_userid($r[1]);
264         $To = DB_get_email_by_userid($r[1]);
265         $userhash = DB_get_hash_from_gameid_and_userid($gameid,$r[1]);
266
267         $message = "Hello $name, \n\n".
268           "It's your turn in game ".DB_format_gameid($gameid)." \n".
269           "Actually everyone else is waiting for you for more than a week now ;)\n\n".
270           "Please visit this link now to continue: \n".
271           " ".$host."?me=".$userhash."\n\n" ;
272
273         if(DB_get_reminder($r[1],$gameid)>0)
274           {
275             echo "<p>An email has already been sent out.</p>\n";
276           }
277         else
278           {
279             DB_set_reminder($r[1],$gameid);
280             mymail($To,$EmailName."Reminder: game ".DB_format_gameid($gameid)." it's your turn",$message);
281
282             echo "<p style=\"background-color:red\";>Game ".DB_format_gameid($gameid).
283               ": an email has been sent out.<br /><br /></p>";
284           }
285       }
286     else
287       echo "<p>You need to wait longer before you can send out a reminder...</p>\n";
288   }
289 /* handle request from one specific player for one game,
290  * (the hash is set on a per game base) */
291 else if(myisset("me"))
292   {
293     $me = $_REQUEST["me"];
294
295     /* test for valid ID */
296     $myid = DB_get_userid_by_hash($me);
297     if(!$myid)
298       {
299         echo "Can't find you in the database, please check the url.<br />\n";
300         echo "perhaps the game has been cancled, check by login in <a href=\"$host\">here</a>.";
301         output_footer();
302         DB_close();
303         exit();
304       }
305
306     if(isset($_SESSION["name"]))
307       output_status($_SESSION["name"]);
308
309     /* the user had done something, update the timestamp */
310     DB_update_user_timestamp($myid);
311
312     /* get some information from the DB */
313     $gameid   = DB_get_gameid_by_hash($me);
314     $myname   = DB_get_name_by_hash($me);
315     $mystatus = DB_get_status_by_hash($me);
316     $mypos    = DB_get_pos_by_hash($me);
317     $myhand   = DB_get_handid_by_hash($me);
318     $session  = DB_get_session_by_gameid($gameid);
319
320     /* get prefs and save them */
321     DB_get_PREF($myid);
322     /* end set pref */
323
324     /* get rule set for this game */
325     $result = mysql_query("SELECT * FROM Rulesets".
326                           " LEFT JOIN Game ON Game.ruleset=Rulesets.id ".
327                           " WHERE Game.id='$gameid'" );
328     $r      = mysql_fetch_array($result,MYSQL_NUM);
329
330     $RULES["dullen"]      = $r[2];
331     $RULES["schweinchen"] = $r[3];
332     $RULES["call"]        = $r[4];
333
334     /* get some infos about the game */
335     $gametype   = DB_get_gametype_by_gameid($gameid);
336     $gamestatus = DB_get_game_status_by_gameid($gameid);
337     $GT         = $gametype;
338     if($gametype=="solo")
339       {
340         $gametype = DB_get_solo_by_gameid($gameid);
341         $GT  = $gametype." ".$GT;
342       }
343
344     /* does anyone have both foxes */
345     $GAME["schweinchen"]=0;
346     for($i=1;$i<5;$i++)
347       {
348         $hash  = DB_get_hash_from_game_and_pos($gameid,$i);
349         $cards = DB_get_all_hand($hash);
350         if( in_array("19",$cards) && in_array("20",$cards) )
351           {
352             $GAME["schweinchen"]=1;
353             $GAME["schweinchen-who"]=$hash;
354           }
355       };
356
357     /* put everyting in a form */
358     echo "<form action=\"index.php?me=$me\" method=\"post\">\n";
359
360     /* output game */
361
362     /* output extra division in case this game is part of a session */
363     if($session)
364       {
365         echo "<div class=\"session\">\n".
366           "This game is part of session $session: \n";
367         $hashes = DB_get_hashes_by_session($session,$myid);
368         $i = 1;
369         foreach($hashes as $hash)
370           {
371             if($hash == $me)
372               echo "$i \n";
373             else
374               echo "<a href=\"".$host."?me=".$hash."\">$i</a> \n";
375             $i++;
376           }
377         echo "</div>\n";
378       }
379
380     /* display the table and the names */
381     display_table();
382
383     /* mystatus gets the player through the different stages of a game.
384      * start:    yes/no
385      * init:     check values from start,
386      *           check for sickness
387      * check:    check for return values from init
388      * poverty:  handle poverty, wait here until all player have reached this state
389      *           display sickness and move on to game
390      * play:     game in progress
391      * gameover: are we revisiting a game
392      */
393     switch($mystatus)
394       {
395       case 'start':
396         if( !myisset("in") )
397           {
398             output_check_want_to_play($me);
399             break;
400           }
401         else
402           {
403             /* move on to the next stage*/
404             DB_set_hand_status_by_hash($me,'init');
405           }
406       case 'init':
407         /* first check if everything went ok  in the last step
408          * if not, send user back, if yes, check what he did
409          */
410         if( !myisset("in") )
411           {
412             echo "<p class=\"message\"> You need to answer the <a href=\"$host?me=$me\">question</a>.</p>";
413             DB_set_hand_status_by_hash($me,'start');
414           }
415         else
416           {
417             if($_REQUEST["in"] == "no")
418               {
419                 /* cancel the game */
420                 $message = "Hello, \n\n".
421                   "the game has been canceled due to the request of one of the players.\n";
422
423                 $userids = DB_get_all_userid_by_gameid($gameid);
424                 foreach($userids as $user)
425                   {
426                     $To = DB_get_email_by_userid($user);
427                     mymail($To,$EmailName."game ".DB_format_gameid($gameid)." canceled",$message);
428                   }
429
430                 /* delete everything from the dB */
431                 DB_cancel_game($me);
432               }
433             else
434               {
435                 $mycards = DB_get_hand($me);
436                 sort($mycards);
437
438                 output_check_for_sickness($me,$mycards);
439
440                 echo "<p class=\"mycards\">your cards are: <br />\n";
441                 foreach($mycards as $card)
442                   display_card($card,$PREF["cardset"]);
443                 echo "</p>\n";
444
445                 /* move on to the next stage*/
446                 DB_set_hand_status_by_hash($me,'check');
447               }
448           }
449         break;
450
451     case 'check':
452       /* ok, user is in the game, saw his cards and selected his vorbehalt
453        * so first we check what he selected
454        */
455       if(!myisset("solo","wedding","poverty","nines") )
456         {
457           /* all these variables have a pre-selected default,
458            * so we should never get here,
459            * unless a user tries to cheat ;)
460            * can also happen if user reloads the page!
461            */
462           echo "<p class=\"message\"> You need to answer the <a href=\"$host?me=$me&in=yes\">questions</a>.</p>";
463           DB_set_hand_status_by_hash($me,'init');
464         }
465       else
466         {
467           /* check if someone selected more than one vorbehalt */
468           $Nvorbehalt = 0;
469           if($_REQUEST["solo"]!="No")       $Nvorbehalt++;
470           if($_REQUEST["wedding"] == "yes") $Nvorbehalt++;
471           if($_REQUEST["poverty"] == "yes") $Nvorbehalt++;
472           if($_REQUEST["nines"] == "yes")   $Nvorbehalt++;
473
474           if($Nvorbehalt>1)
475             {
476               echo "<p class=\"message\"> You selected more than one vorbehalt, please go back ".
477                 "and answer the <a href=\"$host?me=$me&in=yes\">question</a> again.</p>";
478               DB_set_hand_status_by_hash($me,'init');
479             }
480           else
481             {
482               echo "<p class=\"message\">Processing what you selected in the last step...";
483
484               /* check if this sickness needs to be handled first */
485               $gametype    = DB_get_gametype_by_gameid($gameid);
486               $startplayer = DB_get_startplayer_by_gameid($gameid);
487
488               if( $_REQUEST["solo"]!="No")
489                 {
490                   /* user wants to play a solo */
491
492                   /* store the info in the user's hand info */
493                   DB_set_solo_by_hash($me,$_REQUEST["solo"]);
494                   DB_set_sickness_by_hash($me,"solo");
495
496                   echo "<br />Seems like you want to play a ".$_REQUEST["solo"]." solo. Got it.<br />\n";
497
498                   if($gametype == "solo" && $startplayer<$mypos)
499                     {}/* do nothing, since someone else already is playing solo */
500                   else
501                     {
502                       /* this solo comes first
503                        * store info in game table
504                        */
505                       DB_set_gametype_by_gameid($gameid,"solo");
506                       DB_set_startplayer_by_gameid($gameid,$mypos);
507                       DB_set_solo_by_gameid($gameid,$_REQUEST["solo"]);
508                     };
509                 }
510               else if($_REQUEST["wedding"] == "yes")
511                 {
512                   /* TODO: add silent solo somewhere*/
513                   echo "Ok, you don't want to play a silent solo...wedding was chosen.<br />\n";
514                   DB_set_sickness_by_hash($me,"wedding");
515                 }
516               else if($_REQUEST["poverty"] == "yes")
517                 {
518                   echo "Don't think you can win with just a few trump...? ok, poverty chosen <br />\n";
519                   DB_set_sickness_by_hash($me,"poverty");
520                 }
521               else if($_REQUEST["nines"] == "yes")
522                 {
523                   echo "What? You just don't want to play a game because you have a few nines? Well, if no one".
524                     " is playing solo, this game will be canceled.<br />\n";
525                   DB_set_sickness_by_hash($me,"nines");
526                 }
527
528               echo " Ok, done with checking, please go to the <a href=\"$host?me=$me\">next step of the setup</a>.</p>";
529
530               /* move on to the next stage*/
531               DB_set_hand_status_by_hash($me,'poverty');
532
533               /* check if everyone has reached this stage, send out email */
534               $userids = DB_get_all_userid_by_gameid($gameid);
535               $ok = 1;
536               foreach($userids as $user)
537                 {
538                   $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
539                   if($userstat!='poverty' && $userstat!='play')
540                     {
541                       $ok = 0;
542                       DB_set_player_by_gameid($gameid,$user);
543                     }
544                 };
545               if($ok)
546                 {
547                   /* reset player = everyone has to do something now */
548                   DB_set_player_by_gameid($gameid,NULL);
549
550                   foreach($userids as $user)
551                     {
552                       $To       = DB_get_email_by_userid($user);
553                       $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
554                       if($userhash != $me)
555                         {
556                           $message = "Everyone finish the questionary in game ".DB_format_gameid($gameid).", ".
557                             "please visit this link now to continue: \n".
558                             " ".$host."?me=".$userhash."\n\n" ;
559                           mymail($To,$EmailName." finished setup in game ".DB_format_gameid($gameid),$message);
560                         }
561                     };
562                 };
563             };
564         };
565       break;
566
567     case 'poverty':
568       /* here we need to check if there is a solo or some other form of sickness.
569        * If so, which one is the most important one
570        * set that one in the Game table
571        * tell people about it.
572        */
573       echo "<div class=\"message\">\n";
574       echo "<p> Checking if someone else selected solo, nines, wedding or poverty.</p>";
575
576       /* check if everyone has reached this stage */
577       $userids = DB_get_all_userid_by_gameid($gameid);
578       $ok = 1;
579       foreach($userids as $user)
580         {
581           $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
582           if($userstat!='poverty' && $userstat!='play')
583             $ok = 0;
584         };
585
586       if(!$ok)
587         {
588           echo "This step can only be handled after everyone finished the last step. ".
589                "Seems like this is not the case, so you need to wait a bit... ".
590                "you will get an email once that is the case, please use the link in ".
591                "that email to continue the game.<br />";
592         }
593       else
594         {
595           echo "Everyone has finished checking their cards, let's see what they said...<br />";
596
597           /* check what kind of game we are playing,  in case there are any solos this already
598            *will have the correct information in it */
599           $gametype    = DB_get_gametype_by_gameid($gameid);
600           $startplayer = DB_get_startplayer_by_gameid($gameid);
601
602           /* check for different sickness and just output a general info */
603           $nines   = 0;
604           $poverty = 0;
605           $wedding = 0;
606           $solo    = 0;
607           foreach($userids as $user)
608             {
609               $name     = DB_get_name_by_userid($user);
610               $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
611               if($usersick == 'nines')
612                 {
613                   $nines = $user;
614                   echo "$name has a Vorbehalt. <br />";
615                   break;
616                 }
617               else if($usersick == 'poverty')
618                 {
619                   $poverty++;
620                   echo "$name has a Vorbehalt. <br />";
621                 }
622               else if($usersick == 'wedding')
623                 {
624                   $wedding=$user;
625                   echo "$name has a Vorbehalt. <br />"  ;
626                 }
627               else if($usersick == 'solo')
628                 {
629                   $solo++;
630                   echo "$name has a Vorbehalt. <br />"  ;
631                 }
632             }
633
634           /* now check which sickness comes first and set the gametype to it */
635
636           if($gametype == "solo")
637             {
638               /* do nothing */
639             }
640           else if($nines)
641             {
642               /* cancel game */
643               /* TODO: should we keep statistics of this? */
644               $message = "Hello, \n\n".
645                 " the game has been canceled because ".DB_get_name_by_userid($nines).
646                 " has five or more nines and nobody is playing solo.\n\n".
647                 " To redeal either start a new game or, in case the game was part of a tournament, \n".
648                 " go to the last game and use the link at the bottom of the page to redeal.";
649
650               $userids = DB_get_all_userid_by_gameid($gameid);
651               foreach($userids as $user)
652                 {
653                   $To = DB_get_email_by_userid($user);
654                   mymail($To,$EmailName."game ".DB_format_gameid($gameid)." canceled",$message);
655                 }
656
657               /* delete everything from the dB */
658               DB_cancel_game($me);
659
660               echo "The game has been canceled because ".DB_get_name_by_userid($nines).
661                 " has five or more nines and nobody is playing solo.\n";
662               output_footer();
663               DB_close();
664               exit();
665             }
666           else if($poverty==1) /* one person has poverty */
667             {
668               DB_set_gametype_by_gameid($gameid,"poverty");
669               $gametype = "poverty";
670               $who      = DB_get_sickness_by_gameid($gameid);
671               if(!$who)
672                 {
673                   $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid);
674                   if($firstsick == "poverty")
675                     DB_set_sickness_by_gameid($gameid,2); /* who needs to be asked first */
676                   else
677                     DB_set_sickness_by_gameid($gameid,1); /* who needs to be asked first */
678                 }
679             }
680           else if($poverty==2) /* two people have poverty */
681             {
682               DB_set_gametype_by_gameid($gameid,"dpoverty");
683               $gametype = "dpoverty";
684               $who      = DB_get_sickness_by_gameid($gameid);
685               if(!$who)
686                 {
687                   $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid);
688                   if($firstsick == "poverty")
689                     {
690                       $seconsick = DB_get_sickness_by_pos_and_gameid(1,$gameid);
691                       if($secondsick == "poverty")
692                         DB_set_sickness_by_gameid($gameid,30); /* who needs to be asked first */
693                       else
694                         DB_set_sickness_by_gameid($gameid,20); /* who needs to be asked first */
695                     }
696                   else
697                     DB_set_sickness_by_gameid($gameid,10); /* who needs to be asked first */
698                 }
699             }
700           else if($wedding> 0)
701             {
702               DB_set_gametype_by_gameid($gameid,"wedding");
703               DB_set_sickness_by_gameid($gameid,'-1'); /* wedding not resolved yet */
704               $gametype = "wedding";
705             };
706
707           echo "<br />\n";
708
709           /* now the gametype is set correctly (shouldn't matter that this is calculated for every user)
710            * output what kind of game we have */
711
712           $poverty = 0;
713           foreach($userids as $user)
714             {
715               /* userids are sorted by position...
716                * so output whatever the first one has, then whatever the next one has
717                * stop when the sickness is the same as the gametype
718                */
719
720               $name     = DB_get_name_by_userid($user);
721               $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
722
723               if($usersick)
724                 echo "$name has $usersick. <br />"; /*TODO: perhaps save this in a string and store in Game? */
725
726               if($usersick=="poverty")
727                 $poverty++;
728               if($usersick == "wedding" && $gametype =="wedding")
729                 break;
730               if($usersick == "poverty" && $gametype =="poverty")
731                 break;
732               if($usersick == "poverty" && $gametype =="dpoverty" && $poverty==2)
733                 break;
734               if($usersick == "solo" && $gametype =="solo")
735                 break;
736             };
737
738           /* output Schweinchen in case the rules need it */
739           if( $gametype != "solo")
740             if($GAME["schweinchen"] && $RULES["schweinchen"]=="both" )
741               echo DB_get_name_by_hash($GAME["schweinchen-who"])." has Schweinchen. <br />";
742
743           echo "<br />\n";
744
745           /* finished the setup, set re/contra parties if possible, go to next stage unless there is a case of poverty*/
746           switch($gametype)
747             {
748             case "solo":
749               /* are we the solo player? set us to re, else set us to contra */
750               $pos = DB_get_pos_by_hash($me);
751               if($pos == $startplayer)
752                 DB_set_party_by_hash($me,"re");
753               else
754                 DB_set_party_by_hash($me,"contra");
755               DB_set_hand_status_by_hash($me,'play');
756               break;
757
758             case "wedding":
759               /* set person with the wedding to re, do the rest during the game */
760               $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
761               if($usersick == "wedding")
762                 DB_set_party_by_hash($me,"re");
763               else
764                 DB_set_party_by_hash($me,"contra");
765
766               echo "Whoever will make the first trick will be on the re team. <br />\n";
767               echo " Ok, the game can start now, please finish <a href=\"$host?me=$me\">the setup</a>.<br />";
768               DB_set_hand_status_by_hash($me,'play');
769               break;
770
771             case "normal":
772               $hand = DB_get_all_hand($me);
773
774               if(in_array('3',$hand)||in_array('4',$hand))
775                 DB_set_party_by_hash($me,"re");
776               else
777                 DB_set_party_by_hash($me,"contra");
778               DB_set_hand_status_by_hash($me,'play');
779               break;
780             case "poverty":
781             case "dpoverty":
782               /* check if poverty resolved (e.g. DB.Game who set to NULL)
783                *   yes? =>trump was taken, start game; break;
784                */
785               $who = DB_get_sickness_by_gameid($gameid);
786               if($who<0)
787                 { /* trump has been taken */
788                   DB_set_hand_status_by_hash($me,'play');
789                   break;
790                 };
791
792               if($who>9) /*= two people still have trump on the table*/
793                 $add = 10;
794               else
795                 $add = 1;
796
797               /* check if we are being asked now
798                *    no? display wait message, e.g. player X is asked at the moment
799                */
800               $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
801               if(myisset("trump") && $_REQUEST["trump"]=="no" && ($who==$mypos || $who==$mypos*10))
802                 {
803                   /* user doesn't want to take trump */
804                   /* set next player who needs to be asked */
805                   $firstsick  = (string) DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
806                   $secondsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
807
808                   if($firstsick=="poverty")
809                     {
810                       if($secondsick=="poverty")
811                         DB_set_sickness_by_gameid($gameid,$who+$add*3);
812                       else
813                         DB_set_sickness_by_gameid($gameid,$who+$add*2);
814                     }
815                   else
816                     DB_set_sickness_by_gameid($gameid,$who+$add);
817
818                   /* email next player */
819                   $who = DB_get_sickness_by_gameid($gameid);
820                   if($who>9) $who = $who/10;
821
822                   if($who<=4)
823                     {
824                       $To       = DB_get_email_by_pos_and_gameid($who,$gameid);
825                       $userhash = DB_get_hash_from_game_and_pos($gameid,$who);
826                       DB_set_player_by_gameid($gameid,$who);
827
828                       $message = "Someone has poverty, it's your turn to decide, if you want to take the trump. Please visit:".
829                         " ".$host."?me=".$userhash."\n\n" ;
830                       mymail($To,$EmailName." poverty (game ".DB_format_gameid($gameid).")",$message);
831                     }
832
833                   /* this user is done */
834                   DB_set_hand_status_by_hash($me,'play');
835                   break;
836                 }
837               else if(myisset("trump") && !myisset("exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10))
838                 {
839                   /* user wants to take trump */
840                   $trump = $_REQUEST["trump"];
841
842                   /* get hand id for user $trump */
843                   $userhand = DB_get_handid_by_gameid_and_userid($gameid,$trump);
844                   /* copy trump from player A to B */
845                   $result = mysql_query("UPDATE Hand_Card SET hand_id='$myhand' WHERE hand_id='$userhand' AND card_id<'27'" );
846
847                   /* add hidden button with trump in it to get to the next point */
848                   echo "</div><div class=\"poverty\">\n";
849                   echo "  <input type=\"hidden\" name=\"exchange\" value=\"-1\" />\n";
850                   echo "  <input type=\"hidden\" name=\"trump\" value=\"".$trump."\" />\n";
851                   echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select cards to give back\" />\n";
852                   echo "</div><div>\n";
853                 }
854               else if(myisset("trump","exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10))
855                 {
856                   $trump    = $_REQUEST["trump"];
857                   $exchange = $_REQUEST["exchange"];
858                   $userhand = DB_get_handid_by_gameid_and_userid($gameid,$trump);
859
860                   /* if exchange is set to a value>0, exchange that card back to user $trump */
861                   if($exchange >0)
862                     {
863                       $result = mysql_query("UPDATE Hand_Card SET hand_id='$userhand'".
864                                             " WHERE hand_id='$myhand' AND card_id='$exchange'" );
865                     };
866
867                   /* if number of cards == 12, set status to play for both users */
868                   $result = mysql_query("SELECT COUNT(*) FROM Hand_Card  WHERE hand_id='$myhand'" );
869                   $r      = mysql_fetch_array($result,MYSQL_NUM);
870                   if(!$r)
871                     {
872                       myerror("error in poverty");
873                       die();
874                     };
875                   if($r[0]==12)
876                     {
877                       if($gametype=="poverty" || $who<9)
878                         {
879                           DB_set_sickness_by_gameid($gameid,-1); /* done with poverty */
880                         }
881                       else /* reduce poverty count by one, that is go to single digits $who */
882                         {
883                           $add = 1;
884                           $who = $who/10;
885
886                           /* whom to ask next */
887                           $firstsick  = DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
888                           $secondsick = DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
889
890                           if($firstsick!="poverty")
891                             DB_set_sickness_by_gameid($gameid,$who+$add);
892                           else
893                             {
894                               if($secondsick!="poverty")
895                                 DB_set_sickness_by_gameid($gameid,$who+$add*2);
896                               else
897                                 DB_set_sickness_by_gameid($gameid,$who+$add*3);
898                             };
899
900                           /* email next player */
901                           $who = DB_get_sickness_by_gameid($gameid);
902                           if($who<=4)
903                             {
904                               $To       = DB_get_email_by_pos_and_gameid($who,$gameid);
905                               $userhash = DB_get_hash_from_game_and_pos($gameid,$who);
906                               DB_set_player_by_gameid($gameid,$who);
907
908                               $message = "Someone has poverty, it's your turn to decide, ".
909                                          "if you want to take the trump. Please visit:".
910                                          " ".$host."?me=".$userhash."\n\n" ;
911                               mymail($To,$EmailName." poverty (game ".DB_format_gameid($gameid).")",$message);
912                             }
913                         }
914
915                       /* this user is done */
916                       DB_set_hand_status_by_hash($me,'play');
917                       /* and so is his partner */
918                       $hash = DB_get_hash_from_gameid_and_userid($gameid,$trump);
919                       DB_set_hand_status_by_hash($hash,'play');
920
921                       /* set party to re, unless we had dpoverty, in that case check if we need to set re/contra*/
922                       $re_set = 0;
923                       foreach($userids as $user)
924                         {
925                           $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
926                           $party    = DB_get_party_by_hash($userhash);
927                           if($party=="re")
928                             $re_set = 1;
929                         }
930                       if($re_set)
931                         {
932                           DB_set_party_by_hash($me,"contra");
933                           DB_set_party_by_hash($hash,"contra");
934                         }
935                       else
936                         {
937                           foreach($userids as $user)
938                             {
939                               $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
940                               if($userhash==$hash||$userhash==$me)
941                                 DB_set_party_by_hash($userhash,"re");
942                               else
943                                 DB_set_party_by_hash($userhash,"contra");
944                             }
945                         }
946
947
948                       break;
949                     }
950                   else
951                     {
952                       /* else show all trump, have lowest card pre-selected, have hidden setting for */
953                       echo "</div><div class=\"poverty\"> you need to get rid of a few cards</div>\n";
954
955                       set_gametype($gametype); /* this sets the $CARDS variable */
956                       $mycards = DB_get_hand($me);
957                       $mycards = mysort($mycards,$gametype);
958
959                       $type="exchange";
960                       echo "<div class=\"mycards\">Your cards are: <br />\n";
961                       foreach($mycards as $card)
962                         display_link_card($card,$PREF["cardset"],$type);
963                       echo "  <input type=\"hidden\" name=\"trump\" value=\"".$trump."\" />\n";
964                       echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select one card to give back\" />\n";
965                       echo "</div><div>\n";
966                     }
967                 }
968               else if($who == $mypos || $who == $mypos*10)
969                 {
970                   echo "</div><div class=\"poverty\">\n";
971                   foreach($userids as $user)
972                     {
973                       $name     = DB_get_name_by_userid($user);
974                       $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
975
976                       if($usersick=="poverty")
977                         {
978                           $hash    = DB_get_hash_from_gameid_and_userid($gameid,$user);
979                           $cards   = DB_get_hand($hash);
980                           $nrtrump = count_trump($cards);
981                           /* count trump */
982                           if($nrtrump<4)
983                             echo "Player $name has $nrtrump trump. Do you want to take them?".
984                               "<a href=\"index.php?me=$me&amp;trump=$user\">yes</a> <br />\n";
985                         }
986                     }
987                   echo "<a href=\"index.php?me=$me&amp;trump=no\">No,way I take those trump...</a> <br />\n";
988                   echo "</div><div>\n";
989
990                   echo "Your cards are: <br />\n";
991                   $mycards = DB_get_hand($me);
992                   sort($mycards);
993                   echo "<p class=\"mycards\">your cards are: <br />\n";
994                   foreach($mycards as $card)
995                     display_card($card,$PREF["cardset"]);
996                   echo "</p>\n";
997                 }
998               else
999                 {
1000                   $mysick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
1001                   if($mysick=="poverty")
1002                     echo "The others are asked if they want to take your trump, you have to wait (you'll get an email).";
1003                   else
1004                     echo "it's not your turn yet to decide if you want to take the trump or not.";
1005                 }
1006             };
1007           /* check if no one wanted to take trump, in that case the gamesickness would be set to 5 or 50 */
1008           $who = DB_get_sickness_by_gameid($gameid);
1009           if($who==5 || $who==50)
1010             {
1011               $message = "Hello, \n\n".
1012                 "Game ".DB_format_gameid($gameid)." has been cancled since nobody wanted to take the trump.\n";
1013
1014               $userids = DB_get_all_userid_by_gameid($gameid);
1015               foreach($userids as $user)
1016                 {
1017                   $To = DB_get_email_by_userid($user);
1018                   mymail($To,$EmailName."game ".DB_format_gameid($gameid)." cancled (poverty not resolved)",$message);
1019                 }
1020
1021               /* delete everything from the dB */
1022               DB_cancel_game($me);
1023
1024               echo "<p style=\"background-color:red\";>Game ".DB_format_gameid($gameid)." has been cancled.<br /><br /></p>";
1025               output_footer();
1026               DB_close();
1027               exit();
1028             }
1029
1030           /* check if all players are ready to play */
1031           $ok = 1;
1032           foreach($userids as $user)
1033             if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play')
1034               {
1035                 $ok = 0;
1036                 DB_set_player_by_gameid($gameid,$user);
1037               }
1038
1039           if($ok)
1040             {
1041               /* only set this after all poverty, etc. are handled*/
1042               DB_set_game_status_by_gameid($gameid,'play');
1043
1044               /* email startplayer */
1045               $startplayer = DB_get_startplayer_by_gameid($gameid);
1046               $email       = DB_get_email_by_pos_and_gameid($startplayer,$gameid);
1047               $hash        = DB_get_hash_from_game_and_pos($gameid,$startplayer);
1048               $who         = DB_get_userid_by_email($email);
1049               DB_set_player_by_gameid($gameid,$who);
1050
1051               if($hash!=$me && DB_get_email_pref_by_hash($hash)!="emailaddict")
1052                 {
1053                   /* email startplayer) */
1054                   $message = "It's your turn now in game ".DB_format_gameid($gameid).".\n".
1055                     "Use this link to play a card: ".$host."?me=".$hash."\n\n" ;
1056                   mymail($email,$EmailName."ready, set, go... (game ".DB_format_gameid($gameid).") ",$message);
1057                 }
1058               else
1059                 echo " Please, <a href=\"$host?me=$me\">start</a> the game.<br />";
1060             }
1061           else
1062             echo "\n <br />";
1063         }
1064       echo "</div>\n";
1065       break;
1066     case 'play':
1067     case 'gameover':
1068       /* both entries here,  so that the tricks are visible for both.
1069        * in case of 'play' there is a break later that skips the last part
1070        */
1071
1072       /* figure out what kind of game we are playing,
1073        * set the global variables $CARDS["trump"],$CARDS["diamonds"],$CARDS["hearts"],
1074        * $CARDS["clubs"],$CARDS["spades"],$CARDS["foxes"]
1075        * accordingly
1076        */
1077
1078       $gametype = DB_get_gametype_by_gameid($gameid);
1079       $GT       = $gametype;
1080       if($gametype=="solo")
1081         {
1082           $gametype = DB_get_solo_by_gameid($gameid);
1083           $GT       = $gametype." ".$GT;
1084         }
1085       else
1086         $gametype = "normal";
1087
1088       set_gametype($gametype); /* this sets the $CARDS variable */
1089
1090       /* get some infos about the game */
1091       $gamestatus = DB_get_game_status_by_gameid($gameid);
1092
1093       /* has the game started? No, then just wait here...*/
1094       if($gamestatus == 'pre')
1095         {
1096           echo "<p class=\"message\"> You finished the setup, but not everyone else finished it... ".
1097                "so you need to wait for the others. Just wait for the an email... </p>";
1098           break; /* not sure this works... the idea is that you can
1099                   * only  play a card after everyone is ready to play */
1100         }
1101
1102       /* get time from the last action of the game */
1103       $result  = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " );
1104       $r       = mysql_fetch_array($result,MYSQL_NUM);
1105       $gameend = time() - strtotime($r[0]);
1106
1107       /* handel comments in case player didn't play a card, allow comments a week after the end of the game */      if( (!myisset("card") && $mystatus=='play') || ($mystatus=='gameover' && ($gameend < 60*60*24*7)) )
1108         if(myisset("comment"))
1109           {
1110             $comment = $_REQUEST["comment"];
1111             $playid = DB_get_current_playid($gameid);
1112
1113             if($comment != "")
1114               DB_insert_comment($comment,$playid,$myid);
1115           };
1116
1117       /* get everything relevant to display the tricks */
1118       $result = mysql_query("SELECT Hand_Card.card_id as card,".
1119                             "       Hand.position as position,".
1120                             "       Play.sequence as sequence, ".
1121                             "       Trick.id, ".
1122                             "       GROUP_CONCAT(CONCAT('<span>',User.fullname,': ',Comment.comment,'</span>')".
1123                             "                    SEPARATOR '\n' ), ".
1124                             "       Play.create_date, ".
1125                             "       Hand.user_id ".
1126                             "FROM Trick ".
1127                             "LEFT JOIN Play ON Trick.id=Play.trick_id ".
1128                             "LEFT JOIN Hand_Card ON Play.hand_card_id=Hand_Card.id ".
1129                             "LEFT JOIN Hand ON Hand_Card.hand_id=Hand.id ".
1130                             "LEFT JOIN Comment ON Play.id=Comment.play_id ".
1131                             "LEFT JOIN User On User.id=Comment.user_id ".
1132                             "WHERE Trick.game_id='".$gameid."' ".
1133                             "GROUP BY Trick.id, sequence ".
1134                             "ORDER BY Trick.id, sequence  ASC");
1135       $trickNR   = 1;
1136       $lasttrick = DB_get_max_trickid($gameid);
1137
1138       $play = array(); /* needed to calculate winner later  */
1139       $seq  = 1;
1140       $pos  = DB_get_startplayer_by_gameid($gameid)-1;
1141       $firstcard = ""; /* first card in a trick */
1142
1143       echo "\n<ul class=\"tricks\">\n";
1144       echo "  <li class=\"nohighlight\"> Game ".DB_format_gameid($gameid).": </li>\n";
1145
1146       while($r = mysql_fetch_array($result,MYSQL_NUM))
1147         {
1148           $pos     = $r[1];
1149           $seq     = $r[2];
1150           $trick   = $r[3];
1151           $comment = $r[4];
1152           $timeplayed = strtotime($r[5]);
1153           $user    = $r[6];
1154
1155           $offset = DB_get_user_timezone($user);
1156           $zone   = return_timezone($offset);
1157           date_default_timezone_set($zone);
1158
1159           /* check if first schweinchen has been played */
1160           if( $GAME["schweinchen"] && ($r[0] == 19 || $r[0] == 20) )
1161             $GAME["schweinchen"]++;
1162
1163           /* save card to be able to find the winner of the trick later */
1164           $play[$seq] = array("card"=>$r[0],"pos"=>$pos);
1165
1166           if($seq==1)
1167             {
1168               /* first card in a trick, output some html */
1169               if($trick!=$lasttrick)
1170                 {
1171                   /* start of an old trick? */
1172                   echo "  <li onclick=\"hl('$trickNR');\" class=\"old\"><a href=\"#\">Trick $trickNR</a>\n".
1173                     "    <div class=\"trick\" id=\"trick".$trickNR."\">\n".
1174                     "      <img class=\"arrow\" src=\"pics/arrow".($pos-1).".png\" alt=\"table\" />\n";
1175                 }
1176               else if($trick==$lasttrick)
1177                 {
1178                   /* start of a last trick? */
1179                   echo "  <li onclick=\"hl('$trickNR');\" class=\"current\"><a href=\"#\">Trick $trickNR</a>\n".
1180                     "    <div class=\"trick\" id=\"trick".$trickNR."\">\n".
1181                     "      <img class=\"arrow\" src=\"pics/arrow".($pos-1).".png\" alt=\"table\" />\n";
1182                 };
1183
1184               /* remember first card, so that we are able to check, what cards can be played */
1185               $firstcard = $r[0];
1186             };
1187
1188           /* display card */
1189           echo "      <div class=\"card".($pos-1)."\">\n";
1190
1191           /* display comments */
1192           if($comment!="")
1193             echo "        <span class=\"comment\">".$comment."</span>\n";
1194
1195           echo "        ";
1196           display_card($r[0],$PREF["cardset"]);
1197
1198           echo "      </div>\n"; /* end div card */
1199
1200           /* end of trick? */
1201           if($seq==4)
1202             {
1203               $trickNR++;
1204               echo "    </div>\n  </li>\n";  /* end div trick, end li trick */
1205             }
1206         }
1207
1208       /* whos turn is it? */
1209       if($seq==4)
1210         {
1211           $winner    = get_winner($play,$gametype); /* returns the position */
1212           $next      = $winner;
1213           $firstcard = ""; /* new trick, no first card */
1214         }
1215       else
1216         {
1217           $next = $pos+1;
1218           if($next==5) $next = 1;
1219         }
1220
1221       /* my turn?, display cards as links, ask for comments*/
1222       if(DB_get_pos_by_hash($me) == $next)
1223         $myturn = 1;
1224       else
1225         $myturn = 0;
1226
1227       /* do we want to play a card? */
1228       if(myisset("card") && $myturn)
1229         {
1230           $card   = $_REQUEST["card"];
1231           $handid = DB_get_handid_by_hash($me);
1232
1233           /* check if we have card and that we haven't played it yet*/
1234           /* set played in hand_card to true where hand_id and card_id*/
1235           $result = mysql_query("SELECT id FROM Hand_Card WHERE played='false' and ".
1236                                 "hand_id='$handid' AND card_id=".DB_quote_smart($card));
1237           $r = mysql_fetch_array($result,MYSQL_NUM);
1238           $handcardid = $r[0];
1239
1240           if($handcardid) /* everything ok, play card  */
1241             {
1242               /* update Game timestamp */
1243               DB_update_game_timestamp($gameid);
1244
1245               /* check if a call was made, must do this before we set the card status to played */
1246               if(myisset("call120") && $_REQUEST["call120"] == "yes" && can_call(120,$me))
1247                 $result = mysql_query("UPDATE Hand SET point_call='120' WHERE hash='$me' ");
1248               if(myisset("call90")  && $_REQUEST["call90"]  == "yes" && can_call(90,$me))
1249                 $result = mysql_query("UPDATE Hand SET point_call='90'  WHERE hash='$me' ");
1250               if(myisset("call60")  && $_REQUEST["call60"]  == "yes" && can_call(60,$me))
1251                 $result = mysql_query("UPDATE Hand SET point_call='60'  WHERE hash='$me' ");
1252               if(myisset("call30")  && $_REQUEST["call30"]  == "yes" && can_call(30,$me))
1253                 $result = mysql_query("UPDATE Hand SET point_call='30'  WHERE hash='$me' ");
1254               if(myisset("call0")   && $_REQUEST["call0"]   == "yes" && can_call(0,$me))
1255                 $result = mysql_query("UPDATE Hand SET point_call='0'   WHERE hash='$me' ");
1256
1257               /* mark card as played */
1258               mysql_query("UPDATE Hand_Card SET played='true' WHERE hand_id='$handid' AND card_id=".
1259                           DB_quote_smart($card));
1260
1261               /* get trick id or start new trick */
1262               $a = DB_get_current_trickid($gameid);
1263               $trickid  = $a[0];
1264               $sequence = $a[1];
1265               $tricknr  = $a[2];
1266
1267               $playid = DB_play_card($trickid,$handcardid,$sequence);
1268
1269               /* check for schweinchen */
1270               if($GAME["schweinchen"] && ($card == 19 || $card == 20) )
1271                 {
1272                   $GAME["schweinchen"]++; // count how many have been played including this one
1273                   if($GAME["schweinchen"]==3 && $RULES["schweinchen"]=="second" )
1274                     DB_insert_comment("Schweinchen! ",$playid,$myid);
1275                   if($RULES["schweinchen"]=="both" )
1276                     DB_insert_comment("Schweinchen! ",$playid,$myid);
1277                   if ($debug)
1278                     echo "schweinchen = ".$GAME["schweinchen"]." ---<br />";
1279                 }
1280
1281               /* if sequence == 4 check who one in case of wedding */
1282               if($sequence == 4 && $GT == "wedding")
1283                 {
1284                   /* is wedding resolve */
1285                   $resolved = DB_get_sickness_by_gameid($gameid);
1286                   if($resolved<0)
1287                     {
1288                       /* who has wedding */
1289                       $userids = DB_get_all_userid_by_gameid($gameid);
1290                       foreach($userids as $user)
1291                         {
1292                           $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
1293                           if($usersick == "wedding")
1294                             $whosick = $user;
1295                         }
1296                       /* who won the trick */
1297                       $play     = DB_get_cards_by_trick($trickid);
1298                       $winner   = get_winner($play,$gametype); /* returns the position */
1299                       $winnerid = DB_get_userid_by_gameid_and_position($gameid,$winner);
1300                       /* is tricknr <=3 */
1301                       if($tricknr <=3 && $winnerid!=$whosick)
1302                         {
1303                           /* set resolved at tricknr*/
1304                           $resolved = DB_set_sickness_by_gameid($gameid,$tricknr);
1305                           /* set partner */
1306                           $whash = DB_get_hash_from_gameid_and_userid($gameid,$winnerid);
1307                           DB_set_party_by_hash($whash,"re");
1308                         }
1309                       if($tricknr == 3 && $winnerid==$whosick)
1310                         {
1311                           /* set resolved at tricknr*/
1312                           $resolved = DB_set_sickness_by_gameid($gameid,'3');
1313                         }
1314                     }
1315                 }
1316
1317               /* if sequence == 4, set winner of the trick, count points and set the next player */
1318               if($sequence==4)
1319                 {
1320                   $play   = DB_get_cards_by_trick($trickid);
1321                   $winner = get_winner($play,$gametype); /* returns the position */
1322
1323                   /* check if someone caught a fox */
1324                   if(DB_get_gametype_by_gameid($gameid)!="solo")
1325                     foreach($play as $played)
1326                       {
1327                         if ( $played['card']==19 || $played['card']==20 )
1328                           if ($played['pos']!= $winner )
1329                             {
1330                               /* possible caught a fox, check party */
1331                               $uid1 = DB_get_userid_by_gameid_and_position($gameid,$winner);
1332                               $uid2 = DB_get_userid_by_gameid_and_position($gameid,$played['pos']);
1333
1334                               $party1 = DB_get_party_by_gameid_and_userid($gameid,$uid1);
1335                               $party2 = DB_get_party_by_gameid_and_userid($gameid,$uid2);
1336
1337                               if($party1 != $party2)
1338                                 mysql_query("INSERT INTO Score".
1339                                             " VALUES( NULL,NULL,$gameid,'$party1',$uid1,$uid2,'fox')");
1340                             }
1341                       }
1342                   /* check for karlchen (jack of clubs in the last trick)*/
1343                   if(DB_get_gametype_by_gameid($gameid)!="solo" && $tricknr == 12)
1344                     foreach($play as $played)
1345                       if ( $played['card']==11 || $played['card']==12 )
1346                         if ($played['pos'] == $winner )
1347                           {
1348                             /* possible caught a fox, check party */
1349                             $uid1   = DB_get_userid_by_gameid_and_position($gameid,$winner);
1350                             $party1 = DB_get_party_by_gameid_and_userid($gameid,$uid1);
1351
1352                             mysql_query("INSERT INTO Score".
1353                                         " VALUES( NULL,NULL,$gameid,'$party1',$uid1,NULL,'karlchen')");
1354                           }
1355                   /* check for doppelopf (>40 points)*/
1356                   $points = 0;
1357                   foreach($play as $played)
1358                     {
1359                       $points += DB_get_card_value_by_cardid($played['card']);
1360                     }
1361                   if($points > 39)
1362                     {
1363                       $uid1   = DB_get_userid_by_gameid_and_position($gameid,$winner);
1364                       $party1 = DB_get_party_by_gameid_and_userid($gameid,$uid1);
1365
1366                       mysql_query("INSERT INTO Score".
1367                                   " VALUES( NULL,NULL,$gameid,'$party1',$uid1,NULL,'doko')");
1368                     }
1369
1370                   if($winner>0)
1371                     mysql_query("UPDATE Trick SET winner='$winner' WHERE id='$trickid'");
1372                   else
1373                     echo "ERROR during scoring";
1374
1375                   if($debug)
1376                     echo "DEBUG: position $winner won the trick <br />";
1377
1378                   /* who is the next player? */
1379                   $next = $winner;
1380                 }
1381               else
1382                 {
1383                   $next = DB_get_pos_by_hash($me)+1;
1384                 }
1385               if($next==5) $next=1;
1386
1387               /* check for coment */
1388               if(myisset("comment"))
1389                 {
1390                   $comment = $_REQUEST["comment"];
1391                   if($comment != "")
1392                     DB_insert_comment($comment,$playid,$myid);
1393                 };
1394
1395               /* display played card */
1396               $pos = DB_get_pos_by_hash($me);
1397               if($sequence==1)
1398                 {
1399                   echo "  <li onclick=\"hl('".($tricknr)."');\" class=\"current\"><a href=\"#\">Trick ".($tricknr)."</a>\n".
1400                     "    <div class=\"trick\" id=\"trick".($tricknr)."\">\n".
1401                     "      <img class=\"arrow\" src=\"pics/arrow".($pos-1).".png\" alt=\"table\" />\n";
1402                 }
1403
1404               echo "<div class=\"card".($pos-1)."\">";
1405
1406               /* display comments */
1407               display_card($card,$PREF["cardset"]);
1408               if($comment!="")
1409                 echo "  <span class=\"comment\"> ".$comment."</span>\n";
1410               echo "</div></div></li>\n";
1411
1412               /*check if we still have cards left, else set status to gameover */
1413               if(sizeof(DB_get_hand($me))==0)
1414                 {
1415                   DB_set_hand_status_by_hash($me,'gameover');
1416                   $mystatus = 'gameover';
1417                 }
1418
1419               /* if all players are done, set game status to game over,
1420                * get the points of the last trick and send out an email
1421                * to all players
1422                */
1423               $userids = DB_get_all_userid_by_gameid($gameid);
1424
1425               $done=1;
1426               foreach($userids as $user)
1427                 if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='gameover')
1428                   $done=0;
1429
1430               if($done)
1431                 DB_set_game_status_by_gameid($gameid,"gameover");
1432
1433               /* email next player, if game is still running */
1434               if(DB_get_game_status_by_gameid($gameid)=='play')
1435                 {
1436                   $next_hash = DB_get_hash_from_game_and_pos($gameid,$next);
1437                   $email     = DB_get_email_by_hash($next_hash);
1438                   $who       = DB_get_userid_by_email($email);
1439                   DB_set_player_by_gameid($gameid,$who);
1440
1441                   $message = "A card has been played in game ".DB_format_gameid($gameid).".\n\n".
1442                     "It's your turn  now.\n".
1443                     "Use this link to play a card: ".$host."?me=".$next_hash."\n\n" ;
1444                   if( DB_get_email_pref_by_uid($who)!="emailaddict" )
1445                     mymail($email,$EmailName."a card has been played in game ".DB_format_gameid($gameid),$message);
1446                 }
1447               else /* send out final email */
1448                 {
1449                   /* individual score */
1450                   $result = mysql_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party FROM Hand".
1451                                 " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
1452                                 " LEFT JOIN User ON User.id=Hand.user_id".
1453                                 " LEFT JOIN Play ON Trick.id=Play.trick_id".
1454                                 " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
1455                                 " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
1456                                 " WHERE Hand.game_id='$gameid'".
1457                                 " GROUP BY User.fullname" );
1458                   $message  = "The game is over. Thanks for playing :)\n";
1459                   $message .= "Final score:\n";
1460                   while( $r = mysql_fetch_array($result,MYSQL_NUM))
1461                     $message .= "   ".$r[0]."(".$r[2].") ".$r[1]."\n";
1462
1463                   $result = mysql_query("SELECT  Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
1464                                 " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
1465                                 " LEFT JOIN User ON User.id=Hand.user_id".
1466                                 " LEFT JOIN Play ON Trick.id=Play.trick_id".
1467                                 " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
1468                                 " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
1469                                 " WHERE Hand.game_id='$gameid'".
1470                                 " GROUP BY Hand.party" );
1471                   $message .= "\nTotals:\n";
1472                   $re     = 0;
1473                   $contra = 0;
1474                   while( $r = mysql_fetch_array($result,MYSQL_NUM))
1475                     {
1476                       $message .= "    ".$r[0]." ".$r[1]."\n";
1477                       if($r[0] == "re")
1478                         $re = $r[1];
1479                       else if($r[0] == "contra")
1480                         $contra = $r[1];
1481                     }
1482
1483                   /*
1484                    * save score in database
1485                    *
1486                    */
1487
1488                   /* get calls from re/contra */
1489                   $call_re     = NULL;
1490                   $call_contra = NULL;
1491                   foreach($userids as $user)
1492                     {
1493                       $hash  = DB_get_hash_from_gameid_and_userid($gameid,$user);
1494                       $call  = DB_get_call_by_hash($hash);
1495                       $party = DB_get_party_by_hash($hash);
1496
1497                       if($call!=NULL)
1498                         {
1499                           $call = (int) $call;
1500
1501                           if($party=="re")
1502                             {
1503                               if($call_re==NULL)
1504                                 $call_re = $call;
1505                               else if( $call < $call_re)
1506                                 $call_re = $call;
1507                             }
1508                           else if($party=="contra")
1509                             {
1510                               if($call_contra==NULL)
1511                                 $call_contra = $call;
1512                               else if( $call < $call_re)
1513                                 $call_contra = $call;
1514                             }
1515                         }
1516                     }
1517
1518                   /* figure out who one */
1519                   $winning_party = NULL;
1520
1521                   if($call_re == NULL && $call_contra==NULL)
1522                     if($re>120)
1523                       $winning_party="re";
1524                     else
1525                       $winning_party="contra";
1526                   else
1527                     {
1528                       if($call_re)
1529                         {
1530                           $offset = 120 - $call_re;
1531                           if($call_re == 0)
1532                             $offset--; /* since we use a > in the next equation */
1533
1534                           if($re > 120+$offset)
1535                             $winning_party="re";
1536                           else if ( $call_contra == NULL )
1537                             $winning_party="contra";
1538                         }
1539
1540                       if($call_contra)
1541                         {
1542                           $offset = 120 - $call_contra;
1543                           if($call_contra == 0)
1544                             $offset--; /* since we use a > in the next equation */
1545
1546                           if($contra > 120+$offset)
1547                             $winning_party="contra";
1548                           else if ( $call_contra == NULL )
1549                             $winning_party="re";
1550                         }
1551                     }
1552
1553                   /* one point for each call of the other party in case the other party didn't win
1554                    * and one point each in case the party made more than points than one of the calls
1555                    */
1556                   if($winning_party!="contra" && $call_contra!=NULL)
1557                     {
1558                       for( $p=$call_contra;$p<=120; $p+=30 )
1559                         {
1560                           mysql_query("INSERT INTO Score".
1561                                       " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'against$p')");
1562                         }
1563
1564                       for( $p=$call_contra; $p<120; $p+=30)
1565                         {
1566                           if( $re >= $p )
1567                             mysql_query("INSERT INTO Score".
1568                                         " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'made$p')");
1569                         }
1570                     }
1571                   if($winning_party!="re" and $call_re!=NULL)
1572                     {
1573                       for( $p=$call_re;$p<=120; $p+=30 )
1574                         {
1575                           mysql_query("INSERT INTO Score".
1576                                       " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'against$p')");
1577                         }
1578
1579                       for( $p=$call_re; $p<120; $p+=30)
1580                         {
1581                           if( $contra>=$p )
1582                             mysql_query("INSERT INTO Score".
1583                                         " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'made$p')");
1584                         }
1585                     }
1586
1587                   /* point in case contra won */
1588                   if($winning_party=="contra")
1589                     {
1590                       mysql_query("INSERT INTO Score".
1591                                   " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'againstqueens')");
1592                     }
1593
1594                   /* one point each for winning and each 30 points + calls */
1595                   if($winning_party=="re")
1596                     {
1597                       foreach(array(120,150,180,210,240) as $p)
1598                         {
1599                           $offset = 0;
1600                           if($p==240 || $call_contra!=NULL)
1601                             $offset = 1;
1602
1603                           if($re>$p-$offset)
1604                             mysql_query("INSERT INTO Score".
1605                                         " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'".(240-$p)."')");
1606                         }
1607                       /* re called something and won */
1608                       foreach(array(0,30,60,90,120) as $p)
1609                         {
1610                           if($call_re!=NULL && $call_re<$p+1)
1611                             mysql_query("INSERT INTO Score".
1612                                         " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'call$p')");
1613                         }
1614                     }
1615                   else if( $winning_party=="contra")
1616                     {
1617                       foreach(array(120,150,180,210,240) as $p)
1618                         {
1619                           $offset = 0;
1620                           if($p==240 || $call_re!=NULL)
1621                             $offset = 1;
1622
1623                           if($contra>$p-$offset)
1624                             mysql_query("INSERT INTO Score".
1625                                         " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'".(240-$p)."')");
1626                         }
1627                       /* re called something and won */
1628                       foreach(array(0,30,60,90,120) as $p)
1629                         {
1630                           if($call_contra!=NULL && $call_contra<$p+1)
1631                             mysql_query("INSERT INTO Score".
1632                                         " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'call$p')");
1633                         }
1634                     }
1635
1636
1637                   /* send out final email */
1638                   $all = array();
1639
1640                   foreach($userids as $user)
1641                     $all[] = DB_get_email_by_userid($user);
1642                   $To = implode(",",$all);
1643
1644                   $help = "\n\n (you can use reply all on this email to reach all the players.)\n";
1645                   mymail($To,$EmailName."game over (game ".DB_format_gameid($gameid).") part 1(2)",$message.$help);
1646
1647                   foreach($userids as $user)
1648                     {
1649                       $To   = DB_get_email_by_userid($user);
1650                       $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
1651
1652                       $link = "Use this link to have a look at game ".DB_format_gameid($gameid).": ".$host."?me=".$hash."\n\n" ;
1653                       if( DB_get_email_pref_by_uid($user) != "emailaddict" )
1654                         mymail($To,$EmailName."game over (game ".DB_format_gameid($gameid).") part 2(2)",$link);
1655                     }
1656                 }
1657             }
1658           else
1659             {
1660               echo "can't find that card?! <br />\n";
1661             }
1662         }
1663       else if(myisset("card") && !$myturn )
1664         {
1665           echo "please wait until it's your turn! <br />\n";
1666         }
1667
1668       if($seq!=4 && $trickNR>1)
1669         echo "    </div>\n  </li>\n";  /* end div trick, end li trick */
1670
1671       /* display points in case game is over */
1672       if($mystatus=='gameover' && DB_get_game_status_by_gameid($gameid)=='gameover' )
1673         {
1674           echo "  <li onclick=\"hl('13');\" class=\"current\"><a href=\"#\">Score</a>\n".
1675             "    <div class=\"trick\" id=\"trick13\">\n";
1676           /* add pic for re/contra
1677            "      <img class=\"arrow\" src=\"pics/arrow".($pos-1).".png\" alt=\"table\" />\n";*/
1678
1679           $result = mysql_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party,Hand.position FROM Hand".
1680                                 " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
1681                                 " LEFT JOIN User ON User.id=Hand.user_id".
1682                                 " LEFT JOIN Play ON Trick.id=Play.trick_id".
1683                                 " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
1684                                 " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
1685                                 " WHERE Hand.game_id='$gameid'".
1686                                 " GROUP BY User.fullname" );
1687           while( $r = mysql_fetch_array($result,MYSQL_NUM))
1688             echo "      <div class=\"card".($r[3]-1)."\">\n".
1689                  "        <span class=\"score\">".$r[2]."<br /> ".$r[1]."</span>\n".
1690                  "      </div>\n";
1691
1692           echo "    </div>\n  </li>\n";  /* end div trick, end li trick */
1693         }
1694
1695
1696       echo "</ul>\n"; /* end ul tricks*/
1697
1698       $mycards = DB_get_hand($me);
1699       $mycards = mysort($mycards,$gametype);
1700       echo "<div class=\"mycards\">\n";
1701
1702       if($myturn && !myisset("card") && $mystatus=='play' )
1703         {
1704           echo "Hello ".$myname.", it's your turn!  <br />\n";
1705           echo "Your cards are: <br />\n";
1706
1707           /* do we have to follow suite? */
1708           $followsuit = 0;
1709           if(have_suit($mycards,$firstcard))
1710             $followsuit = 1;
1711
1712           foreach($mycards as $card)
1713             {
1714               if($followsuit && !same_type($card,$firstcard))
1715                 display_card($card,$PREF["cardset"]);
1716               else
1717                 display_link_card($card,$PREF["cardset"]);
1718             }
1719         }
1720       else if($mystatus=='play' )
1721         {
1722           echo "Your cards are: <br />\n";
1723           foreach($mycards as $card)
1724             display_card($card,$PREF["cardset"]);
1725         }
1726       else if($mystatus=='gameover')
1727         {
1728           $oldcards = DB_get_all_hand($me);
1729           $oldcards = mysort($oldcards,$gametype);
1730           echo "Your cards were: <br />\n";
1731           foreach($oldcards as $card)
1732             display_card($card,$PREF["cardset"]);
1733
1734           $userids = DB_get_all_userid_by_gameid($gameid);
1735           foreach($userids as $user)
1736             {
1737               $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
1738
1739               if($userhash!=$me)
1740                 {
1741                   echo "<br />";
1742
1743                   $name = DB_get_name_by_userid($user);
1744                   $oldcards = DB_get_all_hand($userhash);
1745                   $oldcards = mysort($oldcards,$gametype);
1746                   echo "$name's cards were: <br />\n";
1747                   foreach($oldcards as $card)
1748                     display_card($card,$PREF["cardset"]);
1749                 }
1750             };
1751         }
1752       echo "</div>\n";
1753
1754       /* if the game is over do some extra stuff, therefore exit the swtich statement if we are still playing*/
1755       if($mystatus=='play')
1756         break;
1757
1758       /* the following happens only when the gamestatus is 'gameover' */
1759       /* check if game is over, display results */
1760       if(DB_get_game_status_by_gameid($gameid)=='play')
1761         {
1762           echo "the game is over for you.. other people still need to play though";
1763         }
1764       else
1765         {
1766           $result = mysql_query("SELECT Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
1767                                 " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
1768                                 " LEFT JOIN User ON User.id=Hand.user_id".
1769                                 " LEFT JOIN Play ON Trick.id=Play.trick_id".
1770                                 " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
1771                                 " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
1772                                 " WHERE Hand.game_id='$gameid'".
1773                                 " GROUP BY Hand.party" );
1774           echo "<div class=\"total\"> Totals:<br />\n";
1775           while( $r = mysql_fetch_array($result,MYSQL_NUM))
1776             echo "  ".$r[0]." ".$r[1]."<br />\n";
1777
1778           echo "<div class=\"re\">\n Points Re: <br />\n";
1779           $queryresult = mysql_query("SELECT score FROM Score ".
1780                                      "  WHERE game_id=$gameid AND party='re'".
1781                                      " ");
1782           while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
1783             echo "   ".$r[0]."<br />\n";
1784           echo "</div>\n";
1785
1786           echo "<div class=\"contra\">\n Points Contra: <br />\n";
1787           $queryresult = mysql_query("SELECT score FROM Score ".
1788                                      "  WHERE game_id=$gameid AND party='contra'".
1789                                      " ");
1790           while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
1791             echo "   ".$r[0]."<br />\n";
1792           echo "</div>\n";
1793
1794           echo "</div>\n";
1795
1796
1797         }
1798       break;
1799     default:
1800       myerror("error in testing the status");
1801     }
1802     /* output left menu */
1803     display_user_menu();
1804
1805     /* output right menu */
1806
1807       /* display rule set for this game */
1808     echo "<div class=\"gameinfo\">\n";
1809
1810     if($gamestatus != 'pre')
1811       echo " Gametype: $GT <br />\n";
1812
1813     echo "Rules: <br />\n";
1814     echo "10ofhearts : ".$RULES["dullen"]      ."<br />\n";
1815     echo "schweinchen: ".$RULES["schweinchen"] ."<br />\n";
1816     echo "call:        ".$RULES["call"]        ."<br />\n";
1817
1818     echo "<hr />\n";
1819     if($gamestatus == 'play' )
1820       output_form_calls($me);
1821
1822     /* get time from the last action of the game */
1823     $result  = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " );
1824     $r       = mysql_fetch_array($result,MYSQL_NUM);
1825     $gameend = time() - strtotime($r[0]);
1826
1827     if($gamestatus == 'play' || $gameend < 60*60*24*7)
1828       {
1829         echo "<br />\nA short comment:<input name=\"comment\" type=\"text\" size=\"15\" maxlength=\"100\" />\n";
1830         echo "<hr />";
1831       }
1832
1833     echo "<input type=\"submit\" value=\"submit\" />\n";
1834
1835
1836     if($mystatus=='gameover' && DB_get_game_status_by_gameid($gameid)=='gameover' )
1837       {
1838         echo "<hr />\n";
1839
1840         $session = DB_get_session_by_gameid($gameid);
1841         $result  = mysql_query("SELECT id,create_date FROM Game".
1842                                " WHERE session=$session".
1843                                " ORDER BY create_date DESC".
1844                                " LIMIT 1");
1845         $r = -1;
1846         if($result)
1847           $r = mysql_fetch_array($result,MYSQL_NUM);
1848
1849         if(!$session || $gameid==$r[0])
1850           {
1851             /* suggest a new game with the same people in it, just rotated once (unless last game was solo) */
1852             $names = DB_get_all_names_by_gameid($gameid);
1853             $type  = DB_get_gametype_by_gameid($gameid);
1854
1855             if($type=="solo")
1856               output_ask_for_new_game($names[0],$names[1],$names[2],$names[3],$gameid);
1857             else
1858               output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid);
1859           }
1860       }
1861
1862     $session = DB_get_session_by_gameid($gameid);
1863     $score = generate_score_table($session);
1864
1865     //  if(size_of($score)>30)
1866       echo $score;
1867
1868     echo "</div>\n";
1869
1870
1871     echo "</form>\n";
1872     output_footer();
1873     DB_close();
1874     exit();
1875  }
1876 /* user status page */
1877 else if( myisset("email","password") || isset($_SESSION["name"]) )
1878    {
1879      /* test id and password, should really be done in one step */
1880      if(!isset($_SESSION["name"]))
1881        {
1882          $email     = $_REQUEST["email"];
1883          $password  = $_REQUEST["password"];
1884        }
1885      else
1886        {
1887          $name = $_SESSION["name"];
1888          $email     = DB_get_email_by_name($name);
1889          $password  = DB_get_passwd_by_name($name);
1890        };
1891
1892      if(myisset("forgot"))
1893        {
1894          $ok = 1;
1895
1896          $myid = DB_get_userid_by_email($email);
1897          if(!$myid)
1898            $ok = 0;
1899
1900          if($ok)
1901            {
1902              /* check how many entries in recovery table */
1903              $number = DB_get_number_of_passwords_recovery($myid);
1904
1905              /* if less than N recent ones, add a new one and send out email */
1906              if( $number < 5 )
1907                {
1908                  echo "Ok, I send you a new password. <br />";
1909                  if($number >1)
1910                    echo "N.B. You tried this already $number times during the last day and it will only work ".
1911                      " 5 times during a day.<br />";
1912                  echo "The new password will be valid for one day, make sure you reset it to something else.<br />";
1913                  echo "Back to the  <a href=\"$host\">main page</a>.";
1914
1915                  $TIME  = (string) time(); /* to avoid collisions */
1916                  $hash  = md5("Anewpassword".$email.$TIME);
1917                  $newpw = substr($hash,1,8);
1918
1919                  $message = "Someone (hopefully you) requested a new password. \n".
1920                    "You can use this email and the following password: \n".
1921                    "   $newpw    \n".
1922                    "to log into the server. The new password is valid for 24h, so make\n".
1923                    "sure you reset your password to something new. Your old password will\n".
1924                    " also still be valid until you set a new one\n";
1925                  mymail($email,$EmailName."recovery ",$message);
1926
1927                  DB_set_recovery_password($myid,md5($newpw));
1928                }
1929              else
1930                {
1931                  echo "Sorry you already tried 5 times during the last 24h.<br />".
1932                    "You need to use one of those passwords or wait to get a new one.<br />";
1933                  echo "Back to the <a href=\"$host\">main page</a>.";
1934                }
1935            }
1936          else
1937            {
1938              if($email=="")
1939                echo "You need to give me an email address! <br />".
1940                  "Please try <a href=\"$host\">again</a>.";
1941              else
1942                echo "Couldn't find a player with this email! <br />".
1943                  "Please contact Arun, if you think this is a mistake <br />".
1944                  "or else try <a href=\"$host\">again</a>.";
1945            }
1946        }
1947      else
1948      {
1949        /* verify password and email */
1950        if(strlen($password)!=32)
1951          $password = md5($password);
1952
1953        $ok  = 1;
1954        $myid = DB_get_userid_by_email_and_password($email,$password);
1955        if(!$myid)
1956          $ok = 0;
1957
1958        if($ok)
1959          {
1960            DB_get_PREF($myid);
1961
1962            if(myisset("setpref"))
1963              {
1964                $setpref=$_REQUEST["setpref"];
1965                switch($setpref)
1966                  {
1967                  case "germancards":
1968                  case "englishcards":
1969                    $result = mysql_query("SELECT * from User_Prefs".
1970                                          " WHERE user_id='$myid' AND pref_key='cardset'" );
1971                    if( mysql_fetch_array($result,MYSQL_NUM))
1972                      $result = mysql_query("UPDATE User_Prefs SET value=".DB_quote_smart($setpref).
1973                                            " WHERE user_id='$myid' AND pref_key='cardset'" );
1974                    else
1975                      $result = mysql_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','cardset',".
1976                                            DB_quote_smart($setpref).")");
1977                    echo "Ok, changed you preferences for the cards.\n";
1978                    break;
1979                  case "emailaddict":
1980                  case "emailnonaddict":
1981                    $result = mysql_query("SELECT * from User_Prefs".
1982                                          " WHERE user_id='$myid' AND pref_key='email'" );
1983                    if( mysql_fetch_array($result,MYSQL_NUM))
1984                      $result = mysql_query("UPDATE User_Prefs SET value=".DB_quote_smart($setpref).
1985                                            " WHERE user_id='$myid' AND pref_key='email'" );
1986                    else
1987                      $result = mysql_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','email',".
1988                                            DB_quote_smart($setpref).")");
1989                    echo "Ok, changed you preferences for sending out emails.\n";
1990                    break;
1991                  }
1992              }
1993            else if(myisset("passwd"))
1994              {
1995                if( $_REQUEST["passwd"]=="ask" )
1996                  {
1997                    /* reset password form*/
1998                    output_password_recovery($email,$password);
1999                  }
2000                else if($_REQUEST["passwd"]=="set")
2001                  {
2002                    /* reset password */
2003                    $ok = 1;
2004
2005                    /* check if old password matches */
2006                    $oldpasswd = md5($_REQUEST["password0"]);
2007                    if(!( ($password == $oldpasswd) || DB_check_recovery_passwords($oldpasswd,$email) ))
2008                      $ok = -1;
2009                    /* check if new passwords are types the same twice */
2010                    if($_REQUEST["password1"] != $_REQUEST["password2"] )
2011                      $ok = -2;
2012
2013                    switch($ok)
2014                      {
2015                      case '-2':
2016                        echo "The new passwords don't match. <br />";
2017                        break;
2018                      case '-1':
2019                        echo "The old password is not correct. <br />";
2020                        break;
2021                      case '1':
2022                        echo "Changed the password.<br />";
2023                        mysql_query("UPDATE User SET password='".md5($_REQUEST["password1"]).
2024                                    "' WHERE id=".DB_quote_smart($myid));
2025                        break;
2026                      }
2027                    /* set password */
2028                  }
2029              }
2030            else /* output default user page */
2031              {
2032                $time     = DB_get_user_timestamp($myid);
2033                $unixtime = strtotime($time);
2034
2035                $offset   = DB_get_user_timezone($myid);
2036                $zone     = return_timezone($offset);
2037                date_default_timezone_set($zone);
2038
2039                $myname = DB_get_name_by_email($email);
2040                $_SESSION["name"] = $myname;
2041
2042                if(isset($_SESSION["name"]))
2043                  output_status($_SESSION["name"]);
2044
2045                /* display links to settings */
2046                output_user_settings();
2047
2048                echo "<div class=\"lastlogin\">last login: ".date("r",$unixtime)."</div>";
2049
2050                DB_update_user_timestamp($myid);
2051
2052                display_user_menu();
2053
2054                echo "<div class=\"user\">";
2055                echo "<h4>These are all your games:</h4>\n";
2056                echo "<p>Session: <br />\n";
2057                echo "<span class=\"gamestatuspre\"> p </span> =  pre-game phase ";
2058                echo "<span class=\"gamestatusplay\">P </span> =  game in progess ";
2059                echo "<span class=\"gamestatusover\">F </span> =  game finished <br />";
2060                echo "</p>\n";
2061
2062                $output = array();
2063                $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player,Game.status from Hand".
2064                                      " LEFT JOIN Game ON Game.id=Hand.game_id".
2065                                      " WHERE user_id='$myid'".
2066                                      " ORDER BY Game.session,Game.create_date" );
2067                $gamenrold = -1;
2068                echo "<table>\n <tr><td>\n";
2069                while( $r = mysql_fetch_array($result,MYSQL_NUM))
2070                  {
2071                    $game = DB_format_gameid($r[1]);
2072                    $gamenr = (int) $game;
2073                    if($gamenrold < $gamenr)
2074                      {
2075                        if($gamenrold!=-1)
2076                          echo "</td></tr>\n <tr> <td>$gamenr:</td><td> ";
2077                        else
2078                          echo "$gamenr:</td><td> ";
2079                        $gamenrold = $gamenr;
2080                      }
2081                    if($r[4]=='pre')
2082                      {
2083                        echo "\n   <span class=\"gamestatuspre\"><a href=\"".$host."?me=".$r[0]."\">p </a></span> ";
2084
2085                      }
2086                    else if ($r[4]=='gameover')
2087                      echo "\n   <span class=\"gamestatusover\"><a href=\"".$host."?me=".$r[0]."\">F </a></span> ";
2088                    else
2089                      {
2090                        echo "\n   <span class=\"gamestatusplay\"><a href=\"".$host."?me=".$r[0]."\">P </a></span> ";
2091                      }
2092                    if($r[4] != 'gameover')
2093                      {
2094                        echo "</td><td>\n    ";
2095                        if($r[3])
2096                          {
2097                            if($r[3]==$myid)
2098                              echo "(it's <strong>your</strong> turn)\n";
2099                            else
2100                              {
2101                                $name = DB_get_name_by_userid($r[3]);
2102                                $gameid = $r[1];
2103                                if(DB_get_reminder($r[3],$gameid)==0)
2104                                  if(time()-strtotime($r[2]) > 60*60*24*7)
2105                                    echo "".
2106                                      "<a href=\"$host?remind=1&amp;me=".$r[0]."\">Send a reminder.</a>";
2107                                echo "(it's $name's turn)\n";
2108                              };
2109                          }
2110                        if(time()-strtotime($r[2]) > 60*60*24*30)
2111                          echo "".
2112                            "<a href=\"$host?cancle=1&amp;me=".$r[0]."\">Cancel?</a>".
2113                            " (clicking here is final and can't be restored)";
2114
2115                      }
2116                  }
2117                echo "</td></tr>\n</table>\n";
2118                $names = DB_get_all_names();
2119                echo "<h4>Registered players:</h4>\n<p>\n";
2120                echo implode(", ",$names)."\n";
2121                echo "</p>\n</div>";
2122              }
2123          }
2124        else
2125          {
2126            echo "Sorry email and password don't match. Please <a href=\"$host\">try again</a>. <br />";
2127          }
2128      };
2129      output_footer();
2130      DB_close();
2131      exit();
2132    }
2133 /* default login page */
2134  else
2135    {
2136      $pre[0]=0;$game[0]=0;$done[0]=0;
2137      $r=mysql_query("SELECT COUNT(id) FROM Game GROUP BY status");
2138      if($r) {
2139        $pre  = mysql_fetch_array($r,MYSQL_NUM);
2140        $game = mysql_fetch_array($r,MYSQL_NUM);
2141        $done = mysql_fetch_array($r,MYSQL_NUM);
2142      }
2143
2144      $r=mysql_query("SELECT AVG(datediff(mod_date,create_date)) FROM Game where status='gameover' ");
2145      if($r)
2146        $avgage= mysql_fetch_array($r,MYSQL_NUM);
2147      else
2148        $avgage[0]=0;
2149
2150      output_home_page($pre[0],$game[0],$done[0],$avgage[0]);
2151    }
2152
2153 output_footer();
2154
2155 DB_close();
2156
2157 /*
2158  *Local Variables:
2159  *mode: php
2160  *mode: hs-minor
2161  *End:
2162  */
2163 ?>
2164
2165