fixed: the correct player gets an email after a trick now, some other small bugfixes
[e-DoKo.git] / index.php
index a2366ed6fda7c54d88a8cdd1538bfa7f01fc46e4..a53a23c3b163d789c08df73474303527911f82ae 100644 (file)
--- a/index.php
+++ b/index.php
@@ -16,7 +16,7 @@
 
 $host  = "http://doko.nubati.net/index.php";
 $wiki  = "http://wiki.nubati.net/index.php?title=EmailDoko";
-$debug = 0;
+$debug = 1;
 
 /*
  * end config
@@ -30,8 +30,8 @@ function mymail($To,$Subject,$message)
 
   if($debug)
     {
-      str_replace("\n","<br />",$message);
-      echo "<br>To: $To<br>Subject: $Subject <br>$message<br>";
+      $message = str_replace("\n","<br />",$message);
+      echo "<br />To: $To<br />Subject: $Subject <br />$message<br />\n";
     }
   else
     mail($To,$Subject,$message);
@@ -46,7 +46,7 @@ function parse_status()
   $game["solo-who"]    = -1;
   $game["solo-what"]   = "todo";
   $game["wedding"]     = -1;
-  $game["poverty"]     = -1;
+  $game["poverty"]     = "";
   $game["nines"]       = -1;
   $game["startplayer"] = 0;
 
@@ -61,14 +61,31 @@ function parse_status()
       $player[$tmp[0]]["option"] = $tmp[3];
       $player[$tmp[0]]["points"] = $tmp[4]; 
       $player[$tmp[0]]["cards"]  = $tmp[5];
-      if(ereg("s",$tmp[3])) $game["init"]++;
-      if(ereg("P",$tmp[3])) $game["poverty"] = $i;
-      if(ereg("N",$tmp[3])) $game["nines"]   = $i;
-      if(ereg("W",$tmp[3])) $game["wedding"] = $i;
-      if(ereg("[OSQJCAH]",$tmp[3]) && ($game["solo-who"]<0) )
+      if(ereg("s",$tmp[3])) $game["init"]++;       /* how many players are ready? */
+      if(ereg("P",$tmp[3])) $game["poverty"].= $i; /* players with poverty, could be two, so use a string */
+      if(ereg("N",$tmp[3])) $game["nines"]   = $i; /* the player with too many nines, only one possible */
+      if(ereg("W",$tmp[3])) $game["wedding"] = $i; /* the player with the wedding, also only one possible */
+      if(ereg("([OSQJCAH])",$tmp[3],$match) && ($game["solo-who"]<0) )
        {
          $game["solo-who"]    = $i;     
          $game["startplayer"] = $i;
+         switch($match[1])
+           {
+           case "O":
+             $game["solo-what"] = "No Trump";
+           case "S":
+             $game["solo-what"] = "Trump";
+           case "Q":
+             $game["solo-what"] = "Queen";
+           case "J":
+             $game["solo-what"] = "Jack";
+           case "C":
+             $game["solo-what"] = "Club";
+           case "A":
+             $game["solo-what"] = "Spade";
+           case "H":
+             $game["solo-what"] = "Heart";
+           }
        }
   
     }  
@@ -297,18 +314,18 @@ function card_value($card)
 function display_card($card)
 {
   if( $card/2 - (int)($card/2) == 0.5)
-    echo "<img src=\"cards/".$card.".png\" height=\"100\" alt=\"".card_to_name($card)."\" />\n";
+    echo "<img src=\"cards/".$card.".png\"  alt=\"".card_to_name($card)."\" />\n";
   else
-    echo "<img src=\"cards/".($card-1).".png\" height=\"100\" alt=\"".card_to_name($card-1)."\" />\n";
+    echo "<img src=\"cards/".($card-1).".png\"  alt=\"".card_to_name($card-1)."\" />\n";
   return;
 }
 
 function display_link_card($card,$me)
 {
   if( $card/2 - (int)($card/2) == 0.5)
-    echo "<a href=\"index.php?me=$me&card=$card\"><img src=\"cards/".$card.".png\" height=\"100\" alt=\"".card_to_name($card)."\" /></a>\n";
+    echo "<a href=\"index.php?me=$me&amp;card=$card\"><img src=\"cards/".$card.".png\"  alt=\"".card_to_name($card)."\" /></a>\n";
   else
-    echo "<a href=\"index.php?me=$me&card=$card\"><img src=\"cards/".($card-1).".png\" height=\"100\" alt=\"".card_to_name($card-1)."\" /></a>\n";
+    echo "<a href=\"index.php?me=$me&amp;card=$card\"><img src=\"cards/".($card-1).".png\"  alt=\"".card_to_name($card-1)."\" /></a>\n";
   return;
 }
 
