NEW FEATURE: addicted people can turn of a lot of the email spam and just check...
[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                   /* save score in database */
1483                   // get calls from re/contra
1484                   $call_re     = NULL;
1485                   $call_contra = NULL;
1486                   foreach($userids as $user)
1487                     {
1488                       $hash  = DB_get_hash_from_gameid_and_userid($gameid,$user);
1489                       $call  = DB_get_call_by_hash($hash);
1490                       $party = DB_get_party_by_hash($hash);
1491
1492                       if($call!=NULL)
1493                         {
1494                           $call = (int) $call;
1495
1496                           if($party=="re")
1497                             {
1498                               if($call_re==NULL)
1499                                 $call_re = $call;
1500                               else if( $call < $call_re)
1501                                 $call_re = $call;
1502                             }
1503                           else if($party=="contra")
1504                             {
1505                               if($call_contra==NULL)
1506                                 $call_contra = $call;
1507                               else if( $call < $call_re)
1508                                 $call_contra = $call;
1509                             }
1510                         }
1511                     }
1512                   // no call, check 120:120
1513                   if($call_re == NULL && $call_contra==NULL)
1514                     if($re==120)
1515                       mysql_query("INSERT INTO Score".
1516                                   " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'againstqueens')");
1517
1518                   // no call or one call do scoring
1519                   if($call_re != NULL && $call_contra!=NULL)
1520                     {
1521                       // two calls: not sure what to do yet
1522                     }
1523                   else
1524                     {
1525                       $offset = 0;
1526
1527                       if($call_re!=NULL)
1528                         $offset = 120 - $call_re;
1529                       else if($call_contra!=NULL)
1530                         $offset = -1*(120 - $call_contra)-1;
1531
1532                       if($call_re==0)
1533                         $offset -= 1;
1534
1535                       if($call_contra==0)
1536                         $offset += 1;
1537
1538                       if($re > 120 + $offset)
1539                         {
1540                           /* re won */
1541
1542                           /* normal win */
1543                           foreach(array(120,150,180,210,240) as $p)
1544                             {
1545                               $offset = 0;
1546                               if($p==240)
1547                                 $offset = 1;
1548
1549                               if($re>$p-$offset)
1550                                 mysql_query("INSERT INTO Score".
1551                                             " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'".(240-$p)."')");
1552                             }
1553
1554                           /* re called something and won */
1555                           if($call_re!=NULL)
1556                             foreach(array(0,30,60,90,120) as $p)
1557                               {
1558                                 if($call_re<$p+1)
1559                                   mysql_query("INSERT INTO Score".
1560                                               " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'call$p')");
1561                               }
1562                         }
1563                       else
1564                         {
1565                           /* contra won */
1566                           mysql_query("INSERT INTO Score".
1567                                       " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'againstqueens')");
1568
1569                           /* normal win */
1570                           foreach(array(120,150,180,210,240) as $p)
1571                             {
1572                               $offset = 0;
1573                               if($p==240)
1574                                 $offset = 1;
1575
1576                               if($re>$p-$offset)
1577                                 mysql_query("INSERT INTO Score".
1578                                             " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'".(240-$p)."')");
1579                             }
1580
1581                           /* contra called something and won */
1582                           if($call_contra!=NULL)
1583                             foreach(array(0,30,60,90,120) as $p)
1584                               {
1585                                 if($call_contra<$p+1)
1586                                   mysql_query("INSERT INTO Score".
1587                                               " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'call$p')");
1588                               }
1589                         }
1590                     }
1591                   /* send out final email */
1592                   $all = array();
1593
1594                   foreach($userids as $user)
1595                     $all[] = DB_get_email_by_userid($user);
1596                   $To = implode(",",$all);
1597
1598                   $help = "\n\n (you can use reply all on this email to reach all the players.)\n";
1599                   mymail($To,$EmailName."game over (game ".DB_format_gameid($gameid).") part 1(2)",$message.$help);
1600
1601                   foreach($userids as $user)
1602                     {
1603                       $To   = DB_get_email_by_userid($user);
1604                       $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
1605
1606                       $link = "Use this link to have a look at game ".DB_format_gameid($gameid).": ".$host."?me=".$hash."\n\n" ;
1607                       if( DB_get_email_pref_by_uid($user) != "emailaddict" )
1608                         mymail($To,$EmailName."game over (game ".DB_format_gameid($gameid).") part 2(2)",$link);
1609                     }
1610                 }
1611             }
1612           else
1613             {
1614               echo "can't find that card?! <br />\n";
1615             }
1616         }
1617       else if(myisset("card") && !$myturn )
1618         {
1619           echo "please wait until it's your turn! <br />\n";
1620         }
1621
1622       if($seq!=4 && $trickNR>1)
1623         echo "    </div>\n  </li>\n";  /* end div trick, end li trick */
1624
1625       /* display points in case game is over */
1626       if($mystatus=='gameover' && DB_get_game_status_by_gameid($gameid)=='gameover' )
1627         {
1628           echo "  <li onclick=\"hl('13');\" class=\"current\"><a href=\"#\">Score</a>\n".
1629             "    <div class=\"trick\" id=\"trick13\">\n";
1630           /* add pic for re/contra
1631            "      <img class=\"arrow\" src=\"pics/arrow".($pos-1).".png\" alt=\"table\" />\n";*/
1632
1633           $result = mysql_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party,Hand.position FROM Hand".
1634                                 " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
1635                                 " LEFT JOIN User ON User.id=Hand.user_id".
1636                                 " LEFT JOIN Play ON Trick.id=Play.trick_id".
1637                                 " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
1638                                 " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
1639                                 " WHERE Hand.game_id='$gameid'".
1640                                 " GROUP BY User.fullname" );
1641           while( $r = mysql_fetch_array($result,MYSQL_NUM))
1642             echo "      <div class=\"card".($r[3]-1)."\">\n".
1643                  "        <span class=\"score\">".$r[2]."<br /> ".$r[1]."</span>\n".
1644                  "      </div>\n";
1645
1646           echo "    </div>\n  </li>\n";  /* end div trick, end li trick */
1647         }
1648
1649
1650       echo "</ul>\n"; /* end ul tricks*/
1651
1652       $mycards = DB_get_hand($me);
1653       $mycards = mysort($mycards,$gametype);
1654       echo "<div class=\"mycards\">\n";
1655
1656       if($myturn && !myisset("card") && $mystatus=='play' )
1657         {
1658           echo "Hello ".$myname.", it's your turn!  <br />\n";
1659           echo "Your cards are: <br />\n";
1660
1661           /* do we have to follow suite? */
1662           $followsuit = 0;
1663           if(have_suit($mycards,$firstcard))
1664             $followsuit = 1;
1665
1666           foreach($mycards as $card)
1667             {
1668               if($followsuit && !same_type($card,$firstcard))
1669                 display_card($card,$PREF["cardset"]);
1670               else
1671                 display_link_card($card,$PREF["cardset"]);
1672             }
1673         }
1674       else if($mystatus=='play' )
1675         {
1676           echo "Your cards are: <br />\n";
1677           foreach($mycards as $card)
1678             display_card($card,$PREF["cardset"]);
1679         }
1680       else if($mystatus=='gameover')
1681         {
1682           $oldcards = DB_get_all_hand($me);
1683           $oldcards = mysort($oldcards,$gametype);
1684           echo "Your cards were: <br />\n";
1685           foreach($oldcards as $card)
1686             display_card($card,$PREF["cardset"]);
1687
1688           $userids = DB_get_all_userid_by_gameid($gameid);
1689           foreach($userids as $user)
1690             {
1691               $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
1692
1693               if($userhash!=$me)
1694                 {
1695                   echo "<br />";
1696
1697                   $name = DB_get_name_by_userid($user);
1698                   $oldcards = DB_get_all_hand($userhash);
1699                   $oldcards = mysort($oldcards,$gametype);
1700                   echo "$name's cards were: <br />\n";
1701                   foreach($oldcards as $card)
1702                     display_card($card,$PREF["cardset"]);
1703                 }
1704             };
1705         }
1706       echo "</div>\n";
1707
1708       /* if the game is over do some extra stuff, therefore exit the swtich statement if we are still playing*/
1709       if($mystatus=='play')
1710         break;
1711
1712       /* the following happens only when the gamestatus is 'gameover' */
1713       /* check if game is over, display results */
1714       if(DB_get_game_status_by_gameid($gameid)=='play')
1715         {
1716           echo "the game is over for you.. other people still need to play though";
1717         }
1718       else
1719         {
1720           $result = mysql_query("SELECT Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
1721                                 " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
1722                                 " LEFT JOIN User ON User.id=Hand.user_id".
1723                                 " LEFT JOIN Play ON Trick.id=Play.trick_id".
1724                                 " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
1725                                 " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
1726                                 " WHERE Hand.game_id='$gameid'".
1727                                 " GROUP BY Hand.party" );
1728           echo "<div class=\"total\"> Totals:<br />\n";
1729           while( $r = mysql_fetch_array($result,MYSQL_NUM))
1730             echo "  ".$r[0]." ".$r[1]."<br />\n";
1731           echo "</div>\n";
1732
1733         }
1734       break;
1735     default:
1736       myerror("error in testing the status");
1737     }
1738     /* output left menu */
1739     display_user_menu();
1740
1741     /* output right menu */
1742
1743       /* display rule set for this game */
1744     echo "<div class=\"gameinfo\">\n";
1745
1746     if($gamestatus != 'pre')
1747       echo " Gametype: $GT <br />\n";
1748
1749     echo "Rules: <br />\n";
1750     echo "10ofhearts : ".$RULES["dullen"]      ."<br />\n";
1751     echo "schweinchen: ".$RULES["schweinchen"] ."<br />\n";
1752     echo "call:        ".$RULES["call"]        ."<br />\n";
1753
1754     echo "<hr />\n";
1755     if($gamestatus == 'play' )
1756       output_form_calls($me);
1757
1758     /* get time from the last action of the game */
1759     $result  = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " );
1760     $r       = mysql_fetch_array($result,MYSQL_NUM);
1761     $gameend = time() - strtotime($r[0]);
1762
1763     if($gamestatus == 'play' || $gameend < 60*60*24*7)
1764       {
1765         echo "<br />\nA short comment:<input name=\"comment\" type=\"text\" size=\"15\" maxlength=\"100\" />\n";
1766         echo "<hr />";
1767       }
1768
1769     echo "<input type=\"submit\" value=\"submit\" />\n";
1770
1771
1772     if($mystatus=='gameover' && DB_get_game_status_by_gameid($gameid)=='gameover' )
1773       {
1774         echo "<hr />\n";
1775
1776         $session = DB_get_session_by_gameid($gameid);
1777         $result  = mysql_query("SELECT id,create_date FROM Game".
1778                                " WHERE session=$session".
1779                                " ORDER BY create_date DESC".
1780                                " LIMIT 1");
1781         $r = -1;
1782         if($result)
1783           $r = mysql_fetch_array($result,MYSQL_NUM);
1784
1785         if(!$session || $gameid==$r[0])
1786           {
1787             /* suggest a new game with the same people in it, just rotated once (unless last game was solo) */
1788             $names = DB_get_all_names_by_gameid($gameid);
1789             $type  = DB_get_gametype_by_gameid($gameid);
1790
1791             if($type=="solo")
1792               output_ask_for_new_game($names[0],$names[1],$names[2],$names[3],$gameid);
1793             else
1794               output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid);
1795           }
1796       }
1797
1798     $session = DB_get_session_by_gameid($gameid);
1799     $score = generate_score_table($session);
1800
1801     //  if(size_of($score)>30)
1802       echo $score;
1803
1804     echo "</div>\n";
1805
1806
1807     echo "</form>\n";
1808     output_footer();
1809     DB_close();
1810     exit();
1811  }
1812 /* user status page */
1813 else if( myisset("email","password") || isset($_SESSION["name"]) )
1814    {
1815      /* test id and password, should really be done in one step */
1816      if(!isset($_SESSION["name"]))
1817        {
1818          $email     = $_REQUEST["email"];
1819          $password  = $_REQUEST["password"];
1820        }
1821      else
1822        {
1823          $name = $_SESSION["name"];
1824          $email     = DB_get_email_by_name($name);
1825          $password  = DB_get_passwd_by_name($name);
1826        };
1827
1828      if(myisset("forgot"))
1829        {
1830          $ok = 1;
1831
1832          $myid = DB_get_userid_by_email($email);
1833          if(!$myid)
1834            $ok = 0;
1835
1836          if($ok)
1837            {
1838              /* check how many entries in recovery table */
1839              $number = DB_get_number_of_passwords_recovery($myid);
1840
1841              /* if less than N recent ones, add a new one and send out email */
1842              if( $number < 5 )
1843                {
1844                  echo "Ok, I send you a new password. <br />";
1845                  if($number >1)
1846                    echo "N.B. You tried this already $number times during the last day and it will only work ".
1847                      " 5 times during a day.<br />";
1848                  echo "The new password will be valid for one day, make sure you reset it to something else.<br />";
1849                  echo "Back to the  <a href=\"$host\">main page</a>.";
1850
1851                  $TIME  = (string) time(); /* to avoid collisions */
1852                  $hash  = md5("Anewpassword".$email.$TIME);
1853                  $newpw = substr($hash,1,8);
1854
1855                  $message = "Someone (hopefully you) requested a new password. \n".
1856                    "You can use this email and the following password: \n".
1857                    "   $newpw    \n".
1858                    "to log into the server. The new password is valid for 24h, so make\n".
1859                    "sure you reset your password to something new. Your old password will\n".
1860                    " also still be valid until you set a new one\n";
1861                  mymail($email,$EmailName."recovery ",$message);
1862
1863                  DB_set_recovery_password($myid,md5($newpw));
1864                }
1865              else
1866                {
1867                  echo "Sorry you already tried 5 times during the last 24h.<br />".
1868                    "You need to use one of those passwords or wait to get a new one.<br />";
1869                  echo "Back to the <a href=\"$host\">main page</a>.";
1870                }
1871            }
1872          else
1873            {
1874              if($email=="")
1875                echo "You need to give me an email address! <br />".
1876                  "Please try <a href=\"$host\">again</a>.";
1877              else
1878                echo "Couldn't find a player with this email! <br />".
1879                  "Please contact Arun, if you think this is a mistake <br />".
1880                  "or else try <a href=\"$host\">again</a>.";
1881            }
1882        }
1883      else
1884      {
1885        /* verify password and email */
1886        if(strlen($password)!=32)
1887          $password = md5($password);
1888
1889        $ok  = 1;
1890        $myid = DB_get_userid_by_email_and_password($email,$password);
1891        if(!$myid)
1892          $ok = 0;
1893
1894        if($ok)
1895          {
1896            DB_get_PREF($myid);
1897
1898            if(myisset("setpref"))
1899              {
1900                $setpref=$_REQUEST["setpref"];
1901                switch($setpref)
1902                  {
1903                  case "germancards":
1904                  case "englishcards":
1905                    $result = mysql_query("SELECT * from User_Prefs".
1906                                          " WHERE user_id='$myid' AND pref_key='cardset'" );
1907                    if( mysql_fetch_array($result,MYSQL_NUM))
1908                      $result = mysql_query("UPDATE User_Prefs SET value=".DB_quote_smart($setpref).
1909                                            " WHERE user_id='$myid' AND pref_key='cardset'" );
1910                    else
1911                      $result = mysql_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','cardset',".
1912                                            DB_quote_smart($setpref).")");
1913                    echo "Ok, changed you preferences for the cards.\n";
1914                    break;
1915                  case "emailaddict":
1916                  case "emailnonaddict":
1917                    $result = mysql_query("SELECT * from User_Prefs".
1918                                          " WHERE user_id='$myid' AND pref_key='email'" );
1919                    if( mysql_fetch_array($result,MYSQL_NUM))
1920                      $result = mysql_query("UPDATE User_Prefs SET value=".DB_quote_smart($setpref).
1921                                            " WHERE user_id='$myid' AND pref_key='email'" );
1922                    else
1923                      $result = mysql_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','email',".
1924                                            DB_quote_smart($setpref).")");
1925                    echo "Ok, changed you preferences for sending out emails.\n";
1926                    break;
1927                  }
1928              }
1929            else if(myisset("passwd"))
1930              {
1931                if( $_REQUEST["passwd"]=="ask" )
1932                  {
1933                    /* reset password form*/
1934                    output_password_recovery($email,$password);
1935                  }
1936                else if($_REQUEST["passwd"]=="set")
1937                  {
1938                    /* reset password */
1939                    $ok = 1;
1940
1941                    /* check if old password matches */
1942                    $oldpasswd = md5($_REQUEST["password0"]);
1943                    if(!( ($password == $oldpasswd) || DB_check_recovery_passwords($oldpasswd,$email) ))
1944                      $ok = -1;
1945                    /* check if new passwords are types the same twice */
1946                    if($_REQUEST["password1"] != $_REQUEST["password2"] )
1947                      $ok = -2;
1948
1949                    switch($ok)
1950                      {
1951                      case '-2':
1952                        echo "The new passwords don't match. <br />";
1953                        break;
1954                      case '-1':
1955                        echo "The old password is not correct. <br />";
1956                        break;
1957                      case '1':
1958                        echo "Changed the password.<br />";
1959                        mysql_query("UPDATE User SET password='".md5($_REQUEST["password1"]).
1960                                    "' WHERE id=".DB_quote_smart($myid));
1961                        break;
1962                      }
1963                    /* set password */
1964                  }
1965              }
1966            else /* output default user page */
1967              {
1968                $time     = DB_get_user_timestamp($myid);
1969                $unixtime = strtotime($time);
1970
1971                $offset   = DB_get_user_timezone($myid);
1972                $zone     = return_timezone($offset);
1973                date_default_timezone_set($zone);
1974
1975                $myname = DB_get_name_by_email($email);
1976                $_SESSION["name"] = $myname;
1977
1978                if(isset($_SESSION["name"]))
1979                  output_status($_SESSION["name"]);
1980
1981                /* display links to settings */
1982                output_user_settings();
1983
1984                echo "<div class=\"lastlogin\">last login: ".date("r",$unixtime)."</div>";
1985
1986                DB_update_user_timestamp($myid);
1987
1988                display_user_menu();
1989
1990                echo "<div class=\"user\">";
1991                echo "<h4>These are all your games:</h4>\n";
1992                echo "<p>Session: <br />\n";
1993                echo "<span class=\"gamestatuspre\"> p </span> =  pre-game phase ";
1994                echo "<span class=\"gamestatusplay\">P </span> =  game in progess ";
1995                echo "<span class=\"gamestatusover\">F </span> =  game finished <br />";
1996                echo "</p>\n";
1997
1998                $output = array();
1999                $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player,Game.status from Hand".
2000                                      " LEFT JOIN Game ON Game.id=Hand.game_id".
2001                                      " WHERE user_id='$myid'".
2002                                      " ORDER BY Game.session,Game.create_date" );
2003                $gamenrold = -1;
2004                echo "<table>\n <tr><td>\n";
2005                while( $r = mysql_fetch_array($result,MYSQL_NUM))
2006                  {
2007                    $game = DB_format_gameid($r[1]);
2008                    $gamenr = (int) $game;
2009                    if($gamenrold < $gamenr)
2010                      {
2011                        if($gamenrold!=-1)
2012                          echo "</td></tr>\n <tr> <td>$gamenr:</td><td> ";
2013                        else
2014                          echo "$gamenr:</td><td> ";
2015                        $gamenrold = $gamenr;
2016                      }
2017                    if($r[4]=='pre')
2018                      {
2019                        echo "\n   <span class=\"gamestatuspre\"><a href=\"".$host."?me=".$r[0]."\">p </a></span> ";
2020
2021                      }
2022                    else if ($r[4]=='gameover')
2023                      echo "\n   <span class=\"gamestatusover\"><a href=\"".$host."?me=".$r[0]."\">F </a></span> ";
2024                    else
2025                      {
2026                        echo "\n   <span class=\"gamestatusplay\"><a href=\"".$host."?me=".$r[0]."\">P </a></span> ";
2027                      }
2028                    if($r[4] != 'gameover')
2029                      {
2030                        echo "</td><td>\n    ";
2031                        if($r[3])
2032                          {
2033                            if($r[3]==$myid)
2034                              echo "(it's <strong>your</strong> turn)\n";
2035                            else
2036                              {
2037                                $name = DB_get_name_by_userid($r[3]);
2038                                $gameid = $r[1];
2039                                if(DB_get_reminder($r[3],$gameid)==0)
2040                                  if(time()-strtotime($r[2]) > 60*60*24*7)
2041                                    echo "".
2042                                      "<a href=\"$host?remind=1&amp;me=".$r[0]."\">Send a reminder.</a>";
2043                                echo "(it's $name's turn)\n";
2044                              };
2045                          }
2046                        if(time()-strtotime($r[2]) > 60*60*24*30)
2047                          echo "".
2048                            "<a href=\"$host?cancle=1&amp;me=".$r[0]."\">Cancel?</a>".
2049                            " (clicking here is final and can't be restored)";
2050
2051                      }
2052                  }
2053                echo "</td></tr>\n</table>\n";
2054                $names = DB_get_all_names();
2055                echo "<h4>Registered players:</h4>\n<p>\n";
2056                echo implode(", ",$names)."\n";
2057                echo "</p>\n</div>";
2058              }
2059          }
2060        else
2061          {
2062            echo "Sorry email and password don't match. Please <a href=\"$host\">try again</a>. <br />";
2063          }
2064      };
2065      output_footer();
2066      DB_close();
2067      exit();
2068    }
2069 /* default login page */
2070  else
2071    {
2072      $pre[0]=0;$game[0]=0;$done[0]=0;
2073      $r=mysql_query("SELECT COUNT(id) FROM Game GROUP BY status");
2074      if($r) {
2075        $pre  = mysql_fetch_array($r,MYSQL_NUM);
2076        $game = mysql_fetch_array($r,MYSQL_NUM);
2077        $done = mysql_fetch_array($r,MYSQL_NUM);
2078      }
2079
2080      $r=mysql_query("SELECT AVG(datediff(mod_date,create_date)) FROM Game where status='gameover' ");
2081      if($r)
2082        $avgage= mysql_fetch_array($r,MYSQL_NUM);
2083      else
2084        $avgage[0]=0;
2085
2086      output_home_page($pre[0],$game[0],$done[0],$avgage[0]);
2087    }
2088
2089 output_footer();
2090
2091 DB_close();
2092
2093 /*
2094  *Local Variables:
2095  *mode: php
2096  *mode: hs-minor
2097  *End:
2098  */
2099 ?>
2100
2101