BUGFIX: fixed bug in getting randomnumbers from a previous game
[e-DoKo.git] / index.php
index 980db24fcdd2f7909acd2ab148fa2316cb051f0b..244ceb9ac7e7b22eb6a53d32ce3b193bffb746cb 100644 (file)
--- a/index.php
+++ b/index.php
@@ -13,6 +13,23 @@ if(isset($EMAIL_REPLY))
   {
     ini_set("sendmail_from",$EMAIL_REPLY);
   }
+if(!isset($ADMIN_NAME))
+  {
+    output_header();
+    echo "<h1>Setup not completed</h1>";
+    echo "You need to set \$ADMIN_NAME in config.php.";
+    output_footer(); 
+    exit(); 
+  }    
+if(!isset($ADMIN_EMAIL))
+  {
+    output_header();
+    echo "<h1>Setup not completed</h1>";
+    echo "You need to set \$ADMIN_EMAIL in config.php. ".
+      "If something goes wrong an email will send to this address.";
+    output_footer(); 
+    exit(); 
+  }
 
 /* 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 
@@ -28,7 +45,8 @@ if(0)
 if(DB_open()<0)
   {
     output_header();
-    echo "Database error, can't connect...";
+    echo "Database error, can't connect... Please wait a while and try again. ".
+      "If the problem doesn't go away feel free to contact $ADMIN_NAME at $ADMIN_EMAIL.";
     output_footer(); 
     exit(); 
   }
@@ -43,7 +61,7 @@ if(myisset("new"))
     output_form_for_new_game($names);
   }
 /*check if everything is ready to set up a new game */
- else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD","dullen","schweinchen" ))
+ else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD","dullen","schweinchen","call" ))
   {
     $PlayerA = $_REQUEST["PlayerA"];
     $PlayerB = $_REQUEST["PlayerB"];
@@ -52,7 +70,8 @@ if(myisset("new"))
 
     $dullen      = $_REQUEST["dullen"];
     $schweinchen = $_REQUEST["schweinchen"];
-    
+    $call        = $_REQUEST["call"];
+
     $EmailA  = DB_get_email_by_name($PlayerA);
     $EmailB  = DB_get_email_by_name($PlayerB);
     $EmailC  = DB_get_email_by_name($PlayerC);
@@ -74,17 +93,7 @@ if(myisset("new"))
     /* create random numbers */
     $randomNR       = create_array_of_random_numbers($useridA,$useridB,$useridC,$useridD);
     $randomNRstring = join(":",$randomNR);
-    
-    /* get ruleset information or create new one */
-    $ruleset = DB_get_ruleset($dullen,$schweinchen);
-    if($ruleset <0) 
-      {
-       echo "Error defining ruleset: $ruleset";
-       output_footer();
-       DB_close();
-       exit();
-      };
-    
+        
     /* create game */
     $followup = NULL;
     if(myisset("followup") )
@@ -107,8 +116,20 @@ if(myisset("new"))
          }
       }
     else
-      mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre', ".
+      {
+       /* get ruleset information or create new one */
+       $ruleset = DB_get_ruleset($dullen,$schweinchen,$call);
+       if($ruleset <0) 
+         {
+           myerror("Error defining ruleset: $ruleset");
+           output_footer();
+           DB_close();
+           exit();
+         };
+       
+       mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre', ".
                  "'$ruleset',NULL ,NULL)");
+      }
     $game_id = mysql_insert_id();
     
     /* create hash */
@@ -379,7 +400,7 @@ else if(myisset("me"))
          /* all these variables have a pre-selected default,
           * so we should never get here,
           * unless a user tries to cheat ;) */
-         echo "something went wrong...please contact the admin.";
+         echo "something went wrong during the setup...please contact the $ADMIN_NAME at $ADMIN_EMAIL.";
        }
       else
        {
@@ -771,7 +792,8 @@ else if(myisset("me"))
                  $r      = mysql_fetch_array($result,MYSQL_NUM);
                  if(!$r)
                    {
-                     die("error in poverty");
+                     myerror("error in poverty");
+                     die();
                    };
                  if($r[0]==12)
                    {
@@ -1348,6 +1370,30 @@ else if(myisset("me"))
                        }
                    }
                }
