X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=index.php;h=74b4fc129824e849c79db4e92e262fa58b902144;hb=a41eca191e497f8821031e99920e0f053a090b1d;hp=3a7ecade205fc00a1235e74a9d425801644c9c18;hpb=b419a0604f118ce8697e236384e5110086e733b4;p=e-DoKo.git diff --git a/index.php b/index.php index 3a7ecad..74b4fc1 100644 --- a/index.php +++ b/index.php @@ -1,436 +1,172 @@ - - -
-If you find bugs, please list them in the wiki
\n"; - -echo "Cards that have a green background have a comment, which you can access by hovering over the card with your mouse ;)
\n"; - -$history=array(); +if(DB_open()<0) + { + output_header(); + 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(); + } -/* check for status file and read it, if possible */ +/* start a session, if it is not already running */ +session_start(); -if(file_exists("status.txt")) - $lines = file("status.txt"); - else - die("no file"); +/* done major error checking, output header of HTML page */ +output_header(); /* check if we want to start a new game */ -if( isset($_REQUEST["PlayerA"]) && - isset($_REQUEST["PlayerB"]) && - isset($_REQUEST["PlayerC"]) && - isset($_REQUEST["PlayerD"]) && - isset($_REQUEST["EmailA"]) && - isset($_REQUEST["EmailB"]) && - isset($_REQUEST["EmailC"]) && - isset($_REQUEST["EmailD"]) && sizeof($lines<2)) +if(myisset("logout")) + { + session_unset(); + session_destroy(); + $_SESSION = array(); + echo "you are now logged out!"; + } +else if(myisset("new")) + { + if( isset($_SESSION["name"]) ) + { + $names = DB_get_all_names(); + output_form_for_new_game($names); + } + else + { + echo "Please log in."; + } + } +/*check if everything is ready to set up a new game */ + else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD","dullen","schweinchen","call" )) { $PlayerA = $_REQUEST["PlayerA"]; $PlayerB = $_REQUEST["PlayerB"]; $PlayerC = $_REQUEST["PlayerC"]; $PlayerD = $_REQUEST["PlayerD"]; - $EmailA = $_REQUEST["EmailA"] ; - $EmailB = $_REQUEST["EmailB"] ; - $EmailC = $_REQUEST["EmailC"] ; - $EmailD = $_REQUEST["EmailD"] ; + + $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); + $EmailD = DB_get_email_by_name($PlayerD); - $hashA = md5("AGameOfDoko".$PlayerA.$EmailA); - $hashB = md5("AGameOfDoko".$PlayerB.$EmailB); - $hashC = md5("AGameOfDoko".$PlayerC.$EmailC); - $hashD = md5("AGameOfDoko".$PlayerD.$EmailD); + if($EmailA=="" || $EmailB=="" || $EmailC=="" || $EmailD=="") + { + echo "couldn't find one of the names, please start a new game"; + output_footer(); + DB_close(); + exit(); + } + + $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; + 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 */ - /* send out email, check for error with email */ + /* check if there is a game in pre or play mode, in that case do nothing */ + if( DB_is_session_active($session) > 0 ) + { + echo " "; + output_footer(); + DB_close(); + exit(); + } + else if ( DB_is_session_active($session) < 0 ) + { + echo " "; + 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 */ + $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 + { + /* 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". @@ -441,606 +177,1742 @@ if( isset($_REQUEST["PlayerA"]) && "$PlayerC\n". "$PlayerD\n\n". "If you want to join this game, please follow this link:\n\n". - " ".$host."?a="; + "".$host."?me="; - 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")) - $random = file("random.txt"); - else - die("no random file"); - - $randomNR = explode( ":", $random[2] ); + 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")) + { + $me = $_REQUEST["me"]; - /* write initial status into file */ - $output = fopen("status.txt","w"); - if ($output) + /* test for valid ID */ + $myid = DB_get_userid_by_hash($me); + if(!$myid) { - fwrite($output, "$hashA:$PlayerA:$EmailA:::" ); - for($i=0;$i<11;$i++) - fwrite($output,"$randomNR[$i];" ); - fwrite($output,"$randomNR[11]:" ); $i++; - fwrite($output,"\n"); - - fwrite($output, "$hashB:$PlayerB:$EmailB:::" ); - for(;$i<23;$i++) - fwrite($output,"$randomNR[$i];" ); - fwrite($output,"$randomNR[23]:" ); $i++; - fwrite($output,"\n"); + echo "Can't find you in the database, please check the url.Game ".DB_format_gameid($gameid).
+ " has been cancled.
You need to wait longer before you can cancle a game...
\n"; + } +/* send out a reminder */ +else if(myisset("remind","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.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.
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")) { -?> -no game in progress, please input 4 names and email addresses, please make sure that the addresses are correct!
- - - \n"; - } - } + /* 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")) { - $b=$_REQUEST["b"]; + $ok = 1; + + $myid = DB_get_userid_by_email($email); + if(!$myid) + $ok = 0; - if( ereg("s",$player[$b]["option"]) && $game["init"]<4) - { - echo "just wait for the game to start"; - } - else if( (!isset($_REQUEST["in"])|| !isset($_REQUEST["update"])) && !ereg("i",$player[$b]["option"])) + if($ok) { - echo "go back to "; - echo " here and fill out the formaehm... at the moment please just answer everything with no, still need to implement this
- \n"; + DB_set_recovery_password($myid,md5($newpw)); } - } - } - if(isset($_REQUEST["c"])) - { - $c=$_REQUEST["c"]; - - if(!isset($_REQUEST["solo"])|| !isset($_REQUEST["wedding"])|| !isset($_REQUEST["poverty"]) || !isset($_REQUEST["nines"]) ) - { - echo "go back to "; - echo " here and fill out the formSession:
\n";
+ echo " p = pre-game phase ";
+ echo "P = game in progess ";
+ echo "F = game finished
";
+ echo "
\n"; + while( $r = mysql_fetch_array($result,MYSQL_NUM)) + { + $game = DB_format_gameid($r[1]); + $gamenr = (int) $game; + if($gamenrold < $gamenr) + { + if($gamenrold!=-1) + echo " | |||
$gamenr: | "; + else + echo "$gamenr: | "; + $gamenrold = $gamenr; + } + if($r[4]=='pre') + { + echo "\n p "; - if(sizeof($tmp2)<=2) - $tmp[sizeof($tmp)-2] .= "->".$comment; - $history[sizeof($history)-1]=join(":",$tmp); + } + else if ($r[4]=='gameover') + echo "\n F "; + else + { + echo "\n P "; + } + if($r[4] != 'gameover') + { + echo " | \n ";
+ if($r[3])
+ {
+ if($r[3]==$myid)
+ echo "(it's your turn)\n";
+ else
+ {
+ $name = DB_get_name_by_userid($r[3]);
+ $gameid = $r[1];
+ if(DB_get_reminder($r[3],$gameid)==0)
+ if(time()-strtotime($r[2]) > 60*60*24*7)
+ echo "".
+ "Send a reminder.";
+ echo "(it's $name's turn)\n";
+ };
+ }
+ if(time()-strtotime($r[2]) > 60*60*24*30)
+ echo "".
+ "Cancel?".
+ " (clicking here is final and can't be restored)";
- save_status();
- }
- else if(isset($_REQUEST["win"]) && strlen($history[sizeof($history)-1])>3)
- {
- $win=$_REQUEST["win"];
- $history[]=$win.":\n";
- /* count points of the last trick */
- $points=0;
-
- $tmp = explode(":",$history[sizeof($history)-2]);
- for($i=0;$i<4;$i++)
- {
- $tmp2 = explode("->",$tmp[$i]);
- $c = $tmp2[1];
- $points += card_value($c);
- }
- $player[$hash[$win]]["points"]+=$points;
- echo " \n ".$player[$hash[$win]]["name"]." won: $points Points \n"; - - save_status(); - }; /* end if win is set */ - echo " \n"; + } + } + echo " |
\n"; + echo implode(", ",$names)."\n"; + echo "
\n\n";
- /* is it our turn? */
- if($hash[$next]==$me && !isset($_REQUEST["card"]) && !isset($_REQUEST["win"]))
- {
- echo "ITS YOUR TURN
\n";
- echo "your cards are:
\n";
- foreach($mycards as $card)
- {
- display_link_card($card,$me);
- }
- }
- else
- { /* not our turn, just show the hand */
- echo "your cards are:
\n";
- foreach($mycards as $card)
- {
- display_card($card);
- }
- }
- echo "