You are now logged out! \n".
"(This will take you back to the home-page)";
}
/* check if we want to start a new game */
else if(myisset("new"))
{
output_status();
/* user need to be logged in to do this */
if( isset($_SESSION["name"]) )
{
$names = DB_get_all_names();
echo "
";
}
}
/*check if everything is ready to set up a new game */
else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD","dullen","schweinchen","call" ))
{
output_status();
/* user needs to be logged in */
if( !isset($_SESSION["name"]) )
{
echo "
";
}
else
{
/* get my name */
$name = $_SESSION["name"];
/* the names of the four players */
$PlayerA = $_REQUEST["PlayerA"];
$PlayerB = $_REQUEST["PlayerB"];
$PlayerC = $_REQUEST["PlayerC"];
$PlayerD = $_REQUEST["PlayerD"];
/* the person who sets up the game has to be one of the players */
if(!in_array($name,array($PlayerA,$PlayerB,$PlayerC,$PlayerD)))
{
echo "
You need to be one of the players to start a new game.
";
output_footer();
DB_close();
exit();
}
/* what rules were selected */
$dullen = $_REQUEST["dullen"];
$schweinchen = $_REQUEST["schweinchen"];
$call = $_REQUEST["call"];
/* get the emails addresses of the players */
$EmailA = DB_get_email_by_name($PlayerA);
$EmailB = DB_get_email_by_name($PlayerB);
$EmailC = DB_get_email_by_name($PlayerC);
$EmailD = DB_get_email_by_name($PlayerD);
/* this is used to check if the player names are all ok */
if($EmailA=="" || $EmailB=="" || $EmailC=="" || $EmailD=="")
{
echo "couldn't find one of the names, please start a new game";
output_footer();
DB_close();
exit();
}
/* get user ids */
$useridA = DB_get_userid_by_name($PlayerA);
$useridB = DB_get_userid_by_name($PlayerB);
$useridC = DB_get_userid_by_name($PlayerC);
$useridD = DB_get_userid_by_name($PlayerD);
/* create random numbers */
$randomNR = create_array_of_random_numbers($useridA,$useridB,$useridC,$useridD);
$randomNRstring = join(":",$randomNR);
/* create game */
$followup = NULL;
/* is this game a follow up in an already started session? */
if(myisset("followup") )
{
$followup= $_REQUEST["followup"];
$session = DB_get_session_by_gameid($followup);
$ruleset = DB_get_ruleset_by_gameid($followup); /* just copy ruleset from old game,
this way no manipulation is possible */
/* check if there is a game in pre or play mode, in that case do nothing */
if( DB_is_session_active($session) > 0 )
{
echo "
There is already a game going on in session $session, you can't start a new one
ERROR: status of session $session couldn't be determined.
";
output_footer();
DB_close();
exit();
}
if($session)
mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre',".
"'$ruleset','$session' ,NULL)");
else
{
/* get max session and start a new one */
$max = DB_get_max_session();
$max++;
mysql_query("UPDATE Game SET session='".$max."' WHERE id=".DB_quote_smart($followup));
mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre',".
"'$ruleset','$max' ,NULL)");
}
}
else /* no follow up, start a new session */
{
/* 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();
};
/* get max session */
$max = DB_get_max_session();
$max++;
mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre', ".
"'$ruleset','$max' ,NULL)");
}
$game_id = mysql_insert_id();
/* create hash */
$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).
", ".DB_quote_smart($hashA).", 'start','1',NULL,NULL,NULL,NULL)");
$hand_idA = mysql_insert_id();
mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridB).
", ".DB_quote_smart($hashB).", 'start','2',NULL,NULL,NULL,NULL)");
$hand_idB = mysql_insert_id();
mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridC).
", ".DB_quote_smart($hashC).", 'start','3',NULL,NULL,NULL,NULL)");
$hand_idC = mysql_insert_id();
mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridD).
", ".DB_quote_smart($hashD).", 'start','4',NULL,NULL,NULL,NULL)");
$hand_idD = mysql_insert_id();
/* save cards */
for($i=0;$i<12;$i++)
mysql_query("INSERT INTO Hand_Card VALUES (NULL, '$hand_idA', '".$randomNR[$i]."', 'false')");
for($i=12;$i<24;$i++)
mysql_query("INSERT INTO Hand_Card VALUES (NULL, '$hand_idB', '".$randomNR[$i]."', 'false')");
for($i=24;$i<36;$i++)
mysql_query("INSERT INTO Hand_Card VALUES (NULL, '$hand_idC', '".$randomNR[$i]."', 'false')");
for($i=36;$i<48;$i++)
mysql_query("INSERT INTO Hand_Card VALUES (NULL, '$hand_idD', '".$randomNR[$i]."', 'false')");
/* send out email, TODO: check for error with email */
$message = "\n".
"you are invited to play a game of DoKo (that is to debug the program ;).\n".
"Place comments and bug reports here:\n".
"http://wiki.nubati.net/index.php?title=EmailDoko\n\n".
"The whole round would consist of the following players:\n".
"$PlayerA\n".
"$PlayerB\n".
"$PlayerC\n".
"$PlayerD\n\n".
"If you want to join this game, please follow this link:\n\n".
"".$HOST.$INDEX."?me=";
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);
echo "
You started a new game. The emails have been sent out!
\n";
}
/* end set up a new game */
}
/* cancel a game, if nothing has happend in the last N minutes */
else if(myisset("cancel","me"))
{
output_status();
$me = $_REQUEST["me"];
/* test for valid ID */
$myid = DB_get_userid_by_hash($me);
if(!$myid)
{
echo "Can't find you in the database, please check the url. \n";
echo "perhaps the game has been canceled, check by login in here.";
output_footer();
DB_close();
exit();
}
DB_update_user_timestamp($myid);
/* get some information from the DB */
$gameid = DB_get_gameid_by_hash($me);
$myname = DB_get_name_by_hash($me);
/* check if game really is old enough to be canceled */
$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) /* = 1 month */
{
$message = "Hello, \n\n".
"Game ".DB_format_gameid($gameid).
" has been canceled since nothing happend for a while and $myname requested it.\n";
$userids = DB_get_all_userid_by_gameid($gameid);
foreach($userids as $user)
{
$To = DB_get_email_by_userid($user);
mymail($To,$EmailName."game ".DB_format_gameid($gameid)." canceled (timed out)",$message);
}
/* delete everything from the dB */
DB_cancel_game($me);
echo "
Game ".DB_format_gameid($gameid).
" has been canceled.
";
}
else
echo "
You need to wait longer before you can cancel a game...
\n";
}
/* send out a reminder */
else if(myisset("remind","me"))
{
output_status();
$me = $_REQUEST["me"];
/* test for valid ID */
$myid = DB_get_userid_by_hash($me);
if(!$myid)
{
echo "Can't find you in the database, please check the url. \n";
echo "perhaps the game has been canceled, check by login in here.";
output_footer();
DB_close();
exit();
}
DB_update_user_timestamp($myid);
/* get some information from the DB */
$gameid = DB_get_gameid_by_hash($me);
$myname = DB_get_name_by_hash($me);
/* check if player hasn't done anything in a while */
$result = mysql_query("SELECT mod_date,player,status from Game WHERE id='$gameid' " );
$r = mysql_fetch_array($result,MYSQL_NUM);
if( (time()-strtotime($r[0]) > 60*60*24*7) && ($r[2]!='gameover') ) /* = 1 week */
{
$name = DB_get_name_by_userid($r[1]);
$To = DB_get_email_by_userid($r[1]);
$userhash = DB_get_hash_from_gameid_and_userid($gameid,$r[1]);
$message = "Hello $name, \n\n".
"It's your turn in game ".DB_format_gameid($gameid)." \n".
"Actually everyone else is waiting for you for more than a week now ;)\n\n".
"Please visit this link now to continue: \n".
" ".$HOST.$INDEX."?me=".$userhash."\n\n" ;
/* make sure we don't send too many reminders to one person */
if(DB_get_reminder($r[1],$gameid)>0)
{
echo "
An email has already been sent out.
\n";
}
else
{
DB_set_reminder($r[1],$gameid);
mymail($To,$EmailName."Reminder: game ".DB_format_gameid($gameid)." it's your turn",$message);
echo "
Game ".DB_format_gameid($gameid).
": an email has been sent out.
";
}
}
else
echo "
You need to wait longer before you can send out a reminder...
\n";
}
/* handle request from one specific player for one game,
* (the hash is set on a per game base) */
else if(myisset("me"))
{
$me = $_REQUEST["me"];
/* test for valid ID */
$myid = DB_get_userid_by_hash($me);
if(!$myid)
{
echo "Can't find you in the database, please check the url. \n";
echo "perhaps the game has been canceled, check by login in here.";
output_footer();
DB_close();
exit();
}
/* user might get here by clicking on the link in an email, so session might not be set */
if(isset($_SESSION["name"]))
output_status($_SESSION["name"]);
/* the user had done something, update the timestamp */
DB_update_user_timestamp($myid);
/* get some information from the DB */
$gameid = DB_get_gameid_by_hash($me);
$myname = DB_get_name_by_hash($me);
$mystatus = DB_get_status_by_hash($me);
$mypos = DB_get_pos_by_hash($me);
$myhand = DB_get_handid_by_hash($me);
$session = DB_get_session_by_gameid($gameid);
/* get prefs and save them */
DB_get_PREF($myid);
/* end set pref */
/* 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["call"] = $r[4];
/* 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;
}
/* does anyone have both foxes */
$GAME["schweinchen"]=0;
for($i=1;$i<5;$i++)
{
$hash = DB_get_hash_from_game_and_pos($gameid,$i);
$cards = DB_get_all_hand($hash);
if( in_array("19",$cards) && in_array("20",$cards) )
{
$GAME["schweinchen"]=1;
$GAME["schweinchen-who"]=$hash;
}
};
/* put everyting in a form */
echo "