From 95231cf6650d277fc13f5c0e1c1a0e1bb9c30edb Mon Sep 17 00:00:00 2001 From: Arun Persaud Date: Sat, 4 Feb 2012 11:16:42 -0800 Subject: [PATCH] fixed showing re/contra call at beginning of game; allowed pre-game comments; DB upgrade the problem with re/contra at the beginning of a game was that no playid was set yet, so we couldn't record when the call was made. Added two special playid (-1 and -2), for pre-game comments and re/contra calls before the first card is played. For this we need to record the gameid in the comment table => DB update --- create_database.sql | 1 + include/db.php | 29 ++++++-- include/game.php | 176 +++++++++++++++++++++++++++++--------------- include/output.php | 13 ++++ update_db.php | 8 +- 5 files changed, 160 insertions(+), 67 deletions(-) diff --git a/create_database.sql b/create_database.sql index 71a6dfc..9db587a 100644 --- a/create_database.sql +++ b/create_database.sql @@ -88,6 +88,7 @@ CREATE TABLE `Comment` ( `id` int(11) NOT NULL auto_increment, `user_id` int(11) default NULL, `play_id` int(11) default NULL, + `game_id` int(11) default NULL, `comment` text, UNIQUE KEY `id` (`id`), KEY `play_id` (`play_id`) diff --git a/include/db.php b/include/db.php index bd50189..633e90a 100644 --- a/include/db.php +++ b/include/db.php @@ -30,7 +30,7 @@ if(!isset($HOST)) function DB_open() { - $version_needed = 2; + $version_needed = 3; global $DB,$DB_user,$DB_host,$DB_database,$DB_password; $DB = @mysql_connect($DB_host,$DB_user, $DB_password); @@ -570,13 +570,31 @@ function DB_get_user_timezone($userid) return "Europe/London"; } -function DB_insert_comment($comment,$playid,$userid) +function DB_insert_comment($comment,$playid,$gameid,$userid) { - DB_query("INSERT INTO Comment VALUES (NULL,NULL,NULL,$userid,$playid, ".DB_quote_smart($comment).")"); + DB_query("INSERT INTO Comment VALUES (NULL,NULL,NULL,$userid,$playid,$gameid, ".DB_quote_smart($comment).")"); return; } +function DB_get_pre_comment($gameid) +{ + $r = DB_query_array_all("SELECT comment, User.fullname FROM Comment". + " LEFT JOIN User ON User.id=user_id". + " WHERE play_id=-1". + " AND game_id=$gameid "); + return $r; +} + +function DB_get_pre_comment_call($gameid) +{ + $r = DB_query_array_all("SELECT comment, User.fullname FROM Comment". + " LEFT JOIN User ON User.id=user_id". + " WHERE play_id=-2". + " AND game_id=$gameid "); + return $r; +} + function DB_insert_note($comment,$gameid,$userid) { DB_query("INSERT INTO Notes VALUES (NULL,NULL,NULL,$userid,$gameid, ".DB_quote_smart($comment).")"); @@ -936,16 +954,17 @@ function DB_get_card_name($card) function DB_get_current_playid($gameid) { + /* return playid or -1 for pre-game phase */ $trick = DB_get_max_trickid($gameid); - if(!$trick) return NULL; + if(!$trick) return -1; $r = DB_query_array("SELECT id FROM Play WHERE trick_id='$trick' ORDER BY create_date DESC LIMIT 1"); if($r) return $r[0]; - return ""; + return -1; } function DB_get_call_by_hash($hash) diff --git a/include/game.php b/include/game.php index cef2c65..6b6d6ba 100644 --- a/include/game.php +++ b/include/game.php @@ -53,6 +53,7 @@ $mypos = DB_get_pos_by_hash($me); $myhand = DB_get_handid('hash',$me); $myparty = DB_get_party_by_hash($me); $session = DB_get_session_by_gameid($gameid); +$playid = DB_get_current_playid($gameid); /* might be -1 at beginning of the game */ /* get prefs and save them in a variable*/ $PREF = DB_get_PREF(isset($_SESSION['id'])?$_SESSION['id']:$myid); @@ -128,51 +129,67 @@ if( $mystatus!='gameover' ) DB_insert_note($note,$gameid,$myid); }; -/* handle calls, output a comment to show when the call was made */ -/* initialize comments */ -$comment = ''; - -/* get information needed to submit comment */ -$playid = DB_get_current_playid($gameid); - -/* set comment */ -if($comment != '') - DB_insert_comment($comment,$playid,$myid); -/* clear up */ -unset($comment); -/* end check for calls */ +/***************************************************************** + * handle calls part1: check what was called, set everything up + * we only can submit it to the database at the end, since the playid + * might change if a player plays a card + *****************************************************************/ +/* initialize comments */ +$commentCall = ''; /* check for calls, set comment */ -if(myisset('call') && $_REQUEST['call'] == '120' && can_call(120,$me)) - { - $result = DB_query("UPDATE Hand SET point_call='120' WHERE hash='$me' "); - if($myparty=='re') - $comment .= "Re"; - else if($myparty=='contra') - $comment .= "Contra"; - } -if(myisset('call') && $_REQUEST['call'] == '90' && can_call(90,$me)) +if( myisset('call') ) { - $result = DB_query("UPDATE Hand SET point_call='90' WHERE hash='$me' "); - $comment .= "No 90"; - } -if(myisset('call') && $_REQUEST['call'] == '60' && can_call(60,$me)) - { - $result = DB_query("UPDATE Hand SET point_call='60' WHERE hash='$me' "); - $comment .= "No 60"; - } -if(myisset('call') && $_REQUEST['call'] == '30' && can_call(30,$me)) - { - $result = DB_query("UPDATE Hand SET point_call='30' WHERE hash='$me' "); - $comment .= "No 30"; - } -if(myisset('call') && $_REQUEST['call'] == '0' && can_call(0,$me)) - { - $result = DB_query("UPDATE Hand SET point_call='0' WHERE hash='$me' "); - $comment .= "Zero"; + if($_REQUEST['call'] == '120' && can_call(120,$me)) + { + $result = DB_query("UPDATE Hand SET point_call='120' WHERE hash='$me' "); + if($myparty=='re') + $commentCall = "Re"; + else if($myparty=='contra') + $commentCall = "Contra"; + } + else if($_REQUEST['call'] == '90' && can_call(90,$me)) + { + $result = DB_query("UPDATE Hand SET point_call='90' WHERE hash='$me' "); + $commentCall = "No 90"; + } + else if($_REQUEST['call'] == '60' && can_call(60,$me)) + { + $result = DB_query("UPDATE Hand SET point_call='60' WHERE hash='$me' "); + $commentCall = "No 60"; + } + else if($_REQUEST['call'] == '30' && can_call(30,$me)) + { + $result = DB_query("UPDATE Hand SET point_call='30' WHERE hash='$me' "); + $commentCall = "No 30"; + } + else if($_REQUEST['call'] == '0' && can_call(0,$me)) + { + $result = DB_query("UPDATE Hand SET point_call='0' WHERE hash='$me' "); + $commentCall = "Zero"; + } } +/********************************************************** + * handle comments unless we play a card at the same time * + * (if we play a card, we need to update playid) * + **********************************************************/ + + +/* get time from the last action of the game */ +$r = DB_query_array("SELECT mod_date from Game WHERE id='$gameid' " ); +$gameend = time() - strtotime($r[0]); + +/* handle comments in case player didn't play a card, allow comments a week after the end of the game */ +if( (!myisset('card') && $mystatus!='gameover') || ($mystatus=='gameover' && ($gameend < 60*60*24*7)) ) + if(myisset('comment')) + { + $comment = $_REQUEST['comment']; + + if($comment != '') + DB_insert_comment($comment,$playid,$gameid,$myid); + }; /***************************************************************** @@ -447,15 +464,27 @@ switch($mystatus) else echo "
healthy
\n"; } + + /* display all comments on the top right (card1)*/ + $comments = DB_get_pre_comment($gameid); + /* display card */ + echo "
\n"; + /* display comments */ + foreach( $comments as $comment ) + echo " ".$comment[1].": ".$comment[0]."\n"; + echo "
\n"; /* end div card */ + + echo " \n \n"; /* end div trick, end li trick , end tricks*/ /* end displaying sickness */ + break; case 'poverty': /* output pre-game trick in case user reloads, * only needs to be done when a team has been formed */ if($myparty=='re' || $myparty=='contra') { - echo "\n