Commit
This commit is contained in:
parent
5d46a8b24d
commit
6d4f387941
@ -1,16 +1,16 @@
|
||||
<?php
|
||||
|
||||
// Encapsulates a single connection to a database
|
||||
class Database
|
||||
class DBHandle
|
||||
{
|
||||
public object $dbh;
|
||||
|
||||
private string $host = '127.0.0.1';
|
||||
private string $db = 'test';
|
||||
private string $user = 'root';
|
||||
private string $pass = '';
|
||||
private string $charset = 'utf8mb4';
|
||||
|
||||
public object $dbh;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
try {
|
9
app/core/Flash.php
Normal file
9
app/core/Flash.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// Provide user feedback by flashing a message on the next request. This is usually combined with a layout template that does this.
|
||||
class Flash extends Session {
|
||||
public function add(): void
|
||||
{
|
||||
// TODO: ...
|
||||
}
|
||||
}
|
@ -2,6 +2,14 @@
|
||||
/*
|
||||
This is the main file to be included on every page.
|
||||
It will act as a front controller of our application.
|
||||
_____
|
||||
/ \
|
||||
| () () |
|
||||
\ ^ /
|
||||
|||||
|
||||
|||||
|
||||
|
||||
Tread carefully
|
||||
*/
|
||||
|
||||
spl_autoload_register(function ($class_name) {
|
||||
|
@ -1,3 +1,7 @@
|
||||
<?php $this->view('template/header', ['title' => $title]); ?>
|
||||
|
||||
<h1>Hello world</h1>
|
||||
<p>This is a message from the view</p>
|
||||
<p><?=$data?></p>
|
||||
|
||||
<?php $this->view('template/footer'); ?>
|
@ -1,14 +1,11 @@
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div class="footer">
|
||||
<div class="inner">
|
||||
<hr class="hidden">
|
||||
|
||||
<div id="footer">
|
||||
<small>Kopieringsrettigheter © 2021-2022 <a target="_blank" href="http://willy.club">WillySoft Solutions</a></small>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -6,75 +6,34 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?=htmlspecialchars($title);?> – Stafett for livet</title>
|
||||
|
||||
<link rel="stylesheet" href="<?=$this->urlFor('static/style/main.css');?>">
|
||||
<link rel="icon" href="<?=$this->urlFor('static/img/cropped-kf-propell-ikon-32x32.png');?>" sizes="32x32">
|
||||
<link rel="stylesheet" href="static/style/main.css">
|
||||
<body>
|
||||
|
||||
<header>
|
||||
<div class="navbar-top">
|
||||
<div class="inner">
|
||||
<a href="<?=$this->urlFor('/');?>" style="display: block; max-width: max-content;">
|
||||
<img style="display: block; height: 32px;" src="<?=$this->urlFor('static/img/cropped-kf-propell-ikon-32x32.png');?>" alt="">
|
||||
<div style="margin-left: 44px;">
|
||||
<div style="font-size: 24px; margin-top: -38px;">Stafett for livet</div>
|
||||
<div style="font-size: 10px; margin-top: -6px;"><b>KREFT</b>FORENINGEN</div>
|
||||
<div id="header">
|
||||
<a>Stafett for livet tellesystem</a>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<?php if ((isset($_SESSION['logged_in'])) && ($_SESSION['logged_in'] === TRUE)) : ?>
|
||||
<div class="login-statusbar">
|
||||
<div class="inner">
|
||||
<a href="<?=$this->urlFor('logout.php');?>" style="float: right;">Logg ut</a>
|
||||
<div>Inlogget som: <?=htmlspecialchars($_SESSION['username'])?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<hr class="hidden">
|
||||
|
||||
<div class="grid-container">
|
||||
<div id="menu">
|
||||
<small>
|
||||
<span>Ikke pålogget</span>
|
||||
<a href="">Logg inn</a>
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<nav class="nav-links">
|
||||
<hr class="hidden">
|
||||
|
||||
<div id="container">
|
||||
|
||||
<div id="nav">
|
||||
<ul>
|
||||
<li><a href="<?=$this->urlFor('/');?>">Forside</a></li>
|
||||
<li><a href="<?=$this->urlFor('login.php');?>">Logg inn</a></li>
|
||||
<li><a href="<?=$this->urlFor('example.php');?>">Eksempel</a></li>
|
||||
<li><a href="">Forside</a></li>
|
||||
<li><a href="">Logg inn</a></li>
|
||||
<li><a href="">Eksempel</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<?php
|
||||
// is my implementation of alerts janky? maybe...
|
||||
if ((isset($_SESSION['alert'])) && (count($_SESSION['alert']) > 0)) {
|
||||
foreach ($_SESSION['alert'] as $alert) {
|
||||
switch ($alert[0]) {
|
||||
case 'success':
|
||||
$prefix = 'Suksess –';
|
||||
break;
|
||||
<hr class="hidden">
|
||||
|
||||
case 'info':
|
||||
$prefix = 'Info –';
|
||||
break;
|
||||
|
||||
case 'warning':
|
||||
$prefix = 'Varsel –';
|
||||
break;
|
||||
|
||||
case 'danger':
|
||||
$prefix = 'Error –';
|
||||
break;
|
||||
|
||||
default:
|
||||
$alert[0] = 'danger';
|
||||
$prefix = 'Ukjent –';
|
||||
break;
|
||||
}
|
||||
echo('<div class="alert alert-'.$alert[0].'"><b>'.$prefix.'</b> '.$alert[1].'</div>');
|
||||
}
|
||||
$_SESSION['alert'] = [];
|
||||
}
|
||||
?>
|
||||
<main>
|
||||
<div id="main">
|
||||
|
@ -12,5 +12,6 @@ $username = $model->getUsername();
|
||||
|
||||
// Display view with retrieved data
|
||||
$contr->view('index', [
|
||||
"title" => "Forside",
|
||||
"data" => $username
|
||||
]);
|
@ -1,124 +1,114 @@
|
||||
html, body {
|
||||
height: 100%;
|
||||
}
|
||||
body {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
|
||||
background: #eee;
|
||||
color: #222;
|
||||
font-size: 14px;
|
||||
font-size: 1rem;
|
||||
font-family: "Liberation Sans", Arial, sans-serif;
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4 {
|
||||
margin: 0;
|
||||
.hidden { display: none; }
|
||||
|
||||
h1 {
|
||||
border-bottom: 1px solid #aaa;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.navbar-top {
|
||||
padding: 12px;
|
||||
background: #472987;
|
||||
/*background: linear-gradient(0deg, rgba(71,40,134,1) 0%, rgba(81,24,195,1) 100%);*/
|
||||
}
|
||||
.navbar-top .inner {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.navbar-top .inner a {
|
||||
color: #f8f8f8;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.login-statusbar {
|
||||
border-top: 2px solid #f8f8f8;
|
||||
background: rgb(54,148,37);
|
||||
background: linear-gradient(0deg, rgba(54,148,37,1) 0%, rgba(62,162,34,1) 50%, rgba(63,177,43,1) 100%);
|
||||
}
|
||||
.login-statusbar .inner {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
color: #f8f8f8;
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.login-statusbar .inner > a {
|
||||
color: #f8f8f8;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background: #d8d8d8;
|
||||
border-top: 1px solid #aaa;
|
||||
padding: 12px;
|
||||
max-width: 888px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.grid-container {
|
||||
background: #fff;
|
||||
|
||||
display: grid;
|
||||
grid-template-columns: max-content auto;
|
||||
grid-gap: 12px;
|
||||
|
||||
max-width: 888px;
|
||||
margin: 0 auto;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.grid-container main img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border: 1px solid #aaa;
|
||||
}
|
||||
|
||||
.grid-container .nav-links {
|
||||
background: #eee;
|
||||
border: 1px solid #aaa;
|
||||
padding: 12px;
|
||||
}
|
||||
.grid-container .nav-links ul {
|
||||
margin: 0;
|
||||
padding-left: 12px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: rgb(0, 0, 255);
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 600px) {
|
||||
.grid-container {
|
||||
grid-template-columns: auto;
|
||||
#header {
|
||||
padding: 1rem;
|
||||
padding-left: .75rem;
|
||||
padding-right: .75rem;
|
||||
background: #472987;
|
||||
}
|
||||
#header a {
|
||||
color: #eee;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#menu {
|
||||
background: #222;
|
||||
color: #eee;
|
||||
padding: .25rem;
|
||||
padding-left: .75rem;
|
||||
padding-right: .75rem;
|
||||
}
|
||||
#menu a { color: #eee; float: right; }
|
||||
#menu span { float: left; }
|
||||
|
||||
#container {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
#main {
|
||||
padding: .75rem;
|
||||
flex-grow: 1;
|
||||
}
|
||||
#main img {
|
||||
display: block;
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
#nav {
|
||||
background: #fff;
|
||||
padding: .75rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
#nav ul {
|
||||
margin: 0;
|
||||
padding-left: .75rem;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 40rem) {
|
||||
#container {
|
||||
flex-flow: column;
|
||||
}
|
||||
}
|
||||
|
||||
.alert {
|
||||
padding: 8px;
|
||||
margin-bottom: 8px;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 2px;
|
||||
#footer {
|
||||
background: #fff;
|
||||
padding: .75rem;
|
||||
}
|
||||
.alert-info {
|
||||
#footer small {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.alert {
|
||||
padding: .5rem;
|
||||
margin-bottom: .5rem;
|
||||
border: 1px solid transparent;
|
||||
border-radius: .15rem;
|
||||
}
|
||||
.alert.info {
|
||||
color: #0c5460;
|
||||
background-color: #d1ecf1;
|
||||
border-color: #62b1bd;
|
||||
background: linear-gradient(0deg, rgba(167,223,232,1) 0%, rgba(209,236,241,1) 100%);
|
||||
}
|
||||
.alert-success {
|
||||
.alert.success {
|
||||
color: #155724;
|
||||
background-color: #d4edda;
|
||||
border-color: #56bf6e;
|
||||
background: linear-gradient(0deg, rgba(165,227,180,1) 0%, rgba(212,237,218,1) 100%);
|
||||
}
|
||||
.alert-danger {
|
||||
.alert.danger {
|
||||
color: #721c24;
|
||||
background-color: #f8d7da;
|
||||
border-color: #c8848c;
|
||||
background: linear-gradient(0deg, rgb(249, 180, 186) 0%, rgb(248, 215, 218) 100%);
|
||||
}
|
||||
.alert-warning {
|
||||
.alert.warning {
|
||||
color: #856404;
|
||||
background: #fff3cd;
|
||||
border-color: #dfc678;
|
||||
|
Reference in New Issue
Block a user