X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=index.php;h=fef72fdd78fc02bc20b62c04093e30cc6bb4afaf;hp=84ce6f01708deb3f5cd1e11cdc33571d0397556c;hb=910da8ec88cb67f13b84edbc0e61062b4789a8ab;hpb=7ecd66ab61eb1f0e8d32e75570b4809b57ae79d5 diff --git a/index.php b/index.php index 84ce6f0..fef72fd 100644 --- a/index.php +++ b/index.php @@ -1,9 +1,6 @@ Setup not completed"; + echo "You need to set \$ADMIN_NAME in config.php."; + output_footer(); + exit(); + } +if(!isset($ADMIN_EMAIL)) + { + output_header(); + echo "

Setup not completed

"; + 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 + */ +if(0) + { + output_header(); + echo "Working on the database...please check back in a few mintues"; + output_footer(); + exit(); + } + +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(); + } -if(0) -{ - output_header(); - echo "Working on the database...please check back in a few mintues"; - output_footer(); - exit(); -} +/* start a session, if it is not already running */ +session_start(); -DB_open(); +/* done major error checking, output header of HTML page */ output_header(); /* check if we want to start a new game */ -if(myisset("new")) +if(myisset("logout")) + { + session_unset(); + session_destroy(); + $_SESSION = array(); + echo "you are now logged out!"; + } +else if(myisset("new")) { $names = DB_get_all_names(); output_form_for_new_game($names); } /*check if everything is ready to set up a new game */ -else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD" )) + else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD","dullen","schweinchen","call" )) { $PlayerA = $_REQUEST["PlayerA"]; $PlayerB = $_REQUEST["PlayerB"]; $PlayerC = $_REQUEST["PlayerC"]; $PlayerD = $_REQUEST["PlayerD"]; - + + $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); @@ -46,6 +90,8 @@ else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD" )) if($EmailA=="" || $EmailB=="" || $EmailC=="" || $EmailD=="") { echo "couldn't find one of the names, please start a new game"; + output_footer(); + DB_close(); exit(); } @@ -55,48 +101,66 @@ else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD" )) $useridD = DB_get_userid_by_name($PlayerD); /* create random numbers */ - $randomNR = create_array_of_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 */ if($session) - mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre','$session' ,NULL)"); + 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("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre','$max' ,NULL)"); 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 - mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre', NULL ,NULL)"); + { + /* 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 */ - $hashA = md5("AGameOfDoko".$game_id.$PlayerA.$EmailA); - $hashB = md5("AGameOfDoko".$game_id.$PlayerB.$EmailB); - $hashC = md5("AGameOfDoko".$game_id.$PlayerC.$EmailC); - $hashD = md5("AGameOfDoko".$game_id.$PlayerD.$EmailD); + $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,'false','false',NULL)"); + ", ".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,'false','false',NULL)"); + ", ".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,'false','false',NULL)"); + ", ".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,'false','false',NULL)"); + ", ".DB_quote_smart($hashD).", 'start','4',NULL,NULL,NULL,NULL)"); $hand_idD = mysql_insert_id(); /* save cards */ @@ -120,7 +184,7 @@ else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD" )) "$PlayerC\n". "$PlayerD\n\n". "If you want to join this game, please follow this link:\n\n". - " ".$host."?me="; + "".$host."?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); @@ -129,10 +193,9 @@ else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD" )) 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")) { - /* cancle a game, if it is older than N minutes */ - $me = $_REQUEST["me"]; /* test for valid ID */ @@ -141,6 +204,8 @@ else if(myisset("cancle","me")) { 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(); } @@ -149,11 +214,11 @@ else if(myisset("cancle","me")) /* 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) + 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"; @@ -162,7 +227,7 @@ else if(myisset("cancle","me")) foreach($userids as $user) { $To = DB_get_email_by_userid($user); - mymail($To,$EmailName."game cancled (timed out)",$message); + mymail($To,$EmailName."game $gameid cancled (timed out)",$message); } /* delete everything from the dB */ @@ -173,12 +238,10 @@ else if(myisset("cancle","me")) 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")) { - /* handle request from one specific player, - * the hash is set on a per game base - */ - $me = $_REQUEST["me"]; /* test for valid ID */ @@ -187,9 +250,15 @@ else if(myisset("me")) { 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 */ @@ -197,9 +266,78 @@ else if(myisset("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; + } + + /* display rule set for this game */ + echo "
\n"; + + if($gamestatus != 'pre') + echo " Gametype: $GT
\n"; + + echo "Rules:
\n"; + echo "10ofhearts : ".$RULES["dullen"] ."
\n"; + echo "schweinchen: ".$RULES["schweinchen"] ."
\n"; + echo "call: ".$RULES["call"] ."
\n"; + echo "
\n"; + + /* output extra division in case this game is part of a session */ + if($session) + { + echo "
\n". + "This game is part of session $session: \n"; + $hashes = DB_get_hashes_by_session($session,$myid); + $i = 1; + foreach($hashes as $hash) + { + if($hash == $me) + echo "$i "; + else + echo "$i "; + $i++; + } + echo "
\n"; + } + - /* display the game number */ - echo "

