This repository has been archived on 2024-07-18. You can view files and clone it, but cannot push or open issues or pull requests.
lwb5/admin/game_status.php

242 lines
6.5 KiB
PHP

<?php
set_magic_quotes_runtime(false);
include("config.inc");
include("as_log.inc");
function redirect() {
?>
<html>
<head>
<title>LegacyWorlds Beta 5 > Administration > Game status</title>
</head>
<body>
<h1><a href="index.html">LWB5 > Administration</a> > Game status</h1>
<h2>Operation in progress...</h2>
<p>
A system operation is in progress. Please wait, the page will update in 5 seconds.
</p>
<script language="JavaScript">
window.setTimeout('window.location="game_status.php"', 5000);
</script>
</body>
</html>
<?php
exit(0);
}
function printStatus($status) {
static $styles = array(
"PRE" => array('yellow', 'red'),
"READY" => array('red', 'yellow'),
"RUNNING" => array('white', 'green'),
"VICTORY" => array('yellow', 'blue'),
"ENDING" => array('black', 'yellow'),
"FINISHED" => array("white", "black")
);
print "<th style='color:" . $styles[$status][0] . ";background-color:"
. $styles[$status][1] . "'>$status</th>";
}
function sendFifo($command) {
global $aConfig;
$fName = $aConfig['ctrlFifo'];
if (!file_exists($fName)) {
return false;
}
$fifo = fopen($fName, "w");
fwrite($fifo, "$command\n");
fclose($fifo);
redirect();
}
function handleCommand($command, $game) {
if ($command == 'mv' && $game->status() == 'PRE') {
__logAdmin("is making game {$game->name} visible");
sendFifo("READY {$game->name}");
} elseif ($command == 'te' && $game->status() == 'READY' && $game->firstTick() - time() > 24 * 60 * 60 + 30) {
__logAdmin("made game {$game->name} start 24h earlier");
sendFifo("START {$game->name} EARLY");
} elseif ($command == 'tl' && $game->status() == 'READY') {
__logAdmin("made game {$game->name} start 24h later");
sendFifo("START {$game->name} LATE");
} elseif ($command == 'en' && ($game->status() == 'RUNNING' || $game->status() == "VICTORY")) {
__logAdmin("terminated game {$game->name}");
sendFifo("SETEND {$game->name} 0");
} elseif ($command == 'e24' && $game->status() == 'RUNNING') {
__logAdmin("set game {$game->name} to end in 24h");
sendFifo("SETEND {$game->name} 24");
} elseif ($command == 'kr' && $game->status() == 'ENDING') {
__logAdmin("prevented game {$game->name} from ending");
sendFifo("NOEND {$game->name}");
} elseif ($command == 'ee' && $game->status() == 'ENDING' && $game->lastTick() - time() > 24 * 60 * 60 + 30) {
__logAdmin("made game {$game->name} end 24h earlier");
sendFifo("END {$game->name} EARLY");
} elseif ($command == 'el' && $game->status() == 'ENDING') {
__logAdmin("made game {$game->name} end 24h later");
sendFifo("END {$game->name} LATE");
} elseif ($command == 'en' && $game->status() == 'ENDING') {
__logAdmin("terminated game {$game->name}");
sendFifo("END {$game->name} NOW");
}
}
// Load the list of games
$oldDir = getcwd();
chdir("../scripts");
$__logPrefix = "lwControl";
$__loader = array(
'log', 'classloader',
'version', 'game', 'tick', 'config',
'db_connection', 'db_accessor', 'db',
'library'
);
require_once("loader.inc");
chdir($oldDir);
$games = config::getGames();
dbConnect();
// Handle commands
if ($_GET['c'] != '') {
$cGame = $_GET['g'];
if (array_key_exists($cGame, $games) && $cGame != 'main') {
handleCommand($_GET['c'], $games[$cGame]);
}
}
?>
<html>
<head>
<title>LegacyWorlds Beta 5 > Administration > Game status</title>
</head>
<body>
<h1><a href="index.html">LWB5 > Administration</a> > Game status</h1>
<h2>Game list</h2>
<p>
<b>WARNING:</b> make sure you know what you're doing here - there are no second chances on this page;
if you click something, that "something" <i>will</i> happen <i>at once</i>.
</p>
<table border="1" width="100%">
<tr>
<th style="text-align:left; width:10%">ID</th>
<th style="width:10%">Status</th>
<th style="text-align:left;width:20%">Name</th>
<th style="text-align:left">Ticks</th>
<th style="text-align:left;width:30%">Commands</th>
</tr>
<?php
foreach ($games as $name => $game) {
if ($name == 'main') {
continue;
}
$status = $game->status();
$firstTick = $game->firstTick();
$lastTick = $game->lastTick();
print " <tr>\n <td><b>$name</b></td>\n";
printStatus($status);
print " <td>" . htmlentities($game->text) . "</td>\n";
print " <td>";
if ($firstTick > time()) {
print "Starting at " . gmstrftime('%H:%M:%S on %Y-%m-%d', $firstTick);
} elseif ($lastTick == 0) {
print "Running since " . gmstrftime('%H:%M:%S on %Y-%m-%d', $firstTick);
} elseif ($lastTick > time()) {
print "Running until " . gmstrftime('%H:%M:%S on %Y-%m-%d', $lastTick);
} else {
print "Stopped since " . gmstrftime('%H:%M:%S on %Y-%m-%d', $lastTick);
}
if ($status == 'PRE') {
$cmd = array(
array('mv', 'Make visible')
);
} elseif ($status == 'READY') {
$cmd = array(
array('tl', 'Start 24h later')
);
if ($firstTick - time() > 24 * 60 * 60 + 30) {
array_push($cmd, array('te', 'Start 24h earlier'));
}
} elseif ($status == 'RUNNING') {
$cmd = array(
array('e24', 'End in 24h'),
array('en', 'End now')
);
} elseif ($status == 'VICTORY') {
$cmd = array(
array('en', 'End game')
);
} elseif ($status == 'ENDING') {
$cmd = array(
array('el', 'Postpone by 24h')
);
if ($lastTick - time() > 24 * 60 * 60 + 30) {
array_push($cmd, array('ee', 'End 24h earlier'));
}
array_push($cmd, array('en', 'End now'));
array_push($cmd, array('kr', 'Keep running'));
} else {
$cmd = array();
}
print "</td>\n <td>";
if (count($cmd)) {
$lk = array();
foreach ($cmd as $c) {
array_push($lk, "<a href='?c=" . $c[0] . "&g=$name' onclick=\"return confirm('You selected \\'"
. $c[1] . "\\' on game \\'$name\\'. Please confirm.');\">" . $c[1] . "</a>");
}
print join(' - ', $lk);
} else {
print "&nbsp;";
}
print "</td>\n </tr>\n";
}
?>
</table>
<h3>About game status</h3>
<p>Games can have the following status:</p>
<table>
<tr>
<?printStatus('PRE');?>
<td>The game is configured, but is hidden for now</td>
</tr>
<tr>
<?printStatus('READY');?>
<td>The game is visible, but ticks have not started</td>
</tr>
<tr>
<?printStatus('RUNNING');?>
<td>The game is running normally</td>
</tr>
<tr>
<?printStatus('VICTORY');?>
<td>The game is still running but someone reached victory</td>
</tr>
<tr>
<?printStatus('ENDING');?>
<td>The game is still available but is about to end.</td>
</tr>
<tr>
<?printStatus('FINISHED');?>
<td>The game is no longer running and only visible through the rankings page</td>
</tr>
</table>
</body>
</html>