Commit
This commit is contained in:
parent
800c5fd366
commit
77ce3af5ac
@ -17,6 +17,7 @@ class Team
|
||||
public int $phone = 0;
|
||||
public int $participants = 0;
|
||||
public int $rounds = 0;
|
||||
public ?int $bestTime = NULL;
|
||||
|
||||
/**
|
||||
* PHP by default does not include multi byte functions. Therefore we use this
|
||||
|
@ -29,6 +29,7 @@ class TeamMapper
|
||||
$team->setPhone($row['Telefon']);
|
||||
$team->setParticipants($row['Deltagere']);
|
||||
$team->setRounds($row['Runder']);
|
||||
$team->bestTime = $row['Bestetid'];
|
||||
return $team;
|
||||
}
|
||||
|
||||
@ -82,9 +83,9 @@ class TeamMapper
|
||||
{
|
||||
$sth = $this->dbh->prepare(
|
||||
'INSERT INTO lagtabell
|
||||
(LagNavn, Bedrift, Kortnummer, Lagleder, Telefon, Deltagere, Runder)
|
||||
(LagNavn, Bedrift, Kortnummer, Lagleder, Telefon, Deltagere, Runder, Bestetid)
|
||||
VALUES
|
||||
(?, ?, ?, ?, ?, ?, ?)'
|
||||
(?, ?, ?, ?, ?, ?, ?, ?)'
|
||||
);
|
||||
$sth->execute([
|
||||
$team->name,
|
||||
@ -93,7 +94,8 @@ class TeamMapper
|
||||
$team->leader,
|
||||
$team->phone,
|
||||
$team->participants,
|
||||
$team->rounds
|
||||
$team->rounds,
|
||||
$team->bestTime
|
||||
]);
|
||||
$lastId = $this->dbh->lastInsertId();
|
||||
return $this->get($lastId);
|
||||
@ -105,7 +107,7 @@ class TeamMapper
|
||||
'UPDATE lagtabell SET
|
||||
LagNavn = ?, Bedrift = ?, Kortnummer = ?,
|
||||
Lagleder = ?, Telefon = ?, Deltagere = ?,
|
||||
Runder = ?
|
||||
Runder = ?, Bestetid = ?
|
||||
WHERE
|
||||
LagID = ?'
|
||||
);
|
||||
@ -117,6 +119,7 @@ class TeamMapper
|
||||
$team->phone,
|
||||
$team->participants,
|
||||
$team->rounds,
|
||||
$team->bestTime,
|
||||
$team->id
|
||||
]);
|
||||
return $this->get($team->id);
|
||||
|
@ -12,4 +12,16 @@ class Time
|
||||
public int $id;
|
||||
public int $teamId;
|
||||
public DateTime $date;
|
||||
|
||||
public function setTeamId(int $teamId): Self
|
||||
{
|
||||
$this->teamId = $teamId;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setDate(DateTime $date): Self
|
||||
{
|
||||
$this->date = $date;
|
||||
return $this;
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@
|
||||
namespace App\Timetable;
|
||||
|
||||
use \PDO;
|
||||
use \DateTime;
|
||||
|
||||
class TimeMapper
|
||||
{
|
||||
@ -13,16 +14,44 @@ class TimeMapper
|
||||
$this->dbh = $dbh;
|
||||
}
|
||||
|
||||
private function mapRowToTeam(array $row): Time
|
||||
private function mapRowToTime(array $row): Time
|
||||
{
|
||||
$team = new Time();
|
||||
$team->id = $row['TidID'];
|
||||
$team->setTeamId($row['LagID']);
|
||||
$team->setDate(new DateTime($row['Tidspunkt']));
|
||||
return $team;
|
||||
}
|
||||
|
||||
public function getLatestByTeamId(int $teamId): ?Time
|
||||
{
|
||||
$sth = $this->dbh->prepare('SELECT * FROM tidtabell WHERE LagID = ? ORDER BY Tidspunkt DESC');
|
||||
$sth->execute([$teamId]);
|
||||
$row = $sth->fetch(PDO::FETCH_ASSOC);
|
||||
if ($row)
|
||||
{
|
||||
return $this->mapRowToTime($row);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
public function get(int $id): ?Time
|
||||
{
|
||||
$sth = $this->dbh->prepare('SELECT * FROM tidtabell WHERE TidID = ?');
|
||||
$sth->execute([$id]);
|
||||
$row = $sth->fetch(PDO::FETCH_ASSOC);
|
||||
if ($row)
|
||||
{
|
||||
return $this->mapRowToTime($row);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
public function create(Time $time): Time
|
||||
{
|
||||
$sth = $this->dbh->prepare('INSERT INTO tidtabell (LagID) VALUES (?)');
|
||||
$sth->execute([$time->teamId]);
|
||||
return TRUE;
|
||||
$lastId = $this->dbh->lastInsertId();
|
||||
return $this->get($lastId);
|
||||
}
|
||||
}
|
@ -22,22 +22,56 @@ class Cardreader
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TRUE if team exists, FALSE if not
|
||||
* Returns:
|
||||
* 0 created team
|
||||
* 1 started counting
|
||||
* 2 counted round
|
||||
* 3 counted too fast
|
||||
*/
|
||||
public function receive(string $cardnumber, int $timeout): bool
|
||||
public function receive(string $cardnumber, int $timeout): int
|
||||
{
|
||||
$team = $this->teamMapper->getByCardnumber($cardnumber);
|
||||
if ($team)
|
||||
{
|
||||
// team exists, insert into time table
|
||||
$sth = $this->dbh->prepare('INSERT INTO tidtabell (LagID) VALUES (?)');
|
||||
$sth->execute([$team->id]);
|
||||
return TRUE;
|
||||
// and update team table best time
|
||||
$prev_time = $this->timeMapper->getLatestByTeamId($team->id);
|
||||
|
||||
$new_time = new Time;
|
||||
$new_time->setTeamId($team->id);
|
||||
// TODO: have this happen later so that it does not count when timeout
|
||||
$new_time = $this->timeMapper->create($new_time);
|
||||
|
||||
// calculate best time for this team
|
||||
if ($prev_time !== NULL)
|
||||
{
|
||||
$diff = $new_time->date->getTimestamp() - $prev_time->date->getTimestamp();
|
||||
|
||||
if ($diff <= $timeout)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
if ($team->bestTime === NULL)
|
||||
{
|
||||
$team->bestTime = $diff;
|
||||
$this->teamMapper->update($team);
|
||||
}
|
||||
|
||||
if ($diff < $team->bestTime)
|
||||
{
|
||||
$team->bestTime = $diff;
|
||||
$this->teamMapper->update($team);
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
// team does not exist, lets create it
|
||||
$team = new Team;
|
||||
$team->cardnumber = $cardnumber;
|
||||
$team->setCardnumber($cardnumber);
|
||||
$this->teamMapper->create($team);
|
||||
return FALSE;
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -27,7 +27,7 @@
|
||||
echo "<td>" . htmlspecialchars($team->phone) . "</td>";
|
||||
echo "<td>" . htmlspecialchars($team->participants) . "</td>";
|
||||
echo "<td>" . htmlspecialchars($team->rounds) . "</td>";
|
||||
echo "<td>" . "Ukjent" . "</td>";
|
||||
echo "<td>" . htmlspecialchars(($team->bestTime === NULL) ? "Ukjent" : $team->bestTime) . "</td>";
|
||||
echo "<td>";
|
||||
echo "<span>[ <a class='danger' href='delete.php?item={$team->id}&confirm=1'>Slett</a> ]</span>";
|
||||
echo "<span>[ <a class='info' href='update.php?item={$team->id}'>Endre</a> ]</span>";
|
||||
|
@ -11,12 +11,30 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST')
|
||||
$cardnumber = $_POST['cardnumber'];
|
||||
|
||||
if (!(strlen($cardnumber) > 32)) {
|
||||
if ($cardreader->receive($cardnumber))
|
||||
{
|
||||
$app->session->flash("Lag funnet for \"{$cardnumber}\"", "success");
|
||||
} else {
|
||||
$app->session->flash("Opprettet lag for \"{$cardnumber}\"");
|
||||
|
||||
$code = $cardreader->receive($cardnumber, 30);
|
||||
switch ($code) {
|
||||
case 0:
|
||||
$app->session->flash('Opprettet nytt lag', 'success');
|
||||
break;
|
||||
|
||||
case 1:
|
||||
$app->session->flash('Startet telling', 'success');
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$app->session->flash('Passerte en runde', 'success');
|
||||
break;
|
||||
|
||||
case 3:
|
||||
$app->session->flash('Runde gikk for fort!', 'danger');
|
||||
break;
|
||||
|
||||
default:
|
||||
$app->session->flash('Uhhh?? Dette skulle ikke skje', 'danger');
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
$app->session->flash('Kortnummer for langt!', 'danger');
|
||||
}
|
||||
|
Reference in New Issue
Block a user