+
+             /* if sequence == 4, set winner of the trick, count points and set the next player */
+             if($sequence==4)
+               {
+                 $play   = DB_get_cards_by_trick($trickid);
+                 $winner = get_winner($play,$gametype); /* returns the position */
+
+                 if($winner>0)
+                   mysql_query("UPDATE Trick SET winner='$winner' WHERE id='$trickid'");
+                 else
+                   echo "ERROR during scoring";
+
+                 if($debug)
+                   echo "DEBUG: position $winner won the trick <br />";
+
+                 /* who is the next player? */
+                 $next = $winner;
+               }
+             else
+               {
+                 $next = DB_get_pos_by_hash($me)+1;
+               }
+             if($next==5) $next=1;
+
              
              /* check for coment */
              if(myisset("comment"))
@@ -1382,39 +1428,45 @@ else if(myisset("me"))
                  $done=0;
              
              if($done)
+               DB_set_game_status_by_gameid($gameid,"gameover");
+
+             /* email next player, if game is still running */
+             if(DB_get_game_status_by_gameid($gameid)=='play')
                {
-                 DB_set_game_status_by_gameid($gameid,"gameover");
-                 /* get score for last trick 
-                  * all other tricks are handled a few lines further down*/
-                 $play   = DB_get_cards_by_trick($trickid);
-                 $winner = get_winner($play,$gametype); /* returns the position */
-                 /* get points of last trick and save it */
-                 $points = 0;
-                 foreach($play as $card)
-                   $points = $points + card_value($card["card"]);
-                 $winnerid = DB_get_handid_by_gameid_and_position($gameid,$winner);
-                 if($winnerid>0)
-                   mysql_query("INSERT INTO Score VALUES (NULL, '$gameid', '$winnerid', '$points')");
-                 else
-                   echo "ERROR during scoring";
+                 $next_hash = DB_get_hash_from_game_and_pos($gameid,$next);
+                 $email     = DB_get_email_by_hash($next_hash);
+                 $who       = DB_get_userid_by_email($email);
+                 DB_set_player_by_gameid($gameid,$who);
                  
-                 /* email all players */
+                 $message = "A card has been played in game $gameid.\n\n".
+                   "It's your turn  now.\n".
+                   "Use this link to play a card: ".$host."?me=".$next_hash."\n\n" ;
+                 mymail($email,$EmailName."a card has been played in game $gameid",$message);
+               }
+             else /* send out final email */
+               {
                  /* individual score */
-                 $result = mysql_query("SELECT fullname, IFNULL(SUM(score),0), Hand.party FROM Hand".
-                                       " LEFT JOIN Score ON Hand.id=Score.hand_id".
-                                       " LEFT JOIN User ON Hand.user_id=User.id".
-                                       " WHERE Hand.game_id=$gameid".
-                                       " GROUP BY fullname" );
+                 $result = mysql_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party FROM Hand".
+                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                               " LEFT JOIN User ON User.id=Hand.user_id".
+                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                               " WHERE Hand.game_id='$gameid'".
+                               " GROUP BY User.fullname" );
                  $message  = "The game is over. Thanks for playing :)\n";
                  $message .= "Final score:\n";
                  while( $r = mysql_fetch_array($result,MYSQL_NUM))
                    $message .= "   ".$r[0]."(".$r[2].") ".$r[1]."\n";
 
-                 $result = mysql_query("SELECT Hand.party, IFNULL(SUM(score),0) FROM Hand".
-                                       " LEFT JOIN Score ON Hand.id=Score.hand_id".
-                                       " LEFT JOIN User ON Hand.user_id=User.id".
-                                       " WHERE Hand.game_id=$gameid".
-                                       " GROUP BY Hand.party" );
+                 $result = mysql_query("SELECT  Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
+                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                               " LEFT JOIN User ON User.id=Hand.user_id".
+                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                               " WHERE Hand.game_id='$gameid'".
+                               " GROUP BY User.fullname" );
                  $message .= "\nTotals:\n";
                  while( $r = mysql_fetch_array($result,MYSQL_NUM))
                    $message .= "    ".$r[0]." ".$r[1]."\n";
