found a bug in the shuffling routine
[e-DoKo.git] / index.php
index 302ec69054b52d748b5eea1eb6cc665929ea86df..712b48b4ce745e6ba2999572b50b88f0a219089e 100644 (file)
--- a/index.php
+++ b/index.php
@@ -13,15 +13,26 @@ include_once("functions.php");   /* the rest */
 if(!isset($EmailName))
      $EmailName="[DoKo] ";
 
-if(0)
-{
-  output_header();
-  echo "Working on the database...please check back in a few mintues";
-  output_footer();
-  exit();
-}
-
-DB_open();
+
+/* in case work has to be done on the database or other section we can
+ * shut down the server and tell people to come back later 
+ */
+if(0) 
+  {
+    output_header();
+    echo "Working on the database...please check back in a few mintues"; 
+    output_footer(); 
+    exit(); 
+  }
+
+if(DB_open()<0)
+  {
+    output_header();
+    echo "Database error, can't connect...";
+    output_footer(); 
+    exit(); 
+  }
+
 output_header();
 
 /* check if we want to start a new game */
@@ -49,6 +60,7 @@ if(myisset("new"))
     if($EmailA=="" || $EmailB=="" || $EmailC=="" || $EmailD=="")
       {
        echo "couldn't find one of the names, please start a new game";
+       output_footer();
        exit();
       }
     
@@ -66,6 +78,7 @@ if(myisset("new"))
     if($ruleset <0) 
       {
        echo "Error defining ruleset: $ruleset";
+       output_footer();
        exit();
       };
     
@@ -78,28 +91,29 @@ if(myisset("new"))
        $ruleset = DB_get_ruleset_by_gameid($followup); /* just copy ruleset from old game, 
                                                         this way no manipulation is possible */
        if($session)
-         mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre',".
+         mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1','pre',".
                      "'$ruleset','$session' ,NULL)");
        else
          {
            /* get max session */
            $max = DB_get_max_session();
            $max++;
-           mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre',".
+           mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1','pre',".
                        "'$ruleset','$max' ,NULL)");
            mysql_query("UPDATE Game SET session='".$max."' WHERE id=".DB_quote_smart($followup));
          }
       }
     else
-      mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre', ".
+      mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1','pre', ".
                  "'$ruleset',NULL ,NULL)");
     $game_id = mysql_insert_id();
     
     /* create hash */
-    $hashA = md5("AGameOfDoko".$game_id.$PlayerA.$EmailA);
-    $hashB = md5("AGameOfDoko".$game_id.$PlayerB.$EmailB);
-    $hashC = md5("AGameOfDoko".$game_id.$PlayerC.$EmailC);
-    $hashD = md5("AGameOfDoko".$game_id.$PlayerD.$EmailD);
+    $TIME  = (string) time(); /* to avoid collisions */
+    $hashA = md5("AGameOfDoko".$game_id.$PlayerA.$EmailA.$TIME);
+    $hashB = md5("AGameOfDoko".$game_id.$PlayerB.$EmailB.$TIME);
+    $hashC = md5("AGameOfDoko".$game_id.$PlayerC.$EmailC.$TIME);
+    $hashD = md5("AGameOfDoko".$game_id.$PlayerD.$EmailD.$TIME);
     
     /* create hands */
     mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridA).
@@ -145,10 +159,9 @@ if(myisset("new"))
     
     echo "You started a new game. The emails have been sent out!";    
   }    /* end set up a new game */