Game $gameid

\n"; + /* 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; + } + }; /* mystatus gets the player through the different stages of a game. * start: yes/no @@ -214,21 +352,30 @@ else if(myisset("me")) switch($mystatus) { case 'start': - check_want_to_play($me); - /* move on to the next stage*/ - DB_set_hand_status_by_hash($me,'init'); - break; + if( !myisset("in") ) + { + output_check_want_to_play($me); + break; + } + else + { + /* move on to the next stage*/ + DB_set_hand_status_by_hash($me,'init'); + } case 'init': - if( !myisset("in","update") ) + /* first check if everything went ok in the last step + * if not, send user back, if yes, check what he did + */ + if( !myisset("in") ) { - echo "you need to answer both question"; + echo "

You need to answer the question.

"; DB_set_hand_status_by_hash($me,'start'); } else { if($_REQUEST["in"] == "no") { - /* cancle the game */ + /* cancel the game */ $message = "Hello, \n\n". "the game has been canceled due to the request of one of the players.\n"; @@ -236,7 +383,7 @@ else if(myisset("me")) foreach($userids as $user) { $To = DB_get_email_by_userid($user); - mymail($To,$EmailName."game canceled",$message); + mymail($To,$EmailName."game $gameid canceled",$message); } /* delete everything from the dB */ @@ -244,48 +391,53 @@ else if(myisset("me")) } else { - echo "thanks for joining the game... please scroll down"; - echo "TODO: make this page nicer
"; - echo "TODO: set card pref
"; + echo "Thanks for joining the game..."; $mycards = DB_get_hand($me); sort($mycards); - echo "

your cards are:
\n"; + echo "

your cards are:
\n"; foreach($mycards as $card) - display_card($card); + display_card($card,$PREF["cardset"]); echo "

\n"; - check_for_sickness($me,$mycards); + output_check_for_sickness($me,$mycards); /* move on to the next stage*/ DB_set_hand_status_by_hash($me,'check'); } } break; - + case 'check': - echo "checking if you selected solo or nines...
". - " if you have a wedding, please send an email to the other players.
". - " if you have poverty you need to play a normal game,sorry...
". - " Please click here to finish the setup.
"; + /* ok, user is in the game, saw his cards and selected his vorbehalt + * so first we check what he selected + */ if(!myisset("solo","wedding","poverty","nines") ) { /* 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."; + * unless a user tries to cheat ;) + * can also happen if user reloads the page! + */ + echo "

You need to answer the questions.