@@ -1438,51 +1490,6 @@ else if(myisset("me"))
                      mymail($To,$EmailName."game over (game $gameid) part 2(2)",$link);
                    }
                }
-             
-             
-             /* email next player */
-             if(DB_get_game_status_by_gameid($gameid)=='play')
-               {
-                 if($sequence==4)
-                   {
-                     $play   = DB_get_cards_by_trick($trickid);
-                     $winner = get_winner($play,$gametype); /* returns the position */
-                     
-                     /* get points of last trick and save it, last trick is handled 
-                      * a few lines further up  */
-                     $points = 0;
-                     foreach($play as $card)
-                       $points = $points + card_value($card["card"]);
-                     
-                     $winnerid = DB_get_handid_by_gameid_and_position($gameid,$winner);
-                     if($winnerid>0)
-                       mysql_query("INSERT INTO Score VALUES (NULL, '$gameid', '$winnerid', '$points')");
-                     else
-                       echo "ERROR during scoring";
-                     
-                     if($debug)
-                       echo "DEBUG: $winner got $points <br />";
-                     
-                     /* who is the next player? */
-                     $next = $winner;
-                   }
-                 else
-                   {
-                     $next = DB_get_pos_by_hash($me)+1;
-                   }
-                 if($next==5) $next=1;
-                 
-                 /* email next player */
-                 $next_hash = DB_get_hash_from_game_and_pos($gameid,$next);
-                 $email     = DB_get_email_by_hash($next_hash);
-                 $who       = DB_get_userid_by_email($email);
-                 DB_set_player_by_gameid($gameid,$who);
-
-                 $message = "A card has been played in game $gameid.\n\n".
-                   "It's your turn  now.\n".
-                   "Use this link to play a card: ".$host."?me=".$next_hash."\n\n" ;
-                 mymail($email,$EmailName."a card has been played in game $gameid",$message);            
-               }
            }
          else
            {
@@ -1587,21 +1594,28 @@ else if(myisset("me"))
        {
          echo "the game is over now...<br />\n";
          
-         $result = mysql_query("SELECT fullname, IFNULL(SUM(score),0), Hand.party FROM Hand".
-                               " LEFT JOIN Score ON Hand.id=Score.hand_id".
-                               " LEFT JOIN User ON Hand.user_id=User.id".
-                               " WHERE Hand.game_id=$gameid".
-                               " GROUP BY fullname" );
+         $result = mysql_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party FROM Hand".
+                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                               " LEFT JOIN User ON User.id=Hand.user_id".
+                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                               " WHERE Hand.game_id='$gameid'".
+                               " GROUP BY User.fullname" );
          echo "Final Score:<br />\n".
            " <table>\n";;
          while( $r = mysql_fetch_array($result,MYSQL_NUM))
            echo "  <tr><td>  ".$r[0]."</td><td>(".$r[2].")</td><td> ".$r[1]."</td></tr>";
          echo "</table>\n";
 
-         $result = mysql_query("SELECT Hand.party, IFNULL(SUM(score),0) FROM Hand".
-                               " LEFT JOIN Score ON Hand.id=Score.hand_id".
-                               " LEFT JOIN User ON Hand.user_id=User.id".
-                               " WHERE Hand.game_id=$gameid".
+
+         $result = mysql_query("SELECT Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
+                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                               " LEFT JOIN User ON User.id=Hand.user_id".
+                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                               " WHERE Hand.game_id='$gameid'".
                                " GROUP BY Hand.party" );
          echo "Totals:<br />\n".
            " <table> \n";
@@ -1627,7 +1641,7 @@ else if(myisset("me"))
        }
       break;
     default:
-      echo "error in testing the status";
+      myerror("error in testing the status");
     }
     output_footer();
     DB_close();