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 * 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 $__PATH = $this->dir . '/view/' . $__VIEW . '.php';
extract($data); if (!file_exists($__PATH))
// require view file
$path = $this->dir . '/view/' . $view . '.php';
if (!file_exists($path))
{ {
throw new Exception("View does not exist"); 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 <?php
if (!isset($focused)) { if (!isset($view))
$focused = FALSE; {
$view = 'default';
} }
?> ?>
<div id="alertBox" class="alert danger hidden" role="alert"></div>
<?php if ($focused == FALSE): ?> <?php if ($view == 'default' || $view == 'focused'): ?>
<h1>Resultater</h1>
<span class="float-right">[&nbsp;<a class="info" href="?focused=1" target="_blank">Fokusert visning</a>&nbsp;]</span> <div id="alertBox" class="alert danger hidden" role="alert"></div>
<br>
<?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; ?> <?php endif; ?>
<noscript> <?php if ($view == 'summary'): ?>
Denne siden krever JavaScript
</noscript>
<div id="rankingTable"> <h1>Sammendrag</h1>
Laster inn... <span class="float-right">[&nbsp;<a class="danger" href="?">Tilbake til resultater</a>&nbsp;]&nbsp;</span>
</div> <br>
<style> <table>
.b { <tr>
animation: coolFlash 1s; <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 { <?php endif; ?>
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>

View File

@ -1,17 +1,61 @@
<?php $app = require '../../app/inc.php'; <?php $app = require '../../app/inc.php';
$focused = filter_input(INPUT_GET, 'focused'); use App\Teamtable\TeamMapper;
if ($focused) { $view = filter_input(INPUT_GET, 'view');
$app->view('template/header', [
"title" => "Resultater", switch ($view) {
"hide_nav" => TRUE,
"hide_menu" => TRUE case 'focused':
]);
$app->view('pages/race/results', ["focused" => TRUE]); $app->view('template/header',
$app->view('template/footer'); [
} else { "title" => "Resultater",
$app->view('template/header', ["title" => "Resultater"]); "hide_nav" => TRUE,
$app->view('pages/race/results'); "hide_menu" => TRUE
$app->view('template/footer'); ]
} );
$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;
}