+/* cancle a game, if nothing has happend in the last N minutes */
 else if(myisset("cancle","me"))
   {
-    /* cancle a game, if it is older than N minutes */
-    
     $me = $_REQUEST["me"];
     
     /* test for valid ID */
@@ -157,6 +170,7 @@ else if(myisset("cancle","me"))
       {
        echo "Can't find you in the database, please check the url.<br />\n";
        echo "perhaps the game has been cancled, check by login in <a href=\"$host\">here</a>.";
+       output_footer();
        exit();
       }
     
@@ -169,7 +183,7 @@ else if(myisset("cancle","me"))
     /* check if game really is old enough */
     $result = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " );
     $r = mysql_fetch_array($result,MYSQL_NUM);
-    if(time()-strtotime($r[0]) > 60*60*24*30)
+    if(time()-strtotime($r[0]) > 60*60*24*30) /* = 1 month */
       {
        $message = "Hello, \n\n".
          "Game $gameid has been cancled since nothing happend for a while and $myname requested it.\n";
@@ -189,12 +203,10 @@ else if(myisset("cancle","me"))
     else
       echo "<p>You need to wait longer before you can cancle a game...</p>\n";
   }
+/* handle request from one specific player for one game,
+ * (the hash is set on a per game base) */
 else if(myisset("me"))
   {
-    /* handle request from one specific player,
-     * the hash is set on a per game base
-     */
-    
     $me = $_REQUEST["me"];
     
     /* test for valid ID */
@@ -203,9 +215,11 @@ else if(myisset("me"))
       {
        echo "Can't find you in the database, please check the url.<br />\n";
        echo "perhaps the game has been cancled, check by login in <a href=\"$host\">here</a>.";
+       output_footer();
        exit();
       }
-    
+
+    /* the user had done something, update the timestamp */
     DB_update_user_timestamp($myid);
     
     /* get some information from the DB */
@@ -213,20 +227,51 @@ else if(myisset("me"))
     $myname   = DB_get_name_by_hash($me);
     $mystatus = DB_get_status_by_hash($me);
     $mypos    = DB_get_pos_by_hash($me);
-    
-    /* display the game number */
-    echo "<p class=\"gamenumber\"> Game $gameid </p>\n";
+    $myhand   = DB_get_handid_by_hash($me);
 
-    /* display rule set */
-    echo "<div class=\"ruleset\">\n Rules: <br />";
-    $result = mysql_query("SELECT * FROM Rulesets LEFT JOIN Game ON Game.ruleset=Rulesets.id WHERE Game.id='$gameid'" );
+    /* get prefs and save them */
+    $result = mysql_query("SELECT value from User_Prefs".
+                         " WHERE user_id='$myid' AND pref_key='cardset'" );
+    $r = mysql_fetch_array($result,MYSQL_NUM);
+    if($r)
+      {
+       if($r[0]=="germancards" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) /* licence only valid until then */
+         $PREF["cardset"]="altenburg";
+      else
+       $PREF["cardset"]="english";
+      }
+    else
+      $PREF["cardset"]="english";
+      
+      
+    /* get rule set for this game */
+    $result = mysql_query("SELECT * FROM Rulesets".
+                         " LEFT JOIN Game ON Game.ruleset=Rulesets.id ".
+                         " WHERE Game.id='$gameid'" );
     $r      = mysql_fetch_array($result,MYSQL_NUM);
 
-    $RULES["dullen"]=$r[2];
-    $RULES["schweinchen"]=$r[3];
+    $RULES["dullen"]      = $r[2];
+    $RULES["schweinchen"] = $r[3];
+    
+    /* get some infos about the game */
+    $gametype   = DB_get_gametype_by_gameid($gameid);
+    $gamestatus = DB_get_game_status_by_gameid($gameid);
+    $GT         = $gametype;
+    if($gametype=="solo")
+      {
+       $gametype = DB_get_solo_by_gameid($gameid);
+       $GT  = $gametype." ".$GT;
+      }
+
+    /* display rule set for this game */
+    echo "<div class=\"ruleset\">\n";
 
-    echo "10ofhearts : ".$r[2]."<br />";
-    echo "schweinchen: ".$r[3]."<br />";
+    if($gamestatus != 'pre')
+      echo " Gametype: $GT <br />\n";
+    
+    echo "Rules: <br />\n";
+    echo "10ofhearts : ".$r[2]."<br />\n";
+    echo "schweinchen: ".$r[3]."<br />\n";
     echo "</div>\n";
     
     /* does anyone have both foxes */
@@ -241,7 +286,6 @@ else if(myisset("me"))
            $GAME["schweinchen-who"]=$hash;
          }
       };
-        
 
     /* mystatus gets the player through the different stages of a game.
      * start:    yes/no
@@ -261,9 +305,12 @@ else if(myisset("me"))
        DB_set_hand_status_by_hash($me,'init');
        break;
       case 'init':
+       /* first check if everything went ok  in the last step
+        * if not, send user back, if yes, check what he did
+        */
        if( !myisset("in") )
          {
-           echo "you need to answer the question";
+           echo "<p> you need to answer the <a href=\"$host?me=$me\">question</a>.</p>";
            DB_set_hand_status_by_hash($me,'start');
          }
        else
@@ -292,7 +339,7 @@ else if(myisset("me"))
                sort($mycards);
                echo "<p class=\"mycards\" style=\"margin-top:8em;\">your cards are: <br />\n";
                foreach($mycards as $card) 
-                 display_card($card);
+                 display_card($card,$PREF["cardset"]);
                echo "</p>\n";   
                
                check_for_sickness($me,$mycards);
@@ -302,10 +349,13 @@ else if(myisset("me"))
              }
          }
        break;
-      
+
     case 'check':
-      echo "checking if you selected solo or nines...<br />".
-       " Please click <a href=\"$host?me=$me\">here</a> to finish the setup.<br />";
+      /* ok, user is in the game, saw his cards and selected his vorbehalt
+       * so first we check what he selected
+       */
+      echo "Processing what you selected in the last step...<br />";
+
       if(!myisset("solo","wedding","poverty","nines") )
        {
          /* all these variables have a pre-selected default,
@@ -321,9 +371,12 @@ else if(myisset("me"))
          
          if( $_REQUEST["solo"]!="No")
            {
+             /* user wants to play a solo */
+
              /* store the info in the user's hand info */
              DB_set_solo_by_hash($me,$_REQUEST["solo"]);
              DB_set_sickness_by_hash($me,"solo");
+
              echo "<br />Seems like you want to play a ".$_REQUEST["solo"]." solo. Got it.<br />\n";
              
              if($gametype == "solo" && $startplayer<$mypos)
@@ -346,32 +399,30 @@ else if(myisset("me"))
            }
          else if($_REQUEST["poverty"] == "yes")
            {
-             echo "So you got poverty. You might as well have said nothing, since this is not implemented yet,".
-               " so you need to play a normal game...to make it a bit harder, I'll tell the other people that".
-               " you only have a few trump... should make the game more interesting (although perhaps not for you:))<br />\n";
+             echo "Don't think you can win with just a few trump...? ok, poverty chosen <br />\n";
              DB_set_sickness_by_hash($me,"poverty");
            }
          else if($_REQUEST["nines"] == "yes")
            {
-             echo "What you just don't want to play a game because you have a few nines? Well, if no one".
+             echo "What? You just don't want to play a game because you have a few nines? Well, if no one".
                " is playing solo, this game will be canceled.<br />\n";
              DB_set_sickness_by_hash($me,"nines");
            }
        }
