This commit is contained in:
William 2022-05-11 15:36:20 +00:00
parent 76aca99ff0
commit 258135cd81
3 changed files with 133 additions and 53 deletions

View File

@ -55,18 +55,19 @@ class App
/**
* Render given view
*
* Reason for the funky names is to avoid name conflicts
*/
public function view(string $view, array $data = []): void
public function view(string $__VIEW, array $__DATA = []): void
{
// import variables into the current symbol table from an array
extract($data);
// require view file
$path = $this->dir . '/view/' . $view . '.php';
if (!file_exists($path))
$__PATH = $this->dir . '/view/' . $__VIEW . '.php';
if (!file_exists($__PATH))
{
throw new Exception("View does not exist");
}
require $path;
// import variables into the current symbol table from an array
extract($__DATA);
require $__PATH;
}
/**

View File

@ -1,41 +1,76 @@
<?php
if (!isset($focused)) {
$focused = FALSE;
if (!isset($view))
{
$view = 'default';
}
?>
<div id="alertBox" class="alert danger hidden" role="alert"></div>
<?php if ($focused == FALSE): ?>
<h1>Resultater</h1>
<span class="float-right">[&nbsp;<a class="info" href="?focused=1" target="_blank">Fokusert visning</a>&nbsp;]</span>
<br>
<?php if ($view == 'default' || $view == 'focused'): ?>
<div id="alertBox" class="alert danger hidden" role="alert"></div>
<?php if ($view == 'default'): ?>
<h1>Resultater</h1>
<p>Denne siden oppdateres automagisk.</p>
<span class="float-right">[&nbsp;<a class="info" href="?view=focused" target="_blank">Fokusert visning</a>&nbsp;]</span>
<span class="float-right">[&nbsp;<a class="info" href="?view=summary">Sammendrag</a>&nbsp;]&nbsp;</span>
<br>
<?php endif; ?>
<noscript>
Denne siden krever JavaScript
</noscript>
<div id="rankingTable">
Laster inn...
</div>
<style>
.b {
animation: coolFlash 1s;
}
@keyframes coolFlash {
from { background: lightgreen; }
}
</style>
<script src="<?=$this->config['root_url']?>static/js/ResultService.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
alertBox = document.getElementById("alertBox");
rankingTable = document.getElementById("rankingTable");
new ResultService(alertBox, rankingTable, '<?=$this->config['root_url']?>api/race/results.php?h=');
});
</script>
<?php endif; ?>
<noscript>
Denne siden krever JavaScript
</noscript>
<?php if ($view == 'summary'): ?>
<div id="rankingTable">
Laster inn...
</div>
<h1>Sammendrag</h1>
<span class="float-right">[&nbsp;<a class="danger" href="?">Tilbake til resultater</a>&nbsp;]&nbsp;</span>
<br>
<style>
.b {
animation: coolFlash 1s;
}
<table>
<tr>
<th>#</th>
<th>Lag</th>
<th>Bedrift</th>
<th>Runder</th>
<th>Bestetid</th>
</tr>
<?php $i = 1; foreach ($teams as $team): ?>
<tr>
<td><?=$i++; $i?></td>
<td><?=htmlspecialchars($team->name)?></td>
<td><?=htmlspecialchars($team->company)?></td>
<td><?=htmlspecialchars($team->rounds)?></td>
<td><?=htmlspecialchars($team->best_time)?></td>
</tr>
<?php endforeach; ?>
</table>
@keyframes coolFlash {
from { background: lightgreen; }
}
</style>
<script src="<?=$this->config['root_url']?>static/js/ResultService.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
alertBox = document.getElementById("alertBox");
rankingTable = document.getElementById("rankingTable");
new ResultService(alertBox, rankingTable, '<?=$this->config['root_url']?>api/race/results.php?h=');
});
</script>
<?php endif; ?>

View File

@ -1,17 +1,61 @@
<?php $app = require '../../app/inc.php';
$focused = filter_input(INPUT_GET, 'focused');
use App\Teamtable\TeamMapper;
if ($focused) {
$app->view('template/header', [
"title" => "Resultater",
"hide_nav" => TRUE,
"hide_menu" => TRUE
]);
$app->view('pages/race/results', ["focused" => TRUE]);
$app->view('template/footer');
} else {
$app->view('template/header', ["title" => "Resultater"]);
$app->view('pages/race/results');
$app->view('template/footer');
$view = filter_input(INPUT_GET, 'view');
switch ($view) {
case 'focused':
$app->view('template/header',
[
"title" => "Resultater",
"hide_nav" => TRUE,
"hide_menu" => TRUE
]
);
$app->view('pages/race/results',
[
"view" => "focused"
]
);
$app->view('template/footer');
break;
case 'summary':
$team_mapper = new TeamMapper($app->database->conn);
$teams = $team_mapper->getAll();
$filtered_teams = [];
// filter out any teams that have no rounds
foreach ($teams as $team)
{
if ($team->rounds !== 0)
{
$filtered_teams[] = $team;
}
}
$app->view('template/header', ["title" => "Sammendrag"]);
$app->view('pages/race/results',
[
"view" => "summary",
"teams" => $filtered_teams
]
);
$app->view('template/footer');
break;
default:
$app->view('template/header', ["title" => "Resultater"]);
$app->view('pages/race/results');
$app->view('template/footer');
break;
}