Commit
This commit is contained in:
parent
800c5fd366
commit
77ce3af5ac
@ -17,6 +17,7 @@ class Team
|
|||||||
public int $phone = 0;
|
public int $phone = 0;
|
||||||
public int $participants = 0;
|
public int $participants = 0;
|
||||||
public int $rounds = 0;
|
public int $rounds = 0;
|
||||||
|
public ?int $bestTime = NULL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PHP by default does not include multi byte functions. Therefore we use this
|
* PHP by default does not include multi byte functions. Therefore we use this
|
||||||
|
@ -29,6 +29,7 @@ class TeamMapper
|
|||||||
$team->setPhone($row['Telefon']);
|
$team->setPhone($row['Telefon']);
|
||||||
$team->setParticipants($row['Deltagere']);
|
$team->setParticipants($row['Deltagere']);
|
||||||
$team->setRounds($row['Runder']);
|
$team->setRounds($row['Runder']);
|
||||||
|
$team->bestTime = $row['Bestetid'];
|
||||||
return $team;
|
return $team;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,9 +83,9 @@ class TeamMapper
|
|||||||
{
|
{
|
||||||
$sth = $this->dbh->prepare(
|
$sth = $this->dbh->prepare(
|
||||||
'INSERT INTO lagtabell
|
'INSERT INTO lagtabell
|
||||||
(LagNavn, Bedrift, Kortnummer, Lagleder, Telefon, Deltagere, Runder)
|
(LagNavn, Bedrift, Kortnummer, Lagleder, Telefon, Deltagere, Runder, Bestetid)
|
||||||
VALUES
|
VALUES
|
||||||
(?, ?, ?, ?, ?, ?, ?)'
|
(?, ?, ?, ?, ?, ?, ?, ?)'
|
||||||
);
|
);
|
||||||
$sth->execute([
|
$sth->execute([
|
||||||
$team->name,
|
$team->name,
|
||||||
@ -93,7 +94,8 @@ class TeamMapper
|
|||||||
$team->leader,
|
$team->leader,
|
||||||
$team->phone,
|
$team->phone,
|
||||||
$team->participants,
|
$team->participants,
|
||||||
$team->rounds
|
$team->rounds,
|
||||||
|
$team->bestTime
|
||||||
]);
|
]);
|
||||||
$lastId = $this->dbh->lastInsertId();
|
$lastId = $this->dbh->lastInsertId();
|
||||||
return $this->get($lastId);
|
return $this->get($lastId);
|
||||||
@ -105,7 +107,7 @@ class TeamMapper
|
|||||||
'UPDATE lagtabell SET
|
'UPDATE lagtabell SET
|
||||||
LagNavn = ?, Bedrift = ?, Kortnummer = ?,
|
LagNavn = ?, Bedrift = ?, Kortnummer = ?,
|
||||||
Lagleder = ?, Telefon = ?, Deltagere = ?,
|
Lagleder = ?, Telefon = ?, Deltagere = ?,
|
||||||
Runder = ?
|
Runder = ?, Bestetid = ?
|
||||||
WHERE
|
WHERE
|
||||||
LagID = ?'
|
LagID = ?'
|
||||||
);
|
);
|
||||||
@ -117,6 +119,7 @@ class TeamMapper
|
|||||||
$team->phone,
|
$team->phone,
|
||||||
$team->participants,
|
$team->participants,
|
||||||
$team->rounds,
|
$team->rounds,
|
||||||
|
$team->bestTime,
|
||||||
$team->id
|
$team->id
|
||||||
]);
|
]);
|
||||||
return $this->get($team->id);
|
return $this->get($team->id);
|
||||||
|
@ -12,4 +12,16 @@ class Time
|
|||||||
public int $id;
|
public int $id;
|
||||||
public int $teamId;
|
public int $teamId;
|
||||||
public DateTime $date;
|
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;
|
namespace App\Timetable;
|
||||||
|
|
||||||
use \PDO;
|
use \PDO;
|
||||||
|
use \DateTime;
|
||||||
|
|
||||||
class TimeMapper
|
class TimeMapper
|
||||||
{
|
{
|
||||||
@ -13,16 +14,44 @@ class TimeMapper
|
|||||||
$this->dbh = $dbh;
|
$this->dbh = $dbh;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function mapRowToTeam(array $row): Time
|
private function mapRowToTime(array $row): Time
|
||||||
{
|
{
|
||||||
$team = new Time();
|
$team = new Time();
|
||||||
|
$team->id = $row['TidID'];
|
||||||
|
$team->setTeamId($row['LagID']);
|
||||||
|
$team->setDate(new DateTime($row['Tidspunkt']));
|
||||||
return $team;
|
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
|
public function create(Time $time): Time
|
||||||
{
|
{
|
||||||
$sth = $this->dbh->prepare('INSERT INTO tidtabell (LagID) VALUES (?)');
|
$sth = $this->dbh->prepare('INSERT INTO tidtabell (LagID) VALUES (?)');
|
||||||
$sth->execute([$time->teamId]);
|
$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);
|
$team = $this->teamMapper->getByCardnumber($cardnumber);
|
||||||
if ($team)
|
if ($team)
|
||||||
{
|
{
|
||||||
// team exists, insert into time table
|
// team exists, insert into time table
|
||||||
$sth = $this->dbh->prepare('INSERT INTO tidtabell (LagID) VALUES (?)');
|
// and update team table best time
|
||||||
$sth->execute([$team->id]);
|
$prev_time = $this->timeMapper->getLatestByTeamId($team->id);
|
||||||
return TRUE;
|
|
||||||
|
$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 does not exist, lets create it
|
||||||
$team = new Team;
|
$team = new Team;
|
||||||
$team->cardnumber = $cardnumber;
|
$team->setCardnumber($cardnumber);
|
||||||
$this->teamMapper->create($team);
|
$this->teamMapper->create($team);
|
||||||
return FALSE;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -27,7 +27,7 @@
|
|||||||
echo "<td>" . htmlspecialchars($team->phone) . "</td>";
|
echo "<td>" . htmlspecialchars($team->phone) . "</td>";
|
||||||
echo "<td>" . htmlspecialchars($team->participants) . "</td>";
|
echo "<td>" . htmlspecialchars($team->participants) . "</td>";
|
||||||
echo "<td>" . htmlspecialchars($team->rounds) . "</td>";
|
echo "<td>" . htmlspecialchars($team->rounds) . "</td>";
|
||||||
echo "<td>" . "Ukjent" . "</td>";
|
echo "<td>" . htmlspecialchars(($team->bestTime === NULL) ? "Ukjent" : $team->bestTime) . "</td>";
|
||||||
echo "<td>";
|
echo "<td>";
|
||||||
echo "<span>[ <a class='danger' href='delete.php?item={$team->id}&confirm=1'>Slett</a> ]</span>";
|
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>";
|
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'];
|
$cardnumber = $_POST['cardnumber'];
|
||||||
|
|
||||||
if (!(strlen($cardnumber) > 32)) {
|
if (!(strlen($cardnumber) > 32)) {
|
||||||
if ($cardreader->receive($cardnumber))
|
|
||||||
{
|
$code = $cardreader->receive($cardnumber, 30);
|
||||||
$app->session->flash("Lag funnet for \"{$cardnumber}\"", "success");
|
switch ($code) {
|
||||||
} else {
|
case 0:
|
||||||
$app->session->flash("Opprettet lag for \"{$cardnumber}\"");
|
$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 {
|
} else {
|
||||||
$app->session->flash('Kortnummer for langt!', 'danger');
|
$app->session->flash('Kortnummer for langt!', 'danger');
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user