Fat commit
This commit is contained in:
parent
1e00dd7119
commit
e234537647
10
app/inc.php
10
app/inc.php
@ -12,9 +12,6 @@
|
|||||||
* Tread carefully
|
* Tread carefully
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// disable type coercion
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
// PSR-4 like autoloader
|
// PSR-4 like autoloader
|
||||||
spl_autoload_register(
|
spl_autoload_register(
|
||||||
function ($className) {
|
function ($className) {
|
||||||
@ -23,7 +20,6 @@ spl_autoload_register(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// imports
|
|
||||||
use App\Core\ {
|
use App\Core\ {
|
||||||
ErrorHandler,
|
ErrorHandler,
|
||||||
Config,
|
Config,
|
||||||
@ -34,22 +30,16 @@ use App\Core\ {
|
|||||||
AccessControl
|
AccessControl
|
||||||
};
|
};
|
||||||
|
|
||||||
// displays a custom page on error or exception
|
|
||||||
new ErrorHandler();
|
new ErrorHandler();
|
||||||
|
|
||||||
// grab configuration file
|
|
||||||
$config = (new Config(__DIR__ . '/config.php'))->config;
|
$config = (new Config(__DIR__ . '/config.php'))->config;
|
||||||
|
|
||||||
// start database connection
|
|
||||||
$database = new Database($config['database']);
|
$database = new Database($config['database']);
|
||||||
|
|
||||||
// session wrapper
|
|
||||||
$session = new Session();
|
$session = new Session();
|
||||||
|
|
||||||
// handles current user session
|
|
||||||
$user = new User($session, $database);
|
$user = new User($session, $database);
|
||||||
|
|
||||||
|
|
||||||
$app = new App(__DIR__, $config, $database, $session, $user);
|
$app = new App(__DIR__, $config, $database, $session, $user);
|
||||||
|
|
||||||
// we will use $app instead
|
// we will use $app instead
|
||||||
|
@ -30,19 +30,22 @@ class App
|
|||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
// grab model
|
/**
|
||||||
// TODO: have a look to see if this might name conflict with anything and
|
* Grab model
|
||||||
// maybe also throw an exception if the model class is not found within the file
|
*
|
||||||
|
* TODO: have a look to see if this might name conflict with anything and
|
||||||
|
* maybe also throw an exception if the model class is not found within the file
|
||||||
|
*/
|
||||||
public function model(string $model, $injection = NULL): object
|
public function model(string $model, $injection = NULL): object
|
||||||
{
|
{
|
||||||
// Require model file
|
// require model file
|
||||||
$path = $this->dir . '/model/' . $model . '.php';
|
$path = $this->dir . '/model/' . $model . '.php';
|
||||||
if (!file_exists($path))
|
if (!file_exists($path))
|
||||||
{
|
{
|
||||||
throw new Exception("Model does not exist");
|
throw new Exception("Model does not exist");
|
||||||
}
|
}
|
||||||
require $path;
|
require $path;
|
||||||
// Instantiate model
|
// instantiate model
|
||||||
if (!$injection)
|
if (!$injection)
|
||||||
{
|
{
|
||||||
$injection = $this->database;
|
$injection = $this->database;
|
||||||
@ -71,10 +74,10 @@ class App
|
|||||||
*/
|
*/
|
||||||
public function api(array $data, int $status_code = 200): void
|
public function api(array $data, int $status_code = 200): void
|
||||||
{
|
{
|
||||||
// Set headers
|
// set headers
|
||||||
http_response_code($status_code);
|
http_response_code($status_code);
|
||||||
header('Content-type: application/json');
|
header('Content-type: application/json');
|
||||||
// Convert and respond with data
|
// convert and respond with data
|
||||||
echo json_encode($data);
|
echo json_encode($data);
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ use \PDOException;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Encapsulates a single connection to a database.
|
* Encapsulates a single connection to a database.
|
||||||
* TODO: Refactor and add different driver implementations.
|
* TODO: add different driver implementations.
|
||||||
*/
|
*/
|
||||||
class Database
|
class Database
|
||||||
{
|
{
|
||||||
@ -33,7 +33,7 @@ class Database
|
|||||||
$dsn = "mysql:host={$args['host']};dbname={$args['database']};charset={$args['charset']}";
|
$dsn = "mysql:host={$args['host']};dbname={$args['database']};charset={$args['charset']}";
|
||||||
$options = [
|
$options = [
|
||||||
PDO::ATTR_PERSISTENT => true,
|
PDO::ATTR_PERSISTENT => true,
|
||||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // In PHP 8 and above, this will be the default mode.
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // in PHP 8 and above, this will be the default mode.
|
||||||
];
|
];
|
||||||
return new PDO($dsn, $args['user'], $args['password'], $options);
|
return new PDO($dsn, $args['user'], $args['password'], $options);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace App\Core;
|
namespace App\Core;
|
||||||
|
|
||||||
use \Exception;
|
use \Exception;
|
||||||
|
use \InvalidArgumentException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles anything to do with sessions
|
* Handles anything to do with sessions
|
||||||
@ -63,7 +64,7 @@ class Session
|
|||||||
"warning"
|
"warning"
|
||||||
];
|
];
|
||||||
if (!in_array($type, $types)) {
|
if (!in_array($type, $types)) {
|
||||||
throw new Exception("Flash type: \"$type\" does not exist");
|
throw new InvalidArgumentException("Flash type: \"$type\" does not exist");
|
||||||
}
|
}
|
||||||
$key = 'flashed_messages';
|
$key = 'flashed_messages';
|
||||||
if (!$this->has($key))
|
if (!$this->has($key))
|
||||||
|
@ -2,97 +2,62 @@
|
|||||||
|
|
||||||
namespace App\Teamtable;
|
namespace App\Teamtable;
|
||||||
|
|
||||||
|
use \InvalidArgumentException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a team in the teamtable database
|
* Represents a team in the teamtable database
|
||||||
|
* TODO: Add validation for setters
|
||||||
*/
|
*/
|
||||||
class Team
|
class Team
|
||||||
{
|
{
|
||||||
public string $name;
|
public int $id;
|
||||||
public string $company;
|
public string $name = 'NN';
|
||||||
public string $cardnumber;
|
public string $company = 'NN';
|
||||||
public int $phone;
|
public string $cardnumber = 'NN';
|
||||||
public int $participants;
|
public string $leader = 'NN';
|
||||||
public int $rounds;
|
public int $phone = 0;
|
||||||
|
public int $participants = 0;
|
||||||
|
public int $rounds = 0;
|
||||||
|
|
||||||
public function __construct(
|
public function setName(string $name): Self
|
||||||
string $name = 'NN',
|
|
||||||
string $company = 'NN',
|
|
||||||
string $cardnumber = 'NN',
|
|
||||||
int $phone = 0,
|
|
||||||
int $participants = 0,
|
|
||||||
int $rounds = 0
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
$this->name = $name;
|
$this->name = $name;
|
||||||
$this->company = $company;
|
return $this;
|
||||||
$this->cardnumber = $cardnumber;
|
|
||||||
$this->phone = $phone;
|
|
||||||
$this->participants = $participants;
|
|
||||||
$this->rounds = $rounds;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function setCompany(string $company): Self
|
||||||
* Check if all current values are valid
|
|
||||||
*/
|
|
||||||
public function validate(): bool
|
|
||||||
{
|
{
|
||||||
$validationError = FALSE;
|
$this->company = $company;
|
||||||
$template = $model->template;
|
return $this;
|
||||||
|
|
||||||
// LagNavn
|
|
||||||
if (!strlen($LagNavn)) {
|
|
||||||
$LagNavn = $template['LagNavn'];
|
|
||||||
}
|
|
||||||
if (strlen($LagNavn) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bedrift
|
public function setCardnumber(string $cardnumber): Self
|
||||||
if (!strlen($Bedrift)) {
|
{
|
||||||
$Bedrift = $template['Bedrift'];
|
$this->cardnumber = $cardnumber;
|
||||||
}
|
return $this;
|
||||||
if (strlen($Bedrift) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kortnummer
|
public function setLeader(string $leader): Self
|
||||||
if (!strlen($Kortnummer)) {
|
{
|
||||||
$Kortnummer = $template['Kortnummer'];
|
$this->leader = $leader;
|
||||||
}
|
return $this;
|
||||||
if (strlen($Kortnummer) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lagleder
|
public function setPhone(int $phone): Self
|
||||||
if (!strlen($Lagleder)) {
|
{
|
||||||
$Lagleder = $template['Lagleder'];
|
$this->phone = $phone;
|
||||||
}
|
return $this;
|
||||||
if (strlen($Lagleder) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Telefon
|
public function setParticipants(int $participants): Self
|
||||||
if (!strlen($Telefon)) {
|
{
|
||||||
$Telefon = $template['Telefon'];
|
$this->participants = $participants;
|
||||||
}
|
return $this;
|
||||||
if (strlen((string) $Telefon) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deltagere
|
public function setRounds(int $rounds): Self
|
||||||
if (!strlen($Deltagere)) {
|
{
|
||||||
$Deltagere = $template['Deltagere'];
|
$this->rounds = $rounds;
|
||||||
}
|
return $this;
|
||||||
if (strlen((string) $Deltagere) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Runder
|
|
||||||
if (!strlen($Runder)) {
|
|
||||||
$Runder = $template['Runder'];
|
|
||||||
}
|
|
||||||
if (strlen((string) $Runder) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
118
app/lib/App/Teamtable/TeamMapper.php
Normal file
118
app/lib/App/Teamtable/TeamMapper.php
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Teamtable;
|
||||||
|
|
||||||
|
use \PDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normally this kind of logic will be implemented using the Repository pattern.
|
||||||
|
* However the important part is in mapRowToTeam(), that will create a business object from the
|
||||||
|
* data fetched from database
|
||||||
|
*/
|
||||||
|
class TeamMapper
|
||||||
|
{
|
||||||
|
public PDO $dbh;
|
||||||
|
|
||||||
|
public function __construct(PDO $dbh)
|
||||||
|
{
|
||||||
|
$this->dbh = $dbh;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function mapRowToTeam(array $row): Team
|
||||||
|
{
|
||||||
|
$team = new Team();
|
||||||
|
$team->id = $row['LagID'];
|
||||||
|
$team->setName($row['LagNavn']);
|
||||||
|
$team->setCompany($row['Bedrift']);
|
||||||
|
$team->setCardnumber($row['Kortnummer']);
|
||||||
|
$team->setLeader($row['Lagleder']);
|
||||||
|
$team->setPhone($row['Telefon']);
|
||||||
|
$team->setParticipants($row['Deltagere']);
|
||||||
|
$team->setRounds($row['Runder']);
|
||||||
|
return $team;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of all teams
|
||||||
|
*/
|
||||||
|
public function getAll(): array
|
||||||
|
{
|
||||||
|
$sth = $this->dbh->query('SELECT * FROM lagtabell');
|
||||||
|
$assoc_array = $sth->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
$teams = [];
|
||||||
|
foreach ($assoc_array as $key => $row)
|
||||||
|
{
|
||||||
|
array_push($teams, $this->mapRowToTeam($row));
|
||||||
|
}
|
||||||
|
return $teams;
|
||||||
|
#while ($assoc_array)
|
||||||
|
#{
|
||||||
|
# array_push($teams, $this->mapRowToTeam($assoc_array[0]));
|
||||||
|
# array_pop($assoc_array);
|
||||||
|
#}
|
||||||
|
#return $teams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get(int $id): ?Team
|
||||||
|
{
|
||||||
|
$sth = $this->dbh->prepare('SELECT * FROM lagtabell WHERE LagID = ?');
|
||||||
|
$sth->execute([$id]);
|
||||||
|
$row = $sth->fetch(PDO::FETCH_ASSOC);
|
||||||
|
if ($row)
|
||||||
|
{
|
||||||
|
return $this->mapRowToTeam($row);
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create(Team $team): Team
|
||||||
|
{
|
||||||
|
$sth = $this->dbh->prepare(
|
||||||
|
'INSERT INTO lagtabell
|
||||||
|
(LagNavn, Bedrift, Kortnummer, Lagleder, Telefon, Deltagere, Runder)
|
||||||
|
VALUES
|
||||||
|
(?, ?, ?, ?, ?, ?, ?)'
|
||||||
|
);
|
||||||
|
$sth->execute([
|
||||||
|
$team->name,
|
||||||
|
$team->company,
|
||||||
|
$team->cardnumber,
|
||||||
|
$team->leader,
|
||||||
|
$team->phone,
|
||||||
|
$team->participants,
|
||||||
|
$team->rounds
|
||||||
|
]);
|
||||||
|
$lastId = $this->dbh->lastInsertId();
|
||||||
|
return $this->get($lastId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(Team $team): Team
|
||||||
|
{
|
||||||
|
$sth = $this->dbh->prepare(
|
||||||
|
'UPDATE lagtabell SET
|
||||||
|
LagNavn = ?, Bedrift = ?, Kortnummer = ?,
|
||||||
|
Lagleder = ?, Telefon = ?, Deltagere = ?,
|
||||||
|
Runder = ?
|
||||||
|
WHERE
|
||||||
|
LagID = ?'
|
||||||
|
);
|
||||||
|
$sth->execute([
|
||||||
|
$team->name,
|
||||||
|
$team->company,
|
||||||
|
$team->cardnumber,
|
||||||
|
$team->leader,
|
||||||
|
$team->phone,
|
||||||
|
$team->participants,
|
||||||
|
$team->rounds,
|
||||||
|
$team->id
|
||||||
|
]);
|
||||||
|
return $this->get($team->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete(int $id): void
|
||||||
|
{
|
||||||
|
$sth = $this->dbh->prepare('DELETE FROM lagtabell WHERE LagID = ?');
|
||||||
|
$sth->execute([$id]);
|
||||||
|
}
|
||||||
|
}
|
@ -2,112 +2,65 @@
|
|||||||
|
|
||||||
use App\Core\Database as Database;
|
use App\Core\Database as Database;
|
||||||
use App\Teamtable\Team as Team;
|
use App\Teamtable\Team as Team;
|
||||||
|
use App\Teamtable\TeamMapper as TeamMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Do stuff with the teamtable
|
* Does stuffs with the teamtable
|
||||||
*/
|
*/
|
||||||
class Teamtable
|
class Teamtable
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Database handler
|
* Database connection
|
||||||
*/
|
*/
|
||||||
public PDO $dbh;
|
public PDO $dbh;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We use a data mapper pattern
|
||||||
|
*/
|
||||||
|
public TeamMapper $teamMapper;
|
||||||
|
|
||||||
public function __construct(Database $database)
|
public function __construct(Database $database)
|
||||||
{
|
{
|
||||||
$this->dbh = $database->conn;
|
$this->dbh = $database->conn;
|
||||||
|
$this->teamMapper = new TeamMapper($this->dbh);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch entire team table
|
* Fetch entire team table
|
||||||
*/
|
*/
|
||||||
public function getTable(): array
|
public function getAll(): array
|
||||||
{
|
{
|
||||||
$sth = $this->dbh->query('SELECT * FROM lagtabell');
|
return $this->teamMapper->getAll();
|
||||||
return $sth->fetchAll(PDO::FETCH_ASSOC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete team with supplied id
|
* Find team with supplied id
|
||||||
*/
|
*/
|
||||||
public function deleteTeamByID(int $LagID): void
|
public function get(int $id): ?Team
|
||||||
{
|
{
|
||||||
$sth = $this->dbh->prepare('DELETE FROM lagtabell WHERE LagID = ?');
|
return $this->teamMapper->get($id);
|
||||||
$sth->execute([$LagID]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns mixed, array if exists, FALSE if not.
|
* Inserts team into database
|
||||||
*/
|
*/
|
||||||
public function getTeamByID(int $LagID)
|
public function create(Team $team): Team
|
||||||
{
|
{
|
||||||
$sth = $this->dbh->prepare('SELECT * FROM lagtabell WHERE LagID = ?');
|
return $this->teamMapper->create($team);
|
||||||
$sth->execute([$LagID]);
|
|
||||||
return $sth->fetch(PDO::FETCH_ASSOC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function delete(int $id): void
|
||||||
* Why this is so long who cares???
|
|
||||||
*/
|
|
||||||
public function updateTeamByID(
|
|
||||||
int $id,
|
|
||||||
string $LagNavn,
|
|
||||||
string $Bedrift,
|
|
||||||
string $Kortnummer,
|
|
||||||
string $Lagleder,
|
|
||||||
int $Telefon,
|
|
||||||
string $Deltagere,
|
|
||||||
int $Runder
|
|
||||||
): void
|
|
||||||
{
|
{
|
||||||
$sth = $this->dbh->prepare(
|
$this->teamMapper->delete($id);
|
||||||
'UPDATE lagtabell SET LagNavn = ?, Bedrift = ?, Kortnummer = ?, Lagleder = ?, Telefon = ?, Deltagere = ?, Runder = ? WHERE LagID = ?'
|
|
||||||
);
|
|
||||||
$sth->execute([$LagNavn, $Bedrift, $Kortnummer, $Lagleder, $Telefon, $Deltagere, $Runder, $id]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addEmptyTeam(): int
|
|
||||||
{
|
|
||||||
$sth = $this->dbh->prepare(
|
|
||||||
'INSERT INTO lagtabell (LagNavn, Bedrift, Kortnummer, Lagleder, Telefon, Deltagere, Runder) VALUES (?, ?, ?, ?, ?, ?, ?)'
|
|
||||||
);
|
|
||||||
$template = $this->template;
|
|
||||||
$sth->execute([
|
|
||||||
$template['LagNavn'],
|
|
||||||
$template['Bedrift'],
|
|
||||||
$template['Kortnummer'],
|
|
||||||
$template['Lagleder'],
|
|
||||||
$template['Telefon'],
|
|
||||||
$template['Deltagere'],
|
|
||||||
$template['Runder'],
|
|
||||||
]);
|
|
||||||
return $this->dbh->lastInsertId();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if team is empty by comparing it to the template
|
|
||||||
*/
|
|
||||||
public function isEqualEmptyTemplate(array $team): bool
|
|
||||||
{
|
|
||||||
$template = $this->template;
|
|
||||||
foreach ($template as $key => $value) {
|
|
||||||
if ((string)$team[$key] !== (string)$template[$key]) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns TRUE if team exists, FALSE if not
|
* Returns TRUE if team exists, FALSE if not
|
||||||
*/
|
*/
|
||||||
public function recieveStick(string $cardnumber): bool
|
public function recieveBaton(string $cardnumber): bool
|
||||||
{
|
{
|
||||||
$sth = $this->dbh->prepare('SELECT * FROM lagtabell WHERE Kortnummer = ?');
|
$team = $this->getTeamByCardnumber($cardnumber);
|
||||||
$sth->execute([$cardnumber]);
|
if ($team)
|
||||||
|
|
||||||
$row = $sth->fetch(PDO::FETCH_ASSOC);
|
|
||||||
if ($row)
|
|
||||||
{
|
{
|
||||||
// team exists, insert into time table
|
// team exists, insert into time table
|
||||||
$sth = $this->dbh->prepare('INSERT INTO tidtabell (LagID) VALUES (?)');
|
$sth = $this->dbh->prepare('INSERT INTO tidtabell (LagID) VALUES (?)');
|
||||||
@ -115,19 +68,9 @@ class Teamtable
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
// team does not exist, lets create it
|
// team does not exist, lets create it
|
||||||
$sth = $this->dbh->prepare(
|
$team = new Team();
|
||||||
"INSERT INTO `lagtabell` (`LagNavn`, `Bedrift`, `Kortnummer`, `Lagleder`, `Telefon`, `Deltagere`, `Runder`) VALUES (?, ?, ?, ?, ?, ?, ?)"
|
$team->cardnumber = $cardnumber;
|
||||||
);
|
$this->addTeam($team);
|
||||||
$template = $this->template;
|
|
||||||
$sth->execute([
|
|
||||||
$template['LagNavn'],
|
|
||||||
$template['Bedrift'],
|
|
||||||
$cardnumber,
|
|
||||||
$template['Lagleder'],
|
|
||||||
$template['Telefon'],
|
|
||||||
$template['Deltagere'],
|
|
||||||
$template['Runder'],
|
|
||||||
]);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
<h1>Er du sikker?</h1>
|
<h1>Er du sikker?</h1>
|
||||||
<p>Er du sikker på at du vil slette lag <?=htmlspecialchars($currentTeam['LagNavn'])?>?</p>
|
<p>Er du sikker på at du vil slette lag <?=htmlspecialchars($team->name)?>?</p>
|
||||||
<span>[ <a class="success" href="delete.php?item=<?=$currentTeam['LagID']?>">Slett</a> ]</span>
|
<span>[ <a class="success" href="delete.php?item=<?=$team->id?>">Slett</a> ]</span>
|
||||||
<span>[ <a class="danger" href="index.php">Avbryt</a> ]</span>
|
<span>[ <a class="danger" href="index.php">Avbryt</a> ]</span>
|
@ -1,5 +1,5 @@
|
|||||||
<h1>Endre lagtabell</h1>
|
<h1>Endre lagtabell</h1>
|
||||||
<span class="float-right">[ <a class="success" href="add.php">Opprett lag</a> ]</span>
|
<span class="float-right">[ <a class="success" href="create.php">Opprett lag</a> ]</span>
|
||||||
<br>
|
<br>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -18,25 +18,19 @@
|
|||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($teams as $team) {
|
foreach ($teams as $team) {
|
||||||
$i++;
|
$i++;
|
||||||
// Remember to escape your values!
|
|
||||||
foreach ($team as $key => $value)
|
|
||||||
{
|
|
||||||
$team[$key] = htmlspecialchars($team[$key]);
|
|
||||||
}
|
|
||||||
|
|
||||||
echo '<tr>';
|
echo '<tr>';
|
||||||
echo "<td>{$i}</td>";
|
echo "<td>" . $i . "</td>";
|
||||||
echo "<td>{$team['LagNavn']}</td>";
|
echo "<td>" . htmlspecialchars($team->name) . "</td>";
|
||||||
echo "<td>{$team['Bedrift']}</td>";
|
echo "<td>" . htmlspecialchars($team->company) . "</td>";
|
||||||
echo "<td>{$team['Kortnummer']}</td>";
|
echo "<td>" . htmlspecialchars($team->cardnumber) . "</td>";
|
||||||
echo "<td>{$team['Lagleder']}</td>";
|
echo "<td>" . htmlspecialchars($team->leader) . "</td>";
|
||||||
echo "<td>{$team['Telefon']}</td>";
|
echo "<td>" . htmlspecialchars($team->phone) . "</td>";
|
||||||
echo "<td>{$team['Deltagere']}</td>";
|
echo "<td>" . htmlspecialchars($team->participants) . "</td>";
|
||||||
echo "<td>{$team['Runder']}</td>";
|
echo "<td>" . htmlspecialchars($team->rounds) . "</td>";
|
||||||
echo "<td>{$team['Bestetid']}</td>";
|
echo "<td>" . "Ukjent" . "</td>";
|
||||||
echo "<td>";
|
echo "<td>";
|
||||||
echo "<span>[ <a class='danger' href='delete.php?item={$team['LagID']}&confirmation=true'>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['LagID']}'>Endre</a> ]</span>";
|
echo "<span>[ <a class='info' href='update.php?item={$team->id}'>Endre</a> ]</span>";
|
||||||
echo "</td>";
|
echo "</td>";
|
||||||
echo '</tr>';
|
echo '</tr>';
|
||||||
}
|
}
|
||||||
|
@ -1,45 +1,40 @@
|
|||||||
<?php
|
|
||||||
// Escape values
|
|
||||||
foreach ($team as $key => $value) {
|
|
||||||
$team[$key] = htmlspecialchars($value);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<h1>Endre lagdetaljer</h1>
|
<h1>Endre lagdetaljer</h1>
|
||||||
<p>Her kan du oppdatere informasjonen om laget</p>
|
<p>Her kan du oppdatere informasjonen om laget</p>
|
||||||
<form method="post" autocomplete="off">
|
<form method="post" autocomplete="off">
|
||||||
<label for="LagNavn">Navn:</label>
|
|
||||||
<br>
|
|
||||||
<input type="text" id="LagNavn" name="LagNavn" value="<?=$team['LagNavn']?>" maxlength="32">
|
|
||||||
|
|
||||||
|
<label for="name">Navn:</label>
|
||||||
<br>
|
<br>
|
||||||
<label for="Bedrift">Bedrift:</label>
|
<input type="text" id="name" name="name" value="<?=htmlspecialchars($team->name)?>" maxlength="32">
|
||||||
<br>
|
|
||||||
<input type="text" id="Bedrift" name="Bedrift" value="<?=$team['Bedrift']?>" maxlength="32">
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<label for="Kortnummer">Kortnummer:</label>
|
|
||||||
<br>
|
|
||||||
<input type="text" id="Kortnummer" name="Kortnummer" value="<?=$team['Kortnummer']?>" maxlength="32">
|
|
||||||
|
|
||||||
|
<label for="name">Navn:</label>
|
||||||
<br>
|
<br>
|
||||||
<label for="Lagleder">Leder:</label>
|
<input type="text" id="name" name="name" value="<?=htmlspecialchars($team->name)?>" maxlength="32">
|
||||||
<br>
|
|
||||||
<input type="text" id="Lagleder" name="Lagleder" value="<?=$team['Lagleder']?>" maxlength="32">
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<label for="Telefon">Telefon:</label>
|
|
||||||
<br>
|
|
||||||
<input type="number" id="Telefon" name="Telefon" value="<?=$team['Telefon']?>" maxlength="32">
|
|
||||||
|
|
||||||
|
<label for="name">Navn:</label>
|
||||||
<br>
|
<br>
|
||||||
<label for="Deltagere">Deltagere:</label>
|
<input type="text" id="name" name="name" value="<?=htmlspecialchars($team->name)?>" maxlength="32">
|
||||||
<br>
|
|
||||||
<input type="number" id="Deltagere" name="Deltagere" value="<?=$team['Deltagere']?>" maxlength="32">
|
|
||||||
|
|
||||||
|
|
||||||
|
<label for="name">Navn:</label>
|
||||||
<br>
|
<br>
|
||||||
<label for="Runder">Runder:</label>
|
<input type="text" id="name" name="name" value="<?=htmlspecialchars($team->name)?>" maxlength="32">
|
||||||
|
|
||||||
|
|
||||||
|
<label for="name">Navn:</label>
|
||||||
<br>
|
<br>
|
||||||
<input type="number" id="Runder" name="Runder" value="<?=$team['Runder']?>" maxlength="32">
|
<input type="text" id="name" name="name" value="<?=htmlspecialchars($team->name)?>" maxlength="32">
|
||||||
|
|
||||||
|
|
||||||
|
<label for="name">Navn:</label>
|
||||||
|
<br>
|
||||||
|
<input type="text" id="name" name="name" value="<?=htmlspecialchars($team->name)?>" maxlength="32">
|
||||||
|
|
||||||
|
|
||||||
|
<label for="name">Navn:</label>
|
||||||
|
<br>
|
||||||
|
<input type="text" id="name" name="name" value="<?=htmlspecialchars($team->name)?>" maxlength="32">
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
|
@ -16,22 +16,16 @@
|
|||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($teams as $team) {
|
foreach ($teams as $team) {
|
||||||
$i++;
|
$i++;
|
||||||
// Remember to escape your values!
|
|
||||||
foreach ($team as $key => $value)
|
|
||||||
{
|
|
||||||
$team[$key] = htmlspecialchars($team[$key]);
|
|
||||||
}
|
|
||||||
|
|
||||||
echo '<tr>';
|
echo '<tr>';
|
||||||
echo "<td>{$i}</td>";
|
echo "<td>" . $i . "</td>";
|
||||||
echo "<td>{$team['LagNavn']}</td>";
|
echo "<td>" . htmlspecialchars($team->name) . "</td>";
|
||||||
echo "<td>{$team['Bedrift']}</td>";
|
echo "<td>" . htmlspecialchars($team->company) . "</td>";
|
||||||
echo "<td>{$team['Kortnummer']}</td>";
|
echo "<td>" . htmlspecialchars($team->cardnumber) . "</td>";
|
||||||
echo "<td>{$team['Lagleder']}</td>";
|
echo "<td>" . htmlspecialchars($team->leader) . "</td>";
|
||||||
echo "<td>{$team['Telefon']}</td>";
|
echo "<td>" . htmlspecialchars($team->phone) . "</td>";
|
||||||
echo "<td>{$team['Deltagere']}</td>";
|
echo "<td>" . htmlspecialchars($team->participants) . "</td>";
|
||||||
echo "<td>{$team['Runder']}</td>";
|
echo "<td>" . htmlspecialchars($team->rounds) . "</td>";
|
||||||
echo "<td>{$team['Bestetid']}</td>";
|
echo "<td>" . "Ukjent" . "</td>";
|
||||||
echo '</tr>';
|
echo '</tr>';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
<?php
|
|
||||||
$app = require '../../../app/inc.php';
|
|
||||||
|
|
||||||
$model = $app->model('Teamtable');
|
|
||||||
|
|
||||||
$id = $model->addEmptyTeam();
|
|
||||||
|
|
||||||
$app->session->flash('Opprettet ny lagmal, <a class="success" href=' . "update.php?item=$id" . '>klikk her</a> for å endre på den', 'success', TRUE);
|
|
||||||
|
|
||||||
$app->redirect('index.php');
|
|
16
public/teamtable/edit/create.php
Normal file
16
public/teamtable/edit/create.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php $app = require '../../../app/inc.php';
|
||||||
|
/**
|
||||||
|
* Insert a team into team table
|
||||||
|
*/
|
||||||
|
|
||||||
|
use App\Teamtable\Team as Team;
|
||||||
|
|
||||||
|
$model = $app->model('Teamtable');
|
||||||
|
|
||||||
|
$team = $model->create(
|
||||||
|
new Team()
|
||||||
|
);
|
||||||
|
|
||||||
|
$app->session->flash('Opprettet ny lagmal, <a class="success" href=' . "update.php?item=$team->id" . '>klikk her</a> for å endre på den', 'success', TRUE);
|
||||||
|
|
||||||
|
$app->redirect('index.php');
|
@ -1,47 +1,37 @@
|
|||||||
<?php
|
<?php $app = require '../../../app/inc.php';
|
||||||
$app = require '../../../app/inc.php';
|
|
||||||
|
use App\Teamtable\Team;
|
||||||
|
|
||||||
|
$item = filter_input(INPUT_GET, 'item', FILTER_VALIDATE_INT);
|
||||||
|
$confirm = filter_input(INPUT_GET, 'confirm', FILTER_VALIDATE_BOOL);
|
||||||
|
|
||||||
$model = $app->model('Teamtable');
|
$model = $app->model('Teamtable');
|
||||||
|
|
||||||
if (!isset($_GET['item']))
|
// item is NULL if not set
|
||||||
|
if ($item === NULL)
|
||||||
{
|
{
|
||||||
$app->session->flash('Kunne ikke slette lag: ID ikke definert som GET parameter', 'danger');
|
$app->session->flash('Kunne ikke slette lag: Mangler parameter.', 'danger');
|
||||||
$app->redirect('index.php');
|
|
||||||
}
|
|
||||||
$id = $_GET['item'];
|
|
||||||
|
|
||||||
// ID must be numeric
|
|
||||||
if (!is_numeric($id))
|
|
||||||
{
|
|
||||||
$app->session->flash('Kunne ikke slette lag: ID må være tall', 'danger');
|
|
||||||
$app->redirect('index.php');
|
$app->redirect('index.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if ID is in teamtable
|
$team = $model->get($item);
|
||||||
$currentTeam = $model->getTeamByID($id);
|
if (!$team)
|
||||||
if (!$currentTeam)
|
|
||||||
{
|
{
|
||||||
$app->session->flash("Kunne ikke slette lag: ID $id finnes ikke", "danger");
|
// team does not exist
|
||||||
|
$app->session->flash('Kunne ikke slette lag: Lag eksisterer ikke', 'danger');
|
||||||
$app->redirect('index.php');
|
$app->redirect('index.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
$sameAsTemplate = $model->isEqualEmptyTemplate($currentTeam);
|
// show confirmation page
|
||||||
|
if ($confirm)
|
||||||
// Show confirmation page
|
|
||||||
if (isset($_GET['confirmation']) && $_GET['confirmation'] == 'true' && !$sameAsTemplate)
|
|
||||||
{
|
{
|
||||||
$app->view('template/header', ['title' => 'Bekreft sletting']);
|
$app->view('template/header', ['title' => 'Bekreft sletting']);
|
||||||
$app->view('pages/teamtable/edit/delete', ['currentTeam' => $currentTeam]);
|
$app->view('pages/teamtable/edit/delete', ['team' => $team]);
|
||||||
$app->view('template/footer');
|
$app->view('template/footer');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
$model->deleteTeamByID($id);
|
// all is good, lets delete the team
|
||||||
|
$model->delete($team->id);
|
||||||
if ($sameAsTemplate) {
|
$app->session->flash("Slettet lag: {$team->name}", "success");
|
||||||
$app->session->flash("Slettet lagmal", "success");
|
|
||||||
} else {
|
|
||||||
$app->session->flash("Slettet lag: {$currentTeam['LagNavn']}", "success");
|
|
||||||
}
|
|
||||||
|
|
||||||
$app->redirect('index.php');
|
$app->redirect('index.php');
|
@ -1,9 +1,8 @@
|
|||||||
<?php
|
<?php $app = require '../../../app/inc.php';
|
||||||
$app = require '../../../app/inc.php';
|
|
||||||
|
|
||||||
$model = $app->model('Teamtable');
|
$model = $app->model('Teamtable');
|
||||||
|
|
||||||
$teams = $model->getTable();
|
$teams = $model->getAll();
|
||||||
|
|
||||||
$app->view('template/header', ['title' => 'Endre lagtabell']);
|
$app->view('template/header', ['title' => 'Endre lagtabell']);
|
||||||
$app->view('pages/teamtable/edit/index', ["teams" => $teams]);
|
$app->view('pages/teamtable/edit/index', ["teams" => $teams]);
|
||||||
|
@ -1,151 +1,25 @@
|
|||||||
<?php
|
<?php $app = require '../../../app/inc.php';
|
||||||
$app = require '../../../app/inc.php';
|
|
||||||
|
use App\Teamtable\Team;
|
||||||
|
|
||||||
|
$item = filter_input(INPUT_GET, 'item', FILTER_VALIDATE_INT);
|
||||||
|
|
||||||
$model = $app->model('Teamtable');
|
$model = $app->model('Teamtable');
|
||||||
|
|
||||||
if (!isset($_GET['item']))
|
// item is NULL if not set
|
||||||
|
if ($item !== NULL)
|
||||||
{
|
{
|
||||||
$app->session->flash('Kunne ikke endre lag: ID ikke definert som GET parameter', 'danger');
|
// check that team exists
|
||||||
$app->redirect('index.php');
|
$team = $model->get($item);
|
||||||
}
|
if (!$team)
|
||||||
$id = $_GET['item'];
|
|
||||||
|
|
||||||
// Id must be a number
|
|
||||||
if (!is_numeric($id))
|
|
||||||
{
|
|
||||||
$app->session->flash('Kunne ikke endre lag: ID må være tall', 'danger');
|
|
||||||
$app->redirect('index.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if team with supplied ID exists
|
|
||||||
$currentTeam = $model->getTeamByID($id);
|
|
||||||
if (!$currentTeam)
|
|
||||||
{
|
|
||||||
$app->session->flash("Kunne ikke endre lag: ID $id finnes ikke", "danger");
|
|
||||||
$app->redirect('index.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] === 'POST')
|
|
||||||
{
|
|
||||||
// Check that all parameters are present
|
|
||||||
if (!isset(
|
|
||||||
$_POST['LagNavn'],
|
|
||||||
$_POST['Bedrift'],
|
|
||||||
$_POST['Kortnummer'],
|
|
||||||
$_POST['Lagleder'],
|
|
||||||
$_POST['Telefon'],
|
|
||||||
$_POST['Deltagere'],
|
|
||||||
$_POST['Runder'],
|
|
||||||
)
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
$app->session->flash("Kunne ikke endre lag: Ikke alle POST parametere er til stede!", "danger");
|
// team does not exist
|
||||||
$app->redirect('./');
|
$app->session->flash('Kunne ikke endre lag: Lag finnes ikke', 'danger');
|
||||||
}
|
|
||||||
|
|
||||||
$LagNavn = $_POST['LagNavn'];
|
|
||||||
$Bedrift = $_POST['Bedrift'];
|
|
||||||
$Kortnummer = $_POST['Kortnummer'];
|
|
||||||
$Lagleder = $_POST['Lagleder'];
|
|
||||||
$Telefon = $_POST['Telefon'];
|
|
||||||
$Deltagere = $_POST['Deltagere'];
|
|
||||||
$Runder = $_POST['Runder'];
|
|
||||||
|
|
||||||
//====Validate Input====//
|
|
||||||
|
|
||||||
$validationError = FALSE;
|
|
||||||
$template = $model->template;
|
|
||||||
|
|
||||||
// LagNavn
|
|
||||||
if (!strlen($LagNavn)) {
|
|
||||||
$LagNavn = $template['LagNavn'];
|
|
||||||
}
|
|
||||||
if (strlen($LagNavn) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bedrift
|
|
||||||
if (!strlen($Bedrift)) {
|
|
||||||
$Bedrift = $template['Bedrift'];
|
|
||||||
}
|
|
||||||
if (strlen($Bedrift) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Kortnummer
|
|
||||||
if (!strlen($Kortnummer)) {
|
|
||||||
$Kortnummer = $template['Kortnummer'];
|
|
||||||
}
|
|
||||||
if (strlen($Kortnummer) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lagleder
|
|
||||||
if (!strlen($Lagleder)) {
|
|
||||||
$Lagleder = $template['Lagleder'];
|
|
||||||
}
|
|
||||||
if (strlen($Lagleder) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Telefon
|
|
||||||
if (!strlen($Telefon)) {
|
|
||||||
$Telefon = $template['Telefon'];
|
|
||||||
}
|
|
||||||
if (strlen((string) $Telefon) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deltagere
|
|
||||||
if (!strlen($Deltagere)) {
|
|
||||||
$Deltagere = $template['Deltagere'];
|
|
||||||
}
|
|
||||||
if (strlen((string) $Deltagere) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Runder
|
|
||||||
if (!strlen($Runder)) {
|
|
||||||
$Runder = $template['Runder'];
|
|
||||||
}
|
|
||||||
if (strlen((string) $Runder) > 32) {
|
|
||||||
$validationError = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!$validationError) {
|
|
||||||
if (
|
|
||||||
$LagNavn == $currentTeam['LagNavn'] &&
|
|
||||||
$Bedrift == $currentTeam['Bedrift'] &&
|
|
||||||
$Kortnummer == $currentTeam['Kortnummer'] &&
|
|
||||||
$Lagleder == $currentTeam['Lagleder'] &&
|
|
||||||
$Telefon == $currentTeam['Telefon'] &&
|
|
||||||
$Deltagere == $currentTeam['Deltagere'] &&
|
|
||||||
$Runder == $currentTeam['Runder']
|
|
||||||
)
|
|
||||||
{
|
|
||||||
$app->session->flash('Fant ingen endringer for lag: '.$LagNavn);
|
|
||||||
} else {
|
|
||||||
// All is good! Lets update the team details
|
|
||||||
$model->updateTeamByID(
|
|
||||||
$id,
|
|
||||||
$LagNavn,
|
|
||||||
$Bedrift,
|
|
||||||
$Kortnummer,
|
|
||||||
$Lagleder,
|
|
||||||
$Telefon,
|
|
||||||
$Deltagere,
|
|
||||||
$Runder,
|
|
||||||
);
|
|
||||||
|
|
||||||
$app->session->flash('Lagret endringer for lag: '.$LagNavn, 'success');
|
|
||||||
}
|
|
||||||
$app->redirect('index.php');
|
$app->redirect('index.php');
|
||||||
} else {
|
|
||||||
$app->session->flash('Kunne ikke endre lag: Validerings feil!', 'danger');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// lets create a team
|
||||||
$app->view('template/header', ['title' => 'Endre lagdetaljer']);
|
$app->view('template/header', ['title' => 'Endre lagdetaljer']);
|
||||||
$app->view('pages/teamtable/edit/update', ["team" => $currentTeam]);
|
$app->view('pages/teamtable/edit/update', ["team" => new Team]);
|
||||||
$app->view('template/footer');
|
$app->view('template/footer');
|
@ -3,7 +3,7 @@ $app = require '../../app/inc.php';
|
|||||||
|
|
||||||
$model = $app->model('Teamtable');
|
$model = $app->model('Teamtable');
|
||||||
|
|
||||||
$teams = $model->getTable();
|
$teams = $model->getAll();
|
||||||
|
|
||||||
$app->view('template/header', ['title' => 'Lagtabell']);
|
$app->view('template/header', ['title' => 'Lagtabell']);
|
||||||
$app->view('pages/teamtable/index', ["teams" => $teams]);
|
$app->view('pages/teamtable/index', ["teams" => $teams]);
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
<?php
|
|
||||||
$app = require '../app/inc.php';
|
|
||||||
|
|
||||||
$team = new App\Teamtable\Team;
|
|
||||||
|
|
||||||
var_dump($team);
|
|
Reference in New Issue
Block a user