diff options
-rw-r--r-- | create_database.sql | 30 | ||||
-rw-r--r-- | include/cancelgame.php | 4 | ||||
-rw-r--r-- | include/db.php | 2 | ||||
-rw-r--r-- | include/functions.php | 31 | ||||
-rw-r--r-- | include/game.php | 47 | ||||
-rw-r--r-- | include/output.php | 2 | ||||
-rw-r--r-- | include/user.php | 7 |
7 files changed, 100 insertions, 23 deletions
diff --git a/create_database.sql b/create_database.sql index 47d1b55..319cdd3 100644 --- a/create_database.sql +++ b/create_database.sql @@ -12,6 +12,28 @@ /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; + +-- +-- Table structure for table `Version` +-- + +DROP TABLE IF EXISTS `Version`; +CREATE TABLE `Version` ( + `version` int NOT NULL default '0' +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `Card` +-- + + +/*!40000 ALTER TABLE `Card` DISABLE KEYS */; +LOCK TABLES `Version` WRITE; +INSERT INTO `Version` VALUES (1); +UNLOCK TABLES; +/*!40000 ALTER TABLE `Version` ENABLE KEYS */; + + -- -- Table structure for table `Card` -- @@ -98,9 +120,9 @@ CREATE TABLE `Game` ( `type` enum('normal','solo','wedding','poverty','dpoverty') default NULL, `solo` enum('trumpless','jack','queen','trump','club','spade','heart','silent') default NULL, `sickness` int(11) default NULL, - `startplayer` tinyint(4) default '1', - `player` int(11) default NULL, - `status` enum('pre','play','gameover') default NULL, + `startplayer` tinyint(4) default '1', + `player` int(11) default NULL, + `status` enum('pre','play','gameover','cancel-timedout','cancel-nines','cancel-trump','cancel-noplay') default NULL, `ruleset` int(11) default NULL, `session` int(11) default NULL, `id` int(11) NOT NULL auto_increment, @@ -133,7 +155,7 @@ CREATE TABLE `Rulesets` ( `id` int(11) NOT NULL auto_increment, UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; - + -- -- Dumping data for table `Rulesets` -- diff --git a/include/cancelgame.php b/include/cancelgame.php index 2240203..71bb58b 100644 --- a/include/cancelgame.php +++ b/include/cancelgame.php @@ -48,8 +48,8 @@ if(time()-strtotime($r[0]) > 60*60*24*30) /* = 1 month */ mymail($user,$subject,$message); } - /* delete everything from the dB */ - DB_cancel_game($me); + /* set gamestatus to canceled */ + cancel_game('timedout',$gameid); echo "<p style=\"background-color:red\";>Game ".DB_format_gameid($gameid). " has been canceled.<br /><br /></p>"; diff --git a/include/db.php b/include/db.php index b84a566..ef902ad 100644 --- a/include/db.php +++ b/include/db.php @@ -971,7 +971,7 @@ function DB_is_session_active($session) { $r = DB_query_array("SELECT COUNT(*) FROM Game ". " WHERE session=$session ". - " AND status<>'gameover' "); + " AND status IN ('pre','play') "); if($r) return $r[0]; else diff --git a/include/functions.php b/include/functions.php index 0559895..981cabc 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1253,4 +1253,35 @@ function check_vacation($userid) return NULL; } +function cancel_game($why,$gameid) +{ + $gameid = DB_quote_smart($gameid); + + /* update the game table */ + switch($why) + { + case 'timedout': + DB_query("UPDATE Game SET status='cancel-timedout' WHERE id=$gameid"); + break; + case 'nines': + DB_query("UPDATE Game SET status='cancel-nines' WHERE id=$gameid"); + break; + case 'trump': + DB_query("UPDATE Game SET status='cancel-trump' WHERE id=$gameid"); + break; + case 'noplay': + DB_query("UPDATE Game SET status='cancel-noplay' WHERE id=$gameid"); + break; + } + /* set each player to gameover */ + $result = DB_query("SELECT id FROM Hand WHERE game_id=".DB_quote_smart($gameid)); + while($r = DB_fetch_array($result)) + { + $id = $r[0]; + DB_query("UPDATE Hand SET status='gameover' WHERE id=".DB_quote_smart($id)); + } + + return; +} + ?> diff --git a/include/game.php b/include/game.php index 6d47fc9..1dc4802 100644 --- a/include/game.php +++ b/include/game.php @@ -217,7 +217,7 @@ if($session) echo " <div class=\"sessionscore\">"; if($finalscore) - { + { echo "Score: \n"; /* output the final score on the front page */ foreach($finalscore as $user=>$value) @@ -226,9 +226,9 @@ if($session) echo " ".substr($name,0,2).": $value "; } } - else + else { - /* first game, no score yet */ + /* first game, no score yet */ echo " "; } @@ -311,8 +311,8 @@ switch($mystatus) mymail($user,$subject,$message); } - /* delete everything from the dB */ - DB_cancel_game($me); + /* update game status */ + cancel_game('noplay',$gameid); break; } else @@ -589,7 +589,6 @@ switch($mystatus) 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('userid',$nines). " has five or more nines and nobody is playing solo.\n\n". @@ -603,8 +602,8 @@ switch($mystatus) mymail($user,$subject,$message); } - /* delete everything from the dB */ - DB_cancel_game($me); + /* update game status */ + cancel_game('nines',$gameid); echo "The game has been canceled because ".DB_get_name('userid',$nines). " has five or more nines and nobody is playing solo.\n"; @@ -950,8 +949,8 @@ switch($mystatus) mymail($user,$subject,$message); } - /* delete everything from the dB */ - DB_cancel_game($me); + /* update game status */ + cancel_game('trump',$gameid); echo "<p style=\"background-color:red\";>Game ".DB_format_gameid($gameid)." has been canceled.<br /><br /></p>"; return; @@ -1075,6 +1074,27 @@ switch($mystatus) * in case of 'play' there is a break later that skips the last part */ + /* first check if the game has been canceled and display */ + switch($gamestatus) + { + case 'cancel-noplay': + echo "<div class=\"message\"><p>The game has been canceled due to the request of one player.</p><p>If this was a mistake all 4 players need to send an Email to $ADMIN_NAME at $ADMIN_EMAIL requesting that the game should be restarted.</p></div>"; + break; + case 'cancel-timedout': + echo "<div class=\"message\"><p>The game has been canceled because one player wasn't responding.</p><p>If this was a mistake all 4 players need to send an Email to $ADMIN_NAME at $ADMIN_EMAIL requesting that the game should be restarted.</p></div>"; + break; + case 'cancel-nines': + case 'cancel-timedout': + echo "<div class=\"message\"><p>The game has been canceled because one player had too many nines.</p></div>"; + break; + case 'cancel-trump': + echo "<div class=\"message\"><p>The game has been canceled because nobody wanted to take the trump.</p></div>"; + break; + } + /* for these two types, we shouldn't show the cards, since we might want to restart the game */ + if (in_array($gamestatus,array('cancel-noplay','cancel-timedout'))) + break; + /* check if all players are ready to play, * if so, send out email to the startplayer * only need to do this if the game hasn't started yet @@ -2011,7 +2031,10 @@ echo "</div>\n"; echo "</form>\n"; -if($mystatus=='gameover' && DB_get_game_status_by_gameid($gameid)=='gameover' && isset($_SESSION['id']) && $_SESSION['id']==$myid) +$gamestatus = DB_get_game_status_by_gameid($gameid); +if($mystatus=='gameover' && + ($gamestatus =='gameover' || $gamestatus =='cancel-nines' || $gamestatus =='cancel-trump') && + isset($_SESSION['id']) && $_SESSION['id']==$myid) { $session = DB_get_session_by_gameid($gameid); $result = DB_query("SELECT id,create_date FROM Game". @@ -2037,6 +2060,8 @@ if($mystatus=='gameover' && DB_get_game_status_by_gameid($gameid)=='gameover' && else /* rotate normally */ output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid); } + else if($gamestatus == 'cancel-nines' || $gamestatus == 'cancel-trump') + output_ask_for_new_game($names[0],$names[1],$names[2],$names[3],$gameid); else /* rotate normally */ output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid); } diff --git a/include/output.php b/include/output.php index 231f8f6..94aaa19 100644 --- a/include/output.php +++ b/include/output.php @@ -12,7 +12,7 @@ function output_ask_for_new_game($playerA,$playerB,$playerC,$playerD,$oldgameid) global $RULES; echo "<div class=\"message\">\n<form action=\"index.php?action=new\" method=\"post\">\n"; - echo "Do you want to continue playing?(This will start a new game, with the next person as dealer.)\n"; + echo "Do you want to continue playing?(This will start a new game, with the $playerD as dealer.)\n"; echo " <input type=\"hidden\" name=\"PlayerA\" value=\"$playerA\" />\n"; echo " <input type=\"hidden\" name=\"PlayerB\" value=\"$playerB\" />\n"; echo " <input type=\"hidden\" name=\"PlayerC\" value=\"$playerC\" />\n"; diff --git a/include/user.php b/include/user.php index 8855fc0..0273183 100644 --- a/include/user.php +++ b/include/user.php @@ -154,7 +154,7 @@ else $Multi = ($r[5]>1) ? "multi" : ""; if($r[4]=='pre') echo " <span class=\"gamestatuspre $Multi\"><a href=\"".$INDEX."?action=game&me=".$r[0]."\">p </a></span>\n"; - else if ($r[4]=='gameover') + else if (in_array($r[4],array('gameover','cancel-timedout','cancel-nines','cancel-noplay','cancel-trump'))) { echo " <span class=\"gamestatusover $Multi\"><a href=\"".$INDEX."?action=game&me=".$r[0]."\">"; if($r[5]<2) @@ -165,7 +165,7 @@ else } else echo " <span class=\"gamestatusplay $Multi\"><a href=\"".$INDEX."?action=game&me=".$r[0]."\">P </a></span>\n"; - if($r[4] != 'gameover') + if($r[4] == 'pre' || $r[4] == 'play') { echo "</td>\n<td>\n "; if($r[3]==$myid || !$r[3]) @@ -190,8 +190,7 @@ else echo "(it's $name's turn)\n"; }; if(time()-strtotime($r[2]) > 60*60*24*30) - echo "<a href=\"$INDEX?action=cancel&me=".$r[0]."\">Cancel?</a>". - " (clicking here is final and can't be restored)"; + echo "<a href=\"$INDEX?action=cancel&me=".$r[0]."\">Cancel?</a> "; } } echo "</td></tr>\n</table>\n"; |