summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/cancelgame.php4
-rw-r--r--include/db.php2
-rw-r--r--include/functions.php31
-rw-r--r--include/game.php47
-rw-r--r--include/output.php2
-rw-r--r--include/user.php7
6 files changed, 74 insertions, 19 deletions
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 "&nbsp;";
}
@@ -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&amp;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&amp;me=".$r[0]."\">";
if($r[5]<2)
@@ -165,7 +165,7 @@ else
}
else
echo " <span class=\"gamestatusplay $Multi\"><a href=\"".$INDEX."?action=game&amp;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&amp;me=".$r[0]."\">Cancel?</a>".
- " (clicking here is final and can't be restored)";
+ echo "<a href=\"$INDEX?action=cancel&amp;me=".$r[0]."\">Cancel?</a> ";
}
}
echo "</td></tr>\n</table>\n";