@@ -377,6 +394,8 @@ function save_status()
 
 echo "<p>If you find bugs, please list them in the <a href=\"".$wiki."\">wiki</a></p>\n";
        
+echo "<p> Cards that have a <span class=\"comment\"> green </span> background have a comment, which you can access by hovering over the card with your mouse ;)</p>\n";
+
 $history=array();
 
 /* check for status file and read it, if possible */
@@ -424,10 +443,10 @@ if( isset($_REQUEST["PlayerA"]) &&
       "If you want to join this game, please follow this link:\n\n".
       " ".$host."?a=";
     
-    mymail($EmailA,"Invite for a game of DoKo","Hello $PlayerA,\n".$message.$hashA);
-    mymail($EmailB,"Invite for a game of DoKo","Hello $PlayerB,\n".$message.$hashB);
-    mymail($EmailC,"Invite for a game of DoKo","Hello $PlayerC,\n".$message.$hashC);
-    mymail($EmailD,"Invite for a game of DoKo","Hello $PlayerD,\n".$message.$hashD);
+    mymail($EmailA,"You are invited to a game of DoKo","Hello $PlayerA,\n".$message.$hashA);
+    mymail($EmailB,"You are invited to a game of DoKo","Hello $PlayerB,\n".$message.$hashB);
+    mymail($EmailC,"You are invited to a game of DoKo","Hello $PlayerC,\n".$message.$hashC);
+    mymail($EmailD,"You are invited to a game of DoKo","Hello $PlayerD,\n".$message.$hashD);
     
     /* read in random.txt */
     if(file_exists("random.txt"))
@@ -435,7 +454,7 @@ if( isset($_REQUEST["PlayerA"]) &&
     else
       die("no random file");
  
-    $randomNR = explode( ":", $random[1] );
+    $randomNR = explode( ":", $random[2] );
     
     /* write initial status into file */
     $output = fopen("status.txt","w");
@@ -470,6 +489,11 @@ if( isset($_REQUEST["PlayerA"]) &&
     else
       echo "can't open file for writing";
   };
+/* reread file */
+if(file_exists("status.txt"))
+  $lines = file("status.txt");
+ else
+   die("no file");
 
 /* test if a game is running, else output everything for a new game */
 if(sizeof($lines)<2)
@@ -581,14 +605,14 @@ if(sizeof($lines)<2)
                 $mycards = explode(";",$allcards);
                 
                 sort($mycards);
-                echo "your cards are <br>\n";
+                echo "your cards are <br />\n";
                 foreach($mycards as $card) 
                   {
                     display_card($card);
                   }
                 echo "<br />\n";   
  ?>
- <p>aehm... at the moment please just answer everything with no, still need to implement this</p>                
+ <p>aehm... at the moment poverty is not implented. so I guess you need to play a normal game, even if you have less than 3 turmp :(...sorry</p>                 
  <form action="index.php" method="post">
    
    do you want to play solo? 
@@ -704,8 +728,8 @@ if(sizeof($lines)<2)
                 $player[$c]["option"].="N";
               }
             
-            $message = "you're in. once everyone has filled out the form,".
-              "the game will start and you'll get an eamil on your turn\n";
+            $message = "You're in. Once everyone has filled out the form, ".
+              "the game will start and you'll get an eamil on your turn.\n";
             mymail($player[$c]["email"],"[DoKo-debug] the game will start soon",$message); 
 
             $player[$c]["option"].="s";
@@ -728,14 +752,15 @@ if(sizeof($lines)<2)
      if($game["init"]==4)
        {
         /* check for sickness*/
-        /***** someone has 5 nines and no one is playing solo=> cance5Al game */
+        /***** someone has 5 nines and no one is playing solo=> cancel game */
         if($game["nines"]>=0 && $game["solo-who"]<0)
           {
             $message = $player[$hash[$game["poverty"]]]["nines"]." has more than 4 nines. Game aborted!\n";
             for($i=0;$i<4;$i++)
               {
                 mymail($player[$hash[$i]]["email"],"[DoKo-debug] the game has been canceled",$message); 
-              }
+              };
+
             $output = fopen("status.txt","w");
             if($output)
               fclose($output);
@@ -748,7 +773,7 @@ if(sizeof($lines)<2)
           {    
             if(!isset($_REQUEST["recovery"]))
               {
-                echo "a game is in progress, but you are not playing.<br />\n";
+                echo "A game is in progress and kibitzing is not allowed. Sorry!.<br />\n";
                 echo "In case you are playing, but lost your email or can't access the game anymore, please input your email here:<br />\n";
                 ?>
  <form action="index.php" method="post">
@@ -781,7 +806,7 @@ if(sizeof($lines)<2)
           { /* $me is set */ 
             $me = $_REQUEST["me"];
             
-            echo "game in progress and you are in it<br />\n";
+            /* output if we are playing a solo or a wedding */
             if($game["solo-who"]>=0)
               echo $player[$hash[$game["solo-who"]]]["name"]." is playing a ".$game["solo-what"]." solo!<br />\n";
             else if($game["wedding"]>=0)
@@ -790,23 +815,35 @@ if(sizeof($lines)<2)
             /* show history */
             foreach($history as $play) 
               {
-                echo "<br />\n";
-                
                 $trick = explode(":",$play);
                 
                 $last=-2;
                 /* found old trick, display it */
+                if(sizeof($trick)==5)
+                  echo "<div class=\"oldtrick background".$play[0]."\"><div class=\"table\">\n";
+                else
+                  echo "<div class=\"trick back".$play[0]."\"><div class=\"table\">\n";
                 for($i=0;$i<sizeof($trick)-1;$i++)
                   {
-                    $card=$trick[$i];
+                    $card = $trick[$i];
                     if(ereg("->",$card))
                       {
                         $tmp = explode("->",$card);
-                        echo $player[$hash[$tmp[0]]]["name"]." played ";
+
+                        if(strlen($tmp[2])>0)
+                          echo "<div class=\"card".$tmp[0]." comment\">";
+                        else
+                          echo "<div class=\"card".$tmp[0]."\">";
+                        echo $player[$hash[$tmp[0]]]["name"]."  <br />";
                         display_card($tmp[1]);
-                        $last=$tmp[0];
+                        /* check for comment */
+                        if(strlen($tmp[2])>0)
+                          echo "<div class=\"comment\">".$tmp[2]."</div>\n";
+                        $last = $tmp[0];
+                        echo "</div>\n";
                       }
                   }
+                echo "</div></div>\n";
               }
             
             /* figure out who needs to play next */
@@ -815,7 +852,7 @@ if(sizeof($lines)<2)
               $next -= 4 ;
             if($last<0)
               {
-                $next=$history[sizeof($history)-1][0];
+                $next = $history[sizeof($history)-1][0];
               }
             
             /* are we trying to play a card? */
@@ -856,33 +893,50 @@ if(sizeof($lines)<2)
                           }
                         save_status();
                         
-                        echo " you played ";
+                        echo "<div class=\"card\">";
+                        echo " you played  <br />";
                         display_card($card);
-                        
+                        echo "</div>\n";
+
+                        ?>
+<br clear="both" />
+<form action="index.php" method="post">
+   A short comment:<input name="comment" type="text" size="30" maxlength="50" /> 
+   <input type="hidden" name="me" value="<?php echo $me; ?>" />
+   <input type="submit" value="submit comment" />
+</form>
+<?php
                         /* send out email to players who want/need to get informed */
-                        for($i=0;$i<4;$i++)
-                          {
-                            $mynext=$next+1; if($mynext>3)$mynext-=4;
-                            if((ereg("c",$player[$hash[$i]]["option"]) || $i==$mynext) && $hash[$i]!=$me)
-                              {
-                                $message = " Hello ".$player[$hash[$i]]["name"].",\n\n";
-                                
-                                if($i==$mynext)
-                                  {
-                                    $message .= "it's your turn  now.\n".
-                                      "Use this link to play a card: ".$host."?me=".$hash[$i]."\n\n" ;
-                                  }
-                                $message .= $player[$me]["name"]. "has played the following card ".card_to_name($card)."\n";
-                                
-                                if($game["solo-who"]>=0)
-                                  $message.= $player[$hash[$game["solo-who"]]]." is playing a ".$game["solo-what"]." solo!\n";
-                                
-                                mymail($player[$hash[$i]]["email"],"[DoKo-debug] a card has been played",$message);
-                                
-                                if($debug)
-                                  echo "<a href=\"index.php?me=".$hash[$mynext]."\"> next player </a> <br />\n";
-                              }
-                          }
+                         /* check if we are in a trick, if trick is done, this needs to be handelt in the
+                         * who-won-the-trick section further down */
+                         $tmp = explode(":",$history[sizeof($history)-1]);
+                        if(sizeof($tmp)<5)
+                          for($i=0;$i<4;$i++)
+                            {
+                              $mynext = $next+1; if($mynext>3)$mynext-=4;
+                              
+                              if((ereg("c",$player[$hash[$i]]["option"]) || $i==$mynext) && $hash[$i]!=$me)
+                                {
+                                  $message = " Hello ".$player[$hash[$i]]["name"].",\n\n";
+                                  
+                                  if($i==$mynext)
+                                    {
+                                      $message .= "it's your turn  now.\n".
+                                        "Use this link to play a card: ".$host."?me=".$hash[$i]."\n\n" ;
+                                    }
+                                  $message .= $player[$me]["name"]." has played the following card ".
+                                    card_to_name($card)."\n";
+                                  
+                                  if($game["solo-who"]>=0)
+                                    $message .= $player[$hash[$game["solo-who"]]]["name"]." is playing a ".
+                                      $game["solo-what"]." solo!\n";
+                                  
+                                  mymail($player[$hash[$i]]["email"],"[DoKo-debug] a card has been played",$message);
+                                  
+                                  if($debug)
+                                    echo "<a href=\"index.php?me=".$hash[$mynext]."\"> next player </a> <br />\n";
+                                }
+                            }
                       }
                     else
                       echo "seems like you don't have that card<br />\n";
@@ -890,12 +944,57 @@ if(sizeof($lines)<2)
                   }
                 
               } /* end if card is set */
+            else if(isset($_REQUEST["comment"]))
+              {
+                $comment = $_REQUEST["comment"];
+                $tmp = explode(":",$history[sizeof($history)-1]);
+                $tmp2 = explode("->",$tmp[sizeof($tmp)-2]);
+                
+                $comment = str_replace(":","",$comment);
+
+                if(sizeof($tmp2)<=2)
+                  $tmp[sizeof($tmp)-2] .= "->".$comment;
+                $history[sizeof($history)-1]=join(":",$tmp);
+
+                save_status();
+              }
             else if(isset($_REQUEST["win"]) && strlen($history[sizeof($history)-1])>3)
               {
-                $win=$_REQUEST["win"];
-                $history[]=$win.":\n";
+                $win       = $_REQUEST["win"];
+                
+                if(strlen($player[$hash[0]]["cards"]))
+                   $history[] = $win.":\n";
+
+                /* email the player who needs to move next*/
+                for($i=0;$i<4;$i++)
+                  {
+                    if((ereg("c",$player[$hash[$i]]["option"]) || $i==$win) )
+                      {
+                        $message = " Hello ".$player[$hash[$i]]["name"].",\n\n";
+                        
+                        if($i == $win)
+                          {
+                            $message .= "You won the last trick,it's your turn  now.\n".
+                              "Use this link to play a card: ".$host."?me=".$hash[$i]."\n\n" ;
+                          }
+                        else
+                          $message .= $player[$hash[$win]]["name"]." has won the last trick\n".
+                            "Use this link to look at the game: ".$host."?me=".$hash[$i]."\n\n" ;
+                        
+                        if($game["solo-who"]>=0)
+                          $message.= $player[$hash[$game["solo-who"]]]["name"]." is playing a ".
+                            $game["solo-what"]." solo!\n";
+                        
+                        mymail($player[$hash[$i]]["email"],"[DoKo-debug] a card has been played",$message);
+                        
+                        if($debug)
+                          echo "<a href=\"index.php?me=".$hash[$win]."\"> next player </a> <br />\n";
+                      }
+                  }
+                
+                
                 /* count points of the last trick */
-                $points=0;
+                $points = 0;
 
                 $tmp = explode(":",$history[sizeof($history)-2]);
                 for($i=0;$i<4;$i++)
@@ -904,7 +1003,7 @@ if(sizeof($lines)<2)
                     $c = $tmp2[1];
                     $points += card_value($c);
                   }
-                $player[$hash[$win]]["points"]+=$points;
+                $player[$hash[$win]]["points"] += $points;
                 echo "<br />\n ".$player[$hash[$win]]["name"]." won: $points Points <br />\n";
                 
                 save_status();
@@ -913,8 +1012,8 @@ if(sizeof($lines)<2)
 
             $tmp = explode(":",$history[sizeof($history)-1]);
 
-            /* check last history entry: end of a trick? ask who won it */
-            if(sizeof($tmp)==5)
+            /* check last history entry: end of a trick? ask who won it, unless it was the last trick */
+            if(sizeof($tmp)==5 && strlen($player[$hash[0]]["cards"]))
               {
                 ?>
 <form action="index.php" method="post">
@@ -950,6 +1049,7 @@ who won?
                 echo "<br />\n";
               } /* end check for winner */
             
+            echo "<br clear=\"both\" />";
             /* do we still have cards? display them */
             if(strlen(trim($player[$me]["cards"]))>0 )
               {
@@ -960,7 +1060,7 @@ who won?
                 
                 echo "<p class=\"mycards\">\n";
                 /* is it our turn? */
-                if($hash[$next]==$me) 
+                if($hash[$next]==$me && !isset($_REQUEST["card"]) && !isset($_REQUEST["win"])
                   {
                     echo "ITS YOUR TURN   <br />\n";
                     echo "your cards are: <br />\n";