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