-      
+
+      echo " Ok, done with checking, please go to the <a href=\"$host?me=$me\">next step of the setup</a>.<br />";
+
       /* move on to the next stage*/
       DB_set_hand_status_by_hash($me,'poverty');
-      
-      
       break;
+
     case 'poverty':
       /* here we need to check if there is a solo or some other form of sickness.
-       * If so, which one counts
+       * If so, which one is the most important one
        * set that one in the Game table
        * tell people about it.
        */
-      echo "<br />checking if someone else selected solo or nines... poverty not handled at the moment<br />".
-       " Please click <a href=\"$host?me=$me\">here</a> to finish the setup.<br />";    
+      echo "<br /> Checking if someone else selected solo, nines or wedding or poverty.<br />";
       
       /* check if everyone has reached this stage */
       $userids = DB_get_all_userid_by_gameid($gameid);
@@ -383,26 +434,70 @@ else if(myisset("me"))
            $ok=0;
        };
 
-      if($ok)
+      if(!$ok)
+       {
+         echo "This step can only be handled after everyone finished the last step. ".
+           "Seems like this is not the case, so you need to wait a bit... please check back later....<br />";
+       }
+      else
        {
          echo "Everyone has finished checking their cards, let's see what they said...<br />";
-         /* check what kind of game we are playing */
+
+         /* check what kind of game we are playing,  in case there are any solos this already 
+          *will have the correct information in it */
          $gametype    = DB_get_gametype_by_gameid($gameid);
          $startplayer = DB_get_startplayer_by_gameid($gameid);
+
+         /* check for different sickness and just output a general info */
+
          
-         /* nines? */
          $nines = 0;
-         /* check for nines */
+         $poverty = 0;
+         $wedding = 0;
+         $solo = 0;
          foreach($userids as $user)
-           if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'nines')
-             $nines = $user;
-         
+           {
+             $name = DB_get_name_by_userid($user);
+             $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
+             if($usersick == 'nines')
+               {
+                 $nines = $user;
+                 echo "$name has a Vorbehalt. <br />";
+                 break;
+               }
+             else if($usersick == 'poverty')
+               {
+                 $poverty++;
+                 echo "$name has a Vorbehalt. <br />";
+               }
+             else if($usersick == 'wedding')
+               {
+                 $wedding=$user;
+                 echo "$name has a Vorbehalt. <br />"  ;
+               }
+             else if($usersick == 'solo')
+               {
+                 $solo++;
+                 echo "$name has a Vorbehalt. <br />"  ;
+               }
+           }
+
+         /* now check which sickness comes first and set the gametype to it */
+
          /* gamestatus == normal, => cancel game */
-         if($nines && $gametype != "solo")
+         if($gametype == "solo")
            {
+             /* do nothing */
+           }
+         else if($nines)
+           {
+             /* cancle game */
              /* TODO: should we keep statistics of this? */
              $message = "Hello, \n\n".
-               "the game has been canceled because ".DB_get_name_by_userid($nines)." has five or more nines.\n";
+               "the game has been canceled because ".DB_get_name_by_userid($nines).
+               " has five or more nines and nobody is playing solo.\n";
+             
+             /* TODO: add info about redeal in case this is a game of a series */
              
              $userids = DB_get_all_userid_by_gameid($gameid);
              foreach($userids as $user)
@@ -413,84 +508,73 @@ else if(myisset("me"))
              
              /* delete everything from the dB */
              DB_cancel_game($me);
+             
+             echo "The game has been canceled because ".DB_get_name_by_userid($nines).
+               " has five or more nines and nobody is playing solo.\n";
+             output_footer();
              exit();
            }
-
-         /* check for different sickness and just output a general info */
-         
-         /* check players for poverty */
-         $poverty = 0;
-         foreach($userids as $user)
+         else if($poverty==1)
            {
-             if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'poverty')
+             DB_set_gametype_by_gameid($gameid,"poverty");
+             $gametype = "poverty";
+             $who=DB_get_sickness_by_gameid($gameid);
+             if(!$who)
                {
-                 $poverty++;
-                 $name = DB_get_name_by_userid($user);
-                 echo "$name has a Vorbehalt. <br />";
+                 $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid);
+                 if($firstsick == "poverty")
+                   DB_set_sickness_by_gameid($gameid,2); /* who needs to be asked first */
+                 else
+                   DB_set_sickness_by_gameid($gameid,1); /* who needs to be asked first */
                }
            }
