\n";
echo "perhaps the game has been cancled, 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 */
$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 $gameid has been cancled 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 $gameid cancled (timed out)",$message);
}
/* delete everything from the dB */
DB_cancel_game($me);
echo "
Game $gameid has been cancled.
";
}
else
echo "You need to wait longer before you can cancle a game...
\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 cancled, check by login in here.";
output_footer();
DB_close();
exit();
}
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 "\n";
output_footer();
DB_close();
exit();
}
/* user status page */
else if( myisset("email","password") || isset($_SESSION["name"]) )
{
/* test id and password, should really be done in one step */
if(!isset($_SESSION["name"]))
{
$email = $_REQUEST["email"];
$password = $_REQUEST["password"];
}
else
{
$name = $_SESSION["name"];
$email = DB_get_email_by_name($name);
$password = DB_get_passwd_by_name($name);
};
if(myisset("forgot"))
{
$ok = 1;
$uid = DB_get_userid_by_email($email);
if(!$uid)
$ok = 0;
if($ok)
{
/* check how many entries in recovery table */
$number = DB_get_number_of_passwords_recovery($uid);
/* if less than N recent ones, add a new one and send out email */
if( $number < 5 )
{
echo "Ok, I send you a new password.
";
if($number >1)
echo "N.B. You tried this already $number times during the last day and it will only work ".
" 5 times during a day.
";
echo "The new password will be valid for one day, make sure you reset it to something else.
";
echo "Back to the main page.";
$TIME = (string) time(); /* to avoid collisions */
$hash = md5("Anewpassword".$email.$TIME);
$newpw = substr($hash,1,8);
$message = "Someone (hopefully you) requested a new password. \n".
"You can use this email and the following password: \n".
" $newpw \n".
"to log into the server. The new password is valid for 24h, so make\n".
"sure you reset your password to something new. Your old password will\n".
" also still be valid until you set a new one\n";
mymail($email,$EmailName."recovery ",$message);
DB_set_recovery_password($uid,md5($newpw));
}
else
{
echo "Sorry you already tried 5 times during the last 24h.
".
"You need to use one of those passwords or wait to get a new one.
";
echo "Back to the main page.";
}
}
else
{
if($email=="")
echo "You need to give me an email address!
".
"Please try again.";
else
echo "Couldn't find a player with this email!
".
"Please contact Arun, if you think this is a mistake
".
"or else try again.";
}
}
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)
{
DB_get_PREF($uid);
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 if(myisset("passwd"))
{
if( $_REQUEST["passwd"]=="ask" )
{
/* reset password form*/
output_password_recovery($email,$password);
}
else if($_REQUEST["passwd"]=="set")
{
/* reset password */
$ok = 1;
/* check if old password matches */
$oldpasswd = md5($_REQUEST["password0"]);
if(!( ($password == $oldpasswd) || DB_check_recovery_passwords($oldpasswd,$email) ))
$ok = -1;
/* check if new passwords are types the same twice */
if($_REQUEST["password1"] != $_REQUEST["password2"] )
$ok = -2;
switch($ok)
{
case '-2':
echo "The new passwords don't match.
";
break;
case '-1':
echo "The old password is not correct.
";
break;
case '1':
echo "Changed the password.
";
mysql_query("UPDATE User SET password='".md5($_REQUEST["password1"]).
"' WHERE id=".DB_quote_smart($uid));
break;
}
/* set password */
}
}
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);
$myname = DB_get_name_by_email($email);
$_SESSION["name"] = $myname;
if(isset($_SESSION["name"]))
output_status($_SESSION["name"]);
/* display links to settings */
output_user_settings($email,$password);
echo "last login: ".date("r",$unixtime)."
";
DB_update_user_timestamp($uid);
echo "These are your games that haven't started yet:
\n";
$result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player from Hand".
" LEFT JOIN Game On Hand.game_id=Game.id".
" WHERE Hand.user_id='$uid' AND Game.status='pre'" );
while( $r = mysql_fetch_array($result,MYSQL_NUM))
{
echo "game #".$r[1]." ";
if($r[3]==$uid || $r[3]==NULL)
echo "(it's your turn)\n";
else
{
$name = DB_get_name_by_userid($r[3]);
echo "(it's $name's turn)\n";
};
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? yes".
" (clicking here is final and can't be restored)";
echo "
";
}
echo "
\n";
echo "These are the games you are playing in:
\n";
$result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player from Hand".
" LEFT JOIN Game On Hand.game_id=Game.id".
" WHERE Hand.user_id='$uid' AND Game.status='play'" );
while( $r = mysql_fetch_array($result,MYSQL_NUM))
{
echo "game #".$r[1]." ";
if($r[3])
{
if($r[3]==$uid)
echo "(it's your turn)\n";
else
{
$name = DB_get_name_by_userid($r[3]);
echo "(it's $name's turn)\n";
};
}
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? yes".
" (clicking here is final and can't be restored)";
echo "
";
}
echo "
\n";
echo "And these are your games that are already done:
Game: \n";
$output = array();
$result = mysql_query("SELECT hash,game_id from Hand WHERE user_id='$uid' AND status='gameover'" );
while( $r = mysql_fetch_array($result,MYSQL_NUM))
$output[] = "#".$r[1]." ";
echo implode(", ",$output)."
\n";
$names = DB_get_all_names();
echo "Registered players:
\n";
echo implode(", ",$names)."\n";
echo "
\n";
echo "Want to start a new game? Visit this page.
";
}
}
else
{
echo "Sorry email and password don't match. Please try again.
";
}
};
output_footer();
DB_close();
exit();
}
/* default login page */
else
{
$pre[0]=0;$game[0]=0;$done[0]=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);
}
$r=mysql_query("SELECT AVG(datediff(mod_date,create_date)) FROM Game where status='gameover' ");
if($r)
$avgage= mysql_fetch_array($r,MYSQL_NUM);
else
$avgage[0]=0;
output_home_page($pre[0],$game[0],$done[0],$avgage[0]);
}
output_footer();
DB_close();
/*
*Local Variables:
*mode: php
*mode: hs-minor
*End:
*/
?>