"; + DB_set_hand_status_by_hash($me,'init'); } else { + echo "Processing what you selected in the last step...
"; + /* check if this sickness needs to be handled first */ $gametype = DB_get_gametype_by_gameid($gameid); $startplayer = DB_get_startplayer_by_gameid($gameid); if( $_REQUEST["solo"]!="No") { + /* user wants to play a solo */ + /* store the info in the user's hand info */ DB_set_solo_by_hash($me,$_REQUEST["solo"]); DB_set_sickness_by_hash($me,"solo"); + echo "
Seems like you want to play a ".$_REQUEST["solo"]." solo. Got it.
\n"; if($gametype == "solo" && $startplayer<$mypos) @@ -303,107 +455,556 @@ else if(myisset("me")) else if($_REQUEST["wedding"] == "yes") { /* TODO: add silent solo somewhere*/ - echo "wedding was chosen
\n"; + echo "Ok, you don't want to play a silent solo...wedding was chosen.
\n"; DB_set_sickness_by_hash($me,"wedding"); } else if($_REQUEST["poverty"] == "yes") { - echo "poverty was chosen
\n"; + echo "Don't think you can win with just a few trump...? ok, poverty chosen
\n"; DB_set_sickness_by_hash($me,"poverty"); } else if($_REQUEST["nines"] == "yes") { - echo "nines was chosen
\n"; + echo "What? You just don't want to play a game because you have a few nines? Well, if no one". + " is playing solo, this game will be canceled.
\n"; DB_set_sickness_by_hash($me,"nines"); } - } - - /* move on to the next stage*/ - DB_set_hand_status_by_hash($me,'poverty'); - - + + echo " Ok, done with checking, please go to the next step of the setup.
"; + + /* move on to the next stage*/ + DB_set_hand_status_by_hash($me,'poverty'); + + /* check if everyone has reached this stage, send out email */ + $userids = DB_get_all_userid_by_gameid($gameid); + $ok = 1; + foreach($userids as $user) + { + $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid); + if($userstat!='poverty' && $userstat!='play') + { + $ok = 0; + DB_set_player_by_gameid($gameid,$user); + } + }; + if($ok) + { + /* reset player = everyone has to do something now */ + DB_set_player_by_gameid($gameid,NULL); + + foreach($userids as $user) + { + $To = DB_get_email_by_userid($user); + $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); + if($userhash != $me) + { + $message = "Everyone finish the questionary in game $gameid, ". + "please visit this link now to continue: \n". + " ".$host."?me=".$userhash."\n\n" ; + mymail($To,$EmailName." finished setup in game $gameid",$message); + } + }; + }; + }; + break; + case 'poverty': /* here we need to check if there is a solo or some other form of sickness. - * If so, which one counts + * If so, which one is the most important one * set that one in the Game table * tell people about it. */ - echo "
checking if someone else selected solo or nines... wedding and poverty not handled at the moment
". - " Please click here to finish the setup.
"; - - /* only set this after all poverty, etc. are handled*/ - DB_set_hand_status_by_hash($me,'play'); + echo "
Checking if someone else selected solo, nines, wedding or poverty.
"; - /* check if the game can start */ + /* check if everyone has reached this stage */ $userids = DB_get_all_userid_by_gameid($gameid); - $ok=1; + $ok = 1; foreach($userids as $user) - if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play') - $ok=0; - - if($ok) { - DB_set_game_status_by_gameid($gameid,'play'); - - /* check what kind of game we are playing */ + $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid); + if($userstat!='poverty' && $userstat!='play') + $ok = 0; + }; + + if(!$ok) + { + echo "This step can only be handled after everyone finished the last step. ". + "Seems like this is not the case, so you need to wait a bit... ". + "you will get an email once that is the case, please use the link in ". + "that email to continue the game.
"; + } + else + { + echo "Everyone has finished checking their cards, let's see what they said...
"; + + /* check what kind of game we are playing, in case there are any solos this already + *will have the correct information in it */ $gametype = DB_get_gametype_by_gameid($gameid); $startplayer = DB_get_startplayer_by_gameid($gameid); - - /* nines? */ - $nines = 0; - /* check for nines */ + + /* check for different sickness and just output a general info */ + $nines = 0; + $poverty = 0; + $wedding = 0; + $solo = 0; foreach($userids as $user) - if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'nines') - $nines = $user; - - /* gamestatus == normal, => cancel game */ - if($nines && $gamestatus == "normal") { - /* TODO: set game type to nines to be able to keep statistics? */ + $name = DB_get_name_by_userid($user); + $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid); + if($usersick == 'nines') + { + $nines = $user; + echo "$name has a Vorbehalt.
"; + break; + } + else if($usersick == 'poverty') + { + $poverty++; + echo "$name has a Vorbehalt.
"; + } + else if($usersick == 'wedding') + { + $wedding=$user; + echo "$name has a Vorbehalt.
" ; + } + else if($usersick == 'solo') + { + $solo++; + echo "$name has a Vorbehalt.
" ; + } + } + + /* now check which sickness comes first and set the gametype to it */ + + if($gametype == "solo") + { + /* do nothing */ + } + else if($nines) + { + /* cancel game */ + /* TODO: should we keep statistics of this? */ $message = "Hello, \n\n". - "the game has been canceled because ".DB_get_name_by_userid($nines)." has five or more nines.\n"; + " the game has been canceled because ".DB_get_name_by_userid($nines). + " has five or more nines and nobody is playing solo.\n\n". + " To redeal either start a new game or, in case the game was part of a tournament, \n". + " go to the last game and use the link at the bottom of the page to redeal."; $userids = DB_get_all_userid_by_gameid($gameid); foreach($userids as $user) { $To = DB_get_email_by_userid($user); - mymail($To,$EmailName."game canceled",$message); + mymail($To,$EmailName."game $gameid canceled",$message); } /* delete everything from the dB */ DB_cancel_game($me); + + echo "The game has been canceled because ".DB_get_name_by_userid($nines). + " has five or more nines and nobody is playing solo.\n"; + output_footer(); + DB_close(); + exit(); } + else if($poverty==1) /* one person has poverty */ + { + DB_set_gametype_by_gameid($gameid,"poverty"); + $gametype = "poverty"; + $who = DB_get_sickness_by_gameid($gameid); + if(!$who) + { + $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid); + if($firstsick == "poverty") + DB_set_sickness_by_gameid($gameid,2); /* who needs to be asked first */ + else + DB_set_sickness_by_gameid($gameid,1); /* who needs to be asked first */ + } + } + else if($poverty==2) /* two people have poverty */ + { + DB_set_gametype_by_gameid($gameid,"dpoverty"); + $gametype = "dpoverty"; + $who = DB_get_sickness_by_gameid($gameid); + if(!$who) + { + $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid); + if($firstsick == "poverty") + { + $seconsick = DB_get_sickness_by_pos_and_gameid(1,$gameid); + if($secondsick == "poverty") + DB_set_sickness_by_gameid($gameid,30); /* who needs to be asked first */ + else + DB_set_sickness_by_gameid($gameid,20); /* who needs to be asked first */ + } + else + DB_set_sickness_by_gameid($gameid,10); /* who needs to be asked first */ + } + } + else if($wedding> 0) + { + DB_set_gametype_by_gameid($gameid,"wedding"); + DB_set_sickness_by_gameid($gameid,'-1'); /* wedding not resolved yet */ + $gametype = "wedding"; + }; + + echo "
\n"; + + /* now the gametype is set correctly (shouldn't matter that this is calculated for every user) + * output what kind of game we have */ - /* check players for poverty */ $poverty = 0; foreach($userids as $user) { - if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'poverty') + /* userids are sorted by position... + * so output whatever the first one has, then whatever the next one has + * stop when the sickness is the same as the gametype + */ + + $name = DB_get_name_by_userid($user); + $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid); + + if($usersick) + echo "$name has $usersick.
"; /*TODO: perhaps save this in a string and store in Game? */ + + if($usersick=="poverty") + $poverty++; + if($usersick == "wedding" && $gametype =="wedding") + break; + if($usersick == "poverty" && $gametype =="poverty") + break; + if($usersick == "poverty" && $gametype =="dpoverty" && $poverty==2) + break; + if($usersick == "solo" && $gametype =="solo") + break; + }; + + /* output Schweinchen in case the rules need it */ + if( $gametype != "solo") + if($GAME["schweinchen"] && $RULES["schweinchen"]=="both" ) + echo DB_get_name_by_hash($GAME["schweinchen-who"])." has Schweinchen.
"; + + echo "
\n"; + + /* finished the setup, set re/contra parties if possible, go to next stage unless there is a case of poverty*/ + switch($gametype) + { + case "solo": + /* are we the solo player? set us to re, else set us to contra */ + $pos = DB_get_pos_by_hash($me); + if($pos == $startplayer) + DB_set_party_by_hash($me,"re"); + else + DB_set_party_by_hash($me,"contra"); + DB_set_hand_status_by_hash($me,'play'); + break; + + case "wedding": + /* set person with the wedding to re, do the rest during the game */ + $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid); + if($usersick == "wedding") + DB_set_party_by_hash($me,"re"); + else + DB_set_party_by_hash($me,"contra"); + + echo "Whoever will make the first trick will be on the re team.
\n"; + echo " Ok, the game can start now, please finish the setup.
"; + DB_set_hand_status_by_hash($me,'play'); + break; + + case "normal": + $hand = DB_get_all_hand($me); + + if(in_array('3',$hand)||in_array('4',$hand)) + DB_set_party_by_hash($me,"re"); + else + DB_set_party_by_hash($me,"contra"); + DB_set_hand_status_by_hash($me,'play'); + break; + case "poverty": + case "dpoverty": + /* check if poverty resolved (e.g. DB.Game who set to NULL) + * yes? =>trump was taken, start game; break; + */ + $who = DB_get_sickness_by_gameid($gameid); + if($who<0) + { /* trump has been taken */ + DB_set_hand_status_by_hash($me,'play'); + break; + }; + + if($who>9) /*= two people still have trump on the table*/ + $add = 10; + else + $add = 1; + + /* check if we are being asked now + * no? display wait message, e.g. player X is asked at the moment + */ + $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid); + if(myisset("trump") && $_REQUEST["trump"]=="no" && ($who==$mypos || $who==$mypos*10)) { - $poverty++; - $name = DB_get_name_by_userid($user); - echo "$name has a Vorbehalt.
"; + /* user doesn't want to take trump */ + /* set next player who needs to be asked */ + $firstsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid); + $secondsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid); + + if($firstsick=="poverty") + { + if($secondsick=="poverty") + DB_set_sickness_by_gameid($gameid,$who+$add*3); + else + DB_set_sickness_by_gameid($gameid,$who+$add*2); + } + else + DB_set_sickness_by_gameid($gameid,$who+$add); + + /* email next player */ + $who = DB_get_sickness_by_gameid($gameid); + if($who>9) $who = $who/10; + + if($who<=4) + { + $To = DB_get_email_by_pos_and_gameid($who,$gameid); + $userhash = DB_get_hash_from_game_and_pos($gameid,$who); + DB_set_player_by_gameid($gameid,$who); + + $message = "Someone has poverty, it's your turn to decide, if you want to take the trump. Please visit:". + " ".$host."?me=".$userhash."\n\n" ; + mymail($To,$EmailName." poverty (game $gameid)",$message); + } + + /* this user is done */ + DB_set_hand_status_by_hash($me,'play'); + break; + } + else if(myisset("trump") && !myisset("exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10)) + { + /* user wants to take trump */ + $trump = $_REQUEST["trump"]; + + /* get hand id for user $trump */ + $userhand = DB_get_handid_by_gameid_and_userid($gameid,$trump); + /* copy trump from player A to B */ + $result = mysql_query("UPDATE Hand_Card SET hand_id='$myhand' WHERE hand_id='$userhand' AND card_id<'27'" ); + + /* add hidden button with trump in it to get to the next point */ + echo "
\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
\n"; + } + else if(myisset("trump","exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10)) + { + $trump = $_REQUEST["trump"]; + $exchange = $_REQUEST["exchange"]; + $userhand = DB_get_handid_by_gameid_and_userid($gameid,$trump); + + /* if exchange is set to a value>0, exchange that card back to user $trump */ + if($exchange >0) + { + $result = mysql_query("UPDATE Hand_Card SET hand_id='$userhand'". + " WHERE hand_id='$myhand' AND card_id='$exchange'" ); + }; + + /* if number of cards == 12, set status to play for both users */ + $result = mysql_query("SELECT COUNT(*) FROM Hand_Card WHERE hand_id='$myhand'" ); + $r = mysql_fetch_array($result,MYSQL_NUM); + if(!$r) + { + myerror("error in poverty"); + die(); + }; + if($r[0]==12) + { + if($gametype=="poverty" || $who<9) + { + DB_set_sickness_by_gameid($gameid,-1); /* done with poverty */ + } + else /* reduce poverty count by one, that is go to single digits $who */ + { + $add = 1; + $who = $who/10; + + /* whom to ask next */ + $firstsick = DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid); + $secondsick = DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid); + + if($firstsick!="poverty") + DB_set_sickness_by_gameid($gameid,$who+$add); + else + { + if($secondsick!="poverty") + DB_set_sickness_by_gameid($gameid,$who+$add*2); + else + DB_set_sickness_by_gameid($gameid,$who+$add*3); + }; + + /* email next player */ + $who = DB_get_sickness_by_gameid($gameid); + if($who<=4) + { + $To = DB_get_email_by_pos_and_gameid($who,$gameid); + $userhash = DB_get_hash_from_game_and_pos($gameid,$who); + DB_set_player_by_gameid($gameid,$who); + + $message = "Someone has poverty, it's your turn to decide, ". + "if you want to take the trump. Please visit:". + " ".$host."?me=".$userhash."\n\n" ; + mymail($To,$EmailName." poverty (game $gameid)",$message); + } + } + + /* this user is done */ + DB_set_hand_status_by_hash($me,'play'); + /* and so is his partner */ + $hash = DB_get_hash_from_gameid_and_userid($gameid,$trump); + DB_set_hand_status_by_hash($hash,'play'); + + /* set party to re, unless we had dpoverty, in that case check if we need to set re/contra*/ + $re_set = 0; + foreach($userids as $user) + { + $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); + $party = DB_get_party_by_hash($userhash); + if($party=="re") + $re_set = 1; + } + if($re_set) + { + DB_set_party_by_hash($me,"contra"); + DB_set_party_by_hash($hash,"contra"); + } + else + { + foreach($userids as $user) + { + $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); + if($userhash==$hash||$userhash==$me) + DB_set_party_by_hash($userhash,"re"); + else + DB_set_party_by_hash($userhash,"contra"); + } + } + + + break; + } + else + { + /* else show all trump, have lowest card pre-selected, have hidden setting for */ + echo "you need to get rid of a few cards
\n"; + + set_gametype($gametype); /* this sets the $CARDS variable */ + $mycards = DB_get_hand($me); + $mycards = mysort($mycards,$gametype); + + echo "
\n"; + $type="exchange"; + foreach($mycards as $card) + display_link_card($card,$PREF["cardset"],$type); + echo " \n"; + echo " \n"; + echo " \n"; + echo "
\n"; + } + } + else if($who == $mypos || $who == $mypos*10) + { + foreach($userids as $user) + { + $name = DB_get_name_by_userid($user); + $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid); + + if($usersick=="poverty") + { + $hash = DB_get_hash_from_gameid_and_userid($gameid,$user); + $cards = DB_get_hand($hash); + $nrtrump = count_trump($cards); + /* count trump */ + if($nrtrump<4) + echo "Player $name has $nrtrump trump. Do you want to take them?". + "yes
"; + } + } + echo "No,way I take those trump...
"; + + echo "Your cards are:
\n"; + $mycards = DB_get_hand($me); + sort($mycards); + echo "

your cards are:
\n"; + foreach($mycards as $card) + display_card($card,$PREF["cardset"]); + echo "

\n"; + } + else + { + $mysick = DB_get_sickness_by_userid_and_gameid($myid,$gameid); + if($mysick=="poverty") + echo "The others are asked if they want to take your trump, you have to wait (you'll get an email)."; + else + echo "it's not your turn yet to decide if you want to take the trump or not."; + } + }; + /* check if no one wanted to take trump, in that case the gamesickness would be set to 5 or 50 */ + $who = DB_get_sickness_by_gameid($gameid); + if($who==5 || $who==50) + { + $message = "Hello, \n\n". + "Game $gameid has been cancled since nobody wanted to take the trump.\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 (poverty not resolved)",$message); } + + /* delete everything from the dB */ + DB_cancel_game($me); + + echo "

Game $gameid has been cancled.

"; + output_footer(); + DB_close(); + exit(); } - /* if gamestatus == normal, set poverty or dpovert (in case two people have poverty) */ - /* check players for wedding */ - $wedding = 0; + /* check if all players are ready to play */ + $ok = 1; foreach($userids as $user) + if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play') + { + $ok = 0; + DB_set_player_by_gameid($gameid,$user); + } + + if($ok) { - if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'wedding') + /* only set this after all poverty, etc. are handled*/ + DB_set_game_status_by_gameid($gameid,'play'); + + /* email startplayer */ + $startplayer = DB_get_startplayer_by_gameid($gameid); + $email = DB_get_email_by_pos_and_gameid($startplayer,$gameid); + $hash = DB_get_hash_from_game_and_pos($gameid,$startplayer); + $who = DB_get_userid_by_email($email); + DB_set_player_by_gameid($gameid,$who); + + if($hash!=$me) { - $wedding++; - $name = DB_get_name_by_userid($user); - echo "$name has a Vorbehalt.
" ; + /* email startplayer) */ + $message = "It's your turn now in game $gameid.\n". + "Use this link to play a card: ".$host."?me=".$hash."\n\n" ; + mymail($email,$EmailName."ready, set, go... (game $gameid) ",$message); } + else + echo " Please, start the game.
"; } - - /* if gamestatus == normal, set wedding */ - + else + echo "\n
"; } - break; case 'play': case 'gameover': @@ -412,65 +1013,54 @@ else if(myisset("me")) */ /* figure out what kind of game we are playing, - * set the global variables $TRUMP,$DIAMONDS,$HEARTS,$CLUBS,$SPADES + * set the global variables $CARDS["trump"],$CARDS["diamonds"],$CARDS["hearts"], + * $CARDS["clubs"],$CARDS["spades"],$CARDS["foxes"] * accordingly */ $gametype = DB_get_gametype_by_gameid($gameid); - $GT = $gametype; + $GT = $gametype; if($gametype=="solo") { $gametype = DB_get_solo_by_gameid($gameid); - $GT = $gametype." ".$GT; + $GT = $gametype." ".$GT; } else - $gametype="normal"; + $gametype = "normal"; - set_gametype($gametype); + set_gametype($gametype); /* this sets the $CARDS variable */ /* get some infos about the game */ $gamestatus = DB_get_game_status_by_gameid($gameid); /* display useful things in divs */ - /* display local time */ - echo "
\n Local times:"; - $users = array(); - $users = DB_get_all_userid_by_gameid($gameid); - foreach($users as $user) - { - $offset = DB_get_user_timezone($user); - $zone = return_timezone($offset); - date_default_timezone_set($zone); - $name = DB_get_name_by_userid($user); - - echo "\n"; - }; - echo "
$name ".date("Y-m-d H:i:s")."
\n
\n"; - - if($gamestatus != 'pre') - display_status($GT); - /* display links to the users status page */ $result = mysql_query("SELECT email,password from User WHERE id='$myid'" ); $r = mysql_fetch_array($result,MYSQL_NUM); - output_link_to_user_page($r[0],$r[1]); - display_news(); + display_links($r[0],$r[1]); /* end display useful things*/ /* has the game started? No, then just wait here...*/ if($gamestatus == 'pre') { - echo "you need to wait for the others...
"; + echo "You finished the setup, but not everyone else finished it... ". + "so you need to wait for the others. Just wait for the an email...
"; break; /* not sure this works... the idea is that you can * only play a card after everyone is ready to play */ } /* display the table and the names */ $result = mysql_query("SELECT User.fullname as name,". - " Hand.position as position ". + " Hand.position as position, ". + " User.id, ". + " Hand.party as party, ". + " Hand.sickness as sickness, ". + " Hand.point_call, ". + " User.last_login, ". + " Hand.hash ". "FROM Hand ". "LEFT JOIN User ON User.id=Hand.user_id ". "WHERE Hand.game_id='".$gameid."' ". @@ -480,28 +1070,159 @@ else if(myisset("me")) " \"table\"\n"; while($r = mysql_fetch_array($result,MYSQL_NUM)) { - $name = $r[0]; - $pos = $r[1]; + $name = $r[0]; + $pos = $r[1]; + $user = $r[2]; + $party = $r[3]; + $sickness = $r[4]; + $call = $r[5]; + $lastlogin = strtotime($r[6]); + $hash = $r[7]; + + $offset = DB_get_user_timezone($user); + $zone = return_timezone($offset); + date_default_timezone_set($zone); + + echo " \n"; + if(!$debug) + echo " $name \n"; + else + { + echo "$name\n"; + } + /* add hints for poverty, wedding, solo, etc */ + if($GT=="poverty" && $party=="re") + if($sickness=="poverty") + { + $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); + $cards = DB_get_all_hand($userhash); + $trumpNR = count_trump($cards); + if($trumpNR) + echo "\"poverty"; + else + echo "\"poverty"; + } + else + echo "\"poverty\" />"; + + if($GT=="dpoverty") + if($party=="re") + if($sickness=="poverty") + { + $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); + $cards = DB_get_all_hand($userhash); + $trumpNR = count_trump($cards); + if($trumpNR) + echo "\"poverty"; + else + echo "\"poverty"; + } + else + echo "\"poverty\" />"; + else + if($sickness=="poverty") + { + $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); + $cards = DB_get_all_hand($userhash); + $trumpNR = count_trump($cards); + if($trumpNR) + echo "\"poverty2"; + else + echo "\"poverty2"; + } + else + echo "\"poverty2\" />"; + + if($GT=="wedding" && $party=="re") + if($sickness=="wedding") + echo "\"wedding\""; + else + echo "\"wedding"; - echo " $name\n"; + if(ereg("solo",$GT) && $party=="re") + { + if(ereg("queen",$GT)) + echo "\"$GT\""; + else if(ereg("jack",$GT)) + echo "\"$GT\""; + else if(ereg("club",$GT)) + echo "\"$GT\""; + else if(ereg("spade",$GT)) + echo "\"$GT\""; + else if(ereg("heart",$GT)) + echo "\"$GT\""; + else if(ereg("trumpless",$GT)) + echo "\"$GT\""; + else if(ereg("trump",$GT)) + echo "\"$GT\""; + } + + /* add point calls */ + if($call!=NULL) + { + if($party=="re") + echo "\"re\""; + else + echo "\"contra\""; + switch($call) + { + case "0": + echo "\"0\""; + break; + case "30": + echo "\"30\""; + break; + case "60": + echo "\"60\""; + break; + case "90": + echo "\"90\""; + break; + } + } + + echo "
\n"; + echo " local time: ".date("Y-m-d H:i:s")."
\n"; + echo " last login: ".date("Y-m-d H:i:s",$lastlogin)."
\n"; + echo "
\n"; + } echo "\n"; - + + /* get time from the last action of the game */ + $result = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " ); + $r = mysql_fetch_array($result,MYSQL_NUM); + $gameend = time() - strtotime($r[0]); + + /* handel comments in case player didn't play a card, allow comments a week after the end of the game */ + if( (!myisset("card") && $mystatus=='play') || ($mystatus=='gameover' && ($gameend < 60*60*24*7)) ) + if(myisset("comment")) + { + $comment = $_REQUEST["comment"]; + $playid = DB_get_current_playid($gameid); + + if($comment != "") + DB_insert_comment($comment,$playid,$myid); + }; + /* get everything relevant to display the tricks */ $result = mysql_query("SELECT Hand_Card.card_id as card,". " Hand.position as position,". " Play.sequence as sequence, ". " Trick.id, ". - " Comment.comment ". + " GROUP_CONCAT(CONCAT('',User.fullname,': ',Comment.comment,'') SEPARATOR '\n' ), ". + " Play.create_date, ". + " Hand.user_id ". "FROM Trick ". "LEFT JOIN Play ON Trick.id=Play.trick_id ". "LEFT JOIN Hand_Card ON Play.hand_card_id=Hand_Card.id ". "LEFT JOIN Hand ON Hand_Card.hand_id=Hand.id ". "LEFT JOIN Comment ON Play.id=Comment.play_id ". + "LEFT JOIN User On User.id=Comment.user_id ". "WHERE Trick.game_id='".$gameid."' ". - "ORDER BY Trick.id,sequence ASC"); - $trickNR = 1; - + "GROUP BY Trick.id, sequence ". + "ORDER BY Trick.id, sequence ASC"); + $trickNR = 1; $lasttrick = DB_get_max_trickid($gameid); $play = array(); /* needed to calculate winner later */ @@ -510,7 +1231,7 @@ else if(myisset("me")) $firstcard = ""; /* first card in a trick */ echo "\n