-
-         /* check players for wedding */
-         $wedding = 0;
-         foreach($userids as $user)
+         else if($poverty==2)
            {
-             if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'wedding')
+             DB_set_gametype_by_gameid($gameid,"dpoverty");
+             $gametype = "dpoverty";
+             $who=DB_get_sickness_by_gameid($gameid);
+             if(!$who)
                {
-                 $wedding=$user;
-                 $name = DB_get_name_by_userid($user);
-                 echo "$name has a Vorbehalt. <br />"  ;
-               }
-           };
-
-         /* check for solo, output vorbehalt */
-         $solo = 0;
-         foreach($userids as $user)
-           {
-             if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'solo')
-               {
-                 $solo++;
-                 $name = DB_get_name_by_userid($user);
-                 echo "$name has a Vorbehalt. <br />"  ;
+                 $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid);
+                 if($firstsick == "poverty")
+                   {
+                     $seconsick = DB_get_sickness_by_pos_and_gameid(1,$gameid);
+                     if($secondsick == "poverty")
+                       DB_set_sickness_by_gameid($gameid,30); /* who needs to be asked first */
+                     else
+                       DB_set_sickness_by_gameid($gameid,20); /* who needs to be asked first */
+                   }
+                 else
+                   DB_set_sickness_by_gameid($gameid,10); /* who needs to be asked first */
                }
            }
-
-         /* now check which sickness comes first and set the gametype to it */
-
-         /* if gamestatus == normal, set poverty or dpovert (in case two people have poverty) */
-         if($poverty>0 && $gametype == "normal")
-           {
-             if($poverty==1)
-               {
-                 DB_set_gametype_by_gameid($gameid,"poverty");
-                 $gametype = "poverty";
-               }
-             else if($poverty==2)
-               {
-                 DB_set_gametype_by_gameid($gameid,"dpoverty");
-                 $gametype = "dpoverty";
-               };
-           };
-         /* if gamestatus == normal, set wedding  */
-         if($wedding> 0 && $gametype == "normal")
+         else if($wedding> 0)
            {
              DB_set_gametype_by_gameid($gameid,"wedding");
              $gametype = "wedding";
            };
-         
+
+         echo "<br />\n";
+
          /* now the gametype is set correctly (shouldn't matter that this is calculated for every user)
           * output what kind of game we have */
          
-         echo "<br />\n";
-
-         $poverty=0;
+         $poverty = 0;
          foreach($userids as $user)
            {
-             $name = DB_get_name_by_userid($user);
+             /* userids are sorted by position... 
+              * so output whatever the firstone has, then whatever the next one has
+              * stop when the sickness is the same as the gametype 
+              */
+             
+             $name     = DB_get_name_by_userid($user);
              $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
+
+             if($usersick)
+               echo "$name has $usersick. <br />"; /*TODO: perhaps save this in a string and store in Game? */
+
              if($usersick=="poverty")
                $poverty++;
-             if($usersick)
-               echo "$name has $usersick <br />";
              if($usersick == "wedding" && $gametype =="wedding")
                break;
              if($usersick == "poverty" && $gametype =="poverty")
@@ -499,9 +583,9 @@ else if(myisset("me"))
                break;
              if($usersick == "solo" && $gametype =="solo")
                break;
-                         
            };
 
+         /* output Schweinchen in case the rules need it */
          if( $gametype != "solo")
            if($GAME["schweinchen"] && $RULES["schweinchen"]=="both" )
              echo DB_get_name_by_hash($GAME["schweinchen-who"])." has Schweinchen. <br />";
@@ -520,11 +604,18 @@ else if(myisset("me"))
                DB_set_party_by_hash($me,"contra");
              DB_set_hand_status_by_hash($me,'play');
              break;
+
            case "wedding":
+             /* set person with the wedding to re, do the rest during the game */
+             $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
+             if($usersick == "wedding")
+               DB_set_party_by_hash($me,"re");
+             
              echo "Don't know who will be Re and Contra, you need to ".
                "figure that out at the end of the game yourself <br />\n";
              DB_set_hand_status_by_hash($me,'play');
              break;
+
            case "normal":
              $hand = DB_get_all_hand($me);
              
@@ -536,15 +627,204 @@ else if(myisset("me"))
              break;
            case "poverty":
            case "dpoverty":
-             echo "TODO: handle poverty here";
-             DB_set_hand_status_by_hash($me,'play');
+             /* check if poverty resolved (e.g. DB.Game who set to NULL)
+              *   yes? =>trump was taken, start game; break; 
+              */
+             $who=DB_get_sickness_by_gameid($gameid);
+             if($who<0)
+               { /* trump has been taken */
+                 DB_set_hand_status_by_hash($me,'play');
+                 break;
+               };
+             
+             if($who>9) /*= two people still have trump on the table*/
+               $add=10;
+             else
+               $add=1;
+
+             /* check if we are being asked now
+              *    no, display wait message, e.g. player X is asked at the moment 
+              */
+             $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
+             if(myisset("trump") && $_REQUEST["trump"]=="no" && ($who==$mypos || $who==$mypos*10))
+               {
+                 /* user doesn't want to take trump */
+                 /* set next player who needs to be asked */
+                 $firstsick  = (string) DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
+                 $secondsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
+                 
+                 if($firstsick=="poverty")
+                   {
+                     if($secondsick=="poverty")
+                       DB_set_sickness_by_gameid($gameid,$who+$add*3);
+                     else
+                       DB_set_sickness_by_gameid($gameid,$who+$add*2);
+                   }
+                 else
+                   DB_set_sickness_by_gameid($gameid,$who+$add);
+
+                 /* this user is done */
+                 DB_set_hand_status_by_hash($me,'play');
+                 break;                
+               }
+             else if(myisset("trump") && !myisset("exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10))
+               {
+                 /* user wants to take trump */
+                 $trump = $_REQUEST["trump"];
+
+                 /* get hand id for user $trump */
+                 $userhand=DB_get_handid_by_gameid_and_userid($gameid,$trump);
+                 /* copy trump from player A to B */
+                 $result = mysql_query("UPDATE Hand_Card SET hand_id='$myhand' WHERE hand_id='$userhand' AND card_id<'27'" );
+                 
+                 /* set re/contra, if it is  not already set */
+                 $party = DB_get_party_by_hash($me);
+                 if(!$party)
+                   {
+                     foreach($userids as $user)
+                       {
+                         $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                         if($user == $trump || $user == $myid)
+                           DB_set_party_by_hash($hash,"re");
+                         else
+                           DB_set_party_by_hash($hash,"contra");
+                       }
+                   }
+                 /* add hidden button with trump in it to get to the next point */
+                 echo "<form action=\"index.php\" method=\"post\">\n";
+                 echo "  <input type=\"hidden\" name=\"exchange\" value=\"-1\" />\n";
+                 echo "  <input type=\"hidden\" name=\"trump\" value=\"".$trump."\" />\n";
+                 echo "  <input type=\"hidden\" name=\"me\" value=\"".$me."\" />\n";
+                 echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select cards to give back\" />\n";
+                 echo "</form>\n";
+               }
+             else if(myisset("trump","exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10))
+               {
+                 $trump    = $_REQUEST["trump"];
+                 $exchange = $_REQUEST["exchange"];
+                 $userhand = DB_get_handid_by_gameid_and_userid($gameid,$trump);
+
+                 /* if exchange is set to a value>0, exchange that card back to user $trump */
+                 if($exchange >0)
+                   {
+                     $result = mysql_query("UPDATE Hand_Card SET hand_id='$userhand'".
+                                           " WHERE hand_id='$myhand' AND card_id='$exchange'" );
+                   };
+                 
+                 /* if number of cards == 12, set status to play for both users */
+                 $result = mysql_query("SELECT COUNT(*) FROM Hand_Card  WHERE hand_id='$myhand'" );
+                 $r      = mysql_fetch_array($result,MYSQL_NUM);
+                 if(!$r)
+                   {
+                     die("error in poverty");
+                   };
+                 if($r[0]==12)
+                   {
+                     if($gametype=="poverty" || $who<9)
+                       {
+                         DB_set_sickness_by_gameid($gameid,-1); /* done with poverty */                          
+                       }
+                     else /* reduce poverty count by one, that is go to single digits $who */
+                       {
+                         $add=1;
+                         $who=$who/10;
+
+                         $firstsick  = DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
+                         $secondsick = DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
+                         if($firstsick!="poverty")
+                           DB_set_sickness_by_gameid($gameid,$who+$add);
+                         else
+                           {
+                             if($secondsick!="poverty")
+                               DB_set_sickness_by_gameid($gameid,$who+$add*2);
+                             else
+                               DB_set_sickness_by_gameid($gameid,$who+$add*3);
+                           };
+                       }
+                     
+                     /* this user is done */
+                     DB_set_hand_status_by_hash($me,'play');
+                     /* and so is his partner */
+                     $hash = DB_get_hash_from_gameid_and_userid($gameid,$trump);
+                     DB_set_hand_status_by_hash($hash,'play');
+
+                     break;
+                   }
+                 else
+                   {
+                     /* else show all trump, have lowest card pre-selected, have hidden setting for */
+                     echo "you need to get rid of a few cards<br />\n";
+                     
+                     set_gametype($gametype); /* this sets the $CARDS variable */
+                     $mycards = DB_get_hand($me);
+                     $mycards = mysort($mycards,$gametype);
+
+                     echo "<form class=\"exchange\" action=\"index.php\" method=\"post\">\n";
+                     $type="exchange";
+                     foreach($mycards as $card) 
+                       display_link_card($card,$PREF["cardset"],$type);
+                     echo "  <input type=\"hidden\" name=\"trump\" value=\"".$trump."\" />\n";
+                     echo "  <input type=\"hidden\" name=\"me\" value=\"".$me."\" />\n";
+                     echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select one card to give back\" />\n";
+                     echo "</form>\n";
+                   }
+               }
+             else if($who == $mypos || $who == $mypos*10)
+               {
+                 foreach($userids as $user)
+                   {
+                     $name = DB_get_name_by_userid($user);
+                     $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
+                     
+                     if($usersick=="poverty")
+                       {
+                         $hash =DB_get_hash_from_gameid_and_userid($gameid,$user);
+                         $cards=DB_get_hand($hash);
+                         $nrtrump=count_trump($cards);
+                         /* count trump */
+                         if($nrtrump<4)
+                           echo "Player $name has $nrtrump trump. Do you want to take them?".
+                             "<a href=\"index.php?me=$me&amp;trump=$user\">yes</a> <br />";
+                       }
+                   }
+                 echo "I don't want to take any trump: ".
+                   "<a href=\"index.php?me=$me&amp;trump=no\">yes</a> <br />";
+               }
+             else
+               {
+                 echo "it's not your turn yet to decide if you want to take the trump or not.";
+               }
+             /*
+              *    yes, display number of trump and user's hand, ask if he wants to take it 
+              *      no, set whom-to-ask to next player, email next player, cancle game if no next player
+              *      yes -> link to new page:display all cards, ask for N return cards
+              *          set re/contra 
+              *        
+              */
            };
        }
-      else
+      /* check if noone wanted to take trump, in that case the gamesickness would be set to 5 or 50 */
+      $who=DB_get_sickness_by_gameid($gameid);
+      if($who==5 || $who==50)
        {
-         echo "You need to wait for the others, the game can only start after everyone finished checking their cards.<br />";
-       };
-      
+         $message = "Hello, \n\n".
+           "Game $gameid has been cancled since nobody wanted to take the trump.\n";
+         
+         $userids = DB_get_all_userid_by_gameid($gameid);
+         foreach($userids as $user)
+           {
+             $To = DB_get_email_by_userid($user);
+             mymail($To,$EmailName."game cancled (poverty not resolved)",$message);
+           }
+         
+         /* delete everything from the dB */
+         DB_cancel_game($me);
+         
+         echo "<p style=\"background-color:red\";>Game $gameid has been cancled.<br /><br /></p>";
+         output_footer();
+         exit();
+       }
+
       /* check if all players are ready to play */
       $ok=1;
       foreach($userids as $user)
@@ -555,8 +835,25 @@ else if(myisset("me"))
        {
          /* only set this after all poverty, etc. are handled*/
          DB_set_game_status_by_gameid($gameid,'play');
+
+         /* email startplayer */
+         $startplayer = DB_get_startplayer_by_gameid($gameid);
+         $email       = DB_get_email_by_pos_and_gameid($startplayer,$gameid);
+         $hash        = DB_get_hash_from_game_and_pos($gameid,$startplayer);
+         
+         if($hash!=$me)
+           {
+             /* email startplayer) */
+             $message = "It's your turn now.\n".
+               "Use this link to play a card: ".$host."?me=".$hash."\n\n" ;
+             mymail($email,$EmailName."ready, set, go... ",$message);
+           }
+         else
+           echo " Please, <a href=\"$host?me=$me\">start</a> the game.<br />";  
        }
-      
+      else
+       echo "You finished the setup, at the moment you need to reload this page after everyone else has finished there setup so that the server can figure out vorbehalte... in future this will get an email in case you need to do anything, but this is not implemented yet :( <br />";      
+
       break;
     case 'play':
     case 'gameover': 
@@ -587,44 +884,26 @@ else if(myisset("me"))
       
       /* display useful things in divs */
       
-      /* display local time */
-      echo "<div class=\"time\">\n Local times:<table>";
-      $users = array();
-      $users = DB_get_all_userid_by_gameid($gameid);
-      foreach($users as $user)
-       {
-         $offset = DB_get_user_timezone($user);
-         $zone   = return_timezone($offset);
-         date_default_timezone_set($zone);
-         $name   = DB_get_name_by_userid($user);
-         
-         echo "<tr> <td>$name</td> <td>".date("Y-m-d H:i:s")."</td></tr>\n";
-       };
-      echo "</table>\n</div>\n";
-      
-      if($gamestatus != 'pre')
-       display_status($GT);
-      
       /* display links to the users status page */
       $result = mysql_query("SELECT email,password from User WHERE id='$myid'" );
       $r      = mysql_fetch_array($result,MYSQL_NUM);
-      output_link_to_user_page($r[0],$r[1]);
       
-      display_news();
+      display_links($r[0],$r[1]);
       
       /* end display useful things*/
       
       /* has the game started? No, then just wait here...*/
       if($gamestatus == 'pre')
        {
-         echo "you need to wait for the others... <br />";
+         echo "You finished the setup, but not everyone else finished it...so you need to wait for the others... <br />";
          break; /* not sure this works... the idea is that you can 
                  * only  play a card after everyone is ready to play */
        }
       
       /* display the table and the names */
       $result = mysql_query("SELECT  User.fullname as name,".
-                           "        Hand.position as position ".
+                           "        Hand.position as position, ".
+                           "        User.id ".
                            "FROM Hand ".
                            "LEFT JOIN User ON User.id=Hand.user_id ".
                            "WHERE Hand.game_id='".$gameid."' ".
@@ -636,11 +915,20 @@ else if(myisset("me"))
        {
          $name = $r[0];
          $pos  = $r[1];
-         
-         echo " <span class=\"table".($pos-1)."\">$name</span>\n";
+         $user = $r[2];
+
+         $offset = DB_get_user_timezone($user);
+         $zone   = return_timezone($offset);
+         date_default_timezone_set($zone);
+
+         echo " <span class=\"table".($pos-1)."\">\n";
+         echo " $name <br />\n";
+         echo " local time: ".date("Y-m-d H:i:s")."\n";
+         echo " </span>\n";
+
        }
       echo  "</div>\n";
-      
+
       /* get everything relevant to display the tricks */
       $result = mysql_query("SELECT Hand_Card.card_id as card,".
                            "       Hand.position as position,".
@@ -664,7 +952,7 @@ else if(myisset("me"))
       $firstcard = ""; /* first card in a trick */
       
       echo "\n<ul class=\"tricks\">\n";
-      echo "  <li> Hello $myname!   History: </li>\n";
+      echo "  <li class=\"nohighlight\"> Game $gameid: </li>\n";
       
       while($r = mysql_fetch_array($result,MYSQL_NUM))
        {
@@ -686,14 +974,14 @@ else if(myisset("me"))
              if($trick!=$lasttrick)
                {
                  /* start of an old trick? */
-                 echo "  <li onclick=\"hl('$trickNR');\"><a href=\"#\">Trick $trickNR</a>\n".
+                 echo "  <li onclick=\"hl('$trickNR');\" class=\"old\"><a href=\"#\">Trick $trickNR</a>\n".
                    "    <div class=\"trick\" id=\"trick".$trickNR."\">\n".
                    "      <img class=\"arrow\" src=\"pics/arrow".($pos-1).".png\" alt=\"table\" />\n";
                }
              else if($trick==$lasttrick)
                {
                  /* start of a last trick? */
-                 echo "  <li onclick=\"hl('$trickNR');\"><a href=\"#\">Current Trick</a>\n".
+                 echo "  <li onclick=\"hl('$trickNR');\" class=\"current\"><a href=\"#\">Trick $trickNR</a>\n".
                    "    <div class=\"trick\" id=\"trick".$trickNR."\">\n".
                    "      <img class=\"arrow\" src=\"pics/arrow".($pos-1).".png\" alt=\"table\" />\n";
                };
@@ -710,7 +998,7 @@ else if(myisset("me"))
            echo "        <span class=\"comment\">".$comment."</span>\n";
          
          echo "        ";
-         display_card($r[0]);
+         display_card($r[0],$PREF["cardset"]);
          
          echo "      </div>\n"; /* end div card */
          
@@ -766,9 +1054,12 @@ else if(myisset("me"))
              /* mark card as played */
              mysql_query("UPDATE Hand_Card SET played='true' WHERE hand_id='$handid' AND card_id=".
                          DB_quote_smart($card));
-             
+
+             /* update Game timestamp */
+             DB_update_game_timestamp($gameid);
+
              /* check for schweinchen */
-             echo "schweinchen = ".$GAME["schweinchen"]." --$card-<br />";
+             //echo "schweinchen = ".$GAME["schweinchen"]." --$card-<br />";
              if($card == 19 || $card == 20 )
                {
                  $GAME["schweinchen"]++;
@@ -797,7 +1088,7 @@ else if(myisset("me"))
              /* display played card */
              echo "<div class=\"card\">";
              echo " you played  <br />";
-             display_card($card);
+             display_card($card,$PREF["cardset"]);
              echo "</div>\n";
              
              /*check if we still have cards left, else set status to gameover */
@@ -928,7 +1219,7 @@ else if(myisset("me"))
        {
          echo "Hello ".$myname.", it's your turn!  <br />\n";
          echo "Your cards are: <br />\n";
-         echo "<form action=\"index.php?me=$me\" method=\"post\">\n";
+         echo "<form  action=\"index.php?me=$me\" method=\"post\">\n";
          
          /* do we have to follow suite? */
          $followsuit = 0;
@@ -938,9 +1229,9 @@ else if(myisset("me"))
          foreach($mycards as $card) 
            {
              if($followsuit && !same_type($card,$firstcard))
-               display_card($card);
+               display_card($card,$PREF["cardset"]);
              else
-               display_link_card($card);
+               display_link_card($card,$PREF["cardset"]);
            }
          
          echo "<br />\nA short comments:<input name=\"comment\" type=\"text\" size=\"30\" maxlength=\"50\" />\n";
@@ -952,7 +1243,7 @@ else if(myisset("me"))
        {
          echo "Your cards are: <br />\n";
          foreach($mycards as $card) 
-           display_card($card);
+           display_card($card,$PREF["cardset"]);
        }
       else if($mystatus=='gameover')
        {
@@ -960,7 +1251,7 @@ else if(myisset("me"))
          $oldcards = mysort($oldcards,$gametype);
          echo "Your cards were: <br />\n";
          foreach($oldcards as $card) 
-           display_card($card);
+           display_card($card,$PREF["cardset"]);
        }
       echo "</div>\n";
       
@@ -1014,7 +1305,8 @@ else if(myisset("me"))
     default:
       echo "error in testing the status";
     }
-  exit();
+    output_footer();
+    exit();
  } 
 /* user status page */ 
  else if(myisset("email","password"))
@@ -1022,62 +1314,113 @@ else if(myisset("me"))
      /* test id and password, should really be done in one step */
      $email     = $_REQUEST["email"];
      $password  = $_REQUEST["password"];
-     
-     if(strlen($password)!=32)
-       $password = md5($password);
-     
-     $ok=1;
-     $uid = DB_get_userid_by_email_and_password($email,$password);
-     if(!$uid)
-       $ok=0;
-     
-     if($ok)
+
+     if(myisset("forgot"))
        {
-        $time = DB_get_user_timestamp($uid);
-        $unixtime =strtotime($time);
-        
-        $offset = DB_get_user_timezone($uid);
-        $zone = return_timezone($offset);
-        date_default_timezone_set($zone);
-        
-        echo "last login: ".date("r",$unixtime)."<br />";
-        
-        DB_update_user_timestamp($uid);
+        $ok=1;
+
+        $uid = DB_get_userid_by_email($email);
+        if(!$uid)
+          $ok=0;
         
-        echo "<p>these are the games you are playing in:<br />\n";
-        $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date from Hand".
-                              " LEFT JOIN Game On Hand.game_id=Game.id".
-                              " WHERE Hand.user_id='$uid' AND Game.status<>'gameover'" );
-        while( $r = mysql_fetch_array($result,MYSQL_NUM))
+        if($ok)
           {
-            echo "<a href=\"".$host."?me=".$r[0]."\">game #".$r[1]." </a>";
-            if(time()-strtotime($r[2]) > 60*60*24*30)
-              echo " The game has been running for over a month.".
-                " Do you want to cancel it? <a href=\"$host?cancle=1&me=".$r[0]."\">yes</a>".
-                " (clicking here is final and can't be restored)";
-            echo "<br />";
+            echo "Hmm, you forgot your passwort...nothing I can do at the moment:(  ";
+            echo " you need to email Arun for now... in the future it will be all automated and an ";
+            echo "email with a new password will go to $email.";
           }
-        echo "</p>\n";
-        
-        
-        echo "<p>and these are your games that are already done:<br />Game: \n";
-        $result = mysql_query("SELECT hash,game_id from Hand WHERE user_id='$uid' AND status='gameover'" );
-        while( $r = mysql_fetch_array($result,MYSQL_NUM))
-          echo "<a href=\"".$host."?me=".$r[0]."\">#".$r[1]." </a>, ";
-        echo "</p>\n";
-        
-        $names = DB_get_all_names();
-        echo "<p>registered players:<br />\n";
-        foreach ($names as $name)
-          echo "$name, \n";
-        echo "</p>\n";
-        
-        echo "<p>Want to start a new game? Visit <a href=\"".$host."?new\">this page.</a></p>";
-       }
-     else
-       {
-        echo "sorry email and password don't match <br />";
+        else
+          {
+            if($email=="")
+              echo "you need to give me an email address!";
+            else
+              echo "couldn't find a player with this email, please contact Arun, if you think this is a mistake";
+          } 
        }
+     else 
+     {
+       /* verify password and email */
+       if(strlen($password)!=32)
+        $password = md5($password);
+       
+       $ok=1;
+       $uid = DB_get_userid_by_email_and_password($email,$password);
+       if(!$uid)
+        $ok=0;
+       
+       if($ok)
+        {
+          if(myisset("setpref"))
+            {
+              $setpref=$_REQUEST["setpref"];
+              switch($setpref)
+                {
+                case "germancards":
+                case "englishcards":
+                  $result = mysql_query("SELECT * from User_Prefs".
+                                        " WHERE user_id='$uid' AND pref_key='cardset'" );
+                  if( mysql_fetch_array($result,MYSQL_NUM))
+                    $result = mysql_query("UPDATE User_Prefs SET value=".DB_quote_smart($setpref).
+                                          " WHERE user_id='$uid' AND pref_key='cardset'" );
+                  else
+                    $result = mysql_query("INSERT INTO User_Prefs VALUES(NULL,'$uid','cardset',".DB_quote_smart($setpref).")");
+                  echo "Ok, changed you preferences for the cards.\n";
+                  break;
+                }
+            }
+          else /* output default user page */
+            {
+              $time = DB_get_user_timestamp($uid);
+              $unixtime =strtotime($time);
+              
+              $offset = DB_get_user_timezone($uid);
+              $zone = return_timezone($offset);
+              date_default_timezone_set($zone);
+              
+              /* display links to settings */
+              output_user_settings($email,$password);
+              
+              echo "last login: ".date("r",$unixtime)."<br />";
+              
+              DB_update_user_timestamp($uid);
+              
+              echo "<p>these are the games you are playing in:<br />\n";
+              $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date from Hand".
+                                    " LEFT JOIN Game On Hand.game_id=Game.id".
+                                    " WHERE Hand.user_id='$uid' AND Game.status<>'gameover'" );
+              while( $r = mysql_fetch_array($result,MYSQL_NUM))
+                {
+                  echo "<a href=\"".$host."?me=".$r[0]."\">game #".$r[1]." </a>";
+                  if(time()-strtotime($r[2]) > 60*60*24*30)
+                    echo " The game has been running for over a month.".
+                      " Do you want to cancel it? <a href=\"$host?cancle=1&amp;me=".$r[0]."\">yes</a>".
+                      " (clicking here is final and can't be restored)";
+                  echo "<br />";
+                }
+              echo "</p>\n";
+              
+              
+              echo "<p>and these are your games that are already done:<br />Game: \n";
+              $result = mysql_query("SELECT hash,game_id from Hand WHERE user_id='$uid' AND status='gameover'" );
+              while( $r = mysql_fetch_array($result,MYSQL_NUM))
+                echo "<a href=\"".$host."?me=".$r[0]."\">#".$r[1]." </a>, ";
+              echo "</p>\n";
+              
+              $names = DB_get_all_names();
+              echo "<p>registered players:<br />\n";
+              foreach ($names as $name)
+                echo "$name, \n";
+              echo "</p>\n";
+              
+              echo "<p>Want to start a new game? Visit <a href=\"".$host."?new\">this page.</a></p>";
+            }
+        }
+       else
+        {
+          echo "sorry email and password don't match <br />";
+        }
+     };
+     output_footer();
      exit();
    }
 /* page for registration */
@@ -1115,7 +1458,14 @@ else if(myisset("me"))
 /* default login page */
  else
    { 
-     output_home_page();
+     $pre=0;$game=0;$done=0;
+     $r=mysql_query("SELECT COUNT(id) FROM Game GROUP BY status");
+     if($r) {
+       $pre = mysql_fetch_array($r,MYSQL_NUM);     
+       $game = mysql_fetch_array($r,MYSQL_NUM);     
+       $done = mysql_fetch_array($r,MYSQL_NUM);     
+     }
+     output_home_page($pre[0],$game[0],$done[0]);
    }
 
